Several enhancements
This commit is contained in:
@@ -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.")
|
||||
@@ -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)
|
||||
|
||||
+51
-10
@@ -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
|
||||
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)
|
||||
);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user