Übersicht.svelte 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. {#await gruppe}Warte auf Daten…
  2. {:then schueler_lokal}
  3. <section class="section">
  4. <div class="container">
  5. <h1 class="title">Mein BK</h1>
  6. <span class="tag is-success" class:is-danger={!diff(schueler_lokal, schueler_entfernt)} on:click={update_db}>
  7. {diff(schueler_lokal, schueler_entfernt) ? `${schueler_lokal.length} Schüler in der Datenbank` : 'Schülerdaten müssen aktualisiert werden'}
  8. </span><button on:click={query}>Neu laden</button>
  9. </div>
  10. <div class="container">
  11. <div class="tabs">
  12. <ul>
  13. <li class:is-active={active === Vouchers}><a on:click={() => active=Vouchers}>WLAN</a></li>
  14. <li class:is-active={active === Projektwoche}><a on:click={() => active=Projektwoche}>Projektwoche</a></li>
  15. <li class:is-active={active === Svwahl}><a on:click={() => active=Svwahl}>SV-Wahl</a></li>
  16. </ul>
  17. </div>
  18. <svelte:component this={active} schueler={_.groupBy(mergeById(schueler_lokal, schueler_entfernt), 'Klasse')} {privat}/>
  19. </div>
  20. </section>
  21. {:catch error}Fehler
  22. {/await}
  23. <style>
  24. @import 'node_modules/bulma/css/bulma.css';
  25. </style>
  26. <script>
  27. import Hashids from 'hashids'
  28. import Vouchers from './components/vouchers.svelte'
  29. import Projektwoche from './components/projektwoche.svelte'
  30. import Svwahl from './components/svwahl.svelte'
  31. export let schueler, knexConfig, privat
  32. let active = Vouchers
  33. const { Pool } = R('pg')
  34. const _ = R('lodash')
  35. const Schueler = R('schild').Schueler
  36. Schueler.knex(R('knex')(knexConfig))
  37. const hashids = new Hashids(privat.salt, 5, 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789')
  38. const h = (id) => hashids.encode(id)
  39. let schueler_entfernt = []
  40. const pool = new Pool({ connectionString: privat.mein_bk_db})
  41. function query () {
  42. pool.query(`SELECT schueler.hashid, wlan.voucher, wahlen.* FROM schueler
  43. LEFT JOIN wlan ON schueler.hashid = wlan.schueler_hashid
  44. LEFT JOIN wahlen ON schueler.hashid = wahlen.schueler_hashid`,
  45. (err, resp) => schueler_entfernt = resp.rows)
  46. }
  47. query()
  48. const gruppe = Schueler.query()
  49. .where('Status', '2')
  50. .andWhere('Geloescht', '-')
  51. .andWhere('Gesperrt', '-')
  52. .select('ID', 'Name', 'Vorname', 'Klasse')
  53. .orderBy('Klasse')
  54. .orderBy('Name')
  55. function diff (eins, zwei) {
  56. let a = new Set(eins);
  57. let b = new Set(zwei);
  58. return new Set(
  59. [...a].filter(x => !b.has(x)));
  60. }
  61. const mergeById = (a1, a2) =>
  62. a1.map(itm => ({
  63. ...a2.find((item) => (item.hashid === h(itm.ID)) && item),
  64. ...itm
  65. }));
  66. function update_db () {}
  67. </script>