diff --git a/.nicegui/storage_user_952a094b-3f32-475c-81e6-2a15d8fa4b33.json b/.nicegui/storage_user_952a094b-3f32-475c-81e6-2a15d8fa4b33.json new file mode 100644 index 0000000..3edffa1 --- /dev/null +++ b/.nicegui/storage_user_952a094b-3f32-475c-81e6-2a15d8fa4b33.json @@ -0,0 +1 @@ +{"username": "admin", "authenticated": true, "id": 0, "level": 0, "name": "Matteo Benedetto"} \ No newline at end of file diff --git a/.nicegui/storage_user_ebbb4383-dc23-4773-a380-dc0ffd0fe85b.json b/.nicegui/storage_user_ebbb4383-dc23-4773-a380-dc0ffd0fe85b.json new file mode 100644 index 0000000..3edffa1 --- /dev/null +++ b/.nicegui/storage_user_ebbb4383-dc23-4773-a380-dc0ffd0fe85b.json @@ -0,0 +1 @@ +{"username": "admin", "authenticated": true, "id": 0, "level": 0, "name": "Matteo Benedetto"} \ No newline at end of file diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000..4bc9cff Binary files /dev/null and b/assets/favicon.ico differ diff --git a/csvz.py b/csvz.py new file mode 100644 index 0000000..306b9eb --- /dev/null +++ b/csvz.py @@ -0,0 +1,22 @@ +import csv +import json + +csvfile = open('allievi.csv', 'r') +jsonfile = open('file.json', 'w') + +reader = csv.reader(csvfile) +next(reader, None) # skip the headers + +for row in reader: + data = {} + data['nome'] = row[1] + data['cognome'] = row[2] + data['livello'] = int(row[0].split()[1]) # assuming 'Beginner 1' should become 1 + data['sede'] = 0 # static value + data['telefono'] = row[3] + data['instagram'] = '@' + row[1] # assuming Instagram handle is @ + data['email'] = row[4] if row[4] else "" # default email if not provided + data['pagamenti'] = [] + data['presenze'] = [] + json.dump(data, jsonfile) + jsonfile.write('\n') \ No newline at end of file diff --git a/db/letsswing/.prettierrc b/db/letsswing/.prettierrc new file mode 100644 index 0000000..222861c --- /dev/null +++ b/db/letsswing/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 2, + "useTabs": false +} diff --git a/db/letsswing/lezioni.json b/db/letsswing/lezioni.json new file mode 100644 index 0000000..66229c5 --- /dev/null +++ b/db/letsswing/lezioni.json @@ -0,0 +1,215 @@ +[ +{"sede": 1, "livello": 0, "data": "2023-10-02 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71b9"}}, +{"sede": 0, "livello": 0, "data": "2023-10-04 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71ba"}}, +{"sede": 0, "livello": 1, "data": "2023-10-04 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71bb"}}, +{"sede": 1, "livello": 0, "data": "2023-10-09 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71bc"}}, +{"sede": 0, "livello": 0, "data": "2023-10-11 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71bd"}}, +{"sede": 0, "livello": 1, "data": "2023-10-11 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71be"}}, +{"sede": 1, "livello": 0, "data": "2023-10-16 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71bf"}}, +{"sede": 0, "livello": 0, "data": "2023-10-18 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71c0"}}, +{"sede": 0, "livello": 1, "data": "2023-10-18 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71c1"}}, +{"sede": 1, "livello": 0, "data": "2023-10-23 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71c2"}}, +{"sede": 0, "livello": 0, "data": "2023-10-25 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71c3"}}, +{"sede": 0, "livello": 1, "data": "2023-10-25 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71c4"}}, +{"sede": 1, "livello": 0, "data": "2023-10-30 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71c5"}}, +{"sede": 0, "livello": 0, "data": "2023-11-01 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71c6"}}, +{"sede": 0, "livello": 1, "data": "2023-11-01 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71c7"}}, +{"sede": 1, "livello": 0, "data": "2023-11-06 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71c8"}}, +{"sede": 0, "livello": 0, "data": "2023-11-08 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71c9"}}, +{"sede": 0, "livello": 1, "data": "2023-11-08 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71ca"}}, +{"sede": 1, "livello": 0, "data": "2023-11-13 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71cb"}}, +{"sede": 0, "livello": 0, "data": "2023-11-15 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71cc"}}, +{"sede": 0, "livello": 1, "data": "2023-11-15 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71cd"}}, +{"sede": 1, "livello": 0, "data": "2023-11-20 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71ce"}}, +{"sede": 0, "livello": 0, "data": "2023-11-22 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71cf"}}, +{"sede": 0, "livello": 1, "data": "2023-11-22 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71d0"}}, +{"sede": 1, "livello": 0, "data": "2023-11-27 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71d1"}}, +{"sede": 0, "livello": 0, "data": "2023-11-29 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71d2"}}, +{"sede": 0, "livello": 1, "data": "2023-11-29 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71d3"}}, +{"sede": 1, "livello": 0, "data": "2023-12-04 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71d4"}}, +{"sede": 0, "livello": 0, "data": "2023-12-06 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71d5"}}, +{"sede": 0, "livello": 1, "data": "2023-12-06 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71d6"}}, +{"sede": 1, "livello": 0, "data": "2023-12-11 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71d7"}}, +{"sede": 0, "livello": 0, "data": "2023-12-13 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71d8"}}, +{"sede": 0, "livello": 1, "data": "2023-12-13 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71d9"}}, +{"sede": 1, "livello": 0, "data": "2023-12-18 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71da"}}, +{"sede": 0, "livello": 0, "data": "2023-12-20 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71db"}}, +{"sede": 0, "livello": 1, "data": "2023-12-20 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71dc"}}, +{"sede": 1, "livello": 0, "data": "2023-12-25 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71dd"}}, +{"sede": 0, "livello": 0, "data": "2023-12-27 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71de"}}, +{"sede": 0, "livello": 1, "data": "2023-12-27 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71df"}}, +{"sede": 1, "livello": 0, "data": "2024-01-01 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71e0"}}, +{"sede": 0, "livello": 0, "data": "2024-01-03 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71e1"}}, +{"sede": 0, "livello": 1, "data": "2024-01-03 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71e2"}}, +{"sede": 1, "livello": 0, "data": "2024-01-08 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71e3"}}, +{"sede": 0, "livello": 0, "data": "2024-01-10 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71e4"}}, +{"sede": 0, "livello": 1, "data": "2024-01-10 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71e5"}}, +{"sede": 1, "livello": 0, "data": "2024-01-15 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71e6"}}, +{"sede": 0, "livello": 0, "data": "2024-01-17 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71e7"}}, +{"sede": 0, "livello": 1, "data": "2024-01-17 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71e8"}}, +{"sede": 1, "livello": 0, "data": "2024-01-22 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71e9"}}, +{"sede": 0, "livello": 0, "data": "2024-01-24 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71ea"}}, +{"sede": 0, "livello": 1, "data": "2024-01-24 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71eb"}}, +{"sede": 1, "livello": 0, "data": "2024-01-29 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71ec"}}, +{"sede": 0, "livello": 0, "data": "2024-01-31 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71ed"}}, +{"sede": 0, "livello": 1, "data": "2024-01-31 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71ee"}}, +{"sede": 1, "livello": 0, "data": "2024-02-05 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71ef"}}, +{"sede": 0, "livello": 0, "data": "2024-02-07 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71f0"}}, +{"sede": 0, "livello": 1, "data": "2024-02-07 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71f1"}}, +{"sede": 1, "livello": 0, "data": "2024-02-12 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71f2"}}, +{"sede": 0, "livello": 0, "data": "2024-02-14 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71f3"}}, +{"sede": 0, "livello": 1, "data": "2024-02-14 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71f4"}}, +{"sede": 1, "livello": 0, "data": "2024-02-19 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71f5"}}, +{"sede": 0, "livello": 0, "data": "2024-02-21 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71f6"}}, +{"sede": 0, "livello": 1, "data": "2024-02-21 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71f7"}}, +{"sede": 1, "livello": 0, "data": "2024-02-26 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71f8"}}, +{"sede": 0, "livello": 0, "data": "2024-02-28 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71f9"}}, +{"sede": 0, "livello": 1, "data": "2024-02-28 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71fa"}}, +{"sede": 1, "livello": 0, "data": "2024-03-04 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71fb"}}, +{"sede": 0, "livello": 0, "data": "2024-03-06 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71fc"}}, +{"sede": 0, "livello": 1, "data": "2024-03-06 20:30:00", "_id": {"$oid": "65075496af4e5761eefc71fd"}}, +{"sede": 1, "livello": 0, "data": "2024-03-11 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71fe"}}, +{"sede": 0, "livello": 0, "data": "2024-03-13 19:30:00", "_id": {"$oid": "65075496af4e5761eefc71ff"}}, +{"sede": 0, "livello": 1, "data": "2024-03-13 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7200"}}, +{"sede": 1, "livello": 0, "data": "2024-03-18 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7201"}}, +{"sede": 0, "livello": 0, "data": "2024-03-20 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7202"}}, +{"sede": 0, "livello": 1, "data": "2024-03-20 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7203"}}, +{"sede": 1, "livello": 0, "data": "2024-03-25 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7204"}}, +{"sede": 0, "livello": 0, "data": "2024-03-27 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7205"}}, +{"sede": 0, "livello": 1, "data": "2024-03-27 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7206"}}, +{"sede": 1, "livello": 0, "data": "2024-04-01 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7207"}}, +{"sede": 0, "livello": 0, "data": "2024-04-03 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7208"}}, +{"sede": 0, "livello": 1, "data": "2024-04-03 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7209"}}, +{"sede": 1, "livello": 0, "data": "2024-04-08 19:30:00", "_id": {"$oid": "65075496af4e5761eefc720a"}}, +{"sede": 0, "livello": 0, "data": "2024-04-10 19:30:00", "_id": {"$oid": "65075496af4e5761eefc720b"}}, +{"sede": 0, "livello": 1, "data": "2024-04-10 20:30:00", "_id": {"$oid": "65075496af4e5761eefc720c"}}, +{"sede": 1, "livello": 0, "data": "2024-04-15 19:30:00", "_id": {"$oid": "65075496af4e5761eefc720d"}}, +{"sede": 0, "livello": 0, "data": "2024-04-17 19:30:00", "_id": {"$oid": "65075496af4e5761eefc720e"}}, +{"sede": 0, "livello": 1, "data": "2024-04-17 20:30:00", "_id": {"$oid": "65075496af4e5761eefc720f"}}, +{"sede": 1, "livello": 0, "data": "2024-04-22 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7210"}}, +{"sede": 0, "livello": 0, "data": "2024-04-24 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7211"}}, +{"sede": 0, "livello": 1, "data": "2024-04-24 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7212"}}, +{"sede": 1, "livello": 0, "data": "2024-04-29 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7213"}}, +{"sede": 0, "livello": 0, "data": "2024-05-01 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7214"}}, +{"sede": 0, "livello": 1, "data": "2024-05-01 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7215"}}, +{"sede": 1, "livello": 0, "data": "2024-05-06 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7216"}}, +{"sede": 0, "livello": 0, "data": "2024-05-08 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7217"}}, +{"sede": 0, "livello": 1, "data": "2024-05-08 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7218"}}, +{"sede": 1, "livello": 0, "data": "2024-05-13 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7219"}}, +{"sede": 0, "livello": 0, "data": "2024-05-15 19:30:00", "_id": {"$oid": "65075496af4e5761eefc721a"}}, +{"sede": 0, "livello": 1, "data": "2024-05-15 20:30:00", "_id": {"$oid": "65075496af4e5761eefc721b"}}, +{"sede": 1, "livello": 0, "data": "2024-05-20 19:30:00", "_id": {"$oid": "65075496af4e5761eefc721c"}}, +{"sede": 0, "livello": 0, "data": "2024-05-22 19:30:00", "_id": {"$oid": "65075496af4e5761eefc721d"}}, +{"sede": 0, "livello": 1, "data": "2024-05-22 20:30:00", "_id": {"$oid": "65075496af4e5761eefc721e"}}, +{"sede": 1, "livello": 0, "data": "2024-05-27 19:30:00", "_id": {"$oid": "65075496af4e5761eefc721f"}}, +{"sede": 0, "livello": 0, "data": "2024-05-29 19:30:00", "_id": {"$oid": "65075496af4e5761eefc7220"}}, +{"sede": 0, "livello": 1, "data": "2024-05-29 20:30:00", "_id": {"$oid": "65075496af4e5761eefc7221"}}, +{"sede": 1, "livello": 0, "data": "2023-09-25 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9a6"}}, +{"sede": 0, "livello": 0, "data": "2023-09-27 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9a7"}}, +{"sede": 0, "livello": 1, "data": "2023-09-27 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9a8"}}, +{"sede": 1, "livello": 0, "data": "2023-10-02 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9a9"}}, +{"sede": 0, "livello": 0, "data": "2023-10-04 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9aa"}}, +{"sede": 0, "livello": 1, "data": "2023-10-04 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9ab"}}, +{"sede": 1, "livello": 0, "data": "2023-10-09 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9ac"}}, +{"sede": 0, "livello": 0, "data": "2023-10-11 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9ad"}}, +{"sede": 0, "livello": 1, "data": "2023-10-11 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9ae"}}, +{"sede": 1, "livello": 0, "data": "2023-10-16 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9af"}}, +{"sede": 0, "livello": 0, "data": "2023-10-18 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9b0"}}, +{"sede": 0, "livello": 1, "data": "2023-10-18 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9b1"}}, +{"sede": 1, "livello": 0, "data": "2023-10-23 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9b2"}}, +{"sede": 0, "livello": 0, "data": "2023-10-25 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9b3"}}, +{"sede": 0, "livello": 1, "data": "2023-10-25 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9b4"}}, +{"sede": 1, "livello": 0, "data": "2023-10-30 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9b5"}}, +{"sede": 0, "livello": 0, "data": "2023-11-01 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9b6"}}, +{"sede": 0, "livello": 1, "data": "2023-11-01 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9b7"}}, +{"sede": 1, "livello": 0, "data": "2023-11-06 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9b8"}}, +{"sede": 0, "livello": 0, "data": "2023-11-08 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9b9"}}, +{"sede": 0, "livello": 1, "data": "2023-11-08 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9ba"}}, +{"sede": 1, "livello": 0, "data": "2023-11-13 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9bb"}}, +{"sede": 0, "livello": 0, "data": "2023-11-15 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9bc"}}, +{"sede": 0, "livello": 1, "data": "2023-11-15 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9bd"}}, +{"sede": 1, "livello": 0, "data": "2023-11-20 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9be"}}, +{"sede": 0, "livello": 0, "data": "2023-11-22 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9bf"}}, +{"sede": 0, "livello": 1, "data": "2023-11-22 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9c0"}}, +{"sede": 1, "livello": 0, "data": "2023-11-27 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9c1"}}, +{"sede": 0, "livello": 0, "data": "2023-11-29 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9c2"}}, +{"sede": 0, "livello": 1, "data": "2023-11-29 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9c3"}}, +{"sede": 1, "livello": 0, "data": "2023-12-04 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9c4"}}, +{"sede": 0, "livello": 0, "data": "2023-12-06 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9c5"}}, +{"sede": 0, "livello": 1, "data": "2023-12-06 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9c6"}}, +{"sede": 1, "livello": 0, "data": "2023-12-11 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9c7"}}, +{"sede": 0, "livello": 0, "data": "2023-12-13 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9c8"}}, +{"sede": 0, "livello": 1, "data": "2023-12-13 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9c9"}}, +{"sede": 1, "livello": 0, "data": "2023-12-18 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9ca"}}, +{"sede": 0, "livello": 0, "data": "2023-12-20 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9cb"}}, +{"sede": 0, "livello": 1, "data": "2023-12-20 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9cc"}}, +{"sede": 1, "livello": 0, "data": "2023-12-25 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9cd"}}, +{"sede": 0, "livello": 0, "data": "2023-12-27 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9ce"}}, +{"sede": 0, "livello": 1, "data": "2023-12-27 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9cf"}}, +{"sede": 1, "livello": 0, "data": "2024-01-01 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9d0"}}, +{"sede": 0, "livello": 0, "data": "2024-01-03 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9d1"}}, +{"sede": 0, "livello": 1, "data": "2024-01-03 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9d2"}}, +{"sede": 1, "livello": 0, "data": "2024-01-08 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9d3"}}, +{"sede": 0, "livello": 0, "data": "2024-01-10 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9d4"}}, +{"sede": 0, "livello": 1, "data": "2024-01-10 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9d5"}}, +{"sede": 1, "livello": 0, "data": "2024-01-15 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9d6"}}, +{"sede": 0, "livello": 0, "data": "2024-01-17 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9d7"}}, +{"sede": 0, "livello": 1, "data": "2024-01-17 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9d8"}}, +{"sede": 1, "livello": 0, "data": "2024-01-22 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9d9"}}, +{"sede": 0, "livello": 0, "data": "2024-01-24 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9da"}}, +{"sede": 0, "livello": 1, "data": "2024-01-24 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9db"}}, +{"sede": 1, "livello": 0, "data": "2024-01-29 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9dc"}}, +{"sede": 0, "livello": 0, "data": "2024-01-31 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9dd"}}, +{"sede": 0, "livello": 1, "data": "2024-01-31 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9de"}}, +{"sede": 1, "livello": 0, "data": "2024-02-05 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9df"}}, +{"sede": 0, "livello": 0, "data": "2024-02-07 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9e0"}}, +{"sede": 0, "livello": 1, "data": "2024-02-07 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9e1"}}, +{"sede": 1, "livello": 0, "data": "2024-02-12 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9e2"}}, +{"sede": 0, "livello": 0, "data": "2024-02-14 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9e3"}}, +{"sede": 0, "livello": 1, "data": "2024-02-14 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9e4"}}, +{"sede": 1, "livello": 0, "data": "2024-02-19 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9e5"}}, +{"sede": 0, "livello": 0, "data": "2024-02-21 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9e6"}}, +{"sede": 0, "livello": 1, "data": "2024-02-21 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9e7"}}, +{"sede": 1, "livello": 0, "data": "2024-02-26 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9e8"}}, +{"sede": 0, "livello": 0, "data": "2024-02-28 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9e9"}}, +{"sede": 0, "livello": 1, "data": "2024-02-28 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9ea"}}, +{"sede": 1, "livello": 0, "data": "2024-03-04 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9eb"}}, +{"sede": 0, "livello": 0, "data": "2024-03-06 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9ec"}}, +{"sede": 0, "livello": 1, "data": "2024-03-06 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9ed"}}, +{"sede": 1, "livello": 0, "data": "2024-03-11 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9ee"}}, +{"sede": 0, "livello": 0, "data": "2024-03-13 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9ef"}}, +{"sede": 0, "livello": 1, "data": "2024-03-13 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9f0"}}, +{"sede": 1, "livello": 0, "data": "2024-03-18 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9f1"}}, +{"sede": 0, "livello": 0, "data": "2024-03-20 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9f2"}}, +{"sede": 0, "livello": 1, "data": "2024-03-20 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9f3"}}, +{"sede": 1, "livello": 0, "data": "2024-03-25 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9f4"}}, +{"sede": 0, "livello": 0, "data": "2024-03-27 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9f5"}}, +{"sede": 0, "livello": 1, "data": "2024-03-27 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9f6"}}, +{"sede": 1, "livello": 0, "data": "2024-04-01 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9f7"}}, +{"sede": 0, "livello": 0, "data": "2024-04-03 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9f8"}}, +{"sede": 0, "livello": 1, "data": "2024-04-03 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9f9"}}, +{"sede": 1, "livello": 0, "data": "2024-04-08 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9fa"}}, +{"sede": 0, "livello": 0, "data": "2024-04-10 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9fb"}}, +{"sede": 0, "livello": 1, "data": "2024-04-10 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9fc"}}, +{"sede": 1, "livello": 0, "data": "2024-04-15 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9fd"}}, +{"sede": 0, "livello": 0, "data": "2024-04-17 19:30:00", "_id": {"$oid": "65078edee77138409ec9f9fe"}}, +{"sede": 0, "livello": 1, "data": "2024-04-17 20:30:00", "_id": {"$oid": "65078edee77138409ec9f9ff"}}, +{"sede": 1, "livello": 0, "data": "2024-04-22 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa00"}}, +{"sede": 0, "livello": 0, "data": "2024-04-24 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa01"}}, +{"sede": 0, "livello": 1, "data": "2024-04-24 20:30:00", "_id": {"$oid": "65078edee77138409ec9fa02"}}, +{"sede": 1, "livello": 0, "data": "2024-04-29 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa03"}}, +{"sede": 0, "livello": 0, "data": "2024-05-01 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa04"}}, +{"sede": 0, "livello": 1, "data": "2024-05-01 20:30:00", "_id": {"$oid": "65078edee77138409ec9fa05"}}, +{"sede": 1, "livello": 0, "data": "2024-05-06 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa06"}}, +{"sede": 0, "livello": 0, "data": "2024-05-08 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa07"}}, +{"sede": 0, "livello": 1, "data": "2024-05-08 20:30:00", "_id": {"$oid": "65078edee77138409ec9fa08"}}, +{"sede": 1, "livello": 0, "data": "2024-05-13 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa09"}}, +{"sede": 0, "livello": 0, "data": "2024-05-15 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa0a"}}, +{"sede": 0, "livello": 1, "data": "2024-05-15 20:30:00", "_id": {"$oid": "65078edee77138409ec9fa0b"}}, +{"sede": 1, "livello": 0, "data": "2024-05-20 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa0c"}}, +{"sede": 0, "livello": 0, "data": "2024-05-22 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa0d"}}, +{"sede": 0, "livello": 1, "data": "2024-05-22 20:30:00", "_id": {"$oid": "65078edee77138409ec9fa0e"}}, +{"sede": 1, "livello": 0, "data": "2024-05-27 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa0f"}}, +{"sede": 0, "livello": 0, "data": "2024-05-29 19:30:00", "_id": {"$oid": "65078edee77138409ec9fa10"}}, +{"sede": 0, "livello": 1, "data": "2024-05-29 20:30:00", "_id": {"$oid": "65078edee77138409ec9fa11"}} +] \ No newline at end of file diff --git a/db/letsswing/livelli.json b/db/letsswing/livelli.json new file mode 100644 index 0000000..7fcd06f --- /dev/null +++ b/db/letsswing/livelli.json @@ -0,0 +1,5 @@ +[ +{"id": 3, "nome": "Advanced", "_id": {"$oid": "65082a3a04d206fd0a90cbd1"}}, +{"id": 2, "nome": "Improver", "_id": {"$oid": "65082a3a04d206fd0a90cbd2"}}, +{"id": 1, "nome": "Beginners", "_id": {"$oid": "65082a3a04d206fd0a90cbd3"}} +] \ No newline at end of file diff --git a/db/letsswing/sedi.json b/db/letsswing/sedi.json new file mode 100644 index 0000000..f701a39 --- /dev/null +++ b/db/letsswing/sedi.json @@ -0,0 +1,4 @@ +[ +{"id": 0, "nome": "matera", "_id": {"$oid": "65081ca20aaed05c1b550a09"}}, +{"id": 1, "nome": "altamura", "_id": {"$oid": "65081ca20aaed05c1b550a0a"}} +] \ No newline at end of file diff --git a/db/letsswing/users.json b/db/letsswing/users.json index a2185ab..0cb079c 100644 --- a/db/letsswing/users.json +++ b/db/letsswing/users.json @@ -1,6 +1,90 @@ [ -{"nome": "Jim", "cognome": "Doe", "livello": 1, "sede": 1, "telefono": "1234567890", "instagram": "@johndoe", "pagamenti": [], "presenze": ["2022-10-20 00:00:00", "2023-09-20 00:00:00", "2023-09-20 00:00:00", "2023-09-16 00:00:00", "2023-10-02 00:00:00", "2023-10-03 00:00:00"], "_id": {"$oid": "65058867e0fd4f3c838ebdee"}}, +{"nome": "Jim", "cognome": "Doe", "livello": 1, "sede": 1, "telefono": "1234567890", "instagram": "@johndoe", "pagamenti": ["2022-10-01 00:00:00"], "presenze": ["2022-10-20 00:00:00", "2023-09-20 00:00:00", "2023-09-20 00:00:00", "2023-09-16 00:00:00", "2023-10-02 00:00:00", "2023-10-03 00:00:00"], "_id": {"$oid": "65058867e0fd4f3c838ebdee"}}, {"nome": "Jim", "cognome": "Doe", "livello": 1, "sede": 1, "telefono": "1234567890", "instagram": "@johndoe", "pagamenti": [], "presenze": ["2023-09-20 00:00:00", "2023-09-20 00:00:00", "2023-09-20 00:00:00", "2023-09-20 00:00:00", "2023-09-20 00:00:00"], "_id": {"$oid": "65058993375740a81b75a9f4"}}, {"nome": "Jim", "cognome": "Doe", "livello": 1, "sede": 1, "telefono": "1234567890", "instagram": "@johndoe", "pagamenti": [], "presenze": [], "_id": {"$oid": "65058997515c441f46c71e08"}}, -{"nome": "Jim", "cognome": "Doe", "livello": 1, "sede": 1, "telefono": "1234567890", "instagram": "@johndoe", "pagamenti": [], "presenze": [], "_id": {"$oid": "6505bdd911f5ff2d8f876ec8"}} +{"nome": "Jim", "cognome": "Doe", "livello": 1, "sede": 1, "telefono": "1234567890", "instagram": "@johndoe", "pagamenti": [], "presenze": [], "_id": {"$oid": "6505bdd911f5ff2d8f876ec8"}}, +{"nome": "SARA", "cognome": "BALDONI", "livello": 2, "sede": 0, "telefono": "388 341 4470", "instagram": "@SARA", "email": "", "pagamenti": [], "presenze": ["2023-09-27 00:00:00", "2023-10-04 00:00:00", "2024-01-03 00:00:00"], "_id": {"$oid": "6507909f82043fdf3bdb2e74"}}, +{"nome": "ARGENSIA", "cognome": "BONORA", "livello": 1, "sede": 0, "telefono": "329 297 3561", "instagram": "@ARGENSIA", "email": "", "pagamenti": [], "presenze": ["2023-09-27 00:00:00"], "_id": {"$oid": "6507909f82043fdf3bdb2e75"}}, +{"nome": "MARIA VITTORIA ", "cognome": "CARNOVALE", "livello": 1, "sede": 0, "telefono": "340 700 2721", "instagram": "@MARIA VITTORIA ", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e76"}}, +{"nome": "MARILIA", "cognome": "CASO", "livello": 1, "sede": 0, "telefono": "348 327 8981", "instagram": "@MARILIA", "email": "gabbiano246@hotmail.com", "pagamenti": [], "presenze": ["2023-10-18 00:00:00"], "_id": {"$oid": "6507909f82043fdf3bdb2e77"}}, +{"nome": "ANGELO", "cognome": "CICCHETTI", "livello": 1, "sede": 0, "telefono": "348 439 7116", "instagram": "@ANGELO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e78"}}, +{"nome": "ANTONIETTA", "cognome": "CIRIGLIANO", "livello": 1, "sede": 0, "telefono": "339 851 4542", "instagram": "@ANTONIETTA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e79"}}, +{"nome": "ROSSANA", "cognome": "DE SIMMEO", "livello": 1, "sede": 0, "telefono": "333 589 2872", "instagram": "@ROSSANA", "email": "rossana.dess@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e7a"}}, +{"nome": "ENRICA", "cognome": "DESTENA", "livello": 1, "sede": 0, "telefono": "327 955 9479", "instagram": "@ENRICA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e7b"}}, +{"nome": "ANNA", "cognome": "DI CUIA", "livello": 1, "sede": 0, "telefono": "334 386 6875", "instagram": "@ANNA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e7c"}}, +{"nome": "ANGELICA", "cognome": "DILIDDO", "livello": 1, "sede": 0, "telefono": "333 890 3365", "instagram": "@ANGELICA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e7d"}}, +{"nome": "FRANCESCO", "cognome": "ERAMO", "livello": 1, "sede": 0, "telefono": "333 304 8801", "instagram": "@FRANCESCO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e7e"}}, +{"nome": "PAOLO", "cognome": "FASANO", "livello": 1, "sede": 0, "telefono": "036 856 6479", "instagram": "@PAOLO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e7f"}}, +{"nome": "ROSA", "cognome": "FRANCOMAGRO", "livello": 1, "sede": 0, "telefono": "320 625 7483", "instagram": "@ROSA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e80"}}, +{"nome": "LUCIA", "cognome": "FRESCURA", "livello": 1, "sede": 0, "telefono": "388 160 5146", "instagram": "@LUCIA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e81"}}, +{"nome": "MARIABRUNA", "cognome": "LIMITE", "livello": 1, "sede": 0, "telefono": "389 504 5268", "instagram": "@MARIABRUNA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e82"}}, +{"nome": "FRANCESCA", "cognome": "LIONETTI", "livello": 1, "sede": 0, "telefono": "329 782 1749", "instagram": "@FRANCESCA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e83"}}, +{"nome": "MARIANNA", "cognome": "LOIUDICE", "livello": 1, "sede": 0, "telefono": "328 146 8450", "instagram": "@MARIANNA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e84"}}, +{"nome": "IVAN", "cognome": "MAGGIORE", "livello": 1, "sede": 0, "telefono": "339 472 2512", "instagram": "@IVAN", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e85"}}, +{"nome": "ANTONIO", "cognome": "MALCANGI", "livello": 1, "sede": 0, "telefono": "333 268 8744", "instagram": "@ANTONIO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e86"}}, +{"nome": "FRANCESCO", "cognome": "MARAGLINO", "livello": 1, "sede": 0, "telefono": "340 874 3698", "instagram": "@FRANCESCO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e87"}}, +{"nome": "MARIELLA ", "cognome": "MARTINO", "livello": 1, "sede": 0, "telefono": "339 261 4130", "instagram": "@MARIELLA ", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e88"}}, +{"nome": "ELGA", "cognome": "MELUCCI", "livello": 1, "sede": 0, "telefono": "320 147 1346", "instagram": "@ELGA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e89"}}, +{"nome": "MARTINA", "cognome": "MONTAGANO", "livello": 1, "sede": 0, "telefono": "339 380 4392", "instagram": "@MARTINA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e8a"}}, +{"nome": "VITO", "cognome": "MONTEMURRO", "livello": 1, "sede": 0, "telefono": "320 694 0666", "instagram": "@VITO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e8b"}}, +{"nome": "PAOLO", "cognome": "MORETTI", "livello": 1, "sede": 0, "telefono": "389 640 7781", "instagram": "@PAOLO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e8c"}}, +{"nome": "NUNZIO", "cognome": "MORO", "livello": 1, "sede": 0, "telefono": "333 371 8003", "instagram": "@NUNZIO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e8d"}}, +{"nome": "PAOLA", "cognome": "PAOLICELLI", "livello": 1, "sede": 0, "telefono": "320 742 1274", "instagram": "@PAOLA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e8e"}}, +{"nome": "ELENA", "cognome": "PARISI", "livello": 1, "sede": 0, "telefono": "347 834 5664", "instagram": "@ELENA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e8f"}}, +{"nome": "MANUELA", "cognome": "PERSIA", "livello": 1, "sede": 0, "telefono": "320 947 5707", "instagram": "@MANUELA", "email": "manuela.persia@hotmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e90"}}, +{"nome": "IVAN", "cognome": "PERSIA", "livello": 1, "sede": 0, "telefono": "320 381 8396", "instagram": "@IVAN", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e91"}}, +{"nome": "MARIA", "cognome": "PETRONELLA", "livello": 1, "sede": 0, "telefono": "320 838 0131", "instagram": "@MARIA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e92"}}, +{"nome": "ALESSIA", "cognome": "PLASMATI", "livello": 1, "sede": 0, "telefono": "327 943 3511", "instagram": "@ALESSIA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e93"}}, +{"nome": "ANTONIO", "cognome": "RICCIULLI", "livello": 1, "sede": 0, "telefono": "320 486 6306", "instagram": "@ANTONIO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e94"}}, +{"nome": "MARTINA", "cognome": "RIPOLI", "livello": 1, "sede": 0, "telefono": "327 619 2581", "instagram": "@MARTINA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e95"}}, +{"nome": "ANGELO", "cognome": "ROMANO", "livello": 1, "sede": 0, "telefono": "334 292 9743", "instagram": "@ANGELO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e96"}}, +{"nome": "SANTINA", "cognome": "SCHIAVONE", "livello": 1, "sede": 0, "telefono": "338 925 0994", "instagram": "@SANTINA", "email": "schiavonesantininaines@libero.it", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e97"}}, +{"nome": "DOMENICO", "cognome": "STRAMMIELLO", "livello": 1, "sede": 0, "telefono": "333 356 5593", "instagram": "@DOMENICO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e98"}}, +{"nome": "VALENTINA", "cognome": "TATARANNI", "livello": 1, "sede": 0, "telefono": "393 941 7045", "instagram": "@VALENTINA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e99"}}, +{"nome": "ROBERTA", "cognome": "TRITTO", "livello": 1, "sede": 0, "telefono": "327 006 4600", "instagram": "@ROBERTA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e9a"}}, +{"nome": "AMY ANN", "cognome": "WEIDEMAN", "livello": 1, "sede": 0, "telefono": "339 282 3618", "instagram": "@AMY ANN", "email": "amyannweideman18@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e9b"}}, +{"nome": "CLAUDIA", "cognome": "ZANCAN", "livello": 1, "sede": 0, "telefono": "346 137 5975", "instagram": "@CLAUDIA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e9c"}}, +{"nome": "MATHEUS", "cognome": "ANDRADE", "livello": 2, "sede": 0, "telefono": "327 460 5204", "instagram": "@MATHEUS", "email": "matheusandrade64@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e9d"}}, +{"nome": "NADIA", "cognome": "DELLA CHIARA", "livello": 2, "sede": 0, "telefono": "339 532 9718", "instagram": "@NADIA", "email": "feelosophymatera@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e9e"}}, +{"nome": "CARMINE", "cognome": "DENTE", "livello": 2, "sede": 0, "telefono": "327 424 3327", "instagram": "@CARMINE", "email": "denteca@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2e9f"}}, +{"nome": "EMANUELE", "cognome": "DI PEDE", "livello": 2, "sede": 0, "telefono": "339 491 2760", "instagram": "@EMANUELE", "email": "emadip@inwind.it", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea0"}}, +{"nome": "ANITA", "cognome": "FERRORELLI", "livello": 2, "sede": 0, "telefono": "380 347 8179", "instagram": "@ANITA", "email": "ntfrrll@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea1"}}, +{"nome": "MICHELE", "cognome": "FORTE", "livello": 2, "sede": 0, "telefono": "368 374 7215", "instagram": "@MICHELE", "email": "fortemi@hotmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea2"}}, +{"nome": "MARIA CHIARA", "cognome": "GIORDANO", "livello": 2, "sede": 0, "telefono": "347 468 9673", "instagram": "@MARIA CHIARA", "email": "machigiordano@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea3"}}, +{"nome": "ANDREA", "cognome": "IACOVAZZI", "livello": 2, "sede": 0, "telefono": "329 392 1927", "instagram": "@ANDREA", "email": "andiacovazzi@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea4"}}, +{"nome": "ALESSIA", "cognome": "MARAGNO", "livello": 2, "sede": 0, "telefono": "329 169 9744", "instagram": "@ALESSIA", "email": "alessiamaragno@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea5"}}, +{"nome": "MARINA", "cognome": "MARCANGELO", "livello": 2, "sede": 0, "telefono": "339 143 7405", "instagram": "@MARINA", "email": "marinamarcang@tiscali.it", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea6"}}, +{"nome": "LUCIANA", "cognome": "MONTEMURRO", "livello": 2, "sede": 0, "telefono": "331 770 6338", "instagram": "@LUCIANA", "email": "montemurroluciana72@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea7"}}, +{"nome": "DEBORA", "cognome": "PEPE", "livello": 2, "sede": 0, "telefono": "328 861 0876", "instagram": "@DEBORA", "email": "debora.pepe24@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea8"}}, +{"nome": "MILENA", "cognome": "PISCIOTTA", "livello": 2, "sede": 0, "telefono": "328 094 3505", "instagram": "@MILENA", "email": "milenagne@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ea9"}}, +{"nome": "BIBIAN", "cognome": "PONTICELLI", "livello": 2, "sede": 0, "telefono": "329 435 3311", "instagram": "@BIBIAN", "email": "b.ponticelli@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eaa"}}, +{"nome": "VITTORIO DANIELE", "cognome": "QUERCIA", "livello": 2, "sede": 0, "telefono": "375 541 0267", "instagram": "@VITTORIO DANIELE", "email": "danioak@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eab"}}, +{"nome": "ANNALISA", "cognome": "SCALCIONE", "livello": 2, "sede": 0, "telefono": "SCALCIONE", "instagram": "@ANNALISA", "email": "cindarellservice@libero.it", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eac"}}, +{"nome": "LUCIANO", "cognome": "TAMBORRINO", "livello": 2, "sede": 0, "telefono": "393 625 9236", "instagram": "@LUCIANO", "email": "lucianot74@hotmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ead"}}, +{"nome": "PAOLA", "cognome": "TOMA", "livello": 2, "sede": 0, "telefono": "", "instagram": "@PAOLA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eae"}}, +{"nome": "PAOLO", "cognome": "AGRUSTI", "livello": 2, "sede": 0, "telefono": "388 814 9897", "instagram": "@PAOLO", "email": "agrusti@hotmail.it", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eaf"}}, +{"nome": "LUCIA", "cognome": "CALIA", "livello": 2, "sede": 0, "telefono": "329 618 7445", "instagram": "@LUCIA", "email": "luciacalia378@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb0"}}, +{"nome": "FLORA", "cognome": "D'ANTONA", "livello": 2, "sede": 0, "telefono": "320 020 5094", "instagram": "@FLORA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb1"}}, +{"nome": "ANNA", "cognome": "DEZIO", "livello": 2, "sede": 0, "telefono": "349 431 6974", "instagram": "@ANNA", "email": "rest.annadezio@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb2"}}, +{"nome": "GIOVANNI", "cognome": "DILEO", "livello": 2, "sede": 0, "telefono": "", "instagram": "@GIOVANNI", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb3"}}, +{"nome": "PASQUALE", "cognome": "FIORE", "livello": 2, "sede": 0, "telefono": "328 666 4022", "instagram": "@PASQUALE", "email": "fiorepaky@hotmail.it", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb4"}}, +{"nome": "CARMELA", "cognome": "GUANTI", "livello": 2, "sede": 0, "telefono": "351 590 4222", "instagram": "@CARMELA", "email": "cagem2013@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb5"}}, +{"nome": "OUSMAN", "cognome": "JARJU", "livello": 2, "sede": 0, "telefono": "379 148 9396", "instagram": "@OUSMAN", "email": "ousmanjarju30@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb6"}}, +{"nome": "EGIDIO", "cognome": "LACANNA", "livello": 2, "sede": 0, "telefono": "", "instagram": "@EGIDIO", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb7"}}, +{"nome": "ROSA", "cognome": "LAGONIGRO", "livello": 2, "sede": 0, "telefono": "", "instagram": "@ROSA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb8"}}, +{"nome": "MARZIA", "cognome": "LIONETTI", "livello": 2, "sede": 0, "telefono": "", "instagram": "@MARZIA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eb9"}}, +{"nome": "MARIKA", "cognome": "MONESE", "livello": 2, "sede": 0, "telefono": "366-2872715", "instagram": "@MARIKA", "email": "marikamonese@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2eba"}}, +{"nome": "ANGELICA", "cognome": "NANNAVECCHIA", "livello": 2, "sede": 0, "telefono": "", "instagram": "@ANGELICA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ebb"}}, +{"nome": "VITALBA", "cognome": "NICOLETTI", "livello": 2, "sede": 0, "telefono": "328 974 0125", "instagram": "@VITALBA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ebc"}}, +{"nome": "ALEXANDRA", "cognome": "NORRIS", "livello": 2, "sede": 0, "telefono": "371 692 8355", "instagram": "@ALEXANDRA", "email": "allyenorris@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ebd"}}, +{"nome": "MATTIA", "cognome": "OLIVETO", "livello": 2, "sede": 0, "telefono": "347 483 9344", "instagram": "@MATTIA", "email": "cesc.mattia@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ebe"}}, +{"nome": "ALESSANDRO", "cognome": "QUERCIA", "livello": 2, "sede": 0, "telefono": "339 537 6867", "instagram": "@ALESSANDRO", "email": "querciaalessandro813@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ebf"}}, +{"nome": "MARISA", "cognome": "RONDINONE", "livello": 2, "sede": 0, "telefono": "327 989 5992", "instagram": "@MARISA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ec0"}}, +{"nome": "JOSEPH", "cognome": "SALZBERG", "livello": 2, "sede": 0, "telefono": "", "instagram": "@JOSEPH", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ec1"}}, +{"nome": "IMMA", "cognome": "TRALLI", "livello": 2, "sede": 0, "telefono": "328 164 0272", "instagram": "@IMMA", "email": "tralli.imma@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ec2"}}, +{"nome": "SILVIA", "cognome": "VIZZIELLO", "livello": 2, "sede": 0, "telefono": "327 216 8317", "instagram": "@SILVIA", "email": "silviavizziello2002@gmail.com", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ec3"}}, +{"nome": "LORENA", "cognome": "", "livello": 2, "sede": 0, "telefono": "", "instagram": "@LORENA", "email": "", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ec4"}}, +{"nome": "VASILKI", "cognome": "", "livello": 2, "sede": 0, "telefono": "30694 846 7844", "instagram": "@VASILKI", "email": "vaswluz@outlook.com.gr", "pagamenti": [], "presenze": [], "_id": {"$oid": "6507909f82043fdf3bdb2ec5"}}, +{"nome": "v bnc", "cognome": "bbcn ", "telefono": "n dn", "email": "", "sede": 0, "livello": 1, "pagamenti": [], "presenze": [], "_id": {"$oid": "650897787c2e6b1bede4da70"}}, +{"nome": "v bnc", "cognome": "bbcn ", "telefono": "n dn", "email": "", "sede": 0, "livello": 1, "pagamenti": [], "presenze": [], "_id": {"$oid": "6508977f7c2e6b1bede4da72"}} ] \ No newline at end of file diff --git a/main.py b/main.py index c602c96..7e3769c 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,4 @@ -from nicegui import ui +from nicegui import ui, app from datetime import datetime, timedelta from montydb import MontyClient from montydb.types.objectid import ObjectId @@ -9,7 +9,7 @@ import os from fastapi.responses import RedirectResponse - +passwords = {'admin': [0,'sw1ng3rs',0, "Matteo Benedetto"], 'user': [1,'pass',1, "Pippo"]} # Set the locale to Italian locale.setlocale(locale.LC_ALL, 'it_IT.utf8') @@ -23,25 +23,141 @@ conn = MontyClient("db") # Access your database and collection db = conn.letsswing -collection = db.users + # Routes -@ui.page('/', title="Let's Swing Admin",favicon="assets/favicon.ico") -def index_page() -> None: +@ui.page('/manager/{sede}/{livello}', title="Let's Swing Admin", favicon="assets/favicon.ico") +def manager_page(sede:int, livello:int) -> None: + #styling + ui.colors(primary='black', secondary="lightgray") + ui.query('body').style(f'font-family: sans-serif') + ############# + manage = manager.Manager() + manage.main(db, sede, livello) +# Routes +@ui.page('/', title="Let's Swing Admin", favicon="assets/favicon.ico") +def index_page() -> None: + ## LOGIN CHECK + if not app.storage.user.get('authenticated', False): + return RedirectResponse('/login') #styling ui.colors(primary='black', secondary="lightgray") ui.query('body').style(f'font-family: sans-serif') ############# - manager.main(collection) + def choose(sede, livello): + if int(livello) < 0: + page.refresh(sede) + else: + ui.open(f"/manager/{sede}/{livello}") + @ui.refreshable + def page(sede): + if int(sede) <0: + results = db.sedi.find() + ui.button(on_click=lambda: (app.storage.user.clear(), ui.open('/login')), icon='logout').props('outline round') + ui.row().classes("w-full") + with ui.column().classes("w-full h-screen place-items-center items-center").style(""): + ui.row().classes("grow") + for result in results: + ui.button(text=str(result['nome']).capitalize(),on_click=lambda id=result['id']:choose(id, -1)) + ui.row().classes("grow") + else: + results = db.livelli.find() + + with ui.row().classes("w-full"): + ui.icon("chevron_left", size="lg").on("click", lambda: page.refresh(-1)) + with ui.column().classes("w-full h-screen place-items-center items-center"): + ui.row().classes("grow") + for result in results: + ui.button(text=str(result['nome']).capitalize(),on_click=lambda id=result['id']:choose(sede, id)) + ui.row().classes("grow") + + ## FRONTEND + page(-1) -@ui.page('/user/{userid}', title="Let's Swing Admin",favicon="assets/favicon.ico") + +@ui.page('/user/{userid}', title="Let's Swing Admin", favicon="assets/favicon.ico") def user_page(userid: str) -> None: + + ## LOGIN CHECK + if not app.storage.user.get('authenticated', False): + return RedirectResponse('/login') + #styling + ui.colors(primary='black', secondary="lightgray") + ui.query('body').style(f'font-family: sans-serif') + ############# + + user.main(userid, db) + +@ui.page('/edit/{userid}/{sede}/{livello}', title="Let's Swing Admin", favicon="assets/favicon.ico") +def edit_page(userid: str, sede: int, livello: int) -> None: + + ## LOGIN CHECK + if not app.storage.user.get('authenticated', False): + return RedirectResponse('/login') #styling ui.colors(primary='black', secondary="lightgray") ui.query('body').style(f'font-family: sans-serif') ############# - user.main(userid, collection) + if userid!= "new": + result = db.users.find_one({"_id":ObjectId(userid)}) + + + async def save(): + data_submit = {k: v.value for k, v in data.items()} + if userid == "new": + data_submit['pagamenti']=[] + data_submit['presenze']=[] + db.users.insert_one(data_submit) + else: + print(data_submit) + db.users.update_one( + {"_id": ObjectId(userid)}, + {"$set": data_submit} + ) + os.kill(os.getpid(), signal.SIGUSR1) + await ui.run_javascript('history.back()', respond=False) + + ui.icon("chevron_left", size="lg").on("click", lambda: ui.run_javascript('history.back()', respond=False)) + with ui.column().classes("w-full h-screen place-items-center items-center").style(""): + data = {} + ui.row().classes("grow") + data['nome'] = ui.input(value=str(result['nome']).capitalize() if userid != "new" else None, placeholder="Nome").props('outline').classes('w-full') + data['cognome'] = ui.input(value=str(result['cognome']).capitalize() if userid != "new" else None, placeholder="Cognome").props('outline').classes('w-full') + data['telefono'] = ui.input(value=str(result['telefono']).capitalize() if userid != "new" else None, placeholder="Telefono").props('outline').classes('w-full') + data['email'] = ui.input(value=str(result['email']).capitalize() if userid != "new" else None, placeholder="email").props('outline').classes('w-full') + options = {o['id']: str(o['nome']).capitalize() for o in db.sedi.find()} + data['sede'] = ui.select(options, value=result['sede'] if userid != "new" else sede).props('outline').classes('w-full') + options = {o['id']: str(o['nome']).capitalize() for o in db.livelli.find()} + data['livello'] = ui.select(options, value=result['livello'] if userid != "new" else livello).props('outline').classes('w-full') + ui.button(text="Salva", on_click=save) + ui.row().classes("grow") + +@ui.page('/login',title="Let's Swing Admin", favicon="assets/favicon.ico") +def login() -> None: + + #styling + ui.colors(primary='black', secondary="lightgray") + ui.query('body').style(f'font-family: sans-serif;background-color:black') + ############# + + def try_login() -> None: # local function to avoid passing username and password as arguments + if passwords.get(username.value)[1] == password.value: + app.storage.user.update({'username': username.value, 'authenticated': True, 'id' : passwords.get(username.value)[0], "level": passwords.get(username.value)[2], "name": passwords.get(username.value)[3]}) + ui.open('/') + else: + ui.notify('username o password errata', color='negative') + + if app.storage.user.get('authenticated', False): + return RedirectResponse('/') + with ui.card().classes('absolute-center items-center'): + ui.image('assets/logo.svg') + ui.label('Let\'s Swing Admin').classes('text-2xl') + username = ui.input('Username').on('keydown.enter', try_login).classes('w-full') + password = ui.input('Password', password=True, password_toggle_button=True).on('keydown.enter', try_login) + ui.button('Log in', on_click=try_login) + + # Run main loop -ui.run(host="0.0.0.0") +ui.run(host="0.0.0.0", storage_secret='THIS_NEEDS_TO_BE_CHANGED') diff --git a/pages/__pycache__/manager.cpython-311.pyc b/pages/__pycache__/manager.cpython-311.pyc index b4422d8..4956af0 100644 Binary files a/pages/__pycache__/manager.cpython-311.pyc and b/pages/__pycache__/manager.cpython-311.pyc differ diff --git a/pages/__pycache__/user.cpython-311.pyc b/pages/__pycache__/user.cpython-311.pyc index d8cfe8f..d2e3a31 100644 Binary files a/pages/__pycache__/user.cpython-311.pyc and b/pages/__pycache__/user.cpython-311.pyc differ diff --git a/pages/manager.py b/pages/manager.py index e25d6bd..cdb29d0 100644 --- a/pages/manager.py +++ b/pages/manager.py @@ -2,88 +2,106 @@ from nicegui import ui import signal import os from datetime import datetime, timedelta +from montydb.database import MontyDatabase +class Manager: + def __init__(self): + self.current_time = datetime.now() + self.current_index = 0 -current_time = datetime.now() + def main(self, db: MontyDatabase, sede, livello): -def main(collection): - - def registra_presenza(id, flag): - current_day = current_time.replace(hour=0, minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') + users = db.users + lezioni = db.lezioni + lezioniCursore = lezioni.find({"livello": livello,"sede": sede}).sort([("data", 1)]) + lezioniArray = [datetime.strptime(l["data"],"%Y-%m-%d %H:%M:%S") for l in lezioniCursore] - if flag: - collection.update_one( - {"_id": id}, - {"$push": {"presenze": current_day}} - ) - else: - collection.update_one( - {"_id": id}, - {"$pull": {"presenze": current_day}} - ) - os.kill(os.getpid(), signal.SIGUSR1) - + for i, l in enumerate(lezioniArray): + if l > self.current_time: + self.current_index = i + self.current_time = l + break + + + def registra_presenza(id, flag): + current_day = self.current_time.replace(hour=0, minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') - @ui.refreshable - def time_selector(): - def set_time(flag): - # Specify that we want to use the global variable - global current_time if flag: - current_time += timedelta(hours=24) + users.update_one( + {"_id": id}, + {"$push": {"presenze": current_day}} + ) else: - # Subtract 24 hours - current_time -= timedelta(hours=24) - time_selector.refresh() - tabellaUtenti.refresh() + users.update_one( + {"_id": id}, + {"$pull": {"presenze": current_day}} + ) + os.kill(os.getpid(), signal.SIGUSR1) + + @ui.refreshable + def time_selector(): + def set_time(isNext): + if isNext: + self.current_index += 1 + else: + self.current_index -= 1 + + self.current_time = lezioniArray[self.current_index] + + time_selector.refresh() + tabellaUtenti.refresh() - with ui.row().classes("w-full items-center"): - ui.column().classes("grow") - with ui.column(): - ui.icon("arrow_left",size="md").on("click", lambda: set_time(False)) - date_label = current_time.strftime('%d %B, %Y') - ui.label(date_label).style("margin:auto auto;font-weight:600").classes('text-md') - with ui.column(): - ui.icon("arrow_right",size="md").on("click", lambda: set_time(True)) - ui.column().classes("grow") - - @ui.refreshable - def tabellaUtenti(): - rows = collection.find({"sede": 1}) - current_day = current_time.replace(hour=0, minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') - current_month = current_time.replace(day=1, hour=0, minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') - 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:'+( - "red" if not current_month in row['pagamenti'] and current_day in row['presenze'] else "black") - ).classes('text-md').on("click", lambda row_id=row['_id']: ui.open(f'user/{row_id}')) + with ui.row().classes("w-full items-center"): + ui.column().classes("grow") + with ui.column(): + if self.current_index > 0: + ui.icon("arrow_left",size="md").on("click", lambda: set_time(False)) + date_label = self.current_time.strftime('%d %B, %Y') + ui.label(date_label).style("margin:auto auto;font-weight:600").classes('text-md') with ui.column(): - - if current_day in row["presenze"]: - ui.button(color="primary", text= "presente", on_click= lambda row_id=row['_id']: registra_presenza(row_id, False)) - else: - ui.button(color="secondary", text= "assente", on_click= lambda row_id=row['_id']: registra_presenza(row_id, True)).style("min-width:100px") + if self.current_index +1 in range(0,len(lezioniArray)): + ui.icon("arrow_right",size="md").on("click", lambda: set_time(True)) + ui.column().classes("grow") - ui.separator() + @ui.refreshable + def tabellaUtenti(): + rows = users.find({"sede": sede, "livello": livello}) + current_day = self.current_time.replace(hour=0, minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') + current_month = self.current_time.replace(day=1, hour=0, minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') - def onSignal(signum, frame): - #ui.notify("signal") - tabellaUtenti.refresh() + for row in rows: + with ui.row().classes("w-full"): + with ui.column().classes("grow"): + + ui.label(f"{row['nome']} {row['cognome'][0].upper() if row['cognome'] else None}.").style('color:'+( + "red" if not current_month in row['pagamenti'] and current_day in row['presenze'] else "black") + ).classes('text-md').on("click", lambda row_id=row['_id']: ui.open(f'/user/{row_id}')) + with ui.column(): + + if current_day in row["presenze"]: + ui.button(color="primary", text= "presente", on_click= lambda row_id=row['_id']: registra_presenza(row_id, False)) + else: + ui.button(color="secondary", text= "assente", on_click= lambda row_id=row['_id']: registra_presenza(row_id, True)).style("min-width:100px") - signal.signal(signal.SIGUSR1, onSignal) + ui.separator() + def onSignal(signum, frame): + print("Signal") + tabellaUtenti.refresh() - ## FRONTEND - ui.row().classes("w-full") - with ui.row().classes("w-full"): - with ui.column().classes("grow"): - ui.label("Beginner a Matera").classes('text-xl').style("font-weight:700;margin-top: 10px") - with ui.column(): - ui.image('assets/logo.svg').style('width:70px;margin:auto auto') - time_selector() - tabellaUtenti() - with ui.row().classes("w-full items-center content-center"): - ui.button("AGGIUNGI ALLIEV*", icon="add").props('outline rounded').classes('shadow-lg').style("margin:auto;padding:10px 20px;font-weight:600") + signal.signal(signal.SIGUSR1, onSignal) + liv = db.livelli.find_one({"id":livello}) + sed = db.sedi.find_one({"id":sede}) + ## FRONTEND + with ui.row().classes("w-full"): + ui.icon("chevron_left", size="lg").on("click", lambda: ui.open("/")) + with ui.row().classes("w-full"): + with ui.column().classes("grow"): + ui.label(f"{str(liv['nome']).capitalize()} a {str(sed['nome']).capitalize()}").classes('text-xl').style("font-weight:700;margin-top: 10px") + with ui.column(): + ui.image('assets/logo.svg').style('width:70px;margin:auto auto') + time_selector() + tabellaUtenti() + with ui.row().classes("w-full items-center content-center"): + ui.button("AGGIUNGI ALLIEV*", icon="add", on_click=lambda: ui.open(f"/edit/new/{sede}/{livello}")).props('outline rounded').classes('shadow-lg').style("margin:auto;padding:10px 20px;font-weight:600") diff --git a/pages/user.py b/pages/user.py index eb35336..66d381a 100644 --- a/pages/user.py +++ b/pages/user.py @@ -4,7 +4,17 @@ import os from datetime import datetime, timedelta from montydb.types.objectid import ObjectId -def main(userid, collection): +from fastapi.responses import RedirectResponse + +def main(userid, db): + collection = db.users + + async def delete_user(): + result = await dialog + if result: + db.users.delete_one({"_id":ObjectId(userid)}) + os.kill(os.getpid(), signal.SIGUSR1) + await ui.run_javascript('history.back()', respond=False) def register_payment(month, flag): if flag: @@ -13,7 +23,7 @@ def main(userid, collection): {"$push": {"pagamenti": month.strftime('%Y-%m-%d %H:%M:%S')}} ) else: - collection.update_one( + collection.find_one_and_update( {"_id": ObjectId(userid)}, {"$pull": {"pagamenti": month.strftime('%Y-%m-%d %H:%M:%S')}} ) @@ -21,16 +31,15 @@ def main(userid, collection): page.refresh() def onSignal(signum, frame): - ui.notify("signal") page.refresh() signal.signal(signal.SIGUSR1, onSignal) - # Calculate last October date - october_date = datetime(datetime.now().year - (datetime.now().month < 10), 10, 1) + # Calculate last start date + start_date = datetime(datetime.now().year - (datetime.now().month < 8), 9, 1) # Create a list for the next 12 months - next_12_months = [(october_date + timedelta(days=i*32)).replace(day=1) for i in range(10)] + next_12_months = [(start_date + timedelta(days=i*32)).replace(day=1) for i in range(10)] @ui.refreshable def page(): @@ -39,14 +48,19 @@ def main(userid, collection): except Exception as e: print(e) return RedirectResponse('/') - title.set_text(f'{result["nome"]} {result["cognome"][0].upper()}.') + title.set_text(f'{result["nome"]} {result["cognome"][0].upper() if result["cognome"] else None}.') with ui.grid(columns=1): - ui.label("Informazioni").classes('text-lg').style("font-weight:700") + with ui.row(): + ui.label("Informazioni").classes('text-lg').style("font-weight:700") + ui.icon("edit", size="sm").on("click", lambda: ui.open(f'/edit/{userid}/0/0')) + ui.icon("delete", size="sm").on("click", delete_user) ui.label(f'{result["nome"]}').classes('text-lg') ui.label(f'{result["cognome"]}').classes('text-lg') ui.label(f'{result["telefono"]}').classes('text-lg') - ui.label(f'{result["instagram"]}').classes('text-lg') - ui.label(f'{result["sede"]}').classes('text-lg') + if 'instagram' in result: + ui.label(f'{result["instagram"]}').classes('text-lg') + ui.label(f'{str(db.sedi.find_one({"id":result["sede"]})["nome"]).capitalize()}').classes('text-lg') + ui.label(f'{str(db.livelli.find_one({"id":result["livello"]})["nome"]).capitalize()}').classes('text-lg') with ui.grid(columns=2).classes("w-full items-center"): ui.label("Mese").classes('text-lg').style("font-weight:700") with ui.grid(columns=2).style("text-align:center").classes("place-items-center"): @@ -57,20 +71,29 @@ def main(userid, collection): presenze = [datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S') for timestamp in result['presenze']] start, end = month.replace(day=1), (month + timedelta(days=32)).replace(day=1) - timedelta(seconds=1) timestamp_in_month = any(start <= timestamp <= end for timestamp in presenze) - print(timestamp_in_month) + ui.label(month.strftime("%B").capitalize()).classes('text-lg') with ui.grid(columns=2).style("text-align:center").classes("place-items-center"): - ui.icon("done").classes('text-lg') if timestamp_in_month else ui.icon("warning", color="negative").classes('text-lg') + ui.icon("done").classes('text-lg') if timestamp_in_month else ui.label(" ") if month.strftime('%Y-%m-%d %H:%M:%S') in result["pagamenti"]: ui.button(color="primary", text= "PAGATO", on_click= lambda dt=month: register_payment(dt, False)).style('font-size:0.5rem;font-weight:700') else: if timestamp_in_month: ui.button(color="negative", text= "NON PAGATO", on_click= lambda dt=month: register_payment(dt, True)).style('font-size:0.4rem;font-weight:700;white-space: nowrap;') else: - ui.button(color="secondary", text= "PAGA", on_click= lambda dt=month: register_payment(dt, True)).style('font-size:0.5rem;font-weight:700') + ui.button(text= "PAGA", on_click= lambda dt=month: register_payment(dt, True)).style('font-size:0.5rem;font-weight:700;').props('outline') ## FRONTEND - ui.row().classes("w-full") + + with ui.dialog() as dialog, ui.card(): + ui.label('Sicuro di voler cancellare l\'utente?') + with ui.row().classes("w-full"): + ui.column().classes("grow") + ui.button('Sì', on_click=lambda: dialog.submit(True)) + ui.button('No', on_click=lambda: dialog.submit(False)) + ui.column().classes("grow") + with ui.row().classes("w-full"): + ui.icon("chevron_left", size="lg").on("click", lambda: ui.run_javascript('history.back()', respond=False)) with ui.row().classes("w-full"): with ui.column().classes("grow"): title = ui.label().classes('text-xl').style("font-weight:700;margin-top: 10px") diff --git a/tinymongoz.py b/tinymongoz.py index e68c081..deaff35 100644 --- a/tinymongoz.py +++ b/tinymongoz.py @@ -1,18 +1,54 @@ from montydb import MontyClient +from datetime import datetime, timedelta +import json # Create a connection conn = MontyClient("db") # Access your database and collection db = conn.letsswing -collection = db.users +collection = db.livelli # Insert a document with a nested structure -collection.insert_one({'nome': 'Jim', 'cognome': 'Doe', 'livello': 1, - 'sede': 1, 'telefono': '1234567890', 'instagram': '@johndoe', - 'pagamenti': [], 'presenze': []}) -results = collection.find({"sede": 1}) +# jsonfile = open('file.json', 'r') -for result in results: - print(result) +# for row in jsonfile: +# print(row) +collection.insert_one({"id":"3","nome":"Advanced"}) +collection.insert_one({"id":"2","nome":"Improver"}) +collection.insert_one({"id":"1","nome":"Beginners"}) + + +# collection = db.lezioni + +# # collection.insert_one({'}) + + +# # Start from a known Monday. +# start_date = datetime(2023,10,1) + +# while start_date.weekday() != 0: # 0 represents Monday in weekday() +# start_date -= timedelta(days=1) + + +# for i in range(36): # We need 10 weeks to get 20 days (2 days per week) +# monday = start_date + timedelta(weeks=i) +# wednesday1 = monday + timedelta(days=2) # Wednesday is two days after Monday +# monday = monday.replace(hour=19, minute=30) +# wednesday1= wednesday1.replace(hour=19, minute=30) +# wednesday2 = wednesday1 +# wednesday2 = wednesday2.replace(hour=20, minute=30) + +# collection.insert_one({"sede": 1, "livello":0, "data":monday.strftime('%Y-%m-%d %H:%M:%S')}) +# collection.insert_one({"sede": 0, "livello":0, "data":wednesday1.strftime('%Y-%m-%d %H:%M:%S')}) +# collection.insert_one({"sede": 0, "livello":1, "data":wednesday2.strftime('%Y-%m-%d %H:%M:%S')}) + + + + + +# # results = collection.find({"sede": 1}) + +# # for result in results: +# # print(result)