Noten.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. -->
  22. <table class="table-noten">
  23. {#each faechergruppen() as [gruppen_id, gruppenFaecher]}
  24. <tr>
  25. <td class="fachgruppe-margin">
  26. <b>{gruppenbezeichnung(gruppen_id)}</b>
  27. </td>
  28. </tr>
  29. {#each lernbereicheUndFaecher(gruppenFaecher) as [lernbereich, faecher]}
  30. {#if lernbereich != faecher[0].fach.Zeugnisbez}
  31. <tr><td colspan="2" class="{lernfeld ? '' : 'fach-bezeichnung'}">{lernbereich}</td></tr>
  32. {/if}
  33. {#each faecher as f (f.ID)}
  34. {#if f.fach.AufZeugnis === '+'}
  35. <tr>
  36. <td class="{lernfeld ? '' : 'fach-bezeichnung'} {lernbereich != faecher[0].fach.Zeugnisbez ? 'lernfeld-lernbereich' : ''}">
  37. {#if f.fach.Zeugnisbez.includes("Projekt")}
  38. <!-- Funktioniert nicht mit Abschlussnoten, da diese keine Spalte `Lernentw` haben -->
  39. Projekt: {f.Lernentw}
  40. {:else}
  41. <!-- Die Zeugnisbezeichnung hat bei gesetzten fachGliederungen einen anderen Namen... -->
  42. {f.fach.ZeugnisBez || f.fach.Zeugnisbez}
  43. <!-- Ist ger gesetzt, unter Lernentw nach Eintrag schauen. Wenn dort nichts steht,
  44. in der Fachklassen.json nach Einträgen für Fremdsprache und Fach_ID suchen
  45. Mit der Fussnote 1 muss natürlich auch tatsächlich eine Fussnote zum GER existieren … -->
  46. {#if ger && f.fach.IstSprache === '+'}
  47. {fremdsprache(f, fachklasse)}<sup>1</sup>
  48. {/if}
  49. {/if}
  50. </td>
  51. <!-- Entweder Abschlussnote, wenn gesetzt oder Abschnittsnote oder nix -->
  52. <td class="td-fach-note"><span>{note(f.NoteAbschluss) || note(f.NotenKrz) || '–––––'}</span></td>
  53. </tr>
  54. {/if}
  55. {/each}
  56. {/each}
  57. <tr>
  58. </tr>
  59. {/each}
  60. </table>
  61. <script>
  62. import { gruppenIds } from './gruppenIDs'
  63. import { note, fremdsprache } from '../helfer'
  64. const _ = R.lodash
  65. export let lernfeld, ger = false
  66. export let faechergruppenIds = []
  67. export let noten, fachGliederungen, fachklasse
  68. const gruppenbezeichnung = gruppe => gruppenIds[gruppe]
  69. const lernbereicheUndFaecher = gruppenFaecher => Object.entries(_.groupBy(gruppenFaecher, f => f.fach.Bezeichnung))
  70. const faechergruppen = () => {
  71. // noten werden im jeweiligen Dokument über das *noten*-Attribut mitgegeben.
  72. // z.B. die Abschnittsnote oder die Noten aus *s.bk_abschluss_faecher* und co.
  73. // Nutzer über Konsole auf Änderungen in den Fächern hinweisen
  74. if (fachGliederungen && fachGliederungen.length > 0) console.log('Es wurden Fachgliederungswerte gesetzt: ', fachGliederungen)
  75. // suche in den fachGliederungen, ob für die jeweilige Fachklasse was besonderes festgelegt wurde
  76. // vorausgesetzt, fachGliederungen wurde mitgegeben
  77. const faecher = fachGliederungen
  78. ? noten.map(f => {return {...f, fach: Object.assign(f.fach, fachGliederungen.find(fg => fg.Fach_ID === f.Fach_ID))}})
  79. : noten
  80. // nun alle Fächer rauswerfen, die nich in den FaechergruppenIds zugeordnet sind, z.B. Abschlussarbeiten, Projekte etc.
  81. const faecherBereinigt = faechergruppenIds.length === 0
  82. ? faecher
  83. : faecher.filter(f => faechergruppenIds.find(id => f.fach.Fachgruppe_ID === id))
  84. // erstmal alle Fächer sortieren in der passenden Reihenfolge,
  85. // dann nach Fachgruppe gruppieren
  86. return Object.entries(_.groupBy(_.sortBy(faecherBereinigt, f => f.fach.SortierungS2), f => f.fach.Fachgruppe_ID))
  87. }
  88. // Berufsbezogen kommt neuerdings zuerst, dann berufsübergreifend
  89. // wenn aber nur eine Note vermerkt ist, dann normal zurück
  90. // const faechergruppenUmsortiert = () => faechergruppen.length > 1
  91. // ? [faechergruppen[0], faechergruppen[1]] = [faechergruppen[1], faechergruppen[0]]
  92. // : faechergruppen
  93. </script>
  94. <style>
  95. .table-noten {
  96. width: 100%;
  97. border: none;
  98. border-collapse: collapse;
  99. margin-bottom: 1rem;
  100. }
  101. .fach-bezeichnung {
  102. padding-left: 10mm;
  103. }
  104. .td-fach-note {
  105. padding-bottom: .2rem;
  106. padding-top: .2rem;
  107. width: 12rem;
  108. }
  109. .td-fach-note span {
  110. background-color: #dcdcdc !important;
  111. text-align: center;
  112. width: 10rem;
  113. display: block;
  114. margin: 0 auto;
  115. }
  116. /*.td-fach-note span.e-note {
  117. background-color: white !important;
  118. width: 17rem;
  119. margin: 0;
  120. }*/
  121. .fachgruppe-margin {
  122. padding-top: 0.3rem;
  123. }
  124. .lernfeld-lernbereich {
  125. padding-left: 2rem;
  126. padding-bottom: 0;
  127. }
  128. .lernbereich {
  129. padding-left: 20mm;
  130. }
  131. </style>