From 87c3363ba29ee3c3eff0c4e5597afdcd1b2caa9d Mon Sep 17 00:00:00 2001 From: enne2 Date: Mon, 18 Sep 2023 22:02:26 +0200 Subject: [PATCH] complete --- ..._952a094b-3f32-475c-81e6-2a15d8fa4b33.json | 1 + ..._ebbb4383-dc23-4773-a380-dc0ffd0fe85b.json | 1 + assets/favicon.ico | Bin 0 -> 15406 bytes csvz.py | 22 ++ db/letsswing/.prettierrc | 4 + db/letsswing/lezioni.json | 215 ++++++++++++++++++ db/letsswing/livelli.json | 5 + db/letsswing/sedi.json | 4 + db/letsswing/users.json | 88 ++++++- main.py | 134 ++++++++++- pages/__pycache__/manager.cpython-311.pyc | Bin 9771 -> 12816 bytes pages/__pycache__/user.cpython-311.pyc | Bin 10265 -> 14353 bytes pages/manager.py | 158 +++++++------ pages/user.py | 51 +++-- tinymongoz.py | 50 +++- 15 files changed, 631 insertions(+), 102 deletions(-) create mode 100644 .nicegui/storage_user_952a094b-3f32-475c-81e6-2a15d8fa4b33.json create mode 100644 .nicegui/storage_user_ebbb4383-dc23-4773-a380-dc0ffd0fe85b.json create mode 100644 assets/favicon.ico create mode 100644 csvz.py create mode 100644 db/letsswing/.prettierrc create mode 100644 db/letsswing/lezioni.json create mode 100644 db/letsswing/livelli.json create mode 100644 db/letsswing/sedi.json 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 0000000000000000000000000000000000000000..4bc9cffcc760fd6898ca07ec2ae681663aa3db39 GIT binary patch literal 15406 zcmeI1*>6=<6o*e+1W}O|Dkv1WwWSPFEQ5fEa7%?&MFl0yqcs77s8A6>!~zWlkjV*^ z#)vq^0aT2M5(f-E5H)Ii@WsfBFTVIM_?6TyluK`=H5f<)r%^^l?m^CeWuT+!6>MNh0qcC z9_!Q>zGne+M7G1{X249)j?So_ho*Pt!T-ZE=9vT}!Tb~}_P|Bpfy-!v^N)E?Ed{63 zop1?^gaXKfCh^i<@F6@31K=eve;ovK(J|1*aga`#V{Kz2*#1G#QeC-VrEw-Fv+@W| zLPzsDkDOD^)y`Al{CUoT{GgAVWAe^d=py)SJZ;zvkHaQ#PFw-TVY=0w7yfshvzB}I zc}taYp*`tTZ(gGgE3*Q*a#Jn4mtj;Z!4H{c7bb0$N0x!Klq#W zyaiK0f2Bj_Q|rqI{ap^XgL!W>{0`RZnszW81^tu<=};{%vEI7W%kJe^470#~p9;o8 zZ`cpbkj@yi9^2Un>SQrNfl`yudq$oi9@ZRUeaw%>8>n6TgdZsn`~OzyEi z_JH>-lPNvSiw8mjG=cfI24+C0Y2ir(NBg4@%u(6UgH&1$`XQ73o{hG}b;cfuJ&-{U z4B_2XuoU8b5}Xh#_CV}`*aNxk0lzt1XDh$Mt~_%V1VcGyYaN<0;k<_d{OXkBnzb%f z@`2Pn_l;ajyRP?p(me(DnA}gywl2j0zb{MR2lxdhfOh(=<2R`NaS+@a?FsL|SKu># z7yDfnwcHaZf=cjvwHTc4--a?Uj{GlhZt8pI|QI2=>lh?~(H>`wg zw&5D;*T>-;%jrLIPB1rVcWW~LG=pu5T8_7w@DUgj2f+NVTKd!d!y~W@l8^w~8jjaF zoJ-U)$2(`a*QdSiZ4LwHpZU-SlHhOV_=(`&tL5Y&u-}%#5{O!Tsc;jRKOLuyFbG^X zde<{=9HZWE!>w3qwje`x~-0=l02Iuo^$UM>nt_x0pbLp?}39N=Btb)72Ysr>9ROotGwgxiz%|egu#b$ZX0RX3N4J9QeHpa-E->!$!F=Fa zH7Yps_%q&n!de&u%6JxS>;=Y^Ima<+e`vFI*259_1HAVgL@9Hi_7}qQ zplwRO9s+YuEtog8&;C-Oj|(`z8O%Ah^&5y%`qcQ@3C6nD%6pSR-#Zr8!8Wi@?5nw; zwBI(32IJ3mL@oU`0Iq0JacIA{216KQBRO|`KLWRz#EVY+K3UM{f-Ia<$KU> zeLoIL;V>9e_RBzU%;$o%F$wzEIlw3`!xCan|xWyq`-)``|c? z0mrUwypUv^yY|@)j*;Qu*u79>&Ntp&PbA@0aQ=!Fdm#2e?19(=u?J!g#2$z}& + 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 b4422d87e25ff7caa9617fa61a0a3d3e4fb32e35..4956af069c75415eab516c1ab7000f67a0b90c2b 100644 GIT binary patch literal 12816 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 z zyOZ`kvV9M<-1;7^Q5?)8QuU^VY3VP6hT9fO+Cs7|l(t1vwkY)42jmcTq+G(u)9*wo}^(uual5L9CAeRKJ&xvB+xHgHtsK@|6to)IFplV*PD>%>mKIqKI_+g$n*7f64N^{{l_w9f4TXOYe=Bqume>G zy6Hc4GY8%@|LH9f=qQ|c!MErkK#d-cQtI&p!`yTL(>9Oi{IoZql?eE)r+|<{_$wrP zkg!Np?1gb)0SShe#dm3_=N z3mm9Ux)n;)FX{yFU4+8o{{JF(rX4@@!~ck&wOehYvE6VMtEszF_#3E+NL>5{5SV== xxkOY;#(RmdY)gmq5+TOu||tKCb)X32Oj!@&iKBck}@iB|UX2Ut`~{4e@ry4(N& literal 9771 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 diff --git a/pages/__pycache__/user.cpython-311.pyc b/pages/__pycache__/user.cpython-311.pyc index d8cfe8f8e0d171d67ed2bc29161ee4b299a24d8e..d2e3a31fb434d92e891c05a4f9054de076b33896 100644 GIT binary patch literal 14353 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 delta 3921 zcma)9YitzP6`q-$nVq#~U*4DByXzMozrl%3z}Pt0*frpo-~d6zX7P;8f<0?y#~>Ud zyOI?fizucy50HrJKcz%iDyXT{pQ&0N4XwIsrXre%My-?|{nM@sD5S6S+*y0=HBHj% z*)!*!`<-*oJ@?#m$CpO0^w@r4wPp~|e6?n&*M7;CO}1Uy)SSso6Gu3aIzR~QrHR@j z0~E%rG&8(S@O%7Qpfkh_Ib)ikXP6mw#{51pOU^R0#Gpwer@1+HmKh{PYMMJwspP6U zL7YsnDuEoe?y3pu8cc8_H3>&-q%uMV#VCI?X$m(d`aP8o=CSe$4Q z>1*KX4eYeh=IB`(9AlU&l9!CP#PhT)CaE9Q%$A;`SmJ`@+-P9izk&CY;EvS{xM`lYAn&T^MIy)AXl&~1Z z8xlYvOB4DHzZpRPFM zR-AwrObS-jSvjJH2hSPq%9tr14qIU2E^#D~kh zYKay-i(U*w-N}5zX!I4V-zh&Dfh{frg9p4#%f9DkE;WJ`1F_7+fGM+VZxoTg9K%rfO2gRbr;`AzO zsFbBVd!;1ZA_THDCuQplq12_B&RQK3%fw9+)F3%)fs$H2ZCMnO#TGeTe!NEwBq4_; z=xbmFeoORp~B)rP^$(*SI+GuS z3UE2UF_%-NVQDZTM|4YAj;f&{s5Ckql|%_G7d+UO3Ck5I1>ZY57gd!}H9R7LpaKgl zxC1&PqfvZ^1p*2VoKg*BybPT#C`9>wj(iD~`s;FW`sv)LB1I*6Tv9e+Ag)_VDT?@y z*#xrtLqebpyGjfC+@C|{ps)NdlG{;jpmQ_U9;ZrQ)@d;!OS<`NNRh+xkj}}{P)H4* zkpxm_1|q`|MZq2`8R%l5s{pF&ZeIu5s|??u0(W7} zCLlT&k^2XR!vm*~8tm|43rhETT`cH99~TK^JNj3!j?6>VMcW;gs5B6f#gKANr+ZpE zTG2wFp+Gr+!QWz{z5`n>1_C8Kc5)m)Z=6pM#7?S>S|*57WIOdF`I;h(Vk)>$XK^q~ zcf2ZzVMQ8HUzMVx5jiR$xwrt$7kec|z?0&uOE-n&a|*ug^^AegXjlymhsPzI4uhvU zdwfh)BeKBjEbPnJu&R@i;>M~wu|igAd;7z3|42kuPbh78v>g*K+Far;$05}jHLMOx zN;dFO9!LPUoja#+OQwVmMM`{TyvXQ%7QI#S=44mQ*LA(&rl3_e{bIjX+48WmeW|iN zUfH2lcEC{biF122ZcmKc^T=wyc};LGggGgr|_*^sc>eM8HxjCrc#e2vD} zJmede_=cP3;(V*dx5oHZK%v31qMn3xbxvdAW$eO}lpkvzZQ!0gd$vJhbf4OgwY=Co zN+k%7WfV1*{}uRU!f72vRl+-2j~t$uw><6;G=~s#2wym|&}~6-VmJr%)8-z?keqG` zZLJ8@AC2`5#Ukfo2glIh`ocf3k>V>>{>3{aS;bT6IVQH3tcFoIP7TI5s@2(?d$+?6?_S zuRT0zH@+Yhd@&{Kv`LPf)#-CmNHGqx&L|;yNJ@TSW-8Jkob?l-BB~jVF?o+2@OdCXPj!qi{$}KPGC}n3I6nilDZXW7}zKW7-q&MCz8~*Bs`VZPVcgRvX`a5R?k^bgbYFrhX7E1$zjWC|uB90A9&B_?a@V{fx)9B5{ SgT)EDlO!_}#Q&zoee_>kmb&)< 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)