diff --git a/app/models/loan_repayment_schedule.py b/app/models/loan_repayment_schedule.py index 62e6d6b..5ac5ca5 100644 --- a/app/models/loan_repayment_schedule.py +++ b/app/models/loan_repayment_schedule.py @@ -89,13 +89,50 @@ class LoanRepaymentSchedule(db.Model): @classmethod def get_overdue_repayment_schedule(cls): """ - Get all overdue repayment schedules. + Get all overdue repayment schedules that are not repaid. """ try: - return cls.query.filter(cls.due_date < datetime.now(timezone.utc), cls.paid == False).all() + return cls.query.filter(cls.due_date < datetime.now(timezone.utc), cls.paid == False).order_by(cls.due_date.asc()).all() except Exception as e: logger.error(f"Error fetching overdue repayment schedules: {e}") return [] + @classmethod + def get_active_overdue_repayment_schedule(cls): + """ + Get all overdue repayment schedules that are active. + """ + try: + return ( + cls.query + .filter( + cls.due_date < datetime.now(timezone.utc), + cls.paid_status == RepaymentScheduleStatus.ACTIVE + ) + .order_by(cls.due_date.asc()) + .all() + ) + except Exception as e: + logger.error(f"Error fetching active overdue repayment schedules: {e}") + return [] + @classmethod + def get_partially_paid_overdue_repayment_schedule(cls): + """ + Get all overdue repayment schedules that are partially paid. + """ + try: + return ( + cls.query + .filter( + cls.due_date < datetime.now(timezone.utc), + cls.paid_status == RepaymentScheduleStatus.PARTIALLY_PAID + ) + .order_by(cls.due_date.asc()) + .all() + ) + except Exception as e: + logger.error(f"Error fetching partially paid overdue repayment schedules: {e}") + return [] + @classmethod def get_repayment_schedule_by_transaction_id(cls, transaction_id): diff --git a/app/routes/autocall.py b/app/routes/autocall.py index 712332a..f06aba1 100644 --- a/app/routes/autocall.py +++ b/app/routes/autocall.py @@ -443,8 +443,8 @@ def report(): @autocall_bp.route("/overdue-loans", methods=["GET"]) def overdue_loans(): try: - # Step 1: Get all overdue loans - overdue_loans = LoanRepaymentScheduleService.get_overdue_repayment_schedule() + # Step 1: Get all active overdue loans + overdue_loans = LoanRepaymentScheduleService.get_active_overdue_repayment_schedule() logger.info(f"Found {len(overdue_loans)} overdue loans.") if not overdue_loans: diff --git a/app/services/loan.py b/app/services/loan.py index e8c12e0..693c865 100644 --- a/app/services/loan.py +++ b/app/services/loan.py @@ -58,7 +58,7 @@ class LoanService: @classmethod def set_disbursement_loan_description(cls,loan_id,description): - return Loan.set_disbursement_message(loan_id, result, description) + return Loan.set_disbursement_message(loan_id, description) @classmethod diff --git a/app/services/loan_repayment_schedule.py b/app/services/loan_repayment_schedule.py index 9fb9e27..1ded547 100644 --- a/app/services/loan_repayment_schedule.py +++ b/app/services/loan_repayment_schedule.py @@ -13,6 +13,12 @@ class LoanRepaymentScheduleService: def get_overdue_repayment_schedule(cls): return LoanRepaymentSchedule.get_overdue_repayment_schedule() @classmethod + def get_active_overdue_repayment_schedule(cls): + return LoanRepaymentSchedule.get_active_overdue_repayment_schedule() + @classmethod + def get_partially_paid_overdue_repayment_schedule(cls): + return LoanRepaymentSchedule.get_partially_paid_overdue_repayment_schedule() + @classmethod def get_repayment_schedule_by_id_and_transaction_id(cls, id, transaction_id): return LoanRepaymentSchedule.get_repayment_schedule_by_id_and_transaction_id(id, transaction_id)