Allg Konferenzliste Punkte.svelte 3.9 KB

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