AbiturdatenManager.js 67 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.cast_de_nrw_schule_svws_core_abschluss_gost_AbiturdatenManager = exports.AbiturdatenManager = void 0;
  4. const JavaObject_1 = require("../../../java/lang/JavaObject");
  5. const Naturwissenschaften_1 = require("../../../core/abschluss/gost/belegpruefung/Naturwissenschaften");
  6. const SprachendatenManager_1 = require("../../../core/SprachendatenManager");
  7. const Schwerpunkt_1 = require("../../../core/abschluss/gost/belegpruefung/Schwerpunkt");
  8. const HashMap_1 = require("../../../java/util/HashMap");
  9. const KurszahlenUndWochenstunden_1 = require("../../../core/abschluss/gost/belegpruefung/KurszahlenUndWochenstunden");
  10. const GostBesondereLernleistung_1 = require("../../../core/types/gost/GostBesondereLernleistung");
  11. const GostBelegpruefungErgebnis_1 = require("../../../core/abschluss/gost/GostBelegpruefungErgebnis");
  12. const GostKursart_1 = require("../../../core/types/gost/GostKursart");
  13. const Latinum_1 = require("../../../core/abschluss/gost/belegpruefung/Latinum");
  14. const GostFachbereich_1 = require("../../../core/types/gost/GostFachbereich");
  15. const Allgemeines_1 = require("../../../core/abschluss/gost/belegpruefung/Allgemeines");
  16. const Sport_1 = require("../../../core/abschluss/gost/belegpruefung/Sport");
  17. const GostHalbjahr_1 = require("../../../core/types/gost/GostHalbjahr");
  18. const GostSchriftlichkeit_1 = require("../../../core/types/gost/GostSchriftlichkeit");
  19. const ZulaessigesFach_1 = require("../../../core/types/statkue/ZulaessigesFach");
  20. const Collections_1 = require("../../../java/util/Collections");
  21. const Vector_1 = require("../../../java/util/Vector");
  22. const GesellschaftswissenschaftenUndReligion_1 = require("../../../core/abschluss/gost/belegpruefung/GesellschaftswissenschaftenUndReligion");
  23. const AbiFaecher_1 = require("../../../core/abschluss/gost/belegpruefung/AbiFaecher");
  24. const HashSet_1 = require("../../../java/util/HashSet");
  25. const LiterarischKuenstlerisch_1 = require("../../../core/abschluss/gost/belegpruefung/LiterarischKuenstlerisch");
  26. const GostAbiturFach_1 = require("../../../core/types/gost/GostAbiturFach");
  27. const GostBelegpruefung_1 = require("../../../core/abschluss/gost/GostBelegpruefung");
  28. const GostFachManager_1 = require("../../../core/abschluss/gost/GostFachManager");
  29. const Projektkurse_1 = require("../../../core/abschluss/gost/belegpruefung/Projektkurse");
  30. const Deutsch_1 = require("../../../core/abschluss/gost/belegpruefung/Deutsch");
  31. const Fremdsprachen_1 = require("../../../core/abschluss/gost/belegpruefung/Fremdsprachen");
  32. const GostBelegpruefungErgebnisFehler_1 = require("../../../core/abschluss/gost/GostBelegpruefungErgebnisFehler");
  33. const Mathematik_1 = require("../../../core/abschluss/gost/belegpruefung/Mathematik");
  34. class AbiturdatenManager extends JavaObject_1.JavaObject {
  35. abidaten;
  36. gostFaecher;
  37. pruefungsArt;
  38. mapFachbereiche = new HashMap_1.HashMap();
  39. belegpruefungen = new Vector_1.Vector();
  40. belegpruefungsfehler = new Vector_1.Vector();
  41. belegpruefungErfolgreich = false;
  42. /**
  43. * Erstellt ein neues Manager-Objekt, welches mit den übergebenen Abiturdaten verknüpft wird.
  44. *
  45. * @param abidaten die Abiturdaten
  46. * @param gostFaecher die Fächer der Gymnasialen Oberstufe, die bei dem Abiturjahrgang zur Verfügung stehen.
  47. * @param pruefungsArt die Art der Belegpruefung (z.B. EF1 oder GESAMT)
  48. */
  49. constructor(abidaten, gostFaecher, pruefungsArt) {
  50. super();
  51. this.abidaten = abidaten;
  52. this.gostFaecher = new HashMap_1.HashMap();
  53. for (let i = 0; i < gostFaecher.size(); i++) {
  54. let fach = gostFaecher.get(i);
  55. if (fach !== null)
  56. this.gostFaecher.put(fach.id, fach);
  57. }
  58. this.pruefungsArt = pruefungsArt;
  59. this.init();
  60. }
  61. /**
  62. * Führt die Belegprüfung der Art pruefungs_art für einen Schüler durch, dessen Abiturdaten mit dem angegebenen
  63. * Manager verwaltet werden.
  64. *
  65. * @param pruefungs_art die Art der Prüfung, die durchgeführt wird
  66. *
  67. * @return eine Liste mit den durchgefuehrten Belegpruefungen
  68. */
  69. getPruefungen(pruefungs_art) {
  70. let pruefungen = new Vector_1.Vector();
  71. pruefungen.add(new Deutsch_1.Deutsch(this, pruefungs_art));
  72. let pruefungFremdsprachen = new Fremdsprachen_1.Fremdsprachen(this, pruefungs_art);
  73. pruefungen.add(pruefungFremdsprachen);
  74. pruefungen.add(new Latinum_1.Latinum(this, pruefungs_art));
  75. pruefungen.add(new LiterarischKuenstlerisch_1.LiterarischKuenstlerisch(this, pruefungs_art));
  76. pruefungen.add(new GesellschaftswissenschaftenUndReligion_1.GesellschaftswissenschaftenUndReligion(this, pruefungs_art));
  77. pruefungen.add(new Mathematik_1.Mathematik(this, pruefungs_art));
  78. let pruefungNaturwissenschaften = new Naturwissenschaften_1.Naturwissenschaften(this, pruefungs_art);
  79. pruefungen.add(pruefungNaturwissenschaften);
  80. pruefungen.add(new Sport_1.Sport(this, pruefungs_art));
  81. let pruefungProjektkurse = new Projektkurse_1.Projektkurse(this, pruefungs_art);
  82. pruefungen.add(pruefungProjektkurse);
  83. pruefungen.add(new Schwerpunkt_1.Schwerpunkt(this, pruefungs_art, pruefungFremdsprachen, pruefungNaturwissenschaften));
  84. pruefungen.add(new AbiFaecher_1.AbiFaecher(this, pruefungs_art));
  85. pruefungen.add(new KurszahlenUndWochenstunden_1.KurszahlenUndWochenstunden(this, pruefungs_art, pruefungProjektkurse));
  86. pruefungen.add(new Allgemeines_1.Allgemeines(this, pruefungs_art));
  87. return pruefungen;
  88. }
  89. /**
  90. * Initialisiert bzw. reinitialisert die Datenstrukturen, die für den schnellen Zugriff auf die Daten
  91. * eingerichtet werden.
  92. */
  93. init() {
  94. if (this.abidaten === null)
  95. return;
  96. this.initMapFachbereiche();
  97. this.belegpruefungen = this.getPruefungen(this.pruefungsArt);
  98. for (let i = 0; i < this.belegpruefungen.size(); i++) {
  99. let belegpruefung = this.belegpruefungen.get(i);
  100. belegpruefung.pruefe();
  101. }
  102. this.belegpruefungsfehler = GostBelegpruefung_1.GostBelegpruefung.getBelegungsfehlerAlle(this.belegpruefungen);
  103. this.belegpruefungErfolgreich = GostBelegpruefung_1.GostBelegpruefung.istErfolgreich(this.belegpruefungsfehler);
  104. }
  105. /**
  106. * Initialisiert bzw. reinitialisiert die Map für den schnellen Zugriff auf Fachbelegungen
  107. * anhand des Fachbereichs.
  108. */
  109. initMapFachbereiche() {
  110. this.mapFachbereiche.clear();
  111. let fachbereiche = GostFachbereich_1.GostFachbereich.values();
  112. for (let fachbereich of fachbereiche) {
  113. this.mapFachbereiche.put(fachbereich, new Vector_1.Vector());
  114. }
  115. let fachbelegungen = this.abidaten.fachbelegungen;
  116. for (let fachbelegung of fachbelegungen) {
  117. if (this.zaehleBelegung(fachbelegung) > 0) {
  118. fachbereiche = GostFachbereich_1.GostFachbereich.getBereiche(this.getFach(fachbelegung));
  119. for (let fachbereich of fachbereiche) {
  120. let listFachbelegungen = this.mapFachbereiche.get(fachbereich);
  121. if (listFachbelegungen === null)
  122. continue;
  123. listFachbelegungen.add(fachbelegung);
  124. }
  125. }
  126. }
  127. }
  128. /**
  129. * Liefert die in den Abiturdaten enthaltenen Sprachendaten.
  130. *
  131. * @return Die Sprachendaten (siehe {@link Sprachendaten})
  132. */
  133. getSprachendaten() {
  134. return this.abidaten.sprachendaten;
  135. }
  136. /**
  137. * Berechnet die Wochenstunden, welche von dem Schüler in den einzelnen
  138. * Halbjahren der gymnasialen Oberstufe für das Abitur relevant belegt wurden.
  139. *
  140. * @return ein Array mit den Wochenstunden für die sechs Halbjahre
  141. */
  142. getWochenstunden() {
  143. let stunden = [0, 0, 0, 0, 0, 0];
  144. for (let i = 0; i < 6; i++) {
  145. for (let fb of this.abidaten.fachbelegungen) {
  146. let hjb = fb.belegungen[i];
  147. if ((hjb === null) || (JavaObject_1.JavaObject.equalsTranspiler("AT", (hjb.kursartKuerzel))))
  148. continue;
  149. stunden[i] += hjb.wochenstunden;
  150. }
  151. }
  152. return stunden;
  153. }
  154. /**
  155. * Berechnet die Anzahl der anrechenbaren Kurse, welche von dem Schüler in den einzelnen
  156. * Halbjahren der gymnasialen Oberstufe für das Abitur belegt wurden.
  157. *
  158. * @return ein Array mit den anrechenbaren Kursen für die sechs Halbjahre
  159. */
  160. getAnrechenbareKurse() {
  161. let anzahl = [0, 0, 0, 0, 0, 0];
  162. let bll = GostBesondereLernleistung_1.GostBesondereLernleistung.fromKuerzel(this.abidaten.besondereLernleistung);
  163. for (let i = 0; i < 6; i++) {
  164. for (let fb of this.abidaten.fachbelegungen) {
  165. let hjb = fb.belegungen[i];
  166. if ((hjb === null) || (JavaObject_1.JavaObject.equalsTranspiler("AT", (hjb.kursartKuerzel))))
  167. continue;
  168. let kursart = GostKursart_1.GostKursart.fromKuerzel(hjb.kursartKuerzel);
  169. if ((kursart !== GostKursart_1.GostKursart.VTF) && (!((kursart === GostKursart_1.GostKursart.PJK) && (bll === GostBesondereLernleistung_1.GostBesondereLernleistung.PROJEKTKURS))))
  170. anzahl[i]++;
  171. }
  172. }
  173. return anzahl;
  174. }
  175. /**
  176. * Liefert das Fach der gymnasialen Oberstufe für die angegeben Abiturfachbelegung.
  177. *
  178. * @param belegung die Fachbelegung (siehe {@link AbiturFachbelegung})
  179. *
  180. * @return das Fach der gymnasialen Oberstufe (siehe {@link GostFach})
  181. */
  182. getFach(belegung) {
  183. if (belegung === null)
  184. return null;
  185. return this.gostFaecher.get(belegung.fachID);
  186. }
  187. /**
  188. * Prüft, ob das Faches in allen angegebenen Halbjahren belegt wurde.
  189. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  190. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  191. *
  192. * @param fachbelegung die zu prüfende Fachbelegung
  193. * @param halbjahre die zu prüfenden Halbjahre
  194. *
  195. * @return true, falls das Fach in den Halbjahren belegt wurde, sonst false
  196. */
  197. pruefeBelegung(fachbelegung, ...halbjahre) {
  198. if (fachbelegung === null)
  199. return false;
  200. if ((halbjahre === null) || (halbjahre.length === 0))
  201. return true;
  202. for (let halbjahr of halbjahre) {
  203. let belegungHalbjahr = fachbelegung.belegungen[halbjahr.id];
  204. if ((belegungHalbjahr === null) || (belegungHalbjahr.kursartKuerzel === null))
  205. return false;
  206. }
  207. return true;
  208. }
  209. /**
  210. * Bestimmt die Anzahl der Fachbelegungen, die dem Fach zugeordnet sind.
  211. * Wird keine gültige Fachbelegung übergeben, so wird 0 zurückgegeben.
  212. *
  213. * @param fachbelegung die Fachbelegung
  214. *
  215. * @return die Anzahl der Belegungen des Faches
  216. */
  217. zaehleBelegung(fachbelegung) {
  218. if (fachbelegung === null)
  219. return 0;
  220. let anzahl = 0;
  221. for (let i = 0; i < GostHalbjahr_1.GostHalbjahr.maxHalbjahre; i++) {
  222. if (fachbelegung.belegungen[i] !== null)
  223. anzahl++;
  224. }
  225. return anzahl;
  226. }
  227. /**
  228. * Zählt die Anzahl der Belegungen für die angegebenen Fachbelegungen in den angegeben Halbjahren.
  229. * Ist die Fachbelegung null, so wird 0 zurückgegeben. Wird bei einer gültigen Fachbelegung kein Halbjahr
  230. * angegeben, so wird ebenfalls 0 zurückgegeben.
  231. *
  232. * @param fachbelegungen die Fachbelegungen
  233. * @param halbjahre die Halbjahre
  234. *
  235. * @return die Anzahl der Belegungen in den Halbjahren und den Fächern
  236. */
  237. zaehleBelegungInHalbjahren(fachbelegungen, ...halbjahre) {
  238. if (fachbelegungen === null)
  239. return 0;
  240. if ((halbjahre === null) || (halbjahre.length === 0))
  241. return 0;
  242. let anzahl = 0;
  243. for (let fachbelegung of fachbelegungen)
  244. for (let halbjahr of halbjahre)
  245. if (fachbelegung.belegungen[halbjahr.id] !== null)
  246. anzahl++;
  247. return anzahl;
  248. }
  249. /**
  250. * Prüft, ob die Belegung des Faches in den angegebenen Halbjahren der angegebenen Kursart entspricht.
  251. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  252. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  253. *
  254. * @param fachbelegung die zu prüfende Fachnbelegung
  255. * @param kursart die zu prüfende Kursart
  256. * @param halbjahre die zu prüfenden Halbjahre
  257. *
  258. * @return true, falls die Schriftlichkeit in den Halbjahren gegeben ist, sonst false
  259. */
  260. pruefeBelegungMitKursart(fachbelegung, kursart, ...halbjahre) {
  261. if (fachbelegung === null)
  262. return false;
  263. if ((halbjahre === null) || (halbjahre.length === 0))
  264. return true;
  265. for (let halbjahr of halbjahre) {
  266. let belegungHalbjahr = fachbelegung.belegungen[halbjahr.id];
  267. if ((belegungHalbjahr === null) || (kursart !== GostKursart_1.GostKursart.fromKuerzel(belegungHalbjahr.kursartKuerzel)))
  268. return false;
  269. }
  270. return true;
  271. }
  272. /**
  273. * Prüft, ob eine Fachbelegung existiert, welche in den angegebenen Halbjahren der angegebenen Kursart
  274. * entspricht.
  275. * Ist keine Fachbelegung angegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen
  276. * Fachbelegung kein Halbjahr angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  277. *
  278. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  279. * @param kursart die zu prüfende Kursart
  280. * @param halbjahre die zu prüfenden Halbjahre
  281. *
  282. * @return true, falls die Schriftlichkeit in den Halbjahren gegeben ist, sonst false
  283. */
  284. pruefeBelegungExistiertMitKursart(fachbelegungen, kursart, ...halbjahre) {
  285. if ((fachbelegungen === null) || (fachbelegungen.size() <= 0))
  286. return false;
  287. if ((halbjahre === null) || (halbjahre.length === 0))
  288. return true;
  289. for (let fachbelegung of fachbelegungen) {
  290. if (this.pruefeBelegungMitKursart(fachbelegung, kursart, ...halbjahre))
  291. return true;
  292. }
  293. return false;
  294. }
  295. /**
  296. * Prüft, ob die Belegung des Faches in den angegebenen Halbjahren mindestens einmal die angegebenen Kursart hat.
  297. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  298. * angegeben, so ist die Prüfung nicht erfolgreich, da kein Halbjahr geprüft werden muss und somit die Kursart nicht
  299. * einmal existiert.
  300. *
  301. * @param fachbelegung die zu prüfende Fachnbelegung
  302. * @param kursart die zu prüfende Kursart
  303. * @param halbjahre die zu prüfenden Halbjahre
  304. *
  305. * @return true, falls die Kursart mindestens einmal in den Halbjahren gegeben ist, sonst false
  306. */
  307. pruefeBelegungHatMindestensEinmalKursart(fachbelegung, kursart, ...halbjahre) {
  308. if (fachbelegung === null)
  309. return false;
  310. if ((halbjahre === null) || (halbjahre.length === 0))
  311. return false;
  312. for (let halbjahr of halbjahre) {
  313. let belegungHalbjahr = fachbelegung.belegungen[halbjahr.id];
  314. if (belegungHalbjahr === null)
  315. continue;
  316. if (kursart === GostKursart_1.GostKursart.fromKuerzel(belegungHalbjahr.kursartKuerzel))
  317. return true;
  318. }
  319. return false;
  320. }
  321. /**
  322. * Prüft, ob die Belegung des Faches in dem angegebenen Halbjahr der angegebenen Schriftlichkeit entspricht.
  323. * Ist die Fachbelegung null, so schlägt die Prüfung fehl.
  324. *
  325. * @param fachbelegung die zu prüfende Fachnbelegung
  326. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  327. * @param halbjahr das zu prüfende Halbjahr
  328. *
  329. * @return true, falls die Schriftlichkeit in dem Halbjahr gegeben ist, sonst false
  330. */
  331. pruefeBelegungMitSchriftlichkeitEinzeln(fachbelegung, schriftlichkeit, halbjahr) {
  332. if (fachbelegung === null)
  333. return false;
  334. let belegungHalbjahr = fachbelegung.belegungen[halbjahr.id];
  335. if ((belegungHalbjahr === null) || (belegungHalbjahr.schriftlich === null) || ((schriftlichkeit !== GostSchriftlichkeit_1.GostSchriftlichkeit.BELIEBIG) && (((schriftlichkeit === GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH) && (!belegungHalbjahr.schriftlich)) || ((schriftlichkeit === GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH) && (belegungHalbjahr.schriftlich)))))
  336. return false;
  337. return true;
  338. }
  339. /**
  340. * Prüft, ob die Belegung des Faches in den angegebenen Halbjahren der angegebenen Schriftlichkeit entspricht.
  341. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  342. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  343. *
  344. * @param fachbelegung die zu prüfende Fachnbelegung
  345. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  346. * @param halbjahre die zu prüfenden Halbjahre
  347. *
  348. * @return true, falls die Schriftlichkeit in den Halbjahren gegeben ist, sonst false
  349. */
  350. pruefeBelegungMitSchriftlichkeit(fachbelegung, schriftlichkeit, ...halbjahre) {
  351. if (fachbelegung === null)
  352. return false;
  353. if ((halbjahre === null) || (halbjahre.length === 0))
  354. return true;
  355. for (let halbjahr of halbjahre)
  356. if (!this.pruefeBelegungMitSchriftlichkeitEinzeln(fachbelegung, schriftlichkeit, halbjahr))
  357. return false;
  358. return true;
  359. }
  360. /**
  361. * Prüft, ob eine Belegung des Faches in den angegebenen Halbjahren nicht der angegebenen Schriftlichkeit entspricht.
  362. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  363. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  364. *
  365. * @param fachbelegung die zu prüfende Fachnbelegung
  366. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  367. * @param halbjahre die zu prüfenden Halbjahre
  368. *
  369. * @return true, falls die Schriftlichkeit in den Halbjahren nicht gegeben ist, sonst false
  370. */
  371. pruefeBelegungErfuelltNicht(fachbelegung, schriftlichkeit, ...halbjahre) {
  372. if (fachbelegung === null)
  373. return false;
  374. if ((halbjahre === null) || (halbjahre.length === 0))
  375. return true;
  376. for (let halbjahr of halbjahre) {
  377. let belegungHalbjahr = fachbelegung.belegungen[halbjahr.id];
  378. if ((belegungHalbjahr === null) || ((schriftlichkeit !== GostSchriftlichkeit_1.GostSchriftlichkeit.BELIEBIG) && (((schriftlichkeit === GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH) && (!belegungHalbjahr.schriftlich)) || ((schriftlichkeit === GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH) && (belegungHalbjahr.schriftlich)))))
  379. return true;
  380. }
  381. return false;
  382. }
  383. /**
  384. * Prüft, ob eine Belegung des Faches in den angegebenen Halbjahren nicht der angegebenen Schriftlichkeit entspricht,
  385. * sofern es in dem Halbjahr überhaupt belegt wurde..
  386. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  387. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  388. *
  389. * @param fachbelegung die zu prüfende Fachnbelegung
  390. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  391. * @param halbjahre die zu prüfenden Halbjahre
  392. *
  393. * @return true, falls die Schriftlichkeit in den Halbjahren nicht gegeben ist, sonst false
  394. */
  395. pruefeBelegungErfuelltNichtFallsBelegt(fachbelegung, schriftlichkeit, ...halbjahre) {
  396. if (fachbelegung === null)
  397. return false;
  398. if ((halbjahre === null) || (halbjahre.length === 0))
  399. return true;
  400. for (let halbjahr of halbjahre) {
  401. let belegungHalbjahr = fachbelegung.belegungen[halbjahr.id];
  402. if (belegungHalbjahr === null)
  403. continue;
  404. let schriftlich = belegungHalbjahr.schriftlich === null ? false : belegungHalbjahr.schriftlich;
  405. if (((schriftlichkeit !== GostSchriftlichkeit_1.GostSchriftlichkeit.BELIEBIG) && (((schriftlichkeit === GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH) && (!schriftlich)) || ((schriftlichkeit === GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH) && (schriftlich)))))
  406. return true;
  407. }
  408. return false;
  409. }
  410. /**
  411. * Prüft, ob die Belegung des Faches in den angegebenen Halbjahren mindestens einmal die angegebene Schritflichkeit hat.
  412. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  413. * angegeben, so ist die Prüfung nicht erfolgreich, da kein Halbjahr geprüft werden muss und somit die Schriftlichkeit nicht
  414. * einmal existiert.
  415. *
  416. * @param fachbelegung die zu prüfende Fachbelegung
  417. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  418. * @param halbjahre die zu prüfenden Halbjahre
  419. *
  420. * @return true, falls die angegebene Schriftlichkeit mindestens einmal in den Halbjahren gegeben ist, sonst false
  421. */
  422. pruefeBelegungHatMindestensEinmalSchriftlichkeit(fachbelegung, schriftlichkeit, ...halbjahre) {
  423. if (fachbelegung === null)
  424. return false;
  425. if ((halbjahre === null) || (halbjahre.length === 0))
  426. return false;
  427. for (let halbjahr of halbjahre) {
  428. let belegungHalbjahr = fachbelegung.belegungen[halbjahr.id];
  429. if (belegungHalbjahr === null)
  430. continue;
  431. if ((schriftlichkeit.istSchriftlich === null) || (schriftlichkeit.istSchriftlich === belegungHalbjahr.schriftlich))
  432. return true;
  433. }
  434. return false;
  435. }
  436. /**
  437. * Prüft, ob eine Fachbelegung existiert, welche in den angegebenen Halbjahren mindestens einmal die angegebene
  438. * Schritflichkeit hat.
  439. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  440. * angegeben, so ist die Prüfung nicht erfolgreich, da kein Halbjahr geprüft werden muss und somit die Schriftlichkeit nicht
  441. * einmal existiert.
  442. *
  443. * @param fachbelegungen die zu prüfenden Fachbelegungen
  444. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  445. * @param halbjahre die zu prüfenden Halbjahre
  446. *
  447. * @return true, falls die angegebene Schriftlichkeit bei einer Fachbelegung mindestens einmal in den Halbjahren gegeben ist, sonst false
  448. */
  449. pruefeBelegungExistiertHatMindestensEinmalSchriftlichkeit(fachbelegungen, schriftlichkeit, ...halbjahre) {
  450. if ((fachbelegungen === null) || (fachbelegungen.size() <= 0))
  451. return false;
  452. if ((halbjahre === null) || (halbjahre.length === 0))
  453. return false;
  454. for (let fachbelegung of fachbelegungen)
  455. if (this.pruefeBelegungHatMindestensEinmalSchriftlichkeit(fachbelegung, schriftlichkeit, ...halbjahre))
  456. return true;
  457. return false;
  458. }
  459. /**
  460. * Prüft, ob die Belegung eines der angegebenen Fächer mit den angegebenen Halbjahren existiert.
  461. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  462. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  463. * In dieser Methode wird ggf. auch geprüft, ob weitere Fachbelegungen existieren, welche das gleiche
  464. * Statistik-Kürzel haben und Ersatzweise eine Halbjahres-Belegung ersetzen können. Dies ist z.B. bei bilingualen
  465. * Fächern nötig oder bei der Unterscheidung von Sport-Profilen.
  466. *
  467. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  468. * @param halbjahre die zu prüfenden Halbjahre
  469. *
  470. * @return true, falls eine Fachbelegung mit den Halbjahren existiert, sonst false
  471. */
  472. pruefeBelegungExistiert(fachbelegungen, ...halbjahre) {
  473. if (fachbelegungen === null)
  474. return false;
  475. if ((halbjahre === null) || (halbjahre.length === 0))
  476. return true;
  477. for (let fachbelegung of fachbelegungen) {
  478. let fach = this.gostFaecher.get(fachbelegung.fachID);
  479. if (fach === null)
  480. continue;
  481. let alleBelegungen = this.getFachbelegungByFachkuerzel(fach.kuerzel);
  482. if ((alleBelegungen === null) || (alleBelegungen.size() === 0))
  483. continue;
  484. let hatBelegung = true;
  485. for (let halbjahr of halbjahre) {
  486. let hatHalbjahresBelegung = false;
  487. for (let aktFachbelegung of alleBelegungen) {
  488. if (aktFachbelegung.belegungen[halbjahr.id] !== null) {
  489. hatHalbjahresBelegung = true;
  490. break;
  491. }
  492. }
  493. if (!hatHalbjahresBelegung) {
  494. hatBelegung = false;
  495. break;
  496. }
  497. }
  498. if (hatBelegung)
  499. return true;
  500. }
  501. return false;
  502. }
  503. /**
  504. * Prüft, ob die Belegung eines der angegebenen Fächer mit dem angegebenen Halbjahr existiert.
  505. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl.
  506. * In dieser Methode wird ggf. auch geprüft, ob weitere Fachbelegungen existieren, welche das gleiche
  507. * Statistik-Kürzel haben und Ersatzweise eine Halbjahres-Belegung ersetzen können. Dies ist z.B. bei bilingualen
  508. * Fächern nötig oder bei der Unterscheidung von Sport-Profilen.
  509. *
  510. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  511. * @param halbjahr das zu prüfende Halbjahr
  512. *
  513. * @return true, falls eine Fachbelegung mit dem Halbjahr existiert, sonst false
  514. */
  515. pruefeBelegungExistiertEinzeln(fachbelegungen, halbjahr) {
  516. if (fachbelegungen === null)
  517. return false;
  518. for (let fachbelegung of fachbelegungen) {
  519. let fach = this.gostFaecher.get(fachbelegung.fachID);
  520. if (fach === null)
  521. continue;
  522. let alleBelegungen = this.getFachbelegungByFachkuerzel(fach.kuerzel);
  523. if ((alleBelegungen === null) || (alleBelegungen.size() === 0))
  524. continue;
  525. for (let aktFachbelegung of alleBelegungen)
  526. if (aktFachbelegung.belegungen[halbjahr.id] !== null)
  527. return true;
  528. }
  529. return false;
  530. }
  531. /**
  532. * Prüft, ob die Belegung eines der angegebenen Fächer mit einer durchgängigen Belegung existiert,
  533. * die zumindest in der Q1 und der Q2.1 schriftlich ist.
  534. * In dieser Methode wird ggf. auch geprüft, ob weitere Fachbelegungen existieren, welche das gleiche
  535. * Statistik-Kürzel haben und Ersatzweise eine Halbjahres-Belegung ersetzen können. Dies ist bei bilingualen
  536. * Fächern nötig.
  537. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl.
  538. *
  539. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  540. *
  541. * @return true, falls eine durchgehend schriftliche Fachbelegung existiert, sonst false
  542. */
  543. pruefeBelegungExistiertDurchgehendSchriftlich(fachbelegungen) {
  544. if (fachbelegungen === null)
  545. return false;
  546. for (let fachbelegung of fachbelegungen) {
  547. let fach = this.gostFaecher.get(fachbelegung.fachID);
  548. if (fach === null)
  549. continue;
  550. let alleBelegungen = this.getFachbelegungByFachkuerzel(fach.kuerzel);
  551. if ((alleBelegungen === null) || (alleBelegungen.size() === 0))
  552. continue;
  553. let hatBelegung = true;
  554. for (let halbjahr of GostHalbjahr_1.GostHalbjahr.values()) {
  555. let hatHalbjahresBelegung = false;
  556. for (let aktFachbelegung of alleBelegungen) {
  557. if (aktFachbelegung.belegungen[halbjahr.id] !== null) {
  558. let belegungHalbjahr = aktFachbelegung.belegungen[halbjahr.id];
  559. if (((halbjahr !== GostHalbjahr_1.GostHalbjahr.Q11) && (halbjahr !== GostHalbjahr_1.GostHalbjahr.Q12) && (halbjahr !== GostHalbjahr_1.GostHalbjahr.Q21)) || ((belegungHalbjahr !== null) && (belegungHalbjahr.schriftlich !== null) && (belegungHalbjahr.schriftlich)))
  560. hatHalbjahresBelegung = true;
  561. }
  562. }
  563. if (!hatHalbjahresBelegung) {
  564. hatBelegung = false;
  565. break;
  566. }
  567. }
  568. if (hatBelegung)
  569. return true;
  570. }
  571. return false;
  572. }
  573. /**
  574. * Prüft, ob die Belegung eines der angegebenen Fächer in dem angegebenen Halbjahr der angegebenen Schriftlichkeit entspricht.
  575. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl.
  576. *
  577. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  578. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  579. * @param halbjahr das zu prüfende Halbjahr
  580. *
  581. * @return true, falls bei einer Fachbelegung die Schriftlichkeit in dem Halbjahr gegeben ist, sonst false
  582. */
  583. pruefeBelegungExistiertMitSchriftlichkeitEinzeln(fachbelegungen, schriftlichkeit, halbjahr) {
  584. if (fachbelegungen === null)
  585. return false;
  586. for (let fachbelegung of fachbelegungen) {
  587. if (this.pruefeBelegungMitSchriftlichkeitEinzeln(fachbelegung, schriftlichkeit, halbjahr))
  588. return true;
  589. }
  590. return false;
  591. }
  592. /**
  593. * Prüft, ob die Belegung eines der angegebenen Fächer in den angegebenen Halbjahren der angegebenen Schriftlichkeit entspricht.
  594. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  595. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  596. *
  597. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  598. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  599. * @param halbjahre die zu prüfenden Halbjahre
  600. *
  601. * @return true, falls bei einer Fachbelegung die Schriftlichkeit in den Halbjahren gegeben ist, sonst false
  602. */
  603. pruefeBelegungExistiertMitSchriftlichkeit(fachbelegungen, schriftlichkeit, ...halbjahre) {
  604. if (fachbelegungen === null)
  605. return false;
  606. for (let fachbelegung of fachbelegungen) {
  607. if (this.pruefeBelegungMitSchriftlichkeit(fachbelegung, schriftlichkeit, ...halbjahre))
  608. return true;
  609. }
  610. return false;
  611. }
  612. /**
  613. * Prüft, ob die Belegung eines der angegebenen Fächer in den angegebenen Halbjahren mindestens einmal die angegebene Kursart
  614. * hat. Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  615. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  616. *
  617. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  618. * @param kursart die zu prüfende Kursart
  619. * @param halbjahre die zu prüfenden Halbjahre
  620. *
  621. * @return true, falls die Kursart bei einer Fachbelegung mindestens einmal in den Halbjahren gegeben ist, sonst false
  622. */
  623. pruefeBelegungExistiertHatMindestensEinmalKursart(fachbelegungen, kursart, ...halbjahre) {
  624. if (fachbelegungen === null)
  625. return false;
  626. for (let fachbelegung of fachbelegungen) {
  627. if (this.pruefeBelegungHatMindestensEinmalKursart(fachbelegung, kursart, ...halbjahre))
  628. return true;
  629. }
  630. return false;
  631. }
  632. /**
  633. * Prüft, ob die Belegung eines der angegebenen Fächer in den angegebenen Halbjahren existiert,
  634. * bei welchem in mind. einem der Halbjahren die angebene Schriftlichkeit nicht gegeben ist.
  635. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  636. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  637. *
  638. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  639. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  640. * @param halbjahre die zu prüfenden Halbjahre
  641. *
  642. * @return true oder false (siehe oben)
  643. */
  644. pruefeBelegungExistiertErfuelltNicht(fachbelegungen, schriftlichkeit, ...halbjahre) {
  645. if (fachbelegungen === null)
  646. return false;
  647. for (let fachbelegung of fachbelegungen) {
  648. if (this.pruefeBelegungErfuelltNicht(fachbelegung, schriftlichkeit, ...halbjahre))
  649. return true;
  650. }
  651. return false;
  652. }
  653. /**
  654. * Prüft, ob die Belegung eines der angegebenen Fächer in den angegebenen Halbjahren existiert,
  655. * bei welchem in mind. einem der Halbjahren die angebene Schriftlichkeit nicht gegeben ist, sofern
  656. * das Fach überhaupt belegt wurde.
  657. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  658. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  659. *
  660. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  661. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  662. * @param halbjahre die zu prüfenden Halbjahre
  663. *
  664. * @return true oder false (siehe oben)
  665. */
  666. pruefeBelegungExistiertErfuelltNichtFallsBelegt(fachbelegungen, schriftlichkeit, ...halbjahre) {
  667. if (fachbelegungen === null)
  668. return false;
  669. for (let fachbelegung of fachbelegungen) {
  670. if (this.pruefeBelegungErfuelltNichtFallsBelegt(fachbelegung, schriftlichkeit, ...halbjahre))
  671. return true;
  672. }
  673. return false;
  674. }
  675. /**
  676. * Prüft, ob die Belegung des Faches in den angegebenen Halbjahren der angegebenen Schriftlichkeit entspricht
  677. * und das Fach durchgehend belegbar ist.
  678. * Ist die Fachbelegung null, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  679. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  680. *
  681. * @param fachbelegung die zu prüfende Fachnbelegung
  682. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  683. * @param halbjahre die zu prüfenden Halbjahre
  684. *
  685. * @return true, falls die Schriftlichkeit in den Halbjahren gegeben ist, sonst false
  686. */
  687. pruefeBelegungDurchgehendBelegbar(fachbelegung, schriftlichkeit, ...halbjahre) {
  688. if (fachbelegung === null)
  689. return false;
  690. if (!GostFachManager_1.GostFachManager.istDurchgehendBelegbarBisQ22(this.getFach(fachbelegung)))
  691. return false;
  692. return this.pruefeBelegungMitSchriftlichkeit(fachbelegung, schriftlichkeit, ...halbjahre);
  693. }
  694. /**
  695. * Prüft, ob die Belegung eines der angegebenen Fächer in den angegebenen Halbjahren der angegebenen Schriftlichkeit entspricht
  696. * und das Fach durchgängig belegbar ist.
  697. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  698. * angegeben, so ist die Prüfung erfolgreich, da kein Halbjahr geprüft werden muss.
  699. *
  700. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  701. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  702. * @param halbjahre die zu prüfenden Halbjahre
  703. *
  704. * @return true, falls bei einer Fachbelegung die Schriftlichkeit in den Halbjahren gegeben ist, sonst false
  705. */
  706. pruefeBelegungDurchgehendBelegbarExistiert(fachbelegungen, schriftlichkeit, ...halbjahre) {
  707. if (fachbelegungen === null)
  708. return false;
  709. for (let fachbelegung of fachbelegungen) {
  710. if (this.pruefeBelegungDurchgehendBelegbar(fachbelegung, schriftlichkeit, ...halbjahre))
  711. return true;
  712. }
  713. return false;
  714. }
  715. /**
  716. * Prüft, ob die Belegung eines der angegebenen Fächer in den angegebenen Halbjahren der angegebenen Schriftlichkeit entspricht
  717. * und das Fach durchgängig belegt ist.
  718. * Ist keine Fachbelegung gegeben, so schlägt die Prüfung fehl. Wird bei einer gültigen Fachbelegung kein Halbjahr
  719. * angegeben, so ist die Prüfung erfolgreich sofern das Fach durchgängig belegt wurde, da kein Halbjahr auf die
  720. * Schriftlichkeit geprüft werden muss.
  721. *
  722. * @param fachbelegungen die zu prüfenden Fachnbelegungen
  723. * @param schriftlichkeit die zu prüfende Schriftlichkeit
  724. * @param halbjahre die zu prüfenden Halbjahre
  725. *
  726. * @return true, falls bei eine Fachbelegung durchgängig belegt wurde und die Schriftlichkeit in den Halbjahren gegeben ist, sonst false
  727. */
  728. pruefeBelegungDurchgehendBelegtExistiert(fachbelegungen, schriftlichkeit, ...halbjahre) {
  729. if (fachbelegungen === null)
  730. return false;
  731. for (let fachbelegung of fachbelegungen) {
  732. if (this.pruefeBelegung(fachbelegung, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))
  733. if (this.pruefeBelegungMitSchriftlichkeit(fachbelegung, schriftlichkeit, ...halbjahre))
  734. return true;
  735. }
  736. return false;
  737. }
  738. /**
  739. * Prüft, ob die Fachbelegung in mindestens einem der Halbjahre die angegebene Kursart aufweist.
  740. * Existiert die Fachbelegung nicht (null), so kommt die Kursart auch nicht vor.
  741. *
  742. * @param fachbelegung die Fachbelegung
  743. * @param kursart die Kursart
  744. *
  745. * @return true, falls mindestens einmal die Kursart belegt wurde, sonst false
  746. */
  747. pruefeAufKursart(fachbelegung, kursart) {
  748. if (fachbelegung === null)
  749. return false;
  750. for (let belegunghalbjahr of fachbelegung.belegungen) {
  751. if ((belegunghalbjahr !== null) && GostKursart_1.GostKursart.fromKuerzel(belegunghalbjahr.kursartKuerzel) === kursart)
  752. return true;
  753. }
  754. return false;
  755. }
  756. /**
  757. * Filtert die Fachbelegungen und gibt nur die Fachbelegungen zurück, bei denen die
  758. * Kursart existiert.
  759. * Wird keine Fachbelegung übergeben (null oder leere Liste), so kommt auch keine
  760. * Belegung mit der Kursart vor.
  761. *
  762. * @param fachbelegungen die Fachbelegungen
  763. * @param kursart die Kursart
  764. *
  765. * @return eine Liste mit den Fachbelegungen, welche die kursart haben
  766. */
  767. filterBelegungKursartExistiert(fachbelegungen, kursart) {
  768. let result = new Vector_1.Vector();
  769. if ((fachbelegungen === null) || (fachbelegungen.size() <= 0))
  770. return result;
  771. for (let fachbelegung of fachbelegungen) {
  772. if (this.pruefeAufKursart(fachbelegung, kursart))
  773. result.add(fachbelegung);
  774. }
  775. return result;
  776. }
  777. /**
  778. * Prüft, ob die Fachbelegung eine durchgängige Belegung hat. Zusatzkurse können nicht für eine
  779. * durchgängige Belegung zählen.
  780. *
  781. * @param fachbelegung die zu prüfende Fachbelegung
  782. *
  783. * @return true, wenn die Belegung durchgängig ist.
  784. */
  785. pruefeDurchgaengigkeit(fachbelegung) {
  786. if ((fachbelegung === null) || (this.pruefeAufKursart(fachbelegung, GostKursart_1.GostKursart.ZK)))
  787. return false;
  788. return this.pruefeBelegung(fachbelegung, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22);
  789. }
  790. /**
  791. * Zählt die Fachbelegungen, welche eine durchgängige Belegung aufweisen. Zusatzkurse zählen
  792. * nicht für eine durchgängige Belegung.
  793. * In dieser Methode wird ggf. auch geprüft, ob weitere Fachbelegungen existieren, welche das gleiche
  794. * Statistik-Kürzel haben und Ersatzweise eine Halbjahres-Belegung ersetzen können. Dies ist bei bilingualen
  795. * Fächern nötig.
  796. *
  797. * @param fachbelegungen die zu überprüfenden Fachbelegungen
  798. *
  799. * @return die Anzahl der durchgängigen Belegungen
  800. */
  801. zaehleDurchgaengigeBelegungen(fachbelegungen) {
  802. if (fachbelegungen === null)
  803. return 0;
  804. let anzahl = 0;
  805. for (let fachbelegung of fachbelegungen) {
  806. let fach = this.gostFaecher.get(fachbelegung.fachID);
  807. if (fach === null)
  808. continue;
  809. if (fachbelegung.belegungen[GostHalbjahr_1.GostHalbjahr.EF1.id] === null)
  810. continue;
  811. let alleBelegungen = this.getFachbelegungByFachkuerzel(fach.kuerzel);
  812. if ((alleBelegungen === null) || (alleBelegungen.size() === 0))
  813. continue;
  814. let hatBelegung = true;
  815. let halbjahre = [GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22];
  816. for (let halbjahr of halbjahre) {
  817. let hatHalbjahresBelegung = false;
  818. for (let aktFachbelegung of alleBelegungen) {
  819. if (aktFachbelegung.belegungen[halbjahr.id] !== null) {
  820. hatHalbjahresBelegung = true;
  821. break;
  822. }
  823. }
  824. if (!hatHalbjahresBelegung) {
  825. hatBelegung = false;
  826. break;
  827. }
  828. }
  829. if (hatBelegung)
  830. anzahl++;
  831. }
  832. return anzahl;
  833. }
  834. /**
  835. * Prüft, ob die Fachbelegung eine durchgängige Belegung hat und prüft die Schriftlichkeit
  836. * in der Qualifikationsphase. Ein Fach in der Qualifikationsphase gilt als Schriftlich belegt,
  837. * sofern die ersten 3 Halbjahre der Qualifikationsphase schriftlich belegt wurden.
  838. * - Zusatzkurse können nicht für eine durchgängige Belegung zählen.
  839. *
  840. * @param fachbelegung die zu prüfende die zu überprüfenden Fachbelegung
  841. *
  842. * @return true, wenn die Belegung durchgängig ist und die Schriftlichkeit den Anforderungen genügt.
  843. */
  844. pruefeDurchgaengigkeitSchriftlich(fachbelegung) {
  845. if (!this.pruefeDurchgaengigkeit(fachbelegung))
  846. return false;
  847. return this.pruefeBelegungMitSchriftlichkeit(fachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21);
  848. }
  849. /**
  850. * Prüft, ob unter den angegebenen Fachbelegungen ein Fach als Abiturfach von einem der angegebenen Arten
  851. * gewählt wurde. Wird keine Art angebeben, so wird jede Fachbelegung akzeptiert und true zurückgegeben.
  852. *
  853. * @param fachbelegungen die Fachbelegungen
  854. * @param arten die Arten der Abiturfächer
  855. *
  856. * @return true, falls unter den Fachbelegungen mindestens ein Fach als Abiturfach von einem der
  857. * angegebenen Arten gewählt wurde und false sonst
  858. */
  859. pruefeExistiertAbiFach(fachbelegungen, ...arten) {
  860. if ((arten === null) || (arten.length === 0))
  861. return true;
  862. if (fachbelegungen === null)
  863. return false;
  864. for (let fachbelegung of fachbelegungen)
  865. for (let art of arten) {
  866. let abiturFach = GostAbiturFach_1.GostAbiturFach.fromID(fachbelegung.abiturFach);
  867. if (abiturFach === art)
  868. return true;
  869. }
  870. return false;
  871. }
  872. /**
  873. * Prüft anhand des Statistik-Kürzels, ob in dem angegebenen Halbjahr eine doppelte Fachbelegung
  874. * vorliegt oder nicht. Bei den Fremdsprachen werden nur unterschiedliche Fremdsprachen in einem Halbjahr
  875. * akzeptiert und es dürfen mehrere Vertiefungsfächer (VX) in einem Halbjahr vorkommen.
  876. *
  877. * @param halbjahr das zu prüfende Halbjahr
  878. *
  879. * @return true, falls eine doppelte Belegung vorliegt, sonst false
  880. */
  881. hatDoppelteFachbelegungInHalbjahr(halbjahr) {
  882. let set = new HashSet_1.HashSet();
  883. let fachbelegungen = this.abidaten.fachbelegungen;
  884. for (let fb of fachbelegungen) {
  885. let fach = this.getFach(fb);
  886. if (fach === null)
  887. continue;
  888. let belegung = this.getBelegungHalbjahr(fb, halbjahr, GostSchriftlichkeit_1.GostSchriftlichkeit.BELIEBIG);
  889. if (belegung === null)
  890. continue;
  891. let kuerzel = GostFachManager_1.GostFachManager.getFremdsprache(fach);
  892. if (kuerzel === null)
  893. kuerzel = fach.kuerzel === null ? "" : fach.kuerzel;
  894. if (!set.add(kuerzel) && (!JavaObject_1.JavaObject.equalsTranspiler("VX", (kuerzel))))
  895. return true;
  896. }
  897. return false;
  898. }
  899. /**
  900. * Prüft anhand des Statistik-Kürzels, ob in einem der angegebenen Halbjahre eine doppelte Fachbelegung
  901. * vorliegt oder nicht. Bei den Fremdsprachen werden nur unterschiedliche Fremdsprachen in einem Halbjahr
  902. * akzeptiert und es dürfen mehrere Vertiefungsfächer (VX) in einem Halbjahr vorkommen.
  903. *
  904. * @param halbjahre die zu prüfenden Halbjahre
  905. *
  906. * @return true, falls eine doppelte Belegung vorliegt, sonst false
  907. */
  908. hatDoppelteFachbelegung(...halbjahre) {
  909. if ((halbjahre === null) || (halbjahre.length === 0))
  910. return false;
  911. for (let halbjahr of halbjahre)
  912. if (this.hatDoppelteFachbelegungInHalbjahr(halbjahr))
  913. return true;
  914. return false;
  915. }
  916. /**
  917. * Gibt zurück, ob der Projektkurs als besondere Lernleistung verwendet wird.
  918. *
  919. * @return true, falls der Projektkurs als besondere Lernleistung verwendet wird
  920. */
  921. istProjektKursBesondereLernleistung() {
  922. return (GostBesondereLernleistung_1.GostBesondereLernleistung.PROJEKTKURS.is(this.abidaten.besondereLernleistung));
  923. }
  924. /**
  925. * Bestimmt die erste Fachbelegung mit dem angegebenen Statistik-Kürzel
  926. *
  927. * @param kuerzel das Kürzel des Faches, kann null sein (dann wird auch null zurückgegeben)
  928. *
  929. * @return die Fachbelegung oder null, falls keine vorhanden ist
  930. */
  931. getFachbelegungByKuerzel(kuerzel) {
  932. if ((kuerzel === null) || (JavaObject_1.JavaObject.equalsTranspiler("", (kuerzel))))
  933. return null;
  934. let fachbelegungen = this.abidaten.fachbelegungen;
  935. for (let fb of fachbelegungen) {
  936. let fach = this.getFach(fb);
  937. if ((fach !== null) && (JavaObject_1.JavaObject.equalsTranspiler(kuerzel, (fach.kuerzel))))
  938. return fb;
  939. }
  940. return null;
  941. }
  942. /**
  943. * Liefert alle Fachbelegungen der Abiturdaten, welche den angegebenen Fachbereichen zuzuordnen sind.
  944. * Wird kein Fachbereich angegeben, so werden alle Fachbelegungen der Abiturdaten zurückgegeben.
  945. *
  946. * @param fachbereiche die Fachbereiche
  947. *
  948. * @return eine Liste der Fachbelegungen aus den Fachbereichen
  949. */
  950. getFachbelegungen(...fachbereiche) {
  951. if ((fachbereiche === null) || (fachbereiche.length === 0))
  952. return this.abidaten.fachbelegungen;
  953. let result = new Vector_1.Vector();
  954. for (let fachbereich of fachbereiche) {
  955. let fachbelegungen = this.mapFachbereiche.get(fachbereich);
  956. if (fachbelegungen === null)
  957. continue;
  958. result.addAll(fachbelegungen);
  959. }
  960. return result;
  961. }
  962. /**
  963. * Liefert alle Fachbelegungen, die bilingual unterrichtet wurden.
  964. *
  965. * @return eine Liste der Fachbelegungen
  966. */
  967. getFachbelegungenBilingual() {
  968. let result = new Vector_1.Vector();
  969. let fachbelegungen = this.abidaten.fachbelegungen;
  970. for (let fb of fachbelegungen) {
  971. if (this.zaehleBelegung(fb) <= 0)
  972. continue;
  973. let fach = this.getFach(fb);
  974. if ((fach !== null) && (!GostFachbereich_1.GostFachbereich.FREMDSPRACHE.hat(fach)) && (!GostFachbereich_1.GostFachbereich.DEUTSCH.hat(fach)) && (fach.biliSprache !== null) && (!JavaObject_1.JavaObject.equalsTranspiler("D", (fach.biliSprache))))
  975. result.add(fb);
  976. }
  977. return result;
  978. }
  979. /**
  980. * Filtert die Fachbelegungen auf neu einsetzende Fremdsprachen.
  981. *
  982. * @param fachbelegungen die zu filternden Fachbelegungen
  983. *
  984. * @return die gefilterten Fachbelegungen
  985. */
  986. filterFremdspracheNeuEinsetzend(fachbelegungen) {
  987. if (fachbelegungen === null)
  988. return Collections_1.Collections.emptyList();
  989. let result = new Vector_1.Vector();
  990. for (let fb of fachbelegungen) {
  991. let fach = this.getFach(fb);
  992. if ((fach !== null) && fach.istFremdsprache && fach.istFremdSpracheNeuEinsetzend)
  993. result.add(fb);
  994. }
  995. return result;
  996. }
  997. /**
  998. * Filtert die Fachbelegungen auf fortgeführte Fremdsprachen.
  999. *
  1000. * @param fachbelegungen die zu filternden Fachbelegungen
  1001. *
  1002. * @return die gefilterten Fachbelegungen
  1003. */
  1004. filterFremdspracheFortgefuehrt(fachbelegungen) {
  1005. if (fachbelegungen === null)
  1006. return Collections_1.Collections.emptyList();
  1007. let result = new Vector_1.Vector();
  1008. for (let fb of fachbelegungen) {
  1009. let fach = this.getFach(fb);
  1010. if ((fach !== null) && fach.istFremdsprache && !fach.istFremdSpracheNeuEinsetzend)
  1011. result.add(fb);
  1012. }
  1013. return result;
  1014. }
  1015. /**
  1016. * Filtert die Fachbelegungen danach, ob sie durchgehend belegbar sind
  1017. *
  1018. * @param fachbelegungen die zu filternden Fachbelegungen
  1019. *
  1020. * @return die gefilterten Fachbelegungen
  1021. */
  1022. filterDurchgehendBelegbar(fachbelegungen) {
  1023. let result = new Vector_1.Vector();
  1024. if (fachbelegungen === null)
  1025. return result;
  1026. for (let fb of fachbelegungen) {
  1027. let fach = this.getFach(fb);
  1028. if (GostFachManager_1.GostFachManager.istDurchgehendBelegbarBisQ22(fach))
  1029. result.add(fb);
  1030. }
  1031. return result;
  1032. }
  1033. /**
  1034. * Filtert die Fachbelegungen. Es werden nur Fachbelegungen behalten, die in den angegebenen Halbjahren eine Belegung aufweisen.
  1035. * Wird kein Halbjahr angegeben, so wird nichts gefiltert, da kein Halbjahr geprüft werden muss.
  1036. *
  1037. * @param fachbelegungen die zu filternden Fachbelegungen
  1038. * @param halbjahre die Halbjahre, die belegt sein müssen
  1039. *
  1040. * @return die gefilterten Fachbelegungen
  1041. */
  1042. filterBelegungen(fachbelegungen, ...halbjahre) {
  1043. if (fachbelegungen === null)
  1044. return Collections_1.Collections.emptyList();
  1045. let result = new Vector_1.Vector();
  1046. for (let fb of fachbelegungen) {
  1047. if (this.pruefeBelegung(fb, ...halbjahre))
  1048. result.add(fb);
  1049. }
  1050. return result;
  1051. }
  1052. /**
  1053. * Diese Methode zählt die Anzahl der angegebenen Fachbelegungen, welche in allen
  1054. * Halbjahren belegt sind. Dabei werden Fachbelegungen, welche dem gleichem Statistik-Fach
  1055. * zuzuordnen sind zusammengefasst. Dies ist bei der Abwahl von bilingualen Sachfächern
  1056. * relevant.
  1057. *
  1058. * @param fachbelegungen die zu zählenden Fachbelegungen
  1059. *
  1060. * @return die Anzahl der Fachbelegungen
  1061. */
  1062. zaehleBelegungenDurchgaengig(fachbelegungen) {
  1063. if (fachbelegungen === null)
  1064. return 0;
  1065. let faecher = new HashSet_1.HashSet();
  1066. for (let fb of fachbelegungen) {
  1067. let fach = this.gostFaecher.get(fb.fachID);
  1068. if (fach === null)
  1069. continue;
  1070. let zulFach = ZulaessigesFach_1.ZulaessigesFach.getByKuerzelASD(fach.kuerzel);
  1071. if (zulFach !== ZulaessigesFach_1.ZulaessigesFach.DEFAULT)
  1072. faecher.add(zulFach);
  1073. }
  1074. let count = 0;
  1075. for (let zulFach of faecher) {
  1076. let vorhanden = true;
  1077. for (let halbjahr of GostHalbjahr_1.GostHalbjahr.values()) {
  1078. let belegung_vorhanden = false;
  1079. for (let fb of fachbelegungen) {
  1080. let fbFach = this.gostFaecher.get(fb.fachID);
  1081. if (fbFach === null)
  1082. continue;
  1083. let fbZulFach = ZulaessigesFach_1.ZulaessigesFach.getByKuerzelASD(fbFach.kuerzel);
  1084. if ((zulFach === fbZulFach) && (fb.belegungen[halbjahr.id] !== null)) {
  1085. belegung_vorhanden = true;
  1086. break;
  1087. }
  1088. }
  1089. if (!belegung_vorhanden) {
  1090. vorhanden = false;
  1091. break;
  1092. }
  1093. }
  1094. if (vorhanden)
  1095. count++;
  1096. }
  1097. return count;
  1098. }
  1099. /**
  1100. * Diese Methode zählt die Anzahl der angegebenen Fachbelegungen, welche in allen
  1101. * Halbjahren belegt sind. Dabei werden Fachbelegungen, welche dem gleichem Statistik-Fach
  1102. * zuzuordnen sind zusammengefasst. Dies ist bei der Abwahl von bilingualen Sachfächern
  1103. * relevant.
  1104. *
  1105. * @param fachbelegungen die zu zählenden Fachbelegungen
  1106. *
  1107. * @return die Anzahl der Fachbelegungen
  1108. */
  1109. zaehleBelegungenDurchgaengigSchriftlichInQPhase(fachbelegungen) {
  1110. if (fachbelegungen === null)
  1111. return 0;
  1112. let faecher = new HashSet_1.HashSet();
  1113. for (let fb of fachbelegungen) {
  1114. let fach = this.gostFaecher.get(fb.fachID);
  1115. if (fach === null)
  1116. continue;
  1117. let zulFach = ZulaessigesFach_1.ZulaessigesFach.getByKuerzelASD(fach.kuerzel);
  1118. if (zulFach !== ZulaessigesFach_1.ZulaessigesFach.DEFAULT)
  1119. faecher.add(zulFach);
  1120. }
  1121. let count = 0;
  1122. for (let zulFach of faecher) {
  1123. let vorhanden = true;
  1124. for (let halbjahr of GostHalbjahr_1.GostHalbjahr.values()) {
  1125. let belegung_vorhanden = false;
  1126. for (let fb of fachbelegungen) {
  1127. let fbFach = this.gostFaecher.get(fb.fachID);
  1128. if (fbFach === null)
  1129. continue;
  1130. let fbZulFach = ZulaessigesFach_1.ZulaessigesFach.getByKuerzelASD(fbFach.kuerzel);
  1131. if (zulFach === fbZulFach) {
  1132. let belegung = fb.belegungen[halbjahr.id];
  1133. if (belegung !== null) {
  1134. let istSchriftlichkeitOK = true;
  1135. if (((halbjahr === GostHalbjahr_1.GostHalbjahr.Q11) || (halbjahr === GostHalbjahr_1.GostHalbjahr.Q12) || (halbjahr === GostHalbjahr_1.GostHalbjahr.Q21)) && ((belegung.schriftlich === null) || (!belegung.schriftlich)))
  1136. istSchriftlichkeitOK = false;
  1137. if (istSchriftlichkeitOK) {
  1138. belegung_vorhanden = true;
  1139. break;
  1140. }
  1141. }
  1142. }
  1143. }
  1144. if (!belegung_vorhanden) {
  1145. vorhanden = false;
  1146. break;
  1147. }
  1148. }
  1149. if (vorhanden)
  1150. count++;
  1151. }
  1152. return count;
  1153. }
  1154. /**
  1155. * Filtert die Fachbelegungen. Es werden nur Belegungen behalten, die in den angegebenen Halbjahren die geforderte Schriftlichkeit aufweisen.
  1156. * Wird kein Halbjahr angegeben, so wird nichts gefiltert, da kein Halbjahr geprüft werden muss.
  1157. *
  1158. * @param fachbelegungen die zu filternden Fachbelegungen
  1159. * @param schriftlichkeit die geforderte Schriftlichkeit
  1160. * @param halbjahre die Halbjahre, die belegt sein müssen
  1161. *
  1162. * @return die gefilterten Fachbelegungen
  1163. */
  1164. filterBelegungenMitSchriftlichkeit(fachbelegungen, schriftlichkeit, ...halbjahre) {
  1165. if (fachbelegungen === null)
  1166. return Collections_1.Collections.emptyList();
  1167. let result = new Vector_1.Vector();
  1168. for (let fb of fachbelegungen) {
  1169. if (this.pruefeBelegungMitSchriftlichkeit(fb, schriftlichkeit, ...halbjahre))
  1170. result.add(fb);
  1171. }
  1172. return result;
  1173. }
  1174. /**
  1175. * Liefert die erste Fachbelegung für den Fachbereich - sofern eine existiert
  1176. *
  1177. * @param fachbereich der Fachbereich
  1178. *
  1179. * @return die Fachbelegung oder null
  1180. */
  1181. getFachbelegung(fachbereich) {
  1182. let faecher = this.mapFachbereiche.get(fachbereich);
  1183. if ((faecher === null) || (faecher.size() === 0))
  1184. return null;
  1185. return faecher.get(0);
  1186. }
  1187. /**
  1188. * Liefert alle Fachbelegungen mit dem angegebenen Statistk-Kürzel des Faches
  1189. *
  1190. * @param kuerzel das Kürzel des Faches
  1191. *
  1192. * @return eine Liste mit den Fachbelegungen
  1193. */
  1194. getFachbelegungByFachkuerzel(kuerzel) {
  1195. let fachbelegungen = new Vector_1.Vector();
  1196. if (kuerzel === null)
  1197. return fachbelegungen;
  1198. let tmpFachbelegungen = this.abidaten.fachbelegungen;
  1199. for (let fachbelegung of tmpFachbelegungen) {
  1200. let fach = this.gostFaecher.get(fachbelegung.fachID);
  1201. if ((fach === null) || (!JavaObject_1.JavaObject.equalsTranspiler(kuerzel, (fach.kuerzel))))
  1202. continue;
  1203. fachbelegungen.add(fachbelegung);
  1204. }
  1205. return fachbelegungen;
  1206. }
  1207. /**
  1208. * Prüft, ob der Kurs in dem angegebenen Halbjahr mit der angegebenen Schriftlichkeit belegt ist
  1209. * und gibt ggf. die Belegung zurück.
  1210. *
  1211. * @param fachbelegung die Abiturfachbelegung aus welcher die Belegungsinformationen für das Halbjahr entnommen wird
  1212. * @param halbjahr das Halbjahr, in welchem die Belegung gesucht wird.
  1213. * @param schriftlich gibt an, ob das Fach schriftlich oder mündlich belegt sein muss
  1214. *
  1215. * @return die Belegungsinformationen zu dem Fach
  1216. */
  1217. getBelegungHalbjahr(fachbelegung, halbjahr, schriftlich) {
  1218. let belegung = fachbelegung.belegungen[halbjahr.id];
  1219. return ((belegung !== null) && ((schriftlich === GostSchriftlichkeit_1.GostSchriftlichkeit.BELIEBIG) || ((schriftlich === GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH) && (belegung.schriftlich)) || ((schriftlich === GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH) && (!belegung.schriftlich)))) ? belegung : null;
  1220. }
  1221. /**
  1222. * Liefert die erste Sprachbelegung - sofern eine existiert
  1223. *
  1224. * @param sprache das einstellige Kürzel der Sprache
  1225. *
  1226. * @return die Fachbelegung für die Sprache
  1227. */
  1228. getSprachbelegung(sprache) {
  1229. if (sprache === null)
  1230. return null;
  1231. let fachbelegungen = this.abidaten.fachbelegungen;
  1232. for (let fb of fachbelegungen) {
  1233. let fach = this.getFach(fb);
  1234. if ((fach === null) || (!GostFachManager_1.GostFachManager.istFremdsprachenfach(fach, sprache)))
  1235. continue;
  1236. if (JavaObject_1.JavaObject.equalsTranspiler(sprache, (GostFachManager_1.GostFachManager.getFremdsprache(fach))))
  1237. return fb;
  1238. }
  1239. return null;
  1240. }
  1241. /**
  1242. * Liefert für die übergebene Fachbelegung die Halbjahre, in denen das Fach mit einer der angebenen
  1243. * Kursarten belegt wurde. Ist keine Kursart angegeben, so werden die Halbjahre aller Belegungen
  1244. * zurückgegeben. Ist keine Fachbelegung angegeben, so wird eine leere Liste zurückgegeben.
  1245. *
  1246. * @param fachbelegung die Fachbelegung
  1247. * @param kursarten die Kursarten
  1248. *
  1249. * @return eine Liste der Halbjahre in den das Fach mit einer der Kursarten belegt wurde
  1250. */
  1251. getHalbjahreKursart(fachbelegung, ...kursarten) {
  1252. let halbjahre = new Vector_1.Vector();
  1253. if (fachbelegung !== null) {
  1254. for (let belegungHalbjahr of fachbelegung.belegungen) {
  1255. if (belegungHalbjahr === null)
  1256. continue;
  1257. let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegungHalbjahr.halbjahrKuerzel);
  1258. if (halbjahr === null)
  1259. continue;
  1260. if ((kursarten === null) || (kursarten.length === 0)) {
  1261. halbjahre.add(halbjahr);
  1262. continue;
  1263. }
  1264. for (let kursart of kursarten) {
  1265. if (JavaObject_1.JavaObject.equalsTranspiler(kursart, (GostKursart_1.GostKursart.fromKuerzel(belegungHalbjahr.kursartKuerzel)))) {
  1266. halbjahre.add(halbjahr);
  1267. break;
  1268. }
  1269. }
  1270. }
  1271. }
  1272. return halbjahre;
  1273. }
  1274. /**
  1275. * Gibt die Sprache des bilingualen Bildungsgang zurück oder null, falls keiner gewählt wurde.
  1276. *
  1277. * @return die Sprache des bilingualen Bildungsgang oder null
  1278. */
  1279. getBiligualenBildungsgang() {
  1280. return this.abidaten.bilingualeSprache;
  1281. }
  1282. /**
  1283. * Prüft bei der Sprachenfolge, ob eine laut Sprachenfolge fortgeführte
  1284. * Fremdsprache fehlerhafterweise als neu einsetzende Fremdsprache belegt wurde.
  1285. * Übergebene Fachbelegungen, die keine Fremdsprachen sind werden ignoriert.
  1286. *
  1287. * @param fremdsprachen die zu prüfenden Fachbelegungen
  1288. *
  1289. * @return true, falls eine fortgeführte Fremdsprache bei den übergebenen
  1290. * Fachbelegungen existiert, ansonsten false
  1291. */
  1292. hatFortgefuehrteFremdspracheInSprachendaten(fremdsprachen) {
  1293. if (fremdsprachen === null)
  1294. return false;
  1295. if (this.abidaten.sprachendaten === null)
  1296. return false;
  1297. for (let fs of fremdsprachen) {
  1298. let fach = this.getFach(fs);
  1299. if ((fach === null) || (!fach.istFremdsprache))
  1300. continue;
  1301. if (SprachendatenManager_1.SprachendatenManager.istFortfuehrbareSpracheInGOSt(this.abidaten.sprachendaten, GostFachManager_1.GostFachManager.getFremdsprache(fach))) {
  1302. return true;
  1303. }
  1304. }
  1305. return false;
  1306. }
  1307. /**
  1308. * Prüft bei der Sprachenfolge, ob für eine laut Sprachenfolge neu einsetzende
  1309. * Fremdsprache fehlerhafterweise ein Kurs in einer fortgeführten Fremdsprache belegt wurde.
  1310. * Übergebene Fachbelegungen, die keine Fremdsprachen sind werden ignoriert.
  1311. *
  1312. * @param fremdsprachen die zu prüfenden Fachbelegungen
  1313. *
  1314. * @return true, falls eine neu einsetzende Fremdsprache bei den übergebenen
  1315. * Fachbelegungen existiert, ansonsten false
  1316. */
  1317. hatNeuEinsetzendeFremdspracheInSprachendaten(fremdsprachen) {
  1318. if (fremdsprachen === null)
  1319. return false;
  1320. if (this.abidaten.sprachendaten === null)
  1321. return false;
  1322. for (let fs of fremdsprachen) {
  1323. let fach = this.getFach(fs);
  1324. if ((fach === null) || (!fach.istFremdsprache))
  1325. continue;
  1326. if (!SprachendatenManager_1.SprachendatenManager.istFortfuehrbareSpracheInGOSt(this.abidaten.sprachendaten, GostFachManager_1.GostFachManager.getFremdsprache(fach))) {
  1327. return true;
  1328. }
  1329. }
  1330. return false;
  1331. }
  1332. /**
  1333. * Gibt an, ob am Ende der EF eine Muttersprachenprüfung geplant bzw. erfolgt ist.
  1334. *
  1335. * @return true, falls eine Muttersprachenprüfung am Ende der EF vorliegt, sonst false
  1336. */
  1337. hatMuttersprachenPruefungEndeEF() {
  1338. return this.abidaten.muttersprachenpruefungEndeEF;
  1339. }
  1340. /**
  1341. * Gibt an, ob die zweite Fremdsprache in der Sekundarstufe manuell erfolgreich
  1342. * geprüft wurde und dort eine entsprechende Belegung existiert.
  1343. *
  1344. * @return true, falls in der Sek I eine zweite Fremdsprache belegt wurde
  1345. */
  1346. istSekIZweiteFremdspracheManuellGeprueft() {
  1347. return this.abidaten.sek1Fremdsprache2ManuellGeprueft;
  1348. }
  1349. /**
  1350. * Prüft, ob die Belegung seit der EF1 vorhanden ist. Hierbei werden
  1351. * Zusatz-, Vertiefungs- und Projektkurse auch als später einsetzend akzeptiert.
  1352. * Dies gilt auch für Literatur, instrumental- und vokalpraktische Kurse sowie
  1353. * für Religion und Philosophie.
  1354. *
  1355. * @param fachbelegung die Abiturfachbelegungen, die geprüft werden
  1356. *
  1357. * @return true, falls das Fach seit EF1 durchgängig belegt wurde oder eine der Ausnahmen zutrifft, sonsta false
  1358. */
  1359. istBelegtSeitEF(fachbelegung) {
  1360. let fach = this.getFach(fachbelegung);
  1361. if (fach === null)
  1362. return false;
  1363. if (GostFachbereich_1.GostFachbereich.LITERARISCH_KUENSTLERISCH_ERSATZ.hat(fach))
  1364. return true;
  1365. if (GostFachbereich_1.GostFachbereich.RELIGION.hat(fach))
  1366. return true;
  1367. if (JavaObject_1.JavaObject.equalsTranspiler("PL", (fach.kuerzel)))
  1368. return true;
  1369. for (let belegung of fachbelegung.belegungen) {
  1370. if (belegung === null)
  1371. continue;
  1372. let halbjahr = GostHalbjahr_1.GostHalbjahr.fromKuerzel(belegung.halbjahrKuerzel);
  1373. let kursart = GostKursart_1.GostKursart.fromKuerzel(belegung.kursartKuerzel);
  1374. if ((halbjahr === null) || (kursart === null))
  1375. continue;
  1376. if ((kursart === GostKursart_1.GostKursart.ZK) || (kursart === GostKursart_1.GostKursart.PJK) || (kursart === GostKursart_1.GostKursart.VTF))
  1377. continue;
  1378. let prevHalbjahr = halbjahr.previous();
  1379. if (prevHalbjahr === null)
  1380. continue;
  1381. if (fachbelegung.belegungen[prevHalbjahr.id] === null) {
  1382. let alleBelegungen = this.getFachbelegungByFachkuerzel(fach.kuerzel);
  1383. if ((alleBelegungen === null) || (alleBelegungen.size() <= 1))
  1384. return false;
  1385. if (!this.pruefeBelegungExistiert(alleBelegungen, prevHalbjahr))
  1386. return false;
  1387. }
  1388. }
  1389. return true;
  1390. }
  1391. /**
  1392. * Gibt das Ergebnis der Belegprüfung zurück. Dieses enthält eine Liste der Fehler, die bei der Belegprüfung
  1393. * festgestellt wurden und ob diese erfolgreich gewesen ist oder nicht.
  1394. *
  1395. * @return das Ergebnis der Belegprüfung
  1396. */
  1397. getBelegpruefungErgebnis() {
  1398. let ergebnis = new GostBelegpruefungErgebnis_1.GostBelegpruefungErgebnis();
  1399. ergebnis.erfolgreich = this.belegpruefungErfolgreich;
  1400. for (let i = 0; i < this.belegpruefungsfehler.size(); i++) {
  1401. let fehler = this.belegpruefungsfehler.get(i);
  1402. ergebnis.fehlercodes.add(new GostBelegpruefungErgebnisFehler_1.GostBelegpruefungErgebnisFehler(fehler, this.pruefungsArt));
  1403. }
  1404. return ergebnis;
  1405. }
  1406. isTranspiledInstanceOf(name) {
  1407. return ['de.nrw.schule.svws.core.abschluss.gost.AbiturdatenManager'].includes(name);
  1408. }
  1409. }
  1410. exports.AbiturdatenManager = AbiturdatenManager;
  1411. function cast_de_nrw_schule_svws_core_abschluss_gost_AbiturdatenManager(obj) {
  1412. return obj;
  1413. }
  1414. exports.cast_de_nrw_schule_svws_core_abschluss_gost_AbiturdatenManager = cast_de_nrw_schule_svws_core_abschluss_gost_AbiturdatenManager;
  1415. //# sourceMappingURL=AbiturdatenManager.js.map