Noten.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <!--
  2. Allgemeine Notentabelle für Berufskollegs, die z.B. die etwas langtextigen
  3. Lernfeldfächer unterstützt oder verschiedene Abschlussnoten.
  4. Folgende Attribute werden unterstützt:
  5. lernfeld: Sorgt dafür, dass die Klasse `fach-bezeichnung` nicht gesetzt wird und
  6. Fächer dementsprechend nicht eingerückt werden (nur Lernfeldfächer)
  7. true|false Standardwert false
  8. noten: Hier können Abschnittsnoten oder Abschlussnoten gesetzt werden, z.B.
  9. hj.noten oder s.bk_abschluss_faecher oder s.fhr_abschluss_faecher
  10. Muss gesetzt werden
  11. fachGliederungen: sollten mitgegeben werden, wenn die für verschiedene Bildungsgänge
  12. geänderten Werte berücksichtigt werden sollen, z.B. andere Bezeichnungen
  13. in den verschiedenen Bildungsgängen
  14. ger: Wenn ein Referenzniveau für die Fremdsprachen angegeben werden soll
  15. true|false, Standardwert false,
  16. fachklasse: muss mitgegeben werden, wenn aus der Fachklassen.json Datei der Standard-
  17. Wert gelesen werden soll. Ansonsten über Lernentw festlegen, was eigetragen wird
  18. faechergruppenIds: legt fest, welche Fächergruppen gezogen werden sollen. Standartwert ist
  19. ein leerer Array, d.h. alle Fächergruppen werden gezogen. Ansonsten können
  20. nur bestimmte festgelegt werden z.B. [10, 20, 30]
  21. fhrSternchen: Legt fest, ob die für die FHR relevanten Fächer ein Sternchen
  22. bekommen. Standardwert ist false
  23. gruppenbezeichnungNeu: Legt für eine GruppenID eine neue Gruppenbezeichnung fest
  24. Es wird ein Objekt erwartet, z.B. {40: 'Fachpraktische Prüfung'}
  25. berufsbezogenZuerst: Diese Einstellung legt fest, dass die gen. Fächer zuerst auf
  26. dem Zeugnis als Fächergruppe erscheinen wie in der BASS vorgegeben.
  27. -->
  28. <table class="table-noten">
  29. {#each faechergruppen() as [gruppen_id, gruppenFaecher]}
  30. <tr>
  31. <td class="fachgruppe-margin">
  32. <b>{gruppenbezeichnung(gruppen_id)}</b>
  33. </td>
  34. </tr>
  35. {#each lernbereicheUndFaecher(gruppenFaecher) as [lernbereich, faecher]}
  36. {#if lernbereich != faecher[0].fach.Zeugnisbez}
  37. <tr><td colspan="2" class="{lernfeld ? '' : 'fach-bezeichnung'}">{lernbereich}</td></tr>
  38. {/if}
  39. {#each faecher as f (f.ID)}
  40. {#if f.fach.AufZeugnis === '+'}
  41. <tr>
  42. <td class="{lernfeld ? '' : 'fach-bezeichnung'} {lernbereich != faecher[0].fach.Zeugnisbez ? 'lernfeld-lernbereich' : ''}">
  43. {#if f.fach.Zeugnisbez.includes("Projekt")}
  44. <!-- Funktioniert nicht mit Abschlussnoten, da diese keine Spalte `Lernentw` haben -->
  45. {f.Lernentw}
  46. {:else}
  47. <!-- Die Zeugnisbezeichnung hat bei gesetzten fachGliederungen einen anderen Namen... -->
  48. {f.fach.ZeugnisBez || f.fach.Zeugnisbez}
  49. <!-- Ist ger gesetzt, unter Lernentw nach Eintrag schauen. Wenn dort nichts steht,
  50. in der Fachklassen.json nach Einträgen für Fremdsprache und Fach_ID suchen
  51. Mit der Fussnote 1 muss natürlich auch tatsächlich eine Fussnote zum GER existieren … -->
  52. {#if ger && f.fach.IstSprache === '+'}
  53. {fremdsprache(f, fachklasse)}<sup>1</sup>
  54. {/if}
  55. <!-- Die für die FHR Durchschnittsnote einbezogenen Noten bekommen in
  56. den FS-Zeugnissen ein Sternchen -->
  57. {#if fhrSternchen && f.fach.GewichtungFHR > 0}
  58. <sup>*</sup>
  59. {/if}
  60. {/if}
  61. </td>
  62. <!-- Entweder Abschlussnote, wenn gesetzt oder Abschnittsnote oder nix -->
  63. {#if f.NoteAbschluss && f.NoteAbschluss.startsWith('E') || f.NotenKrz && f.NotenKrz.startsWith('E')}
  64. <td class="td-fach-note"><span class="e-note">{note(f.NoteAbschluss) || note(f.NotenKrz)}</span></td>
  65. {:else}
  66. <td class="td-fach-note"><span>{note(f.NoteAbschluss) || note(f.NotenKrz) || '–––––'}</span></td>
  67. {/if}
  68. </tr>
  69. {/if}
  70. {/each}
  71. {/each}
  72. <tr>
  73. </tr>
  74. {/each}
  75. </table>
  76. <script>
  77. import { gruppenIds } from './gruppenIDs'
  78. import { note, fremdsprache, groupBy } from '../helfer'
  79. export let lernfeld
  80. export let ger = false
  81. export let faechergruppenIds = []
  82. export let noten, fachGliederungen, fachklasse
  83. export let fhrSternchen, gruppenbezeichnungNeu
  84. export let berufsbezogenZuerst = true
  85. Object.assign(gruppenIds, gruppenbezeichnungNeu)
  86. const faechergruppen = () => {
  87. // noten werden im jeweiligen Dokument über das *noten*-Attribut mitgegeben.
  88. // z.B. die Abschnittsnote oder die Noten aus *s.bk_abschluss_faecher* und co.
  89. // Nutzer über Konsole auf Änderungen in den Fächern hinweisen
  90. if (fachGliederungen && fachGliederungen.length > 0) console.log('Es wurden Fachgliederungswerte gesetzt: ', fachGliederungen)
  91. // suche in den fachGliederungen, ob für die jeweilige Fachklasse was besonderes festgelegt wurde
  92. // vorausgesetzt, fachGliederungen wurde mitgegeben
  93. const faecher = fachGliederungen
  94. ? noten.map(f => {return {...f, fach: Object.assign(f.fach, fachGliederungen.find(fg => fg.Fach_ID === f.Fach_ID))}})
  95. : noten
  96. // nun alle Fächer rauswerfen, die nicht in den FaechergruppenIds zugeordnet sind, z.B. Abschlussarbeiten, Projekte etc.
  97. const faecherBereinigt = faechergruppenIds.length === 0
  98. ? faecher
  99. : faecher.filter(f => faechergruppenIds.find(id => f.fach.Fachgruppe_ID === id))
  100. // erstmal alle Fächer sortieren in der passenden Reihenfolge,
  101. // dann nach Fachgruppe gruppieren
  102. const sortiert = faecherBereinigt.sort((a, b) => a.fach.SortierungS2 < b.fach.SortierungS2 ? 1 : -1)
  103. let gruppiert = groupBy(sortiert, 'fach.Fachgruppe_ID')
  104. // Die BK-Zeugnisse führen zuerst die berufsbezogenen Fächer auf.
  105. // D.h. Gruppen_ID 20 muss auf 0 gesetzt werden, damit es an den Anfang kommt
  106. if (berufsbezogenZuerst && gruppiert.get(20)) {
  107. gruppiert.set(0, gruppiert.get(20))
  108. gruppiert.delete(20)
  109. gruppenIds[0] = gruppenIds[20]
  110. }
  111. return [...gruppiert.entries()].sort((a,b) => a[0] > b[0])
  112. }
  113. const gruppenbezeichnung = gruppe => gruppenIds[gruppe]
  114. const lernbereicheUndFaecher = gruppenFaecher => [...groupBy(gruppenFaecher, 'fach.Bezeichnung').entries()].reverse()
  115. </script>
  116. <style>
  117. .table-noten {
  118. width: 100%;
  119. border: none;
  120. border-collapse: collapse;
  121. margin-bottom: 1rem;
  122. }
  123. .fach-bezeichnung {
  124. padding-left: 10mm;
  125. }
  126. .td-fach-note {
  127. padding-bottom: .2rem;
  128. padding-top: .2rem;
  129. width: 12rem;
  130. }
  131. .td-fach-note span {
  132. background-color: #dcdcdc !important;
  133. text-align: center;
  134. width: 10rem;
  135. display: block;
  136. margin: 0 auto;
  137. }
  138. .td-fach-note span.e-note {
  139. background-color: white !important;
  140. width: 17em;
  141. margin: 0;
  142. padding: 0;
  143. }
  144. .fachgruppe-margin {
  145. padding-top: 0.3rem;
  146. }
  147. .lernfeld-lernbereich {
  148. padding-left: 2rem;
  149. padding-bottom: 0;
  150. }
  151. .lernbereich {
  152. padding-left: 20mm;
  153. }
  154. </style>