123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <div class="columns">
- <div class="column">
- <b>Ergebnisse der Sprecherwahl:</b>
- <table class="table table-condensed table-striped">
- <th>Schüler</th><th>#</th>
- {#each wahlergebnis_schueler.filter(s=>s.gewaehlt_sprecher > 0).sort((a,b)=>a.gewaehlt_sprecher-b.gewaehlt_sprecher).reverse() as s}
- <tr>
- <td>{s.vorname} {s.nachname || ''} – {s.klasse} {s.email || ''}</td><td>{s.gewaehlt_sprecher}</td>
- </tr>
- {/each}
- </table>
- </div>
- <div class="column">
- <b>Ergebnisse der Schukowahl:</b>
- <table class="table table-condensed table-striped">
- <th>Schüler</th><th>#</th>
- {#each wahlergebnis_schueler.filter(s=>s.gewaehlt_schuko > 0).sort((a,b)=>a.gewaehlt_schuko-b.gewaehlt_schuko).reverse() as s}
- <tr>
- <td>{s.vorname} {s.nachname || ''} – {s.klasse} {s.email || ''}</td><td>{s.gewaehlt_schuko}</td>
- </tr>
- {/each}
- </table>
- </div>
- <div class="column">
- <b>Ergebnisse der SV-Lehrerwahl:</b>
- <table class="table table-condensed table-striped">
- <th>Lehrer</th><th>#</th>
- {#each wahlergebnis_lehrer.filter(l=>l.gewaehlt_lehrer > 0).sort((a,b)=>a.gewaehlt_lehrer-b.gewaehlt_lehrer).reverse() as l}
- <tr>
- <td>{l.name}</td><td>{l.gewaehlt_lehrer}</td>
- </tr>
- {/each}
- </table>
- </div>
- </div>
- <input type="checkbox" bind:checked={nur_aktive}> Nur aufgestellte Schüler anzeigen.
- <div class="columns">
- <div class="column is-two-thirds">
- <table class="table is-striped">
- <thead>
- <tr>
- <th>Name</th>
- <th>Wahlstatus</th>
- </tr>
- </thead>
- <tbody>
- {#each lehrer as l}
- <tr>
- <td>{l.name}</td>
- <td class:has-background-success={l.waehlbar}>
- wählbar: <input checked={l.waehlbar} type="checkbox" on:click={()=>lehrer_waehlbar(l)}>
- {#if l.waehlbar}
- <button class="button is-link tooltip is-tooltip-multiline" data-tooltip={l.info}
- on:click="{()=>lehrer_edit=l}">Infotext</button>
- {/if}
- {#if l===lehrer_edit}
- <textarea cols="80" rows="10" bind:value={l.info}></textarea><button on:click={lehrer_info}>Speichern</button>
- {/if}
- </td>
- </tr>
- {/each}
- </tbody>
- </table>
- {#each Object.entries(schueler) as [klasse, schuelers]}
- <h3 class="title">{klasse}</h3>
- <table class="table is-striped">
- <thead>
- <tr>
- <th>Name</th>
- <th>Vorname</th>
- <th>Wahlstatus</th>
- </tr>
- </thead>
- <tbody>
- {#each schuelers.filter(s=>(nur_aktive && (s.schuko || s.sprecher)) || (!nur_aktive && s)) as s}
- <tr>
- <td>{s.Name}</td>
- <td>{s.Vorname}</td>
- <td class:has-background-success={s.schuko||s.sprecher}>
- Schuko: <input checked={s.schuko} type="checkbox" on:click={()=>check_aktiv(s, 'schuko')}>
- Sprecher: <input checked={s.sprecher} type="checkbox" on:click={()=>check_aktiv(s, 'sprecher')}>
- gewählt: <input checked={s.gewaehlt} type="checkbox" on:click={()=>check_aktiv(s, 'gewaehlt')}>
- wählbar: <input checked={s.waehlbar} type="checkbox" on:click={()=>check_aktiv(s, 'waehlbar')}>
- {#if s.schuko || s.sprecher}
- <button class="button is-link tooltip is-tooltip-multiline" data-tooltip={`${s.info || ''} – ${s.Vorname} ${s.nachname || ''} – ${s.email || ''}`}
- on:click="{()=>edit=s}">Infotext</button>
- {/if}
- {#if s===edit}
- <textarea cols="80" rows="10" bind:value={s.info}></textarea><button on:click={info}>Speichern</button>
- {/if}
- </td>
- </tr>
- {/each}
- </tbody>
- </table>
- {/each}
- </div>
- </div>
- <script>
- export let schueler, privat
- let nur_aktive
- let wahlergebnis_schueler = []
- let wahlergebnis_lehrer = []
- let edit
- let lehrer_edit
- let lehrer=[]
- const { Pool } = R('pg')
- const pool = new Pool({ connectionString: privat.mein_bk_db})
- pool.query(`SELECT * from lehrer`).then(res=>lehrer=res.rows)
- const lehrer_info = async _ => {
- const query = `UPDATE lehrer SET info=$2 where id=$1`
- const values = [lehrer_edit.id, lehrer_edit.info]
- try {
- await pool.query(query, values)
- } catch (e) {console.log(e)}
- }
- const info = async _ => {
- const query = `UPDATE schueler SET info=$2 where id=$1`
- const values = [edit.id, edit.info]
- try {
- await pool.query(query, values)
- } catch (e) {console.log(e)}
- }
- const lehrer_waehlbar = async _ => {
- const query = `UPDATE lehrer SET waehlbar=$2 where id=$1`
- const values = [lehrer_edit.id, !lehrer_edit.waehlbar]
- try {
- await pool.query(query, values)
- } catch (e) {console.log(e)}
- }
- const check_aktiv = async (s, art) => {
- const query = `INSERT INTO schueler(id, ${art}, vorname, klasse)
- VALUES($1, $2, $3, $4)
- ON CONFLICT (id) DO
- UPDATE SET ${art}=$2
- WHERE schueler.id=$1
- RETURNING ${art}`
- const values=[s.id, !s[art], s.Vorname, s.Klasse]
- try {
- const res = await pool.query(query, values)
- const data = res.rows[0]
- s[art] = data[art]
- schueler = schueler
- } catch(err) {
- console.log(err.stack)
- }
- }
- async function hole_ergebnisse () {
- const query = `SELECT *,
- (SELECT COUNT(*)
- FROM sprecher
- WHERE sprecher.schueler_id = schueler.id
- ) as gewaehlt_sprecher,
- (SELECT COUNT(*)
- FROM schuko
- WHERE schuko.schueler_id = schueler.id
- ) as gewaehlt_schuko
- FROM schueler`
- const query2 = `SELECT *,
- (SELECT COUNT(*)
- FROM verbindungslehrer
- WHERE verbindungslehrer.lehrer_id = lehrer.id
- ) as gewaehlt_lehrer
- FROM lehrer`
- try {
- const res = await pool.query(query)
- wahlergebnis_schueler = res.rows
- const res2 = await pool.query(query2)
- wahlergebnis_lehrer = res2.rows
- }
- catch (e) {
- console.log(e)
- return []
- }
- }
- hole_ergebnisse()
- </script>
- <style>
- @import './node_modules/bulma-tooltip/dist/css/bulma-tooltip.min.css';
- </style>
|