svwahl.svelte 2.3 KB

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