[update]: repayment schedule table

This commit is contained in:
VivianDee
2025-04-25 16:04:44 +01:00
parent cf0502459b
commit 5d37ba30fb
3 changed files with 53 additions and 15 deletions
+2 -1
View File
@@ -71,6 +71,7 @@ class ProvideLoanService(BaseService):
upfront_fee = charges["upfront_payment"]
repayment_amount = charges["repayment_amount"]
installment_amount = charges["installment_amount"]
tenor = offer.tenor // 30 # Convert to months
@@ -97,7 +98,7 @@ class ProvideLoanService(BaseService):
db.session.flush()
schedule = LoanRepaymentSchedule.add_repayment_schedule(loan = loan, Offer = offer, charges = charges)
schedule = LoanRepaymentSchedule.add_repayment_schedule(loan = loan, tenor = tenor)
if not schedule:
+9 -14
View File
@@ -1,4 +1,5 @@
from datetime import datetime, timezone
from itertools import product
from app.extensions import db
from sqlalchemy.orm import relationship
from dateutil.relativedelta import relativedelta
@@ -8,13 +9,14 @@ class LoanRepaymentSchedule(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
loan_id = db.Column(db.Integer, nullable=False)
product_id = db.Column(db.String(20), nullable=True)
installment_number = db.Column(db.Integer, nullable=False)
due_date = db.Column(db.DateTime, nullable=False)
principal_amount = db.Column(db.Float, default=0.0)
interest_amount = db.Column(db.Float, default=0.0)
total_installment = db.Column(db.Float, default=0.0)
installment_amount= db.Column(db.Float, default=0.0)
total_repayment_amount = db.Column(db.Float, default=0.0)
paid = db.Column(db.Boolean, default=False)
paid_at = 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))
@@ -27,19 +29,12 @@ class LoanRepaymentSchedule(db.Model):
@classmethod
def add_repayment_schedule(cls, loan, Offer, charges):
def add_repayment_schedule(cls, loan, tenor):
"""
Add repayment schedules for a given loan.
"""
now = datetime.now(timezone.utc)
schedules = []
interest_fee = charges["interest"]
tenor = Offer.tenor // 30
principal = loan.initial_loan_amount / tenor
interest = interest_fee["fee"] / tenor
for i in range(tenor):
due_date = now + relativedelta(months=i + 1)
@@ -47,9 +42,9 @@ class LoanRepaymentSchedule(db.Model):
loan_id=loan.id,
installment_number=i + 1,
due_date=due_date,
principal_amount=round(principal, 2),
interest_amount=round(interest, 2),
total_installment=round(loan.installment_amount, 2)
total_repayment_amount = round(loan.repayment_amount, 2),
installment_amount=round(loan.installment_amount, 2),
product_id = loan.product_id
)
db.session.add(schedule)