From 5ec80c325f5777c7842eaa05bbe774e3e7512037 Mon Sep 17 00:00:00 2001 From: Markus Zimmerberger Date: Thu, 6 Mar 2025 17:03:45 +0100 Subject: [PATCH] Several enhancements --- sustApp/compare_created_payment_slips.py | 21 ++++++++ sustApp/create_payment_slip.py | 3 +- sustApp/helper_scripts.sql | 61 ++++++++++++++++++++---- sustApp/mail_payment_slips.py | 18 +++++-- sustApp/print_payment_slips.py | 8 +++- 5 files changed, 93 insertions(+), 18 deletions(-) create mode 100644 sustApp/compare_created_payment_slips.py diff --git a/sustApp/compare_created_payment_slips.py b/sustApp/compare_created_payment_slips.py new file mode 100644 index 0000000..bf7fc4f --- /dev/null +++ b/sustApp/compare_created_payment_slips.py @@ -0,0 +1,21 @@ +import os +import re + +def extract_member_id(directory): + # Regex pattern to find "member" + pattern = re.compile(r'member(\d+)\.pdf', re.IGNORECASE) + + # Loop through all files in the directory + for filename in os.listdir(directory): + if filename.endswith(".pdf"): + match = pattern.search(filename) + if match: + member_id = match.group(1) + print(f"File: {filename} -> Member ID: {member_id}") + +if __name__ == "__main__": + directory = "/mnt/Data/dropbox/SUST/Zahlscheine 2025" # Change to your directory path + if os.path.exists(directory): + extract_member_id(directory) + else: + print(f"Directory '{directory}' does not exist.") diff --git a/sustApp/create_payment_slip.py b/sustApp/create_payment_slip.py index daea71d..86232f7 100644 --- a/sustApp/create_payment_slip.py +++ b/sustApp/create_payment_slip.py @@ -87,7 +87,8 @@ def create_payment_slip(member: models.Members = None): else: print_multiple_lines(10, text) - c.drawString(w - 150, h - 225, f'St. Thomas, {datetime.date.today().strftime('%x')}') + c.drawString(w - 150, h - 225, f'St. Thomas, {datetime.date.today().strftime('%d.%m.%Y')}') + #c.drawString(w - 150, h - 225, f'St. Thomas, {datetime.date.today().strftime('%x')}') print_multiple_lines(5, text) text.textLines(f"Vielen Dank für {salutation} Treue!\n\n{salutation2.capitalize()} Beitrag ist gut angelegt, denn der Sportverein St. Thomas bietet für jede(n) etwas:") print_multiple_lines(2, text) diff --git a/sustApp/helper_scripts.sql b/sustApp/helper_scripts.sql index 4bc9a55..158053a 100644 --- a/sustApp/helper_scripts.sql +++ b/sustApp/helper_scripts.sql @@ -1,4 +1,12 @@ select * from members m where m.member_firstname like 'Josef' +select * from members m where m.member_active = true and m.member_count = 0; + +update members +set member_email = null +where member_email = '' + +select * from members order by members.updated_date desc + update members m set member_geo_latitude = null, member_geo_longitude = null where id in (110,107,45,21,19,108,36,24,22,18,35,162,90,3,142,122,121,115,9,128,79,78,50,186,183,180,176,157,148,98); @@ -53,7 +61,7 @@ select count(*) from payments_csv where pc_processed = true select * from payments_csv pc where PC.pc_client like '%Anna%'; -select * from members mem where mem.member_firstname like '%Anna%'; +select * from members mem where mem.member_firstname like 'Anna%'; select * from payments p where p.member_id = 58; ALTER TABLE payments_csv ADD PRIMARY KEY (id); @@ -69,14 +77,13 @@ select mp.member_surname, mp.member_firstname, mp.member_firstname_spouse from m select * from members_paid mp where id = 8 --- already paid? TODO: Member "active since?" attribute missing in "member" -select m.* -from members_active m -join deliveries d on d.member_id = m.id -where m.id in (select id from members_delivered md -except -select id from members_paid mp where mp.payment_year = '2024-01-01') -order by delivery_date asc +SELECT ma.*, m.member_suffix, m.member_email +FROM members_active ma +JOIN members m ON m.id = ma.id +-- WHERE m.member_email IS NOT NULL +-- AND TRIM(m.member_email) <> '' +ORDER BY m.member_surname, m.member_firstname; + -- already delivered select m.*, d.* @@ -94,4 +101,38 @@ select now(), ss.id, '2024-01-01' from except select member_id from deliveries d) ss -select count(*) from deliveries d \ No newline at end of file +select count(*) from deliveries d + +-- already paid? +SELECT m.* +FROM members_active m +JOIN deliveries d ON d.member_id = m.id +WHERE m.id IN ( + SELECT md.id + FROM members_delivered md + EXCEPT + SELECT mp.id + FROM members_paid mp + WHERE mp.payment_year IN ('2024-01-01', '2025-01-01') +) +ORDER BY m.member_surname, m.member_firstname, d.delivery_date ASC; + +SELECT id +FROM members_active +WHERE member_email is Null + AND id NOT IN ( + SELECT member_id FROM ( + VALUES (116), (26), (65), (66), (70), (8), (88), (130), (146), (163), (195), + (76), (120), (125), (126), (131), (136), (143), (151), (152), (160), + (166), (170), (172), (179), (196), (34), (40), (41), (42), (47), + (52), (71), (147), (194), (124), (178), (23), (123), (144), (168), + (182), (198), (31), (33), (43), (58), (75), (94), (100), (108), (11), + (111), (115), (117), (118), (119), (122), (127), (128), (13), (138), + (141), (148), (15), (153), (158), (159), (16), (161), (162), (165), + (169), (171), (175), (176), (177), (18), (180), (181), (19), (192), + (193), (2), (202), (204), (205), (24), (27), (28), (29), (3), (30), + (35), (36), (4), (46), (48), (5), (59), (6), (61), (62), (63), (68), + (77), (78), (79), (80), (81), (83), (84), (86), (87), (9), (90), + (92), (93), (95), (96), (97), (98), (99), (203) + ) AS extracted_members(member_id) +); diff --git a/sustApp/mail_payment_slips.py b/sustApp/mail_payment_slips.py index db961bd..b410180 100644 --- a/sustApp/mail_payment_slips.py +++ b/sustApp/mail_payment_slips.py @@ -10,6 +10,10 @@ from os.path import exists import datetime from create_payment_slip import create_payment_slip import os +from config_loader import load_config + +cfg = load_config() +year = cfg['year'] logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) @@ -20,7 +24,7 @@ def payment_slip_delivered(member: models.Members, year: int): .count() def send_mail(member: models.Members): - delivered = payment_slip_delivered(member, 2024) + delivered = payment_slip_delivered(member, year) if delivered: logging.debug(f'Member: {member.member_surname} already mailed or delivered!') return @@ -33,8 +37,8 @@ def send_mail(member: models.Members): from_email = 'sv.stthomas@gmx.at' to_email = member.member_email - subject = 'Mitgliedsbeitrag 2024' - body = f'Liebes Mitglied,\n\nDein Zahlschein für 2024 liegt bei.\nDu kannst gerne mittels beiliegendem, aufgedrucktem QR-Code überweisen.\nDanke sagt Dein Team vom Sportverein!' + subject = f'Mitgliedsbeitrag {year}' + body = f'Liebes Mitglied,\n\nDein Zahlschein für {year} liegt bei.\nDu kannst gerne mittels beiliegendem, aufgedrucktem QR-Code überweisen.\nDanke sagt Dein Team vom Sportverein!' msg = MIMEMultipart() msg['From'] = from_email @@ -42,7 +46,7 @@ def send_mail(member: models.Members): msg['Subject'] = subject msg.attach(MIMEText(body)) - path_to_file = os.path.join(os.getenv('APPDATA'), "sust", "payment_slips","mail",f"{member.member_zip}_payment_slip_member{member.id}.pdf") + path_to_file = os.path.join(os.path.expanduser("~"),"sust","payment_slips","mail",f"{member.member_zip}_payment_slip_member{member.id}.pdf") if not exists(path_to_file): create_payment_slip(member=member) @@ -68,10 +72,14 @@ def send_mail(member: models.Members): db = SessionLocal() models.Base.metadata.create_all(bind=engine) +members = db.query(models.Members).filter( + models.Members.member_active == True, + models.Members.member_email != None +).all() #members = db.query(models.Members).filter(models.Members.member_email != None, ~models.Members.id.in_([183,51,200,49])).all() #members = db.query(models.Members).filter(models.Members.member_active == True).all() #members = db.query(models.Members).filter(models.Members.id.in_([2,3,9,199]), models.Members.member_active == True, models.Members.member_printed == False).all() -members = db.query(models.Members).filter(models.Members.id.in_([8])).all() +#members = db.query(models.Members).filter(models.Members.id.in_([8])).all() for member in members: if member.member_email: diff --git a/sustApp/print_payment_slips.py b/sustApp/print_payment_slips.py index 86c85ab..7b08e56 100644 --- a/sustApp/print_payment_slips.py +++ b/sustApp/print_payment_slips.py @@ -12,9 +12,13 @@ logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) db = SessionLocal() models.Base.metadata.create_all(bind=engine) #members = db.query(models.Members).filter(models.Members.member_email == None).all() -#members = db.query(models.Members).filter(models.Members.member_active == True).all() +# TODO: Consider already printed slips or members that have paid already +members = db.query(models.Members).filter( + models.Members.member_active == True, + models.Members.member_email == None, +).all() #members = db.query(models.Members).filter(models.Members.id.in_([2,3,9,199]), models.Members.member_active == True, models.Members.member_printed == False).all() -members = db.query(models.Members).filter(models.Members.id.in_([50])).all() +#members = db.query(models.Members).filter(models.Members.id.in_([50])).all() for member in members: create_payment_slip(member=member)