Files
SUST/assign_payments.py
T
2024-03-13 11:31:10 +01:00

106 lines
3.9 KiB
Python

# 3. assign manually
from database import Base, engine, SessionLocal
from time import time
from models import Payments_CSV, Payments, Members
import logging, sys
import datetime
def assign_by_reference(payments: Payments_CSV):
for payment in payments:
logging.debug(f'payment.pc_reference {payment.pc_reference}')
reference = payment.pc_reference.split('-')
if len(reference) == 1:
reference = payment.pc_reference.split(' ')
if len(reference) == 4:
addPayment(payment, reference[2], reference[0], payment.pc_amount)
else:
# more than one reference (e.g. 2024-4732-096-2,-097-1,-099-1)
referenceList = payment.pc_reference.split(',')
number_of_references = completeReference(referenceList=referenceList)
amount = payment.pc_amount # assume that the payment is for all references
for reference in referenceList:
referenceItem = reference.split('-')
addPayment(payment, referenceItem[2], referenceItem[0], amount/number_of_references*int(referenceItem[3]))
try:
db.commit()
except Exception as e:
print(e)
db.rollback()
def assign_by_name(payments: Payments_CSV):
year = 2024
removables = ('Dipl.', 'Ing.', 'Mag.')
for payment in payments:
logging.debug(f'payment.pc_reference {payment.pc_intended}')
name = payment.pc_client.split(' ')
for removeable in removables:
while removeable in name: name.remove(removeable)
# last part is usually surname
member = db.query(Members).filter(Members.member_surname.like(name[len(name)-1]), Members.member_firstname.like(name[0])).all()
if len(member) > 1:
logging.debug(f'More than one member with same name {payment.pc_client}')
elif len(member) == 0:
logging.debug(f'No member found with name {payment.pc_client}')
else:
# update Payments_CSV
payment.pc_reference = f'{year}-4732-{member[0].id}-{member[0].member_count}'
#addPayment(payment, referenceItem[2], referenceItem[0], amount/number_of_references*int(referenceItem[3]))
try:
db.commit()
except Exception as e:
print(e)
db.rollback()
def addPayment(payment, member_id, year, amount):
newPayment = Payments(payment_date = payment.pc_valuta_date,
member_id = member_id,
payment_year = datetime.date(int(year),1,1),
payment_amount = amount)
db.add(newPayment)
payment.pc_processed = True
def completeReference(referenceList: list) -> int:
number_of_references = 0
i=0
for reference in referenceList:
referenceItem = reference.split('-')
if referenceItem[0] == '':
referenceItem.insert(1, referenceList[0].split('-')[0])
referenceItem.insert(2, referenceList[0].split('-')[1])
referenceItem.pop(0)
reference = '-'.join(referenceItem)
referenceList[i]=reference
i+=1
number_of_references += int(referenceItem[3])
return number_of_references
if __name__ == "__main__":
t = time()
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
db = SessionLocal()
Base.metadata.create_all(bind=engine)
# 1. create missing reference by name
payments = db.query(Payments_CSV).filter(Payments_CSV.pc_intended!='', Payments_CSV.pc_reference=='', Payments_CSV.pc_processed!=True).all()
assign_by_name(payments)
# 2. assign payment by reference
payments = db.query(Payments_CSV).filter(Payments_CSV.pc_reference!='', Payments_CSV.pc_processed!=True).all()
assign_by_reference(payments)
logging.debug(f"Time elapsed: " + str(time() - t) + " s.") #0.091s