Projektkurse.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse = exports.Projektkurse = void 0;
  4. const JavaObject_1 = require("../../../../java/lang/JavaObject");
  5. const GostBelegpruefung_1 = require("../../../../core/abschluss/gost/GostBelegpruefung");
  6. const GostFachManager_1 = require("../../../../core/abschluss/gost/GostFachManager");
  7. const GostKursart_1 = require("../../../../core/types/gost/GostKursart");
  8. const GostHalbjahr_1 = require("../../../../core/types/gost/GostHalbjahr");
  9. const Vector_1 = require("../../../../java/util/Vector");
  10. const GostBelegungsfehler_1 = require("../../../../core/abschluss/gost/GostBelegungsfehler");
  11. const HashSet_1 = require("../../../../java/util/HashSet");
  12. class Projektkurse extends GostBelegpruefung_1.GostBelegpruefung {
  13. projektkursBelegung = null;
  14. projektkurs = null;
  15. projektkursHalbjahre = null;
  16. /**
  17. * Erstellt eine neue Belegprüfung für die Projektkurse.
  18. *
  19. * @param manager der Daten-Manager für die Abiturdaten
  20. * @param pruefungs_art die Art der durchzuführenden Prüfung (z.B. EF.1 oder GESAMT)
  21. */
  22. constructor(manager, pruefungs_art) {
  23. super(manager, pruefungs_art);
  24. }
  25. init() {
  26. this.projektkurs = null;
  27. this.projektkursBelegung = new Vector_1.Vector();
  28. this.projektkursHalbjahre = new Vector_1.Vector();
  29. let alleFachbelegungen = this.manager.getFachbelegungen();
  30. for (let i = 0; i < alleFachbelegungen.size(); i++) {
  31. let fachbelegung = alleFachbelegungen.get(i);
  32. if (this.manager.zaehleBelegung(fachbelegung) <= 0)
  33. continue;
  34. let fach = this.manager.getFach(fachbelegung);
  35. if ((fach !== null) && GostFachManager_1.GostFachManager.istProjektkurs(fach)) {
  36. this.projektkursBelegung.add(fachbelegung);
  37. }
  38. }
  39. }
  40. pruefeEF1() {
  41. this.pruefeBelegungEF();
  42. }
  43. pruefeGesamt() {
  44. this.pruefeBelegungEF();
  45. this.pruefeAufAnrechenbarenProjektkurs();
  46. this.pruefeBelegungHalbjahre();
  47. this.pruefeBelegungLeitfaecher();
  48. if (this.manager.istProjektKursBesondereLernleistung())
  49. this.addFehler((this.projektkurs !== null) ? GostBelegungsfehler_1.GostBelegungsfehler.PF_16_INFO : GostBelegungsfehler_1.GostBelegungsfehler.PF_15);
  50. }
  51. /**
  52. * Prüft, ob ein Projektfach in der EF belegt wurde. Eine solche Belegung ist nicht zulässig.
  53. */
  54. pruefeBelegungEF() {
  55. if (this.projektkursBelegung === null)
  56. return;
  57. for (let fachbelegung of this.projektkursBelegung) {
  58. for (let belegungHalbjahr of fachbelegung.belegungen) {
  59. if (belegungHalbjahr === null)
  60. continue;
  61. let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegungHalbjahr.halbjahrKuerzel);
  62. if ((halbjahr === GostHalbjahr_1.GostHalbjahr.EF1) || (halbjahr === GostHalbjahr_1.GostHalbjahr.EF2))
  63. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_10);
  64. }
  65. }
  66. }
  67. /**
  68. * Prüft, ob ein anrechenbarer Projektkurs unter den belegten Projektfächern existiert. Es darf aber
  69. * auch nur genau ein anrechenbarer Projektkurs existieren!
  70. */
  71. pruefeAufAnrechenbarenProjektkurs() {
  72. if (this.projektkursBelegung === null)
  73. return;
  74. for (let fachbelegung of this.projektkursBelegung) {
  75. for (let belegungHalbjahr of fachbelegung.belegungen) {
  76. if (belegungHalbjahr === null)
  77. continue;
  78. let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegungHalbjahr.halbjahrKuerzel);
  79. if (halbjahr === null)
  80. continue;
  81. if ((halbjahr === GostHalbjahr_1.GostHalbjahr.EF1) || (halbjahr === GostHalbjahr_1.GostHalbjahr.EF2))
  82. continue;
  83. let nextHalbjahr = halbjahr.next();
  84. if (nextHalbjahr === null) {
  85. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_18);
  86. continue;
  87. }
  88. else if (!this.manager.pruefeBelegung(fachbelegung, nextHalbjahr)) {
  89. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_17_INFO);
  90. continue;
  91. }
  92. if (this.projektkurs !== null) {
  93. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_14);
  94. break;
  95. }
  96. this.projektkurs = fachbelegung;
  97. if (this.projektkursHalbjahre === null)
  98. this.projektkursHalbjahre = new Vector_1.Vector();
  99. this.projektkursHalbjahre.add(halbjahr);
  100. this.projektkursHalbjahre.add(nextHalbjahr);
  101. break;
  102. }
  103. }
  104. }
  105. /**
  106. * Prüfe die Halbjahresbelegungen der belegten Projektfächer. Hierbei Darf
  107. * es zu Einzelbelegungen neben dem anrechenbaren Projektkurs kommen. Diese dürfen
  108. * aber nur vor der Belegung des anrechenbaren Kurses liegen. Außerdem dürfen in
  109. * einem Halbjahr nicht mehrere Projekfächer belegt sein.
  110. */
  111. pruefeBelegungHalbjahre() {
  112. if (this.projektkursBelegung === null)
  113. return;
  114. let pjkHalbjahre = new HashSet_1.HashSet();
  115. for (let fachbelegung of this.projektkursBelegung) {
  116. for (let belegungHalbjahr of fachbelegung.belegungen) {
  117. if (belegungHalbjahr === null)
  118. continue;
  119. let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegungHalbjahr.halbjahrKuerzel);
  120. if (halbjahr === null)
  121. continue;
  122. if ((halbjahr === GostHalbjahr_1.GostHalbjahr.EF1) || (halbjahr === GostHalbjahr_1.GostHalbjahr.EF2))
  123. continue;
  124. if (!pjkHalbjahre.add(halbjahr)) {
  125. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_14);
  126. continue;
  127. }
  128. if ((this.projektkurs !== null) && JavaObject_1.JavaObject.equalsTranspiler(this.projektkurs, (fachbelegung)) && (this.projektkursHalbjahre !== null) && this.projektkursHalbjahre.contains(halbjahr))
  129. continue;
  130. let nextHalbjahr = halbjahr.next();
  131. if ((nextHalbjahr !== null) && (GostFachManager_1.GostFachManager.istWaehlbar(this.manager.getFach(fachbelegung), nextHalbjahr)) && ((this.projektkurs === null) || (this.projektkursHalbjahre === null) || (halbjahr.compareTo(this.projektkursHalbjahre.get(0)) < 0)))
  132. continue;
  133. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_14);
  134. }
  135. }
  136. }
  137. /**
  138. * Prüft die Belegung der Leitfächer
  139. */
  140. pruefeBelegungLeitfaecher() {
  141. if (this.projektkursBelegung === null)
  142. return;
  143. for (let fachbelegung of this.projektkursBelegung) {
  144. let fach = this.manager.getFach(fachbelegung);
  145. if (fach === null)
  146. continue;
  147. let leitfach1 = this.manager.getFachbelegungByKuerzel(fach.projektKursLeitfach1Kuerzel);
  148. let leitfach2 = this.manager.getFachbelegungByKuerzel(fach.projektKursLeitfach2Kuerzel);
  149. if ((leitfach1 !== null) && this.pruefeBelegungLeitfachbelegung(fachbelegung, leitfach1))
  150. continue;
  151. if ((leitfach2 !== null) && this.pruefeBelegungLeitfachbelegung(fachbelegung, leitfach2))
  152. continue;
  153. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_13);
  154. }
  155. }
  156. /**
  157. * Prüft, ob das Leitfach in Bezug auf die Belegung des Projektfaches die korrekten Halbjahresbelegungen hat.
  158. *
  159. * @param projektkurs die Fachbelegungen des Projektfaches
  160. * @param leitfach die Fachbelegungen des Leitfaches
  161. *
  162. * @return true, falls das Leitfach eine geeigneten Belegung aufweist, sonst false
  163. */
  164. pruefeBelegungLeitfachbelegung(projektkurs, leitfach) {
  165. if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12)) {
  166. if ((leitfach !== null) && this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12))
  167. return true;
  168. }
  169. else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21)) {
  170. if ((leitfach !== null) && (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12) || this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21)))
  171. return true;
  172. }
  173. else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22)) {
  174. if ((leitfach !== null) && ((this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12)) || (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21)) || (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))))
  175. return true;
  176. }
  177. else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q11)) {
  178. if ((leitfach !== null) && this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11))
  179. return true;
  180. }
  181. else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q12)) {
  182. if ((leitfach !== null) && (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12) || this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q12)))
  183. return true;
  184. }
  185. else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q21)) {
  186. if ((leitfach !== null) && ((this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12)) || (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21)) || (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q21))))
  187. return true;
  188. }
  189. else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q22)) {
  190. if ((leitfach !== null) && ((this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12)) || (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21)) || (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22)) || (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q22))))
  191. return true;
  192. }
  193. return false;
  194. }
  195. /**
  196. * Gibt den belegten Projektkurs zurück, fall ein Kurs gültig belegt wurde.
  197. *
  198. * @return die Fachbelegung des Projektkurses oder null
  199. */
  200. getProjektkurs() {
  201. return this.projektkurs;
  202. }
  203. /**
  204. * Gibt zurück, ob die angegebene Fachbelegung des Halbjahres eine Fachbelegung des
  205. * angewählten Projektkurses ist und anrechenbar ist. Sollte sie Teil des Projektkurses
  206. * sein, aber auch zu einer besonderen Lernleistung gehören, so ist sie nicht anrechenbar.
  207. *
  208. * @param fachbelegungHalbjahr die Fachbelegung des Halbjahres
  209. *
  210. * @return true, wenn die Fachbelegung anrechenbar ist.
  211. */
  212. istAnrechenbar(fachbelegungHalbjahr) {
  213. if (fachbelegungHalbjahr === null)
  214. return false;
  215. if (GostKursart_1.GostKursart.fromKuerzel(fachbelegungHalbjahr.kursartKuerzel) !== GostKursart_1.GostKursart.PJK)
  216. return false;
  217. let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(fachbelegungHalbjahr.halbjahrKuerzel);
  218. if ((this.projektkurs === null) || (this.projektkursHalbjahre === null) || (this.manager.istProjektKursBesondereLernleistung()))
  219. return false;
  220. return (halbjahr === this.projektkursHalbjahre.get(0)) || (halbjahr === this.projektkursHalbjahre.get(1));
  221. }
  222. /**
  223. * Gibt die Anzahl der anrechenbaren Kurse für Block I des Abiturs zurück
  224. *
  225. * @return die Anzahl der anrechenbaren Kurse
  226. */
  227. getAnrechenbareKurse() {
  228. if ((this.projektkurs === null) || (this.manager.istProjektKursBesondereLernleistung()))
  229. return 0;
  230. return 2;
  231. }
  232. isTranspiledInstanceOf(name) {
  233. return ['de.nrw.schule.svws.core.abschluss.gost.belegpruefung.Projektkurse', 'de.nrw.schule.svws.core.abschluss.gost.GostBelegpruefung'].includes(name);
  234. }
  235. }
  236. exports.Projektkurse = Projektkurse;
  237. function cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse(obj) {
  238. return obj;
  239. }
  240. exports.cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse = cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse;
  241. //# sourceMappingURL=Projektkurse.js.map