diff --git a/app/integrations/simbrella.py b/app/integrations/simbrella.py index b0ff9eb..763aec5 100644 --- a/app/integrations/simbrella.py +++ b/app/integrations/simbrella.py @@ -53,6 +53,7 @@ class SimbrellaClient: # let us set disbursement date LoanService.set_disbursement_date(loan_data['debtId'], loan_data['customerId']) # toda this must return something logger.info(f"Here are your cal 000 : *********************************************************") + logger.info(f"Here is your loan data after setting disbursement date: {loan_data}") loan_charges = preprocess_loan_charges_data([loan_charge.to_dict() for loan_charge in loan.loan_charges]) logger.info(f"Here are your loan_charges: {loan_charges}") @@ -62,14 +63,15 @@ class SimbrellaClient: interest_fee = loan_charges.get("INTEREST")['amount'] insurance_fee = loan_charges.get("INSURANCE")['amount'] - disbursement_data ={ - "requestId": data['requestId'], - "transactionId": data['transactionId'], - "debtId": loan_data['debtId'], - "customerId": data['customerId'], - "accountId": data['accountId'], - "productId": loan_data['productId'], - "provideAmount": loan_data['currentLoanAmount'], + disbursement_data = { + "requestId": data.get('requestId'), + "transactionId": data.get('transactionId'), + "FbnTransactionId": data.get('FbnTransactionId'), + "debtId": str(loan_data.get('debtId', "")), + "customerId": data.get('customerId'), + "accountId": data.get('accountId'), + "productId": str(loan_data.get('productId', "")), + "provideAmount": loan_data.get('currentLoanAmount'), "collectAmountInterest": interest_fee, "collectAmountMgtFee": mgt_fee, "collectAmountInsurance": insurance_fee, diff --git a/app/models/loan.py b/app/models/loan.py index a358089..4c69253 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -7,6 +7,7 @@ import logging from sqlalchemy import and_, or_, not_ from sqlalchemy.sql import func from app.utils.logger import logger +from app.extensions import db class Loan(db.Model): __tablename__ = "loans" @@ -72,7 +73,7 @@ class Loan(db.Model): 'status': self.status, 'productId': self.product_id, 'dueDate': self.due_date.isoformat() if self.due_date else None, - 'loanDate': self.created_at.isoformat if self.created_at else None, + 'loanDate': self.created_at.isoformat() if self.created_at else None, 'disburseDate': self.disburse_date.isoformat() if self.disburse_date else None, 'disburseVerify': self.disburse_verify.isoformat if self.disburse_verify else None, 'reference': self.reference @@ -82,22 +83,32 @@ class Loan(db.Model): def get_loan_by_transaction_id(cls, transaction_id): return cls.query.filter_by(transaction_id=transaction_id).first() - @classmethod - def get_loan_by_debt_id(cls, debt_id): - return cls.query.filter_by(id=debt_id).first() - @classmethod def set_disbursement_date(cls, loan_id, customer_id): """ - Update the status of the loan with the given loan_id. + Update the disburse date 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.") - current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') - logger.info(f"What is now ======= ==== ==> : {current_time}") - # Update loan disburse_date and timestamp datetime.today().strftime('%Y-%m-%d %H:%M:%S') - loan.disburse_date = current_time # datetime.today().strftime('%Y-%m-%d %H:%M:%S') + + # Check if customer_id matches + if loan.customer_id != customer_id: + raise ValueError(f"Customer ID {customer_id} does not match the loan's customer ID.") + + current_time = datetime.now() + logger.info(f"What is now ======= ==== ==> : {current_time}") + # Update loan disburse_date + loan.disburse_date = current_time + + # Commit changes to database + try: + logger.info(f"Updating disburse date for loan ID {loan_id} to {current_time}") + db.session.commit() + except Exception as e: + db.session.rollback() + logger.error(f"Failed to update disburse date: {e}") + raise diff --git a/app/routes/authentication.py b/app/routes/authentication.py index cce54b5..2411aff 100644 --- a/app/routes/authentication.py +++ b/app/routes/authentication.py @@ -2,6 +2,7 @@ from flask import Blueprint, request, jsonify, current_app import requests from app.utils.auth import get_headers from app.config import settings +from app.utils.logger import logger auth_bp = Blueprint("auth", __name__) @@ -10,6 +11,7 @@ BASE_URL = settings.BANK_CALL_BASE_URL @auth_bp.route("/health", methods=["GET"]) def health(): + logger.info("Health check endpoint called") return jsonify({"status": "Up"}) diff --git a/app/routes/autocall.py b/app/routes/autocall.py index 87f8b64..88bc79c 100644 --- a/app/routes/autocall.py +++ b/app/routes/autocall.py @@ -19,9 +19,23 @@ def verify_transaction(): def disbursement(): # data = request.json() logger.info(f"Calling Disbursement Components") - - response = SimbrellaClient.verify_transaction() - + data = { + "requestId": "TRX1747399791142408", + "transactionId": "TRX1747399791142408", + "FbnTransactionId":"TRX1747399791142408", + "debtId": "9451", + "customerId": "CUC1696296013", + "accountId": "ACC8112865094", + "productId": "AMPC", + "provideAmount": 6600.0, + "collectAmountInterest": 198.0, + "collectAmountMgtFee": 66.0, + "collectAmountInsurance": 66.0, + "collectAmountVAT": 4.95, + "countryId": "01", + "comment": "Loan Disbursement" + } + response = SimbrellaClient.disburse_loan(data) return response