From 7b21140b39533fab702fef70818ddf98fb5ba775 Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Fri, 20 Jun 2025 15:18:04 -0400 Subject: [PATCH] Repayment updates --- app/models/loan.py | 20 +++++++++++++++++++- app/models/repayment.py | 23 +++++++++++++++++++++++ app/routes/autocall.py | 6 +++++- app/services/loan.py | 8 ++++++++ app/services/repayment.py | 10 +++++++++- 5 files changed, 64 insertions(+), 3 deletions(-) diff --git a/app/models/loan.py b/app/models/loan.py index 38483f2..0d598e6 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -237,4 +237,22 @@ class Loan(db.Model): logger.info(f"Found {len(customer_loans)} loans for customer ID: {customer_id} with total amount: {total_amount}") - return customer_loans, total_amount \ No newline at end of file + return customer_loans, total_amount + + + @classmethod + def update_status(cls, loan_id, status): + """ + Update the status of the loan with the given loan_id. + """ + # Retrieve loan + loan = cls.query.get(loan_id) + + if not loan: + raise ValueError(f"Loan with ID {loan_id} does not exist.") + + if loan.status == status: + return + + # Update loan status and the updated_at timestamp + loan.status = status \ No newline at end of file diff --git a/app/models/repayment.py b/app/models/repayment.py index 25fc866..933a290 100644 --- a/app/models/repayment.py +++ b/app/models/repayment.py @@ -1,6 +1,7 @@ from app.extensions import db from datetime import datetime, timezone from app.utils.logger import logger +from app.enums.loan_status import LoanStatus class Repayment(db.Model): __tablename__ = "repayments" @@ -47,6 +48,28 @@ class Repayment(db.Model): 'VerifyDate': self.verify_date.isoformat() if self.verify_date else None, } + @classmethod + def create_repayment(cls, repayment_data): + + if loan.status not in [LoanStatus.ACTIVE, LoanStatus.START_REPAY]: + raise ValueError(f"Repayment cannot be processed. Loan status: ({loan.status})") + + repayment = cls( + customer_id=repayment_data.customerId, + loan_id=repayment_data.loanId, + product_id=repayment_data.productId, + transaction_id=repayment_data.transactionId, + created_at=datetime.now(timezone.utc), + updated_at=datetime.now(timezone.utc), + initiated_by= repayment_data.initiated_by + ) + + try: + db.session.add(repayment) + except IntegrityError as err: + logger.error(f"Database integrity error: {err}") + return repayment + @classmethod def add_repayment(cls, data: dict): diff --git a/app/routes/autocall.py b/app/routes/autocall.py index 3656f87..ea5db98 100644 --- a/app/routes/autocall.py +++ b/app/routes/autocall.py @@ -175,7 +175,11 @@ def salary_detect(): "salaryAmount": pending_salary.amount, } logger.info(f"Creating repayment for loan ID {loan_dict['debtId']}") - repayment = RepaymentService.add_repayment(repayment_data) + # repayment = RepaymentService.add_repayment(repayment_data) + repayment = RepaymentService.create_repayment(repayment_data) + Loan.update_status(loan_id=repayment_data.loanId, + status=LoanStatus.START_REPAY) # repay started + logger.info(f"Created repayment ID: {repayment.id}") except Exception as e: logger.error(f"Error creating repayment for loan ID {loan.id}: {e}") diff --git a/app/services/loan.py b/app/services/loan.py index f1d9910..042ad48 100644 --- a/app/services/loan.py +++ b/app/services/loan.py @@ -78,3 +78,11 @@ class LoanService: """ return Loan.get_customer_loans(customer_id=customer_id) + + @classmethod + def update_status(cls, loan_id, status): + """ + Update the status of the loan with the given loan_id. + """ + # Retrieve loan + return Loan.update_status(loan_id, status) diff --git a/app/services/repayment.py b/app/services/repayment.py index e212ff2..38e99e2 100644 --- a/app/services/repayment.py +++ b/app/services/repayment.py @@ -62,9 +62,17 @@ class RepaymentService: Get the latest repayment with a repay date and no verification date. """ return Repayment.get_latest_loan_with_repay_date() + @classmethod def add_repayment(cls, data): """ Add a new repayment entry. """ - return Repayment.add_repayment(data) \ No newline at end of file + return Repayment.add_repayment(data) + + @classmethod + def create_repayment(cls, repayment_data): + """ + Add a new repayment entry. + """ + return Repayment.create_repayment(customer_id, repayment_data) \ No newline at end of file