svwahl.svelte 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <div class="columns">
  2. <div class="column">
  3. <b>Ergebnisse der Sprecherwahl:</b>
  4. <table class="table table-condensed table-striped">
  5. <th>Schüler</th><th>#</th>
  6. {#each wahlergebnis_schueler.filter(s=>s.gewaehlt_sprecher > 0).sort((a,b)=>a.gewaehlt_sprecher-b.gewaehlt_sprecher).reverse() as s}
  7. <tr>
  8. <td>{s.vorname} {s.nachname || ''} – {s.klasse} {s.email}</td><td>{s.gewaehlt_sprecher}</td>
  9. </tr>
  10. {/each}
  11. </table>
  12. </div>
  13. <div class="column">
  14. <b>Ergebnisse der Schukowahl:</b>
  15. <table class="table table-condensed table-striped">
  16. <th>Schüler</th><th>#</th>
  17. {#each wahlergebnis_schueler.filter(s=>s.gewaehlt_schuko > 0).sort((a,b)=>a.gewaehlt_schuko-b.gewaehlt_schuko).reverse() as s}
  18. <tr>
  19. <td>{s.vorname} {s.nachname || ''} – {s.klasse} {s.email}</td><td>{s.gewaehlt_schuko}</td>
  20. </tr>
  21. {/each}
  22. </table>
  23. </div>
  24. <div class="column">
  25. <b>Ergebnisse der SV-Lehrerwahl:</b>
  26. <table class="table table-condensed table-striped">
  27. <th>Lehrer</th><th>#</th>
  28. {#each wahlergebnis_lehrer.filter(l=>l.gewaehlt_lehrer > 0).sort((a,b)=>a.gewaehlt_lehrer-b.gewaehlt_lehrer).reverse() as l}
  29. <tr>
  30. <td>{l.name}</td><td>{l.gewaehlt_lehrer}</td>
  31. </tr>
  32. {/each}
  33. </table>
  34. </div>
  35. </div>
  36. <input type="checkbox" bind:checked={nur_aktive}> Nur aufgestellte Schüler anzeigen.
  37. <div class="columns">
  38. <div class="column is-two-thirds">
  39. {#each Object.entries(schueler) as [klasse, schuelers]}
  40. <h3 class="title">{klasse}</h3>
  41. <table class="table is-striped">
  42. <thead>
  43. <tr>
  44. <th>Name</th>
  45. <th>Vorname</th>
  46. <th>Wahlstatus</th>
  47. </tr>
  48. </thead>
  49. <tbody>
  50. {#each schuelers.filter(s=>(nur_aktive && (s.schuko || s.sprecher)) || (!nur_aktive && s)) as s}
  51. <tr>
  52. <td>{s.Name}</td>
  53. <td>{s.Vorname}</td>
  54. <td class:has-background-success={s.schuko||s.sprecher}>
  55. Schuko: <input checked={s.schuko} type="checkbox" on:click={()=>check_aktiv(s, 'schuko')}>
  56. Sprecher: <input checked={s.sprecher} type="checkbox" on:click={()=>check_aktiv(s, 'sprecher')}>
  57. gewählt: <input checked={s.gewaehlt} type="checkbox" on:click={()=>check_aktiv(s, 'gewaehlt')}>
  58. wählbar: <input checked={s.waehlbar} type="checkbox" on:click={()=>check_aktiv(s, 'waehlbar')}>
  59. {#if s.info || s.nachname || s.email}
  60. <button class="button is-link tooltip is-tooltip-multiline" data-tooltip={`${s.info || ''} – ${s.Vorname} ${s.nachname || ''} – ${s.email || ''}`}>Infotext</button>
  61. {/if}
  62. </td>
  63. </tr>
  64. {/each}
  65. </tbody>
  66. </table>
  67. {/each}
  68. </div>
  69. </div>
  70. <script>
  71. export let schueler, privat
  72. let nur_aktive
  73. let wahlergebnis_schueler = []
  74. let wahlergebnis_lehrer = []
  75. const { Pool } = R('pg')
  76. const pool = new Pool({ connectionString: privat.mein_bk_db})
  77. const check_aktiv = async (s, art) => {
  78. const query = `INSERT INTO schueler(id, ${art}, vorname, klasse)
  79. VALUES($1, $2, $3, $4)
  80. ON CONFLICT (id) DO
  81. UPDATE SET ${art}=$2
  82. WHERE schueler.id=$1
  83. RETURNING ${art}`
  84. const values=[s.id, !s[art], s.Vorname, s.Klasse]
  85. try {
  86. const res = await pool.query(query, values)
  87. const data = res.rows[0]
  88. s[art] = data[art]
  89. schueler = schueler
  90. } catch(err) {
  91. console.log(err.stack)
  92. }
  93. }
  94. async function hole_ergebnisse () {
  95. const query = `SELECT *,
  96. (SELECT COUNT(*)
  97. FROM sprecher
  98. WHERE sprecher.schueler_id = schueler.id
  99. ) as gewaehlt_sprecher,
  100. (SELECT COUNT(*)
  101. FROM schuko
  102. WHERE schuko.schueler_id = schueler.id
  103. ) as gewaehlt_schuko
  104. FROM schueler`
  105. const query2 = `SELECT *,
  106. (SELECT COUNT(*)
  107. FROM verbindungslehrer
  108. WHERE verbindungslehrer.lehrer_id = lehrer.id
  109. ) as gewaehlt_lehrer
  110. FROM lehrer`
  111. try {
  112. const res = await pool.query(query)
  113. wahlergebnis_schueler = res.rows
  114. const res2 = await pool.query(query2)
  115. wahlergebnis_lehrer = res2.rows
  116. }
  117. catch (e) {
  118. console.log(e)
  119. return []
  120. }
  121. }
  122. hole_ergebnisse()
  123. </script>
  124. <style>
  125. @import './node_modules/bulma-tooltip/dist/css/bulma-tooltip.min.css';
  126. </style>