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:
|
else:
|
||||||
print_multiple_lines(10, text)
|
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)
|
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:")
|
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)
|
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_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
|
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);
|
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 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;
|
select * from payments p where p.member_id = 58;
|
||||||
|
|
||||||
ALTER TABLE payments_csv ADD PRIMARY KEY (id);
|
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
|
select * from members_paid mp where id = 8
|
||||||
|
|
||||||
-- already paid? TODO: Member "active since?" attribute missing in "member"
|
SELECT ma.*, m.member_suffix, m.member_email
|
||||||
select m.*
|
FROM members_active ma
|
||||||
from members_active m
|
JOIN members m ON m.id = ma.id
|
||||||
join deliveries d on d.member_id = m.id
|
-- WHERE m.member_email IS NOT NULL
|
||||||
where m.id in (select id from members_delivered md
|
-- AND TRIM(m.member_email) <> ''
|
||||||
except
|
ORDER BY m.member_surname, m.member_firstname;
|
||||||
select id from members_paid mp where mp.payment_year = '2024-01-01')
|
|
||||||
order by delivery_date asc
|
|
||||||
|
|
||||||
-- already delivered
|
-- already delivered
|
||||||
select m.*, d.*
|
select m.*, d.*
|
||||||
@@ -94,4 +101,38 @@ select now(), ss.id, '2024-01-01' from
|
|||||||
except
|
except
|
||||||
select member_id from deliveries d) ss
|
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
|
import datetime
|
||||||
from create_payment_slip import create_payment_slip
|
from create_payment_slip import create_payment_slip
|
||||||
import os
|
import os
|
||||||
|
from config_loader import load_config
|
||||||
|
|
||||||
|
cfg = load_config()
|
||||||
|
year = cfg['year']
|
||||||
|
|
||||||
|
|
||||||
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
||||||
@@ -20,7 +24,7 @@ def payment_slip_delivered(member: models.Members, year: int):
|
|||||||
.count()
|
.count()
|
||||||
|
|
||||||
def send_mail(member: models.Members):
|
def send_mail(member: models.Members):
|
||||||
delivered = payment_slip_delivered(member, 2024)
|
delivered = payment_slip_delivered(member, year)
|
||||||
if delivered:
|
if delivered:
|
||||||
logging.debug(f'Member: {member.member_surname} already mailed or delivered!')
|
logging.debug(f'Member: {member.member_surname} already mailed or delivered!')
|
||||||
return
|
return
|
||||||
@@ -33,8 +37,8 @@ def send_mail(member: models.Members):
|
|||||||
|
|
||||||
from_email = 'sv.stthomas@gmx.at'
|
from_email = 'sv.stthomas@gmx.at'
|
||||||
to_email = member.member_email
|
to_email = member.member_email
|
||||||
subject = 'Mitgliedsbeitrag 2024'
|
subject = f'Mitgliedsbeitrag {year}'
|
||||||
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!'
|
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 = MIMEMultipart()
|
||||||
msg['From'] = from_email
|
msg['From'] = from_email
|
||||||
@@ -42,7 +46,7 @@ def send_mail(member: models.Members):
|
|||||||
msg['Subject'] = subject
|
msg['Subject'] = subject
|
||||||
msg.attach(MIMEText(body))
|
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):
|
if not exists(path_to_file):
|
||||||
create_payment_slip(member=member)
|
create_payment_slip(member=member)
|
||||||
|
|
||||||
@@ -68,10 +72,14 @@ def send_mail(member: models.Members):
|
|||||||
|
|
||||||
db = SessionLocal()
|
db = SessionLocal()
|
||||||
models.Base.metadata.create_all(bind=engine)
|
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_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.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_([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:
|
for member in members:
|
||||||
if member.member_email:
|
if member.member_email:
|
||||||
|
|||||||
@@ -12,9 +12,13 @@ logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
|||||||
db = SessionLocal()
|
db = SessionLocal()
|
||||||
models.Base.metadata.create_all(bind=engine)
|
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_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_([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:
|
for member in members:
|
||||||
create_payment_slip(member=member)
|
create_payment_slip(member=member)
|
||||||
|
|||||||
Reference in New Issue
Block a user