SprachendatenManager.ts 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. import { JavaObject, cast_java_lang_Object } from '../java/lang/JavaObject';
  2. import { JavaInteger, cast_java_lang_Integer } from '../java/lang/JavaInteger';
  3. import { Sprachbelegung, cast_de_nrw_schule_svws_core_data_Sprachbelegung } from '../core/data/Sprachbelegung';
  4. import { Sprachpruefung, cast_de_nrw_schule_svws_core_data_Sprachpruefung } from '../core/data/Sprachpruefung';
  5. import { Sprachpruefungniveau, cast_de_nrw_schule_svws_core_types_Sprachpruefungniveau } from '../core/types/Sprachpruefungniveau';
  6. import { NumberFormatException, cast_java_lang_NumberFormatException } from '../java/lang/NumberFormatException';
  7. import { JavaString, cast_java_lang_String } from '../java/lang/JavaString';
  8. import { Vector, cast_java_util_Vector } from '../java/util/Vector';
  9. import { Sprachendaten, cast_de_nrw_schule_svws_core_data_Sprachendaten } from '../core/data/Sprachendaten';
  10. import { HashSet, cast_java_util_HashSet } from '../java/util/HashSet';
  11. import { Comparator, cast_java_util_Comparator } from '../java/util/Comparator';
  12. export class SprachendatenManager extends JavaObject {
  13. public constructor() {
  14. super();
  15. }
  16. /**
  17. * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache existiert.
  18. *
  19. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  20. * @param sprache das einstellige Kürzel der Sprache
  21. *
  22. * @return true, falls eine Belegung existiert und ansonsten false
  23. */
  24. public static hatSprachbelegung(sprachendaten : Sprachendaten | null, sprache : String | null) : boolean {
  25. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject.equalsTranspiler("", (sprache))) {
  26. return false;
  27. }
  28. return SprachendatenManager.getSprachbelegung(sprachendaten, sprache) !== null;
  29. }
  30. /**
  31. * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache in der Sekundarstufe I existiert.
  32. *
  33. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  34. * @param sprache das einstellige Kürzel der Sprache
  35. *
  36. * @return true, falls eine Belegung existiert und ansonsten false
  37. */
  38. public static hatSprachbelegungInSekI(sprachendaten : Sprachendaten | null, sprache : String | null) : boolean {
  39. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject.equalsTranspiler("", (sprache))) {
  40. return false;
  41. }
  42. let belegung : Sprachbelegung | null = SprachendatenManager.getSprachbelegung(sprachendaten, sprache);
  43. if (belegung !== null && SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang) > 0) {
  44. return SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang) <= 10;
  45. }
  46. return false;
  47. }
  48. /**
  49. * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache in der Sekundarstufe I mit der angegebenen Belegungsdauer existiert.
  50. *
  51. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  52. * @param sprache das einstellige Kürzel der Sprache
  53. * @param mindestBelegdauer Zulässig sind Werte 1 bis 5 für die minimale Dauer der Sprachbelegung, damit die Sprache berücksichtigt wird.
  54. *
  55. * @return true, falls eine Belegung existiert und ansonsten false
  56. */
  57. public static hatSprachbelegungInSekIMitDauer(sprachendaten : Sprachendaten | null, sprache : String | null, mindestBelegdauer : Number | null) : boolean {
  58. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject.equalsTranspiler("", (sprache)) || mindestBelegdauer === null || mindestBelegdauer <= 0) {
  59. return false;
  60. }
  61. let belegung : Sprachbelegung | null = SprachendatenManager.getSprachbelegung(sprachendaten, sprache);
  62. if (belegung === null) {
  63. return false;
  64. }
  65. let belegtVonJahrgangNumerisch : number;
  66. let belegtBisJahrgangNumerisch : number;
  67. let letzterJahrgangSekI : number;
  68. if (belegung.belegungVonJahrgang !== null) {
  69. belegtVonJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang);
  70. belegtBisJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungBisJahrgang);
  71. letzterJahrgangSekI = 10;
  72. if (belegtVonJahrgangNumerisch === 6 || belegtVonJahrgangNumerisch === 8) {
  73. letzterJahrgangSekI = 9;
  74. }
  75. if (0 < belegtVonJahrgangNumerisch && belegtVonJahrgangNumerisch <= 10) {
  76. if (belegtBisJahrgangNumerisch === 0 || belegtBisJahrgangNumerisch > letzterJahrgangSekI) {
  77. belegtBisJahrgangNumerisch = letzterJahrgangSekI;
  78. }
  79. return ((belegtBisJahrgangNumerisch - belegtVonJahrgangNumerisch + 1) >= mindestBelegdauer);
  80. }
  81. }
  82. return false;
  83. }
  84. /**
  85. * Gibt die zu der übergebenen Sprache gehörende Sprachbelegung zurück.
  86. *
  87. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  88. * @param sprache das einstellige Kürzel der Sprache
  89. *
  90. * @return die Sprachbelegung oder null, falls keine existiert
  91. */
  92. public static getSprachbelegung(sprachendaten : Sprachendaten | null, sprache : String | null) : Sprachbelegung | null {
  93. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject.equalsTranspiler("", (sprache))) {
  94. return null;
  95. }
  96. let belegungen : Vector<Sprachbelegung> = sprachendaten.belegungen;
  97. for (let belegung of belegungen) {
  98. if (JavaObject.equalsTranspiler(sprache, (belegung.sprache))) {
  99. return belegung;
  100. }
  101. }
  102. return null;
  103. }
  104. /**
  105. * Liefert die Sprachen aus der Sprachenfolge zurück, deren Beginn im angegebenen Zeitraum liegt und die angegebene Dauer besitzt.
  106. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  107. * Bei einem Schüler der Sek-II wird auch nur die Dauer der Belegung in der Sek-I betrachtet.
  108. * Sprachprüfungen werden nicht berücksichtigt.
  109. *
  110. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  111. * @param belegungbeginnStart Es werden nur Sprachen berücksichtigt, deren Belegungsbeginn größer oder gleich dem angegebenen ASDJahrgang ist.
  112. * @param belegungbeginnEnde Es werden nur Sprachen berücksichtigt, deren Belegungsbeginn kleiner oder gleich dem angegebenen ASDJahrgang ist.
  113. * @param mindestBelegdauer Zulässig sind Werte 1 bis 5 für die minimale Dauer der Sprachbelegung, damit die Sprache berücksichtigt wird.
  114. *
  115. * @return Vector mit Sprachbelegungen, die die Kriterien erfüllen. Die Liste ist nach Belegungsbeginn aufsteigend sortiert
  116. */
  117. public static getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten : Sprachendaten | null, belegungbeginnStart : String | null, belegungbeginnEnde : String | null, mindestBelegdauer : Number | null) : Vector<Sprachbelegung> {
  118. let belegungen : Vector<Sprachbelegung> = new Vector();
  119. if (sprachendaten !== null && sprachendaten.belegungen !== null && belegungbeginnStart !== null && !JavaObject.equalsTranspiler(belegungbeginnStart, ("")) && belegungbeginnEnde !== null && !JavaObject.equalsTranspiler(belegungbeginnEnde, ("")) && mindestBelegdauer !== null && mindestBelegdauer >= 0) {
  120. let belegtVonJahrgangNumerisch : number;
  121. let belegtBisJahrgangNumerisch : number;
  122. let letzterJahrgangSekI : number;
  123. let gefundeneSprachen : HashSet<String | null> | null = new HashSet();
  124. let alleBelegungen : Vector<Sprachbelegung> = sprachendaten.belegungen;
  125. for (let belegung of alleBelegungen) {
  126. if (belegung.belegungVonJahrgang !== null) {
  127. belegtVonJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang);
  128. belegtBisJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungBisJahrgang);
  129. letzterJahrgangSekI = 10;
  130. if (belegtVonJahrgangNumerisch === 6 || belegtVonJahrgangNumerisch === 8) {
  131. letzterJahrgangSekI = 9;
  132. }
  133. if (belegtVonJahrgangNumerisch > 0 && SprachendatenManager.ASDJahrgangNumerisch(belegungbeginnStart) <= belegtVonJahrgangNumerisch && belegtVonJahrgangNumerisch <= SprachendatenManager.ASDJahrgangNumerisch(belegungbeginnEnde)) {
  134. if (belegtBisJahrgangNumerisch === 0 || belegtBisJahrgangNumerisch > letzterJahrgangSekI) {
  135. belegtBisJahrgangNumerisch = letzterJahrgangSekI;
  136. }
  137. if ((belegtBisJahrgangNumerisch - belegtVonJahrgangNumerisch + 1) >= mindestBelegdauer) {
  138. if (!gefundeneSprachen.contains(belegung.sprache)) {
  139. belegungen.add(belegung);
  140. }
  141. gefundeneSprachen.add(belegung.sprache);
  142. }
  143. }
  144. }
  145. }
  146. }
  147. if (belegungen.size() > 0) {
  148. let comparator : Comparator<Sprachbelegung> | null = { compare : (a: Sprachbelegung, b: Sprachbelegung) => JavaInteger.compare(SprachendatenManager.ASDJahrgangNumerisch(a.belegungVonJahrgang), SprachendatenManager.ASDJahrgangNumerisch(b.belegungVonJahrgang)) };
  149. belegungen.sort(comparator);
  150. }
  151. return belegungen;
  152. }
  153. /**
  154. * Prüft, ob die übergebene Sprache als eine fortgeführte Fremdsprache in der gymnasialen Oberstufe
  155. * gemäß APO-GOSt ab EF belegt werden kann. Dazu zählen alle belegten Sprachen mit mind. 2 Jahren Belegung in Sek-I
  156. * sowie Sprachen aus bestimmten Sprachprüfungen.
  157. *
  158. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  159. * @param sprache das einstellige Kürzel der Sprache
  160. *
  161. * @return true, falls die Sprache als fortgeführte Fremdsprache als EF belegt werden kann, andernfalls false
  162. */
  163. public static istFortfuehrbareSpracheInGOSt(sprachendaten : Sprachendaten | null, sprache : String | null) : boolean {
  164. if (sprachendaten === null || sprache === null || JavaObject.equalsTranspiler("", (sprache))) {
  165. return false;
  166. }
  167. if (SprachendatenManager.hatSprachbelegungInSekIMitDauer(sprachendaten, sprache, 2)) {
  168. return true;
  169. }
  170. let pruefungen : Vector<Sprachpruefung> = sprachendaten.pruefungen;
  171. if (pruefungen !== null) {
  172. for (let pruefung of pruefungen) {
  173. if (!JavaObject.equalsTranspiler(sprache, (pruefung.sprache)) && !JavaObject.equalsTranspiler(sprache, (pruefung.ersetzteSprache))) {
  174. continue;
  175. }
  176. if (pruefung.istHKUPruefung && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  177. return true;
  178. }
  179. if (pruefung.istFeststellungspruefung && (pruefung.note !== null) && (pruefung.note <= 4) && ((pruefung.kannBelegungAlsFortgefuehrteSpracheErlauben && pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) || ((pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id)))) {
  180. return true;
  181. }
  182. }
  183. }
  184. return false;
  185. }
  186. /**
  187. * Sammelt alle Sprachen, die in der GOSt als fortgeführte Sprachen belegt werden können, sei
  188. * es aufgrund einer Belegung von mindestens zwei Jahren oder aufgrund einer Sprachprüfung.
  189. *
  190. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  191. *
  192. * @return Liste alle Sprachen, die in der GOSt fortgeführt werden können.
  193. */
  194. public static getFortfuehrbareSprachenInGOSt(sprachendaten : Sprachendaten | null) : Vector<String> {
  195. let sprachen : Vector<String> = new Vector();
  196. if (sprachendaten !== null) {
  197. let belegungen : Vector<Sprachbelegung> = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 2);
  198. for (let belegung of belegungen) {
  199. sprachen.add(belegung.sprache);
  200. }
  201. let pruefungen : Vector<Sprachpruefung> = sprachendaten.pruefungen;
  202. if (pruefungen !== null) {
  203. for (let pruefung of pruefungen) {
  204. if (pruefung.istHKUPruefung && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  205. sprachen.add(pruefung.ersetzteSprache);
  206. }
  207. if (pruefung.istFeststellungspruefung && (pruefung.note !== null) && (pruefung.note <= 4) && ((pruefung.kannBelegungAlsFortgefuehrteSpracheErlauben && pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) || ((pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id)))) {
  208. sprachen.add(pruefung.ersetzteSprache);
  209. }
  210. }
  211. }
  212. }
  213. return sprachen;
  214. }
  215. /**
  216. * Prüft für den Zeitpunkt Ende Sek-I, ob eine Fremdsprache im Umfang von mindestens 4 Jahren belegt wurde.
  217. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  218. * Ist dies in der Sprachenfolge nicht der Fall, werden zusätzlich evtl. Sprachprüfungen herangezogen.
  219. *
  220. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  221. *
  222. * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
  223. */
  224. public static hatEineSpracheMitMin4JahrenDauerEndeSekI(sprachendaten : Sprachendaten | null) : boolean {
  225. if (sprachendaten === null) {
  226. return false;
  227. }
  228. let anzahlSprachen : number = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "07", 4).size();
  229. if (anzahlSprachen >= 1) {
  230. return true;
  231. }
  232. let pruefungen : Vector<Sprachpruefung> = sprachendaten.pruefungen;
  233. if (pruefungen !== null) {
  234. for (let pruefung of pruefungen) {
  235. if (pruefung.istFeststellungspruefung && (pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  236. return true;
  237. }
  238. }
  239. }
  240. return false;
  241. }
  242. /**
  243. * Prüft für den Zeitpunkt Ende Sek-I, ob eine zweite Fremdsprache im Umfang von mindestens 4 Jahren belegt wurde.
  244. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  245. * Ist dies in der Sprachenfolge nicht der Fall, werden zusätzlich evtl. Sprachprüfungen herangezogen.
  246. *
  247. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  248. *
  249. * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
  250. */
  251. public static hatZweiSprachenMitMin4JahrenDauerEndeSekI(sprachendaten : Sprachendaten | null) : boolean {
  252. if (sprachendaten === null) {
  253. return false;
  254. }
  255. let belegungen : Vector<Sprachbelegung> = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "07", 4);
  256. let anzahlSprachen : number = belegungen.size();
  257. if (anzahlSprachen >= 2) {
  258. return true;
  259. }
  260. if (anzahlSprachen === 1) {
  261. let pruefungen : Vector<Sprachpruefung> = sprachendaten.pruefungen;
  262. if (pruefungen !== null) {
  263. for (let pruefung of pruefungen) {
  264. if (pruefung.istFeststellungspruefung && (pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  265. if (!JavaObject.equalsTranspiler(belegungen.get(0).sprache, (pruefung.sprache))) {
  266. return true;
  267. }
  268. }
  269. }
  270. }
  271. }
  272. return false;
  273. }
  274. /**
  275. * Prüft für den Zeitpunkt Ende Sek-I, ob eine Fremdsprache ab Kasse 8/9 im Umfang von mindestens 2 Jahren belegt wurde.
  276. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  277. *
  278. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  279. *
  280. * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
  281. */
  282. public static hatSpracheMit2JahrenDauerEndeSekI(sprachendaten : Sprachendaten | null) : boolean {
  283. if (sprachendaten === null) {
  284. return false;
  285. }
  286. let anzahlSprachen : number = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "08", "10", 2).size();
  287. if (anzahlSprachen >= 1) {
  288. return true;
  289. }
  290. return false;
  291. }
  292. /**
  293. * Prüft, ob eine Sprachfeststellungsprüfung auf dem Niveau der Einführungsphase (EF) der GOSt vorliegt.
  294. * Nach §11 (2) APO-GOSt setzt das eine Prüfung in der gleichen Sprache am Ende der Sek-I voraus
  295. *
  296. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  297. *
  298. * @return true, falls entsprechende Sprachprüfungen vorhanden sind, andernfalls false.
  299. */
  300. public static hatSprachfeststellungspruefungAufEFNiveau(sprachendaten : Sprachendaten | null) : boolean {
  301. if (sprachendaten === null) {
  302. return false;
  303. }
  304. let pruefungen : Vector<Sprachpruefung> = sprachendaten.pruefungen;
  305. if (pruefungen !== null) {
  306. for (let pruefungS1 of pruefungen) {
  307. if (pruefungS1.istFeststellungspruefung && (pruefungS1.kannErstePflichtfremdspracheErsetzen || pruefungS1.kannZweitePflichtfremdspracheErsetzen || pruefungS1.kannWahlpflichtfremdspracheErsetzen) && (pruefungS1.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefungS1.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefungS1.note !== null) && (pruefungS1.note <= 4)) {
  308. for (let pruefungEF of pruefungen) {
  309. if (pruefungEF.istFeststellungspruefung && JavaObject.equalsTranspiler(pruefungEF.ersetzteSprache, (pruefungS1.ersetzteSprache)) && (pruefungEF.kannErstePflichtfremdspracheErsetzen || pruefungEF.kannZweitePflichtfremdspracheErsetzen || pruefungEF.kannWahlpflichtfremdspracheErsetzen) && pruefungEF.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_EF.id && (pruefungEF.note !== null) && (pruefungEF.note <= 4)) {
  310. return true;
  311. }
  312. }
  313. }
  314. }
  315. }
  316. return false;
  317. }
  318. /**
  319. * Gibt die Fremdsprache zurück, die als erste Fremdsprache der Sekundarstufe I gewertet werden kann.
  320. * Im Falle einer Sprachprüfung als erste Pflichtfremdsprache wird diese mit der als Ersatz eingetragene Fremdsprache zurückgegeben.
  321. * Ist keine Sprachprüfung als erste Pflichtfremdsprache vorhanden, so wird die als erste Sprache in der Sekundarstufe I belegt
  322. * Sprache zurückgegeben, unabhängig von deren Belegdauer.
  323. *
  324. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  325. *
  326. * @return Die erste belegte Sprache (gemäß Belegung oder Prüfung) oder null, falls keine existiert
  327. */
  328. public static getErsteSpracheInSekI(sprachendaten : Sprachendaten | null) : String | null {
  329. if (sprachendaten === null) {
  330. return null;
  331. }
  332. let pruefungen : Vector<Sprachpruefung> = sprachendaten.pruefungen;
  333. if (pruefungen !== null) {
  334. for (let pruefung of pruefungen) {
  335. if (pruefung.istFeststellungspruefung && pruefung.kannErstePflichtfremdspracheErsetzen && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  336. return pruefung.ersetzteSprache;
  337. }
  338. }
  339. }
  340. let belegungen : Vector<Sprachbelegung> = sprachendaten.belegungen;
  341. if (belegungen !== null) {
  342. let sprachbelegungen : Vector<Sprachbelegung> = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 0);
  343. if (sprachbelegungen.size() > 0) {
  344. return sprachbelegungen.get(0).sprache;
  345. }
  346. }
  347. return null;
  348. }
  349. /**
  350. * Gibt die Fremdsprache zurück, die als zweite Fremdsprache der Sekundarstufe I gewertet werden kann.
  351. * Im Falle einer Sprachprüfung als zweite Pflichtfremdsprache bzw. WP-Sprache wird diese mit der als Ersatz eingetragene Fremdsprache zurückgegeben.
  352. * Ist keine Sprachprüfung als zweite Pflichtfremdsprache bzw. WP-Sprache vorhanden, so wird die als zweite Sprache in der Sekundarstufe I belegt
  353. * Sprache zurückgegeben, unabhängig von deren Belegdauer.
  354. *
  355. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  356. *
  357. * @return Die zweite belegte Sprache (gemäß Belegung oder Prüfung) oder null, falls keine existiert
  358. */
  359. public static getZweiteSpracheInSekI(sprachendaten : Sprachendaten | null) : String | null {
  360. if (sprachendaten === null) {
  361. return null;
  362. }
  363. let pruefungErsteSprache : String | null = "";
  364. let pruefungZweiteSprache : String | null = "";
  365. let pruefungen : Vector<Sprachpruefung> = sprachendaten.pruefungen;
  366. if (pruefungen !== null) {
  367. for (let pruefung of pruefungen) {
  368. if (pruefung.istFeststellungspruefung && pruefung.kannErstePflichtfremdspracheErsetzen && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  369. pruefungErsteSprache = pruefung.ersetzteSprache;
  370. }
  371. if (pruefung.istFeststellungspruefung && (pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  372. pruefungZweiteSprache = pruefung.ersetzteSprache;
  373. }
  374. }
  375. }
  376. if (!JavaObject.equalsTranspiler(pruefungZweiteSprache, (""))) {
  377. return pruefungZweiteSprache;
  378. }
  379. let belegungen : Vector<Sprachbelegung> = sprachendaten.belegungen;
  380. if (belegungen !== null) {
  381. let sprachbelegungen : Vector<Sprachbelegung> = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 0);
  382. if (!JavaObject.equalsTranspiler(pruefungErsteSprache, (""))) {
  383. for (let sprachbelegung of sprachbelegungen) {
  384. if (!JavaObject.equalsTranspiler(sprachbelegung.sprache, (pruefungErsteSprache))) {
  385. return sprachbelegung.sprache;
  386. }
  387. }
  388. } else {
  389. if (sprachbelegungen.size() > 1) {
  390. return sprachbelegungen.get(1).sprache;
  391. }
  392. }
  393. }
  394. return null;
  395. }
  396. /**
  397. * Ermittelt, ob eine Fremdsprache ab Kasse 8/9 im Umfang von mindestens 2 Jahren belegt wurde und gibt sie zurück
  398. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  399. *
  400. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  401. *
  402. * @return Sprache, falls eine Belegung vorhanden ist, sonst null
  403. */
  404. public static getSpracheMit2JahrenDauerEndeSekI(sprachendaten : Sprachendaten | null) : String | null {
  405. if (sprachendaten === null) {
  406. return null;
  407. }
  408. let belegungen : Vector<Sprachbelegung> = sprachendaten.belegungen;
  409. if (belegungen !== null) {
  410. let sprachbelegungen : Vector<Sprachbelegung> = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "08", "10", 2);
  411. if (sprachbelegungen.size() > 0) {
  412. return sprachbelegungen.get(0).sprache;
  413. }
  414. }
  415. return null;
  416. }
  417. /**
  418. * Hilfsfunktion, die einen ASDJahrgang nach APO-SI und APO-GOSt und in einen numerischen Wert für Vergleiche umwandelt.
  419. * Dabei wird EF zu 11, Q1 zu 12 und Q2 zu 13. Die übrigen Stufen werden gemäß ihrer numerischen Stufenangaben umgewandelt.
  420. *
  421. * @param ASDJahrgang Der in den mumerischen Wert umzuwandelnde ASDJahrgang.
  422. *
  423. * @return Wert des ASDJahrgangs zwischen 5 und 13, wenn dieser nicht bestimmt werden kann, wird der Wert 0 zurückgegeben.
  424. */
  425. private static ASDJahrgangNumerisch(ASDJahrgang : String | null) : number {
  426. if (ASDJahrgang === null || JavaObject.equalsTranspiler(ASDJahrgang, (""))) {
  427. return 0;
  428. }
  429. switch (ASDJahrgang) {
  430. case "EF":
  431. return 11;
  432. case "Q1":
  433. return 12;
  434. case "Q2":
  435. return 13;
  436. default:
  437. try {
  438. return JavaInteger.parseInt(ASDJahrgang);
  439. } catch(e) {
  440. return 0;
  441. }
  442. }
  443. }
  444. isTranspiledInstanceOf(name : string): boolean {
  445. return ['de.nrw.schule.svws.core.SprachendatenManager'].includes(name);
  446. }
  447. }
  448. export function cast_de_nrw_schule_svws_core_SprachendatenManager(obj : unknown) : SprachendatenManager {
  449. return obj as SprachendatenManager;
  450. }