You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.8 KiB
72 lines
1.8 KiB
from nicegui import ui |
|
import sqlite3 |
|
import signal |
|
import os |
|
|
|
|
|
|
|
|
|
def dict_factory(cursor, row): |
|
d = {} |
|
for idx, col in enumerate(cursor.description): |
|
d[col[0]] = row[idx] |
|
return d |
|
|
|
def read_data(query): |
|
try: |
|
cursor.execute(query) |
|
rows = cursor.fetchall() |
|
return rows |
|
except sqlite3.Error as e: |
|
ui.notify("{e}") |
|
return None |
|
|
|
def registra_presenza(id, flag): |
|
|
|
try: |
|
cursor.execute("UPDATE users SET presenze = ? WHERE id = ?", (1 if flag==True else 0, id) ) |
|
conn.commit() |
|
|
|
finally: |
|
tabellaUtenti.refresh() |
|
os.kill(os.getpid(), signal.SIGUSR1) |
|
|
|
@ui.refreshable |
|
def tabellaUtenti(): |
|
rows = read_data("SELECT u.*, (SELECT data FROM pagamenti WHERE user_id=u.id AND date(data) = '2021-05-31' ORDER BY id DESC LIMIT 1) as pagamenti FROM users as u;") |
|
for row in rows: |
|
with ui.row().classes("w-full"): |
|
with ui.column().classes("grow"): |
|
ui.label(f"{row['nome']} {row['cognome'][0].upper()}.").style('color:'+("black" if row['pagamenti'] else "red")) |
|
with ui.column(): |
|
if row["presenze"] == 1: |
|
ui.button(color="primary", text= "presente", on_click= lambda: registra_presenza(row["id"], False)) |
|
else: |
|
ui.button(color="secondary", text= "assente", on_click= lambda: registra_presenza(row["id"], True)) |
|
|
|
ui.separator() |
|
|
|
def onSignal(signum, frame): |
|
tabellaUtenti.refresh() |
|
|
|
signal.signal(signal.SIGUSR1, onSignal) |
|
|
|
# START |
|
|
|
conn = sqlite3.connect('letsswing.db') |
|
conn.row_factory = dict_factory |
|
cursor = conn.cursor() |
|
|
|
|
|
|
|
with ui.row().classes("w-full"): |
|
with ui.column().classes("grow"): |
|
ui.label("Beginner a matera") |
|
with ui.column(): |
|
ui.icon("thumb_up") |
|
|
|
tabellaUtenti() |
|
|
|
|
|
ui.run(host="0.0.0.0") |
|
|
|
|