"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10 = exports.ServiceAbschlussHA10 = void 0; const JavaObject_1 = require("../../../java/lang/JavaObject"); const Service_1 = require("../../../core/Service"); const GELeistungsdifferenzierteKursart_1 = require("../../../core/types/ge/GELeistungsdifferenzierteKursart"); const LogLevel_1 = require("../../../logger/LogLevel"); const AbschlussFaecherGruppe_1 = require("../../../core/abschluss/ge/AbschlussFaecherGruppe"); const Arrays_1 = require("../../../java/util/Arrays"); const Abschluss_1 = require("../../../core/types/Abschluss"); const AbschlussManager_1 = require("../../../core/abschluss/AbschlussManager"); const AbschlussFaecherGruppen_1 = require("../../../core/abschluss/ge/AbschlussFaecherGruppen"); class ServiceAbschlussHA10 extends Service_1.Service { filterDefizit = { test: (f) => f.note > 4 && (!f.ausgeglichen) }; filterMangelhaft = { test: (f) => f.note === 5 }; filterMangelhaftOhneZP10Faecher = { test: (f) => (f.note === 5) && (!JavaObject_1.JavaObject.equalsTranspiler("D", (f.kuerzel))) && (!JavaObject_1.JavaObject.equalsTranspiler("E", (f.kuerzel))) && (!JavaObject_1.JavaObject.equalsTranspiler("M", (f.kuerzel))) }; filterUngenuegend = { test: (f) => f.note === 6 }; filterEKurse = { test: (f) => (GELeistungsdifferenzierteKursart_1.GELeistungsdifferenzierteKursart.E.hat(f.kursart)) }; filterWeitereFremdsprachen = { test: (f) => (!JavaObject_1.JavaObject.equalsTranspiler("E", (f.kuerzel)) && (f.istFremdsprache !== null) && (f.istFremdsprache === true)) }; constructor() { super(); } /** * Führt die Abschlussberechnung anhand der übergebenen Abschlussfächer durch * und gibt das Berechnungsergebnis zurück. * * @param input die Abschlussfächer * * @return das Ergebnis der Abschlussberechnung */ handle(input) { this.logger.logLn(LogLevel_1.LogLevel.INFO, "Prüfe HA10:"); this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "=========="); if ((input.faecher === null) || (!AbschlussManager_1.AbschlussManager.pruefeHat4LeistungsdifferenzierteFaecher(input))) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________"); this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Es wurden nicht genügend leistungsdiffernzierte Fächer gefunden."); return AbschlussManager_1.AbschlussManager.getErgebnis(null, false); } if (!AbschlussManager_1.AbschlussManager.pruefeKuerzelDuplikate(input)) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________"); this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Es wurden Fächer mit dem gleichen Kürzel zur Abschlussprüfung übergeben. Dies ist nicht zulässig."); return AbschlussManager_1.AbschlussManager.getErgebnis(null, false); } let faecher = new AbschlussFaecherGruppen_1.AbschlussFaecherGruppen(new AbschlussFaecherGruppe_1.AbschlussFaecherGruppe(input.faecher, Arrays_1.Arrays.asList("D", "M", "LBNW", "LBAL"), null), new AbschlussFaecherGruppe_1.AbschlussFaecherGruppe(input.faecher, null, Arrays_1.Arrays.asList("D", "M", "LBNW", "LBAL", "BI", "PH", "CH", "AT", "AW", "AH"))); if (!faecher.fg1.istVollstaendig(Arrays_1.Arrays.asList("D", "M", "LBNW", "LBAL"))) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________"); this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Es wurden nicht alle nötigen Leistungen für die Fächergruppe 1 gefunden."); return AbschlussManager_1.AbschlussManager.getErgebnis(null, false); } if (faecher.fg2.isEmpty()) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________"); this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Keine Leistungen für die Fächergruppe 2 gefunden."); return AbschlussManager_1.AbschlussManager.getErgebnis(null, false); } let weitereFS = faecher.fg2.entferneFaecher(this.filterWeitereFremdsprachen); if (weitereFS.size() > 0) { for (let fs of weitereFS) { if (fs.bezeichnung === null) continue; this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " -> Ignoriere weitere Fremdsprache: " + fs.bezeichnung + "(" + fs.note + ")"); } } this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " - ggf. Verbessern der E-Kurs-Noten für die Defizitberechnung:"); let tmpFaecher = faecher.getFaecher(this.filterEKurse); for (let f of tmpFaecher) { if (f.kuerzel === null) continue; let note = f.note; let note_neu = (note === 1) ? 1 : note - 1; this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " " + f.kuerzel + "(E):" + note + "->" + note_neu); f.note = note_neu; } this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " -> FG1: Fächer " + faecher.fg1.toString().valueOf()); this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " -> FG2: Fächer " + faecher.fg2.toString().valueOf()); let abschlussergebnis = this.pruefeDefizite(faecher, ""); if (abschlussergebnis.erworben) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________"); this.logger.logLn(LogLevel_1.LogLevel.INFO, " => HA 10: APO-SI §41 (1)"); } else if (AbschlussManager_1.AbschlussManager.hatNachpruefungsmoeglichkeit(abschlussergebnis)) { this.logger.logLn(LogLevel_1.LogLevel.INFO, " => kein HA10 - Nachprüfungsmöglichkeite(en) in " + AbschlussManager_1.AbschlussManager.getNPFaecherString(abschlussergebnis).valueOf()); } else { this.logger.logLn(LogLevel_1.LogLevel.INFO, " => kein HA10 - KEINE Nachprüfungsmöglichkeiten!"); } return abschlussergebnis; } /** * Prüft in Bezug auf Defizite, ob der Abschluss erworben wurde. * * @param faecher die Asbchlussfächer nach Fächergruppen sortiert * @param log_indent die Einrückung für das Logging * * @return das Ergebnis der Abschlussberechnung in Bezug die Defizitberechnung */ pruefeDefizite(faecher, log_indent) { let fg1_defizite = faecher.fg1.getFaecherAnzahl(this.filterDefizit); let fg2_defizite = faecher.fg2.getFaecherAnzahl(this.filterDefizit); let ges_defizite = fg1_defizite + fg2_defizite; let fg1_mangelhaft = faecher.fg1.getFaecherAnzahl(this.filterMangelhaft); let fg1_ungenuegend = faecher.fg1.getFaecherAnzahl(this.filterUngenuegend); let fg2_ungenuegend = faecher.fg2.getFaecherAnzahl(this.filterUngenuegend); if (fg1_defizite > 0) this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> FG1: Defizit" + (fg1_defizite > 1 ? "e" : "") + ": " + faecher.fg1.getKuerzelListe(this.filterDefizit).valueOf()); if (fg2_defizite > 0) this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> FG2: Defizit" + (fg2_defizite > 1 ? "e" : "") + ": " + faecher.fg2.getKuerzelListe(this.filterDefizit).valueOf()); if ((fg1_ungenuegend > 0) || (fg2_ungenuegend > 1)) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu oft ungenügend (6) - 0x6 in FG1 und max. 1x6 in FG2 erlaubt."); return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false); } this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> " + ((fg2_ungenuegend === 1) ? "1x6 in FG2 erlaubt" : "0x6 in FG1 und FG2") + " -> prüfe weitere Defizite"); if (fg1_mangelhaft > 2) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: Mehr als 2x5 in FG1"); return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false); } if ((fg1_mangelhaft === 2) && (fg2_defizite > 1)) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: 2x5 in FG1 und mind. ein weiteres Defizit in FG2"); return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false); } if (ges_defizite > 3) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: Insgesamt mehr als 3 Defizite"); return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false); } let hatNP = (fg1_mangelhaft === 2) || (ges_defizite === 3); if (hatNP) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: " + ((fg1_mangelhaft === 2) ? "2x5 in FG1, aber kein weiteres Defizit in FG2" : "3 Defizite nicht erlaubt")); this.logger.logLn(LogLevel_1.LogLevel.INFO, " -> Hinweis: Nachprüfungen in ZP10-Fächern nicht möglich"); let np_faecher = (fg1_mangelhaft === 2) ? faecher.fg1.getKuerzel(this.filterMangelhaftOhneZP10Faecher) : faecher.getKuerzel(this.filterMangelhaftOhneZP10Faecher); let abschlussergebnis = AbschlussManager_1.AbschlussManager.getErgebnisNachpruefung(Abschluss_1.Abschluss.HA10, np_faecher); this.logger.logLn(LogLevel_1.LogLevel.INFO, AbschlussManager_1.AbschlussManager.hatNachpruefungsmoeglichkeit(abschlussergebnis) ? (" -> Nachprüfungsmöglichkeit(en) in " + AbschlussManager_1.AbschlussManager.getNPFaecherString(abschlussergebnis).valueOf()) : " -> also: kein Nachprüfungsmöglichkeit."); return abschlussergebnis; } if ((fg1_defizite === 0) && (fg2_defizite === 0)) { this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> keine Defizite in FG1 und FG2"); return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, true); } this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zwei Defizite erlaubt (solange nicht beide in FG1)"); return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, true); } isTranspiledInstanceOf(name) { return ['de.nrw.schule.svws.core.Service', 'de.nrw.schule.svws.core.abschluss.ge.ServiceAbschlussHA10'].includes(name); } } exports.ServiceAbschlussHA10 = ServiceAbschlussHA10; function cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10(obj) { return obj; } exports.cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10 = cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10; //# sourceMappingURL=ServiceAbschlussHA10.js.map