ServicePrognose.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import { JavaObject, cast_java_lang_Object } from '../../../java/lang/JavaObject';
  2. import { GEAbschlussFach, cast_de_nrw_schule_svws_core_data_abschluss_GEAbschlussFach } from '../../../core/data/abschluss/GEAbschlussFach';
  3. import { ServiceAbschlussHA10, cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10 } from '../../../core/abschluss/ge/ServiceAbschlussHA10';
  4. import { Service, cast_de_nrw_schule_svws_core_Service } from '../../../core/Service';
  5. import { ServiceBerechtigungMSAQ, cast_de_nrw_schule_svws_core_abschluss_ge_ServiceBerechtigungMSAQ } from '../../../core/abschluss/ge/ServiceBerechtigungMSAQ';
  6. import { JavaString, cast_java_lang_String } from '../../../java/lang/JavaString';
  7. import { LogLevel, cast_de_nrw_schule_svws_logger_LogLevel } from '../../../logger/LogLevel';
  8. import { GEAbschlussFaecher, cast_de_nrw_schule_svws_core_data_abschluss_GEAbschlussFaecher } from '../../../core/data/abschluss/GEAbschlussFaecher';
  9. import { AbschlussErgebnis, cast_de_nrw_schule_svws_core_data_abschluss_AbschlussErgebnis } from '../../../core/data/abschluss/AbschlussErgebnis';
  10. import { List, cast_java_util_List } from '../../../java/util/List';
  11. import { ServiceAbschlussMSA, cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussMSA } from '../../../core/abschluss/ge/ServiceAbschlussMSA';
  12. import { Abschluss, cast_de_nrw_schule_svws_core_types_Abschluss } from '../../../core/types/Abschluss';
  13. import { AbschlussManager, cast_de_nrw_schule_svws_core_abschluss_AbschlussManager } from '../../../core/abschluss/AbschlussManager';
  14. import { ServiceAbschlussHA9, cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA9 } from '../../../core/abschluss/ge/ServiceAbschlussHA9';
  15. export class ServicePrognose extends Service<GEAbschlussFaecher, AbschlussErgebnis> {
  16. public constructor() {
  17. super();
  18. }
  19. /**
  20. * Prüft, ob Lernbereichsnoten bei den Sbchlussfächern zur Verfügung stehen oder nicht.
  21. *
  22. * @param faecher die Abschlussfächer
  23. *
  24. * @return true, falls die Lernbereichsnoten vorhanden sind, ansonsten false
  25. */
  26. private static hatLernbereichsnoten(faecher : GEAbschlussFaecher) : boolean {
  27. let hatLBNW : boolean = false;
  28. let hatLBAL : boolean = false;
  29. if (faecher.faecher === null)
  30. return false;
  31. let tmp : List<GEAbschlussFach> = faecher.faecher;
  32. for (let fach of tmp) {
  33. if (fach === null)
  34. continue;
  35. hatLBNW = hatLBNW || JavaObject.equalsTranspiler("LBNW", (fach.kuerzel));
  36. hatLBAL = hatLBAL || JavaObject.equalsTranspiler("LBAL", (fach.kuerzel));
  37. }
  38. return hatLBNW && hatLBAL;
  39. }
  40. /**
  41. * Führt die Prognoseberechnung anhand der übergebenen Abschlussfächer durch
  42. * und gibt das Berechnungsergebnis zurück.
  43. *
  44. * @param input die Abschlussfächer
  45. *
  46. * @return das Ergebnis der Prognoseberechnung
  47. */
  48. public handle(input : GEAbschlussFaecher) : AbschlussErgebnis {
  49. if (!AbschlussManager.pruefeHat4LeistungsdifferenzierteFaecher(input)) {
  50. this.logger.logLn(LogLevel.DEBUG, "Fehler: Es wurden nicht genügend leistungsdiffernzierte Fächer gefunden.");
  51. let prognose : AbschlussErgebnis = AbschlussManager.getErgebnis(null, false);
  52. prognose.log = this.log.getStrings();
  53. return prognose;
  54. }
  55. if (!AbschlussManager.pruefeKuerzelDuplikate(input)) {
  56. this.logger.logLn(LogLevel.DEBUG, "Fehler: Es wurden Fächer mit dem gleichen Kürzel zur Abschlussprüfung übergeben. Dies ist nicht zulässig.");
  57. let prognose : AbschlussErgebnis = AbschlussManager.getErgebnis(null, false);
  58. prognose.log = this.log.getStrings();
  59. return prognose;
  60. }
  61. let abschluss : Abschluss = Abschluss.OHNE_ABSCHLUSS;
  62. let np_faecher : List<String> | null = null;
  63. if (!JavaObject.equalsTranspiler("10", (input.jahrgang))) {
  64. let ha9 : ServiceAbschlussHA9 = new ServiceAbschlussHA9();
  65. let ha9output : AbschlussErgebnis = ha9.handle(input);
  66. np_faecher = ha9output.npFaecher;
  67. if (ha9output.erworben)
  68. abschluss = Abschluss.HA9;
  69. this.log.append(ha9.getLog());
  70. this.logger.logLn(LogLevel.INFO, "");
  71. } else
  72. if (JavaObject.equalsTranspiler("10", (input.jahrgang))) {
  73. abschluss = Abschluss.HA9;
  74. }
  75. let ha10 : ServiceAbschlussHA10 = new ServiceAbschlussHA10();
  76. let ha10output : AbschlussErgebnis = ha10.handle(input);
  77. if (ha10output.erworben)
  78. abschluss = Abschluss.HA10; else
  79. if (JavaObject.equalsTranspiler("10", (input.jahrgang)) || (JavaObject.equalsTranspiler(Abschluss.HA9, (abschluss))))
  80. np_faecher = ha10output.npFaecher;
  81. this.log.append(ha10.getLog());
  82. if ((!JavaObject.equalsTranspiler(Abschluss.OHNE_ABSCHLUSS, (abschluss))) || (!ServicePrognose.hatLernbereichsnoten(input))) {
  83. let msa : ServiceAbschlussMSA = new ServiceAbschlussMSA();
  84. let msaOutput : AbschlussErgebnis = msa.handle(input);
  85. this.logger.logLn(LogLevel.INFO, "");
  86. this.log.append(msa.getLog());
  87. if (msaOutput.erworben) {
  88. abschluss = Abschluss.MSA;
  89. let msaq : ServiceBerechtigungMSAQ = new ServiceBerechtigungMSAQ();
  90. let msaqOutput : AbschlussErgebnis = msaq.handle(input);
  91. if (msaqOutput.erworben) {
  92. abschluss = Abschluss.MSA_Q;
  93. } else {
  94. np_faecher = msaqOutput.npFaecher;
  95. }
  96. this.logger.logLn(LogLevel.INFO, "");
  97. this.log.append(msaq.getLog());
  98. } else {
  99. np_faecher = msaOutput.npFaecher;
  100. }
  101. }
  102. let prognose : AbschlussErgebnis = AbschlussManager.getErgebnisNachpruefung(abschluss, np_faecher);
  103. prognose.erworben = (!JavaObject.equalsTranspiler(Abschluss.OHNE_ABSCHLUSS, (abschluss)));
  104. prognose.log = this.log.getStrings();
  105. return prognose;
  106. }
  107. isTranspiledInstanceOf(name : string): boolean {
  108. return ['de.nrw.schule.svws.core.Service', 'de.nrw.schule.svws.core.abschluss.ge.ServicePrognose'].includes(name);
  109. }
  110. }
  111. export function cast_de_nrw_schule_svws_core_abschluss_ge_ServicePrognose(obj : unknown) : ServicePrognose {
  112. return obj as ServicePrognose;
  113. }