AbschlussManager.ts 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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 { AbschlussErgebnis, cast_de_nrw_schule_svws_core_data_abschluss_AbschlussErgebnis } from '../../core/data/abschluss/AbschlussErgebnis';
  4. import { GEAbschlussFaecher, cast_de_nrw_schule_svws_core_data_abschluss_GEAbschlussFaecher } from '../../core/data/abschluss/GEAbschlussFaecher';
  5. import { StringBuilder, cast_java_lang_StringBuilder } from '../../java/lang/StringBuilder';
  6. import { List, cast_java_util_List } from '../../java/util/List';
  7. import { JavaString, cast_java_lang_String } from '../../java/lang/JavaString';
  8. import { Abschluss, cast_de_nrw_schule_svws_core_types_Abschluss } from '../../core/types/Abschluss';
  9. import { JavaBoolean, cast_java_lang_Boolean } from '../../java/lang/JavaBoolean';
  10. import { GELeistungsdifferenzierteKursart, cast_de_nrw_schule_svws_core_types_ge_GELeistungsdifferenzierteKursart } from '../../core/types/ge/GELeistungsdifferenzierteKursart';
  11. import { Vector, cast_java_util_Vector } from '../../java/util/Vector';
  12. import { HashSet, cast_java_util_HashSet } from '../../java/util/HashSet';
  13. export class AbschlussManager extends JavaObject {
  14. public constructor() {
  15. super();
  16. }
  17. /**
  18. * Erzeugt ein Ergebnis der Abschlussberechnung unter Angabe, ob dieser erworben
  19. * wurde. Die Liste der Nachprüfungsfächer ist leer und ein Log ist nicht zugeordnet.
  20. * Sollten Nachprüfungsmöglichkeiten bestehen so ist die Methode
  21. * {@link AbschlussManager#getErgebnisNachpruefung} zu nutzen.
  22. * und ob dieser erworben wurde.
  23. *
  24. * @param abschluss der Abschluss für den das Ergebnis erzeugt wird
  25. * @param erworben true, falls der Abschluss erworben wurde, sonst false
  26. *
  27. * @return das Ergebnis der Abschlussberechnung
  28. */
  29. public static getErgebnis(abschluss : Abschluss | null, erworben : boolean) : AbschlussErgebnis {
  30. let ergebnis : AbschlussErgebnis = new AbschlussErgebnis();
  31. ergebnis.abschluss = abschluss === null ? null : abschluss.toString();
  32. ergebnis.erworben = erworben;
  33. ergebnis.npFaecher = null;
  34. ergebnis.log = null;
  35. return ergebnis;
  36. }
  37. /**
  38. * Erzeugt ein Ergebnis der Abschlussberechnung, wo der Abschluss nicht erreicht wurde, aber ggf.
  39. * noch durch Nachprüfungen erreicht werden kann. Ein log wird nicht zugeordnet.
  40. *
  41. * @param abschluss der Abschluss für den das Ergebnis erzeugt wird
  42. * @param np_faecher eine Liste von Nachprüfungsfächern, falls eine Nachprüfung möglich ist,
  43. * ansonsten null oder eine leere Liste
  44. *
  45. * @return das Ergebnis der Abschlussberechnung
  46. */
  47. public static getErgebnisNachpruefung(abschluss : Abschluss | null, np_faecher : List<String> | null) : AbschlussErgebnis {
  48. let ergebnis : AbschlussErgebnis = new AbschlussErgebnis();
  49. ergebnis.abschluss = abschluss === null ? null : abschluss.toString();
  50. ergebnis.erworben = false;
  51. if ((np_faecher === null) || (np_faecher.size() === 0))
  52. ergebnis.npFaecher = null; else
  53. ergebnis.npFaecher = np_faecher;
  54. ergebnis.log = null;
  55. return ergebnis;
  56. }
  57. /**
  58. * Gibt an, ob für einen Abschluss eine Nachprüfungsmöglichkeit besteht.
  59. *
  60. * @param ergebnis das Abschluss-Ergebnis bei dem auf eine Nachprüfungsmöglichkeit
  61. * geprüft werden soll.
  62. *
  63. * @return true, falls eine Nachprüfungsmöglichkeit besteht, sonst false
  64. */
  65. public static hatNachpruefungsmoeglichkeit(ergebnis : AbschlussErgebnis) : boolean {
  66. return (ergebnis.npFaecher !== null) && ergebnis.npFaecher.size() > 0;
  67. }
  68. /**
  69. * Gibt die Nachprüfungsfächer als Komma-separierten String zurück.
  70. *
  71. * @param ergebnis das Abschluss-Ergebnis bei dem die Nachprüfungsmöglichkeiten
  72. * ausgegeben werden sollen
  73. *
  74. * @return die Nachprüfungsfächer als Komma-separierten String
  75. */
  76. public static getNPFaecherString(ergebnis : AbschlussErgebnis) : String {
  77. if (ergebnis.npFaecher === null)
  78. return "";
  79. let sb : StringBuilder | null = new StringBuilder();
  80. for (let fach of ergebnis.npFaecher) {
  81. if (sb.length() > 0)
  82. sb.append(", ");
  83. sb.append(fach);
  84. }
  85. return sb.toString();
  86. }
  87. /**
  88. * Vergleicht die beiden Abschlüsse, ob sie identisch sind. Ein
  89. * Übergabewert null wird als {@link Abschluss#OHNE_ABSCHLUSS}
  90. * interpretiert.
  91. *
  92. * @param a der eine Abschluss
  93. * @param b der andere Abschluss
  94. *
  95. * @return true, falls sie identisch sind und ansonsten false
  96. */
  97. public static equalsAbschluesse(a : String | null, b : String | null) : boolean {
  98. if ((a === null) || (Abschluss.OHNE_ABSCHLUSS.is(a)))
  99. return (b === null) || (Abschluss.OHNE_ABSCHLUSS.is(b));
  100. return JavaObject.equalsTranspiler(a, (b));
  101. }
  102. /**
  103. * Gibt den Abschluss zurück. Im Falle das kein Abschluss angegeben ist
  104. * wird Abschluss.OHNE_ABSCHLUSS zurückgegeben.
  105. *
  106. * @param ergebnis das Ergebnis
  107. *
  108. * @return der Abschluss
  109. */
  110. public static getAbschluss(ergebnis : AbschlussErgebnis) : String {
  111. return ergebnis.abschluss === null ? Abschluss.OHNE_ABSCHLUSS.toString() : ergebnis.abschluss;
  112. }
  113. /**
  114. * Die Methode dient dem Erzeugen eines Faches für die Abschlussberechnung.
  115. *
  116. * @param kuerzel das Kürzel des Faches
  117. * @param bezeichnung die Bezeichnung des Faches
  118. * @param note die Note, die in dem Fach erteilt wurde
  119. * @param kursart gibt die Kursart Faches an: leistungsdifferenzierter (E-Kurs, G-Kurs) oder sonstiger Kurs
  120. * @param istFremdsprache gibt an, ob es sich bei dem Fach um eine Fremdsprache handelt oder nicht
  121. *
  122. * @return das Abschlussfach
  123. */
  124. public static erstelleAbschlussFach(kuerzel : String, bezeichnung : String | null, note : number, kursart : GELeistungsdifferenzierteKursart, istFremdsprache : Boolean | null) : GEAbschlussFach {
  125. let fach : GEAbschlussFach = new GEAbschlussFach();
  126. fach.kuerzel = kuerzel;
  127. fach.bezeichnung = (bezeichnung === null || JavaObject.equalsTranspiler("", (bezeichnung))) ? "---" : bezeichnung;
  128. fach.note = note;
  129. fach.kursart = kursart.kuerzel;
  130. fach.istFremdsprache = istFremdsprache === null ? false : istFremdsprache;
  131. return fach;
  132. }
  133. /**
  134. * Liefert eine List mit den Fachkürzeln aus der übergebenen Liste mit Abschlussfächern.
  135. *
  136. * @param faecher die Liste mit Abschlussfächern
  137. *
  138. * @return die Liste mit den Fachkürzeln
  139. */
  140. public static getKuerzel(faecher : List<GEAbschlussFach>) : List<String> {
  141. let result : Vector<String> = new Vector();
  142. for (let i : number = 0; i < faecher.size(); i++){
  143. let fach : GEAbschlussFach = faecher.get(i);
  144. if ((fach === null) || fach.kuerzel === null)
  145. continue;
  146. if (result.contains(fach.kuerzel))
  147. continue;
  148. result.add(fach.kuerzel);
  149. }
  150. return result;
  151. }
  152. /**
  153. * Prüft, ob vier leistungsdifferenzierte Fächer belegt wurden. Dabei wird nicht geprüft, ob
  154. * es sich um G oder E-Kurse handelt.
  155. *
  156. * @param abschluss_faecher die Abschlussfächer
  157. *
  158. * @return true, falls vier leistungsdifferenzierte Fächer belegt wurden, sonst false
  159. */
  160. public static pruefeHat4LeistungsdifferenzierteFaecher(abschluss_faecher : GEAbschlussFaecher) : boolean {
  161. if (abschluss_faecher.faecher === null)
  162. return false;
  163. let count : number = 0;
  164. let faecher : List<GEAbschlussFach> = abschluss_faecher.faecher;
  165. for (let fach of faecher) {
  166. if (fach === null)
  167. continue;
  168. let kursart : GELeistungsdifferenzierteKursart = GELeistungsdifferenzierteKursart.from(fach.kursart);
  169. if ((kursart as unknown === GELeistungsdifferenzierteKursart.E as unknown) || (kursart as unknown === GELeistungsdifferenzierteKursart.G as unknown))
  170. count++;
  171. }
  172. return (count === 4);
  173. }
  174. /**
  175. * Prüft, ob Duplikate bei den Kürzeln der Fächer vorkommen. Dies darf zur korrekten
  176. * Ausführung des Abschlussalgorithmus nicht vorkommen.
  177. *
  178. * @param abschluss_faecher die Abschlussfächer
  179. *
  180. * @return true, falls keine Duplikate vorkommen, sonst false
  181. */
  182. public static pruefeKuerzelDuplikate(abschluss_faecher : GEAbschlussFaecher) : boolean {
  183. if (abschluss_faecher.faecher === null)
  184. return true;
  185. let kuerzel : HashSet<String> = new HashSet();
  186. let faecher : List<GEAbschlussFach> = abschluss_faecher.faecher;
  187. for (let fach of faecher) {
  188. if ((fach === null) || (fach.kuerzel === null))
  189. continue;
  190. if (!kuerzel.add(fach.kuerzel))
  191. return false;
  192. }
  193. return true;
  194. }
  195. isTranspiledInstanceOf(name : string): boolean {
  196. return ['de.nrw.schule.svws.core.abschluss.AbschlussManager'].includes(name);
  197. }
  198. }
  199. export function cast_de_nrw_schule_svws_core_abschluss_AbschlussManager(obj : unknown) : AbschlussManager {
  200. return obj as AbschlussManager;
  201. }