Notenliste.html 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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 || schueler[0].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, chunk } from './helfer'
  41. import Voffset from './partials/Voffset.html'
  42. export let schueler, schule, privat, jahr, abschnitt, klasse
  43. $: 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. $: aktAbschnitt = () => schueler[0].abschnitte.slice(-1)[0]
  48. $: faecher = () => {
  49. let faecher = new Set
  50. schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => {faecher.add(n.fach.FachKrz)}))
  51. return faecher
  52. }
  53. $: noten = () => {
  54. let noten = {}
  55. faecher().forEach(f => {noten[f] = []})
  56. schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => noten[n.fach.FachKrz].push(n.NotenKrz || "–")))
  57. return noten
  58. }
  59. </script>
  60. <style>
  61. @import 'css/main.css';
  62. @import 'css/a3-landscape.css';
  63. table {
  64. border-collapse: collapse;
  65. width:auto;
  66. }
  67. table td {
  68. border: thin solid #ddd;
  69. line-height: 1.3rem;
  70. padding: 9px;
  71. white-space:nowrap;
  72. }
  73. table td.extraklein {
  74. font-size: .6rem;
  75. white-space:pre-wrap;
  76. word-wrap:break-word;
  77. vertical-align: top;
  78. padding: 1px;
  79. }
  80. table td:last-child {
  81. width: 100%;
  82. }
  83. th.rotate {
  84. height: 30px;
  85. white-space: nowrap;
  86. }
  87. th.rotate > div {
  88. transform:
  89. translate(20px, -3px)
  90. rotate(315deg);
  91. box-sizing: border-box;
  92. }
  93. th.rotate > div > span {
  94. border-bottom: 1px solid #ccc;
  95. width: 30px;
  96. transform-origin: left bottom;
  97. display: inline-block
  98. }
  99. </style>