svwahl.svelte 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <table class="table table-condensed table-striped">
  2. <th>Schüler</th><th>Sprecher</th><th>Schuko</th>
  3. {#each wahlergebnis.filter(s=>s.gewaehlt_schuko > 0 || s.gewaehlt_sprecher > 0) as s}
  4. <tr>
  5. <td>{s.vorname}</td><td>{s.gewaehlt_sprecher}</td><td>{s.gewaehlt_schuko}</td>
  6. </tr>
  7. {/each}
  8. </table>
  9. <input type="checkbox" bind:checked={nur_aktive}> Nur aufgestellte Schüler anzeigen.
  10. <div class="columns">
  11. <div class="column is-two-thirds">
  12. {#each Object.entries(schueler) as [klasse, schuelers]}
  13. <h3 class="title">{klasse}</h3>
  14. <table class="table is-striped">
  15. <thead>
  16. <tr>
  17. <th>Name</th>
  18. <th>Vorname</th>
  19. <th>Wahlstatus</th>
  20. </tr>
  21. </thead>
  22. <tbody>
  23. {#each schuelers.filter(s=>(nur_aktive && (s.schuko || s.sprecher)) || (!nur_aktive && s)) as s}
  24. <tr>
  25. <td>{s.Name}</td>
  26. <td>{s.Vorname}</td>
  27. <td class:has-background-success={s.schuko||s.sprecher}>
  28. Schuko: <input checked={s.schuko} type="checkbox" on:click={()=>check_aktiv(s, 'schuko')}>
  29. Sprecher: <input checked={s.sprecher} type="checkbox" on:click={()=>check_aktiv(s, 'sprecher')}>
  30. gewählt: <input checked={s.gewaehlt} type="checkbox" on:click={()=>check_aktiv(s, 'gewaehlt')}>
  31. wählbar: <input checked={s.waehlbar} type="checkbox" on:click={()=>check_aktiv(s, 'waehlbar')}>
  32. {#if s.info || s.nachname || s.email}
  33. <button class="button is-link tooltip is-tooltip-multiline" data-tooltip={`${s.info || ''} – ${s.Vorname} ${s.nachname || ''} – ${s.email || ''}`}>Infotext</button>
  34. {/if}
  35. </td>
  36. </tr>
  37. {/each}
  38. </tbody>
  39. </table>
  40. {/each}
  41. </div>
  42. </div>
  43. <script>
  44. export let schueler, privat, einstellungen = {}
  45. let nur_aktive
  46. let wahlergebnis = []
  47. const { Pool } = R('pg')
  48. const pool = new Pool({ connectionString: privat.mein_bk_db})
  49. const check_aktiv = async (s, art) => {
  50. const query = `INSERT INTO schueler(id, ${art}, vorname, klasse)
  51. VALUES($1, $2, $3, $4)
  52. ON CONFLICT (id) DO
  53. UPDATE SET ${art}=$2
  54. WHERE schueler.id=$1
  55. RETURNING ${art}`
  56. const values=[s.id, !s[art], s.Vorname, s.Klasse]
  57. try {
  58. const res = await pool.query(query, values)
  59. const data = res.rows[0]
  60. s[art] = data[art]
  61. schueler = schueler
  62. } catch(err) {
  63. console.log(err.stack)
  64. }
  65. }
  66. async function hole_sprecher_ergebnisse () {
  67. console.log('TEST')
  68. const query = `SELECT *,
  69. (SELECT COUNT(*)
  70. FROM sprecher
  71. WHERE sprecher.schueler_id = schueler.id
  72. ) as gewaehlt_sprecher,
  73. (SELECT COUNT(*)
  74. FROM schuko
  75. WHERE schuko.schueler_id = schueler.id
  76. ) as gewaehlt_schuko
  77. FROM schueler`
  78. try {
  79. const res = await pool.query(query)
  80. wahlergebnis = res.rows
  81. }
  82. catch (e) {
  83. return []
  84. }
  85. }
  86. hole_sprecher_ergebnisse()
  87. </script>
  88. <style>
  89. @import './node_modules/bulma-tooltip/dist/css/bulma-tooltip.min.css';
  90. </style>