diff --git a/app/api/services/provide_loan.py b/app/api/services/provide_loan.py index 30da2ca..49c7e19 100644 --- a/app/api/services/provide_loan.py +++ b/app/api/services/provide_loan.py @@ -90,7 +90,7 @@ class ProvideLoanService(BaseService): ] loan_id = loan.id - loan_charges = LoanCharge.create_charges_for_loan(loan_id = loan_id, charges = charges) + loan_charges = LoanCharge.create_charges_for_loan(loan_id = loan_id, transaction_id = transaction_id, charges = charges) # logger.error(f"********* We need to develop the fee array here") diff --git a/app/models/loan_charge.py b/app/models/loan_charge.py index 3e71030..e00002b 100644 --- a/app/models/loan_charge.py +++ b/app/models/loan_charge.py @@ -1,4 +1,4 @@ -from datetime import datetime, timezone +from datetime import datetime, timezone, timedelta from app.extensions import db from sqlalchemy.orm import relationship @@ -8,11 +8,13 @@ class LoanCharge(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) loan_id = db.Column(db.Integer, nullable=False) + transaction_id = db.Column(db.String(50), nullable=True) code = db.Column(db.String(50), nullable=False) amount = db.Column(db.Float, default=0.0) percent = db.Column(db.Float, default=0.0) description = db.Column(db.Text, nullable=True) due = db.Column(db.Integer, nullable=False) + due_date = db.Column(db.DateTime, nullable=True) created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc)) updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc)) @@ -24,7 +26,7 @@ class LoanCharge(db.Model): ) @classmethod - def create_charges_for_loan(cls, loan_id, charges): + def create_charges_for_loan(cls, loan_id, transaction_id, referenced_amount = 0.0, charges): """ Create loan charges for a given loan. @@ -40,15 +42,27 @@ class LoanCharge(db.Model): raise ValueError("loan_id cannot be None") loan_charges = [] + now = datetime.now(timezone.utc) + for charge in charges: + due_days = charge.get("due", 0) + amount = charge.get("amount", 0.0) + percent = charge.get("percent", 0.0) + + if amount == 0.0: + amount = (percent / 100.0) * referenced_amount + charge_obj = cls( loan_id=loan_id, + transaction_id=charge.get("transaction_id"), code=charge.get("code"), - amount=charge.get("amount", 0.0), - percent=charge.get("percent", 0.0), + amount=amount, + percent=percent, description=charge.get("description", ""), - due=charge.get("due", 0) + due=due_days, + due_date=now + timedelta(days=due_days) ) + db.session.add(charge_obj) loan_charges.append(charge_obj)