Several enhancements

This commit is contained in:
2025-03-06 17:03:45 +01:00
parent c1098114bc
commit 5ec80c325f
5 changed files with 93 additions and 18 deletions
+21
View File
@@ -0,0 +1,21 @@
import os
import re
def extract_member_id(directory):
# Regex pattern to find "member<ID>"
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.")
+2 -1
View File
@@ -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)
+50 -9
View File
@@ -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.*
@@ -95,3 +102,37 @@ except
select member_id from deliveries d) ss
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)
);
+13 -5
View File
@@ -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:
+6 -2
View File
@@ -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)