"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse = exports.Projektkurse = void 0; const JavaObject_1 = require("../../../../java/lang/JavaObject"); const GostBelegpruefung_1 = require("../../../../core/abschluss/gost/GostBelegpruefung"); const GostFachManager_1 = require("../../../../core/abschluss/gost/GostFachManager"); const GostKursart_1 = require("../../../../core/types/gost/GostKursart"); const GostHalbjahr_1 = require("../../../../core/types/gost/GostHalbjahr"); const Vector_1 = require("../../../../java/util/Vector"); const GostBelegungsfehler_1 = require("../../../../core/abschluss/gost/GostBelegungsfehler"); const HashSet_1 = require("../../../../java/util/HashSet"); class Projektkurse extends GostBelegpruefung_1.GostBelegpruefung { projektkursBelegung = null; projektkurs = null; projektkursHalbjahre = null; /** * Erstellt eine neue Belegprüfung für die Projektkurse. * * @param manager der Daten-Manager für die Abiturdaten * @param pruefungs_art die Art der durchzuführenden Prüfung (z.B. EF.1 oder GESAMT) */ constructor(manager, pruefungs_art) { super(manager, pruefungs_art); } init() { this.projektkurs = null; this.projektkursBelegung = new Vector_1.Vector(); this.projektkursHalbjahre = new Vector_1.Vector(); let alleFachbelegungen = this.manager.getFachbelegungen(); for (let i = 0; i < alleFachbelegungen.size(); i++) { let fachbelegung = alleFachbelegungen.get(i); if (this.manager.zaehleBelegung(fachbelegung) <= 0) continue; let fach = this.manager.getFach(fachbelegung); if ((fach !== null) && GostFachManager_1.GostFachManager.istProjektkurs(fach)) { this.projektkursBelegung.add(fachbelegung); } } } pruefeEF1() { this.pruefeBelegungEF(); } pruefeGesamt() { this.pruefeBelegungEF(); this.pruefeAufAnrechenbarenProjektkurs(); this.pruefeBelegungHalbjahre(); this.pruefeBelegungLeitfaecher(); if (this.manager.istProjektKursBesondereLernleistung()) this.addFehler((this.projektkurs !== null) ? GostBelegungsfehler_1.GostBelegungsfehler.PF_16_INFO : GostBelegungsfehler_1.GostBelegungsfehler.PF_15); } /** * Prüft, ob ein Projektfach in der EF belegt wurde. Eine solche Belegung ist nicht zulässig. */ pruefeBelegungEF() { if (this.projektkursBelegung === null) return; for (let fachbelegung of this.projektkursBelegung) { for (let belegungHalbjahr of fachbelegung.belegungen) { if (belegungHalbjahr === null) continue; let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegungHalbjahr.halbjahrKuerzel); if ((halbjahr === GostHalbjahr_1.GostHalbjahr.EF1) || (halbjahr === GostHalbjahr_1.GostHalbjahr.EF2)) this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_10); } } } /** * Prüft, ob ein anrechenbarer Projektkurs unter den belegten Projektfächern existiert. Es darf aber * auch nur genau ein anrechenbarer Projektkurs existieren! */ pruefeAufAnrechenbarenProjektkurs() { if (this.projektkursBelegung === null) return; for (let fachbelegung of this.projektkursBelegung) { for (let belegungHalbjahr of fachbelegung.belegungen) { if (belegungHalbjahr === null) continue; let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegungHalbjahr.halbjahrKuerzel); if (halbjahr === null) continue; if ((halbjahr === GostHalbjahr_1.GostHalbjahr.EF1) || (halbjahr === GostHalbjahr_1.GostHalbjahr.EF2)) continue; let nextHalbjahr = halbjahr.next(); if (nextHalbjahr === null) { this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_18); continue; } else if (!this.manager.pruefeBelegung(fachbelegung, nextHalbjahr)) { this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_17_INFO); continue; } if (this.projektkurs !== null) { this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_14); break; } this.projektkurs = fachbelegung; if (this.projektkursHalbjahre === null) this.projektkursHalbjahre = new Vector_1.Vector(); this.projektkursHalbjahre.add(halbjahr); this.projektkursHalbjahre.add(nextHalbjahr); break; } } } /** * Prüfe die Halbjahresbelegungen der belegten Projektfächer. Hierbei Darf * es zu Einzelbelegungen neben dem anrechenbaren Projektkurs kommen. Diese dürfen * aber nur vor der Belegung des anrechenbaren Kurses liegen. Außerdem dürfen in * einem Halbjahr nicht mehrere Projekfächer belegt sein. */ pruefeBelegungHalbjahre() { if (this.projektkursBelegung === null) return; let pjkHalbjahre = new HashSet_1.HashSet(); for (let fachbelegung of this.projektkursBelegung) { for (let belegungHalbjahr of fachbelegung.belegungen) { if (belegungHalbjahr === null) continue; let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegungHalbjahr.halbjahrKuerzel); if (halbjahr === null) continue; if ((halbjahr === GostHalbjahr_1.GostHalbjahr.EF1) || (halbjahr === GostHalbjahr_1.GostHalbjahr.EF2)) continue; if (!pjkHalbjahre.add(halbjahr)) { this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_14); continue; } if ((this.projektkurs !== null) && JavaObject_1.JavaObject.equalsTranspiler(this.projektkurs, (fachbelegung)) && (this.projektkursHalbjahre !== null) && this.projektkursHalbjahre.contains(halbjahr)) continue; let nextHalbjahr = halbjahr.next(); 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))) continue; this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_14); } } } /** * Prüft die Belegung der Leitfächer */ pruefeBelegungLeitfaecher() { if (this.projektkursBelegung === null) return; for (let fachbelegung of this.projektkursBelegung) { let fach = this.manager.getFach(fachbelegung); if (fach === null) continue; let leitfach1 = this.manager.getFachbelegungByKuerzel(fach.projektKursLeitfach1Kuerzel); let leitfach2 = this.manager.getFachbelegungByKuerzel(fach.projektKursLeitfach2Kuerzel); if ((leitfach1 !== null) && this.pruefeBelegungLeitfachbelegung(fachbelegung, leitfach1)) continue; if ((leitfach2 !== null) && this.pruefeBelegungLeitfachbelegung(fachbelegung, leitfach2)) continue; this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.PF_13); } } /** * Prüft, ob das Leitfach in Bezug auf die Belegung des Projektfaches die korrekten Halbjahresbelegungen hat. * * @param projektkurs die Fachbelegungen des Projektfaches * @param leitfach die Fachbelegungen des Leitfaches * * @return true, falls das Leitfach eine geeigneten Belegung aufweist, sonst false */ pruefeBelegungLeitfachbelegung(projektkurs, leitfach) { if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12)) { if ((leitfach !== null) && this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12)) return true; } else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21)) { 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))) return true; } else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22)) { 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)))) return true; } else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q11)) { if ((leitfach !== null) && this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11)) return true; } else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q12)) { if ((leitfach !== null) && (this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12) || this.manager.pruefeBelegung(leitfach, GostHalbjahr_1.GostHalbjahr.Q12))) return true; } else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q21)) { 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)))) return true; } else if (this.manager.pruefeBelegung(projektkurs, GostHalbjahr_1.GostHalbjahr.Q22)) { 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)))) return true; } return false; } /** * Gibt den belegten Projektkurs zurück, fall ein Kurs gültig belegt wurde. * * @return die Fachbelegung des Projektkurses oder null */ getProjektkurs() { return this.projektkurs; } /** * Gibt zurück, ob die angegebene Fachbelegung des Halbjahres eine Fachbelegung des * angewählten Projektkurses ist und anrechenbar ist. Sollte sie Teil des Projektkurses * sein, aber auch zu einer besonderen Lernleistung gehören, so ist sie nicht anrechenbar. * * @param fachbelegungHalbjahr die Fachbelegung des Halbjahres * * @return true, wenn die Fachbelegung anrechenbar ist. */ istAnrechenbar(fachbelegungHalbjahr) { if (fachbelegungHalbjahr === null) return false; if (GostKursart_1.GostKursart.fromKuerzel(fachbelegungHalbjahr.kursartKuerzel) !== GostKursart_1.GostKursart.PJK) return false; let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(fachbelegungHalbjahr.halbjahrKuerzel); if ((this.projektkurs === null) || (this.projektkursHalbjahre === null) || (this.manager.istProjektKursBesondereLernleistung())) return false; return (halbjahr === this.projektkursHalbjahre.get(0)) || (halbjahr === this.projektkursHalbjahre.get(1)); } /** * Gibt die Anzahl der anrechenbaren Kurse für Block I des Abiturs zurück * * @return die Anzahl der anrechenbaren Kurse */ getAnrechenbareKurse() { if ((this.projektkurs === null) || (this.manager.istProjektKursBesondereLernleistung())) return 0; return 2; } isTranspiledInstanceOf(name) { return ['de.nrw.schule.svws.core.abschluss.gost.belegpruefung.Projektkurse', 'de.nrw.schule.svws.core.abschluss.gost.GostBelegpruefung'].includes(name); } } exports.Projektkurse = Projektkurse; function cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse(obj) { return obj; } exports.cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse = cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Projektkurse; //# sourceMappingURL=Projektkurse.js.map