Notenliste.html 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. {#each _.chunk(schueler, anzahl) as slice, i}
  2. <div class="page grid" orientation="landscape" size="A3" style="font-size: 1.1rem">
  3. <div class="header">
  4. <pre>
  5. Konferenzliste <b>{klasse.Klasse}</b> &Tab; {aktAbschnitt().klassenlehrer_in}: <b>{`${aktAbschnitt().lehrer.Vorname} ${aktAbschnitt().lehrer.Nachname} (${aktAbschnitt().lehrer.Kuerzel})`}</b> &Tab; Stand: {heute()} &Tab; Konferenzdatum: {datum(aktAbschnitt().Konferenzdatum)} &Tab; Zeugnisdatum: {datum(aktAbschnitt().ZeugnisDatum)}
  6. </pre>
  7. </div>
  8. <div class="main">
  9. <Voffset v=1/>
  10. <table>
  11. <tr>
  12. <th><b>Nr</b></th>
  13. <th><b>Name</b></th>
  14. <th class="rotate"><div><span><b>FStd</b></span></div></th>
  15. <th class="rotate"><div><span><b>uFStd</b></span></div></th>
  16. {#each Array.from(faecher()) as f}
  17. <th class="rotate"><div><span><b>{f}</b></span></div></th>
  18. {/each}
  19. <th><b>Bemerkungen</b></th>
  20. </tr>
  21. <tr><td colspan="2" style="height: 4rem">Bitte abzeichnen</td>{#each Object.keys(noten()) as n}<td></td>{/each}<td></td><td></td><td></td></tr>
  22. {#each slice as s, ii}
  23. <tr>
  24. <td><b>{i*anzahl+ii+1}</b></td>
  25. <td><b>{s.Name}, {s.Vorname}</b></td>
  26. <td>{s.abschnitte.find(aktHalbjahr).SumFehlStd || 0}</td>
  27. <td>{s.abschnitte.find(aktHalbjahr).SumFehlStdU || 0}</td>
  28. {#each Object.entries(noten()) as [fach, n]}
  29. <td class="text-center" style={parseInt(n[i*anzahl+ii]) > 4 ? 'background:tomato;':''}>{n[i*anzahl+ii] || '–'}</td>
  30. {/each}
  31. <td class="extraklein">{s.abschnitte.find(aktHalbjahr).ZeugnisBem || ''}</td>
  32. </tr>
  33. {/each}
  34. </table>
  35. </div>
  36. <div class="footer">Seite {i+1}/{Math.ceil(schueler.length/anzahl)}</div>
  37. </div>
  38. {/each}
  39. <script>
  40. import { datum } from './helfer'
  41. import Voffset from './partials/Voffset.html'
  42. export let schueler, schule, privat, jahr, abschnitt, klasse
  43. const aktHalbjahr = (a) => a.Jahr === jahr && a.Abschnitt === abschnitt
  44. const _ = R('lodash')
  45. const heute = () => new Date().toLocaleDateString('de', {day: '2-digit', month: '2-digit', year: 'numeric'})
  46. const anzahl = 25
  47. let aktAbschnitt
  48. $: aktAbschnitt = () => schueler[0].abschnitte.slice(-1)[0]
  49. let faecher
  50. $: faecher = () => {
  51. let faecher = new Set
  52. schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => {faecher.add(n.fach.FachKrz)}))
  53. return faecher
  54. }
  55. let noten
  56. $: noten = () => {
  57. let noten = {}
  58. faecher().forEach(f => {noten[f] = []})
  59. schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => noten[n.fach.FachKrz].push(n.NotenKrz || "–")))
  60. return noten
  61. }
  62. </script>
  63. <style>
  64. @import 'css/main.css';
  65. @import 'css/a3-landscape.css';
  66. table {
  67. border-collapse: collapse;
  68. width:auto;
  69. }
  70. table td {
  71. border: thin solid #ddd;
  72. line-height: 1.3rem;
  73. padding: 9px;
  74. white-space:nowrap;
  75. }
  76. table td.extraklein {
  77. font-size: .6rem;
  78. white-space:pre-wrap;
  79. word-wrap:break-word;
  80. vertical-align: top;
  81. padding: 1px;
  82. }
  83. table td:last-child {
  84. width: 100%;
  85. }
  86. th.rotate {
  87. height: 30px;
  88. white-space: nowrap;
  89. }
  90. th.rotate > div {
  91. transform:
  92. translate(20px, -3px)
  93. rotate(315deg);
  94. box-sizing: border-box;
  95. }
  96. th.rotate > div > span {
  97. border-bottom: 1px solid #ccc;
  98. width: 30px;
  99. transform-origin: left bottom;
  100. display: inline-block
  101. }
  102. </style>