Initial commit
This commit is contained in:
commit
536ff43ce4
158 files changed
+30355
No files matched your search
@@ -0,0 +1,121 @@
|
||||
"""
|
||||
Hulpfuncties rond toestellen (tabellen Toestellen, Signpost_DB, Opmerkingen, Eigendom).
|
||||
|
||||
Het toestelnummer dat gebruikers intypen (vroeger 'KAMXM_nummer') is Toestellen.Schooleigen_ID.
|
||||
"""
|
||||
from datetime import datetime, date
|
||||
|
||||
from database import execute_query, execute_insert
|
||||
|
||||
# Laatste opmerking van een toestel (subquery, t = alias van Toestellen)
|
||||
LAATSTE_OPMERKING = ("(SELECT o.Opmerking FROM Opmerkingen o WHERE o.Toestel_ID = t.Toestel_ID "
|
||||
"ORDER BY o.Timestamp DESC, o.Opmerking_ID DESC LIMIT 1)")
|
||||
|
||||
|
||||
def zoek_toestel(nummer):
|
||||
"""Toestel op toestelnummer (Schooleigen_ID) of, als dat niet bestaat, op serienummer."""
|
||||
nummer = str(nummer or '').strip()
|
||||
if not nummer:
|
||||
return None
|
||||
rows = execute_query("SELECT * FROM Toestellen WHERE Schooleigen_ID = %s", (nummer,))
|
||||
if not rows:
|
||||
rows = execute_query("SELECT * FROM Toestellen WHERE Serienummer = %s", (nummer,))
|
||||
return rows[0] if rows else None
|
||||
|
||||
|
||||
def zoek_leerling(nummer):
|
||||
"""Leerling op internnummer of Smartschool-nummer."""
|
||||
rows = execute_query("SELECT * FROM Leerlingen WHERE Internnummer = %s OR SS_nummer = %s LIMIT 1",
|
||||
(str(nummer).strip(), str(nummer).strip()))
|
||||
return rows[0] if rows else None
|
||||
|
||||
|
||||
def laatste_opmerking(toestel_id):
|
||||
rows = execute_query("SELECT Opmerking FROM Opmerkingen WHERE Toestel_ID = %s "
|
||||
"ORDER BY Timestamp DESC, Opmerking_ID DESC LIMIT 1", (toestel_id,))
|
||||
return rows[0]['Opmerking'] if rows else None
|
||||
|
||||
|
||||
def voeg_opmerking_toe(toestel_id, tekst, gebruiker=None):
|
||||
"""Bewaart een opmerking als die verschilt van de laatste (zo blijft de geschiedenis bewaard)."""
|
||||
tekst = (tekst or '').strip()
|
||||
if tekst and tekst != (laatste_opmerking(toestel_id) or ''):
|
||||
execute_query("INSERT INTO Opmerkingen (Toestel_ID, Opmerking, Timestamp, Gebruiker) VALUES (%s, %s, NOW(), %s)",
|
||||
(toestel_id, tekst, gebruiker), commit=True)
|
||||
|
||||
|
||||
def lees_datum(waarde):
|
||||
"""'2027-08-31', '31-08-2027' of '31/08/2027' → date. Leeg → None. Ongeldig → ValueError."""
|
||||
if isinstance(waarde, date):
|
||||
return waarde
|
||||
w = (waarde or '').strip()
|
||||
if not w:
|
||||
return None
|
||||
for fmt in ('%Y-%m-%d', '%d-%m-%Y', '%d/%m/%Y', '%d.%m.%Y'):
|
||||
try:
|
||||
return datetime.strptime(w, fmt).date()
|
||||
except ValueError:
|
||||
pass
|
||||
raise ValueError(f"'{w}' is geen geldige datum (gebruik dd-mm-jjjj).")
|
||||
|
||||
|
||||
def bewaar_signpost(toestel_id, signpostnummer=None, garantie=None):
|
||||
"""Maakt/werkt de Signpost-gegevens van een toestel bij (enkel ingevulde velden)."""
|
||||
signpostnummer = (signpostnummer or '').strip() or None
|
||||
garantie = lees_datum(garantie)
|
||||
if not signpostnummer and not garantie:
|
||||
return
|
||||
execute_query(
|
||||
"INSERT INTO Signpost_DB (Toestel_ID, Signpostnummer, Garantie) VALUES (%s, %s, %s) "
|
||||
"ON DUPLICATE KEY UPDATE Signpostnummer = COALESCE(VALUES(Signpostnummer), Signpostnummer), "
|
||||
"Garantie = COALESCE(VALUES(Garantie), Garantie)",
|
||||
(toestel_id, signpostnummer, garantie), commit=True)
|
||||
|
||||
|
||||
def nieuw_toestel(schooleigen_id=None, serienummer=None, type_toestel=None, status='Beschikbaar'):
|
||||
return execute_insert(
|
||||
"INSERT INTO Toestellen (Schooleigen_ID, Serienummer, Type, Status) VALUES (%s, %s, %s, %s)",
|
||||
((schooleigen_id or None), (serienummer or None), (type_toestel or None), status))
|
||||
|
||||
|
||||
def actieve_eigendom(toestel_id):
|
||||
"""Huidige toekenning van een toestel (Datum_inlevering leeg) of None."""
|
||||
rows = execute_query("SELECT * FROM Eigendom WHERE Toestel_ID = %s AND Datum_inlevering IS NULL "
|
||||
"ORDER BY Datum_toekenning DESC LIMIT 1", (toestel_id,))
|
||||
return rows[0] if rows else None
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Geblokkeerd in Google (kolom Toestellen.Geblokkeerd)
|
||||
# ---------------------------------------------------------------------------
|
||||
def ensure_geblokkeerd():
|
||||
"""Voegt de kolom Toestellen.Geblokkeerd toe als die nog niet bestaat. Bij het toevoegen krijgen toestellen die
|
||||
bij een leerling geblokkeerd staan (Eigendom.Status = 1) meteen de waarde 1. Eén keer per school en proces."""
|
||||
from tenancy import huidige_school
|
||||
school = huidige_school()
|
||||
if school.cache.get('kol_geblokkeerd'):
|
||||
return
|
||||
if not execute_query("SHOW COLUMNS FROM Toestellen LIKE 'Geblokkeerd'"):
|
||||
execute_query("ALTER TABLE Toestellen ADD COLUMN Geblokkeerd TINYINT(1) NOT NULL DEFAULT 0 AFTER Status",
|
||||
commit=True)
|
||||
execute_query("UPDATE Toestellen t JOIN Eigendom e ON e.Toestel_ID = t.Toestel_ID "
|
||||
"AND e.Datum_inlevering IS NULL AND e.Status = 1 SET t.Geblokkeerd = 1", commit=True)
|
||||
school.cache['kol_geblokkeerd'] = True
|
||||
|
||||
|
||||
def zet_geblokkeerd(toestel_id, geblokkeerd):
|
||||
"""Bewaart de blokkeerstatus van een toestel, ook bij de huidige eigenaar (Eigendom.Status)."""
|
||||
ensure_geblokkeerd()
|
||||
w = 1 if geblokkeerd else 0
|
||||
execute_query("UPDATE Toestellen SET Geblokkeerd = %s WHERE Toestel_ID = %s", (w, toestel_id), commit=True)
|
||||
execute_query("UPDATE Eigendom SET Status = %s WHERE Toestel_ID = %s AND Datum_inlevering IS NULL",
|
||||
(w, toestel_id), commit=True)
|
||||
|
||||
|
||||
def is_geblokkeerd(toestel_id):
|
||||
try:
|
||||
ensure_geblokkeerd()
|
||||
rows = execute_query("SELECT Geblokkeerd FROM Toestellen WHERE Toestel_ID = %s", (toestel_id,))
|
||||
return bool(rows and int(rows[0]['Geblokkeerd'] or 0))
|
||||
except Exception:
|
||||
return False
|
||||
Reference in new issue
Block a user