diff --git a/app/api/services/eligibility_check.py b/app/api/services/eligibility_check.py index d9a7dd8..8afec6f 100644 --- a/app/api/services/eligibility_check.py +++ b/app/api/services/eligibility_check.py @@ -51,6 +51,14 @@ class EligibilityCheckService(BaseService): db.session.flush() + # Determine if there is any loan of 0 days active + current_loan = EligibilityCheckService.get_current_active_loans_by_account_id(account_id = account_id) + if current_loan: + logger.info(f"Account {current_loan['accountId']} has active loan {current_loan}") + if current_loan['product_id'] =='3MPC': + return ResponseHelper.error(result_description="Max loan count for 3MPC reached") + + # Determine Loan count is_eligible = EligibilityCheckService.check_loan_limits(customer_id) @@ -167,7 +175,12 @@ class EligibilityCheckService(BaseService): logger.error(f"An error occurred: {str(e)}", exc_info=True) db.session.rollback() return ResponseHelper.internal_server_error() - + + @staticmethod + def get_current_active_loans_by_account_id(account_id): + current_loan = Loan.get_current_active_loans_by_account_id(account_id) + return current_loan + @staticmethod def check_loan_limits(customer_id): diff --git a/app/models/loan.py b/app/models/loan.py index 2b8f673..40688e5 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -204,6 +204,21 @@ class Loan(db.Model): return active_loans + @classmethod + def get_current_active_loans_by_account_id(cls, account_id): + """ + Get the first active loan based on the accountID. + """ + first_active_loan = cls.query.filter( + cls.account_id == account_id, + or_( + cls.status == LoanStatus.ACTIVE.value, + cls.status == LoanStatus.START_REPAY.value, + cls.status == LoanStatus.ACTIVE_PARTIAL.value, + ) + ).order_by(cls.id.desc()).first() + + return first_active_loan @classmethod def update_status(cls, loan_id, status):