added repayment_schedule
This commit was merged in pull request #43.
This commit is contained in:
@@ -2,6 +2,7 @@ import requests
|
||||
from app.config import settings
|
||||
from app.helpers.response_helper import ResponseHelper
|
||||
from app.services.loan import LoanService
|
||||
from app.services.loan_repayment_schedule import LoanRepaymentScheduleService
|
||||
from app.utils.auth import get_headers
|
||||
from app.utils.extras import preprocess_loan_charges_data
|
||||
import random
|
||||
@@ -323,39 +324,62 @@ class SimbrellaClient:
|
||||
logger.info(f"Repayment data added: {new_repayment_data.to_dict()}")
|
||||
else:
|
||||
logger.warning("Failed to add repayment data")
|
||||
|
||||
updated_loan = None
|
||||
if result.get('responseCode') == '00':
|
||||
amount_collected = Decimal(str(result.get('amountCollected', 0))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
|
||||
logger.info(f"Amount collected: {amount_collected}")
|
||||
|
||||
if loan.balance is None or loan.balance <= 0:
|
||||
logger.warning(f"Loan ID {loan.id} has no balance. Skipping loan update.")
|
||||
return ResponseHelper.error("Loan has no balance. Skipping.")
|
||||
updated_loan = loan.to_dict()
|
||||
#return ResponseHelper.error("Loan has no balance. Skipping.")
|
||||
else:
|
||||
|
||||
try:
|
||||
logger.info(f"Updating loan balance for loan ID {loan_data['debtId']} with amount collected: {amount_collected}")
|
||||
updated_loan = LoanService.update_loan_balance(int(loan_data['debtId']), amount_collected)
|
||||
logger.info(f"Updated loan: {updated_loan}")
|
||||
except Exception as ex:
|
||||
db.session.rollback()
|
||||
logger.error(f"Error updating loan balance for loan ID {loan.id}: {ex}")
|
||||
return ResponseHelper.error("Error updating loan balance")
|
||||
try:
|
||||
logger.info(f"Updating loan balance for loan ID {loan_data['debtId']} with amount collected: {amount_collected}")
|
||||
updated_loan = LoanService.update_loan_balance(int(loan_data['debtId']), amount_collected)
|
||||
logger.info(f"Updated loan: {updated_loan}")
|
||||
except Exception as ex:
|
||||
db.session.rollback()
|
||||
logger.error(f"Error updating loan balance for loan ID {loan.id}: {ex}")
|
||||
return ResponseHelper.error("Error updating loan balance")
|
||||
|
||||
try:
|
||||
updated_balance = Decimal(str(updated_loan['balance'])).quantize(Decimal('0.01'))
|
||||
logger.info(f"Updated balance: {updated_balance}")
|
||||
try:
|
||||
updated_balance = Decimal(str(updated_loan['balance'])).quantize(Decimal('0.01'))
|
||||
logger.info(f"Updated balance: {updated_balance}")
|
||||
|
||||
if updated_balance <= Decimal('0.00'):
|
||||
logger.info('Loan fully repaid')
|
||||
repaid = LoanService.update_status(updated_loan['debtId'], LoanStatus.REPAID)
|
||||
logger.info(f'Updated loan with repaid status: {repaid}')
|
||||
else:
|
||||
logger.info('Loan partially repaid')
|
||||
partial = LoanService.update_status(updated_loan['debtId'], LoanStatus.ACTIVE_PARTIAL)
|
||||
logger.info(f'Updated loan with partial status: {partial}')
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
logger.error(f"Error while updating loan status for debtId {updated_loan['debtId']}: {e}")
|
||||
if updated_balance <= Decimal('0.00'):
|
||||
logger.info('Loan fully repaid')
|
||||
repaid = LoanService.update_status(updated_loan['debtId'], LoanStatus.REPAID)
|
||||
logger.info(f'Updated loan with repaid status: {repaid}')
|
||||
updated_loan = repaid
|
||||
|
||||
else:
|
||||
logger.info('Loan partially repaid')
|
||||
partial = LoanService.update_status(updated_loan['debtId'], LoanStatus.ACTIVE_PARTIAL)
|
||||
logger.info(f'Updated loan with partial status: {partial}')
|
||||
updated_loan = partial
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
logger.error(f"Error while updating loan status for debtId {updated_loan['debtId']}: {e}")
|
||||
# for now lets update the loan repayment schedule only when full payment has been made
|
||||
# get the repayment schedule by loan_id
|
||||
logger.info(f"Updated loan status: {updated_loan.get('status')}")
|
||||
if updated_loan and updated_loan.get('status') == LoanStatus.REPAID:
|
||||
repayment_schedule = LoanRepaymentScheduleService.get_repayment_schedule_by_loan_id(updated_loan['debtId'])
|
||||
logger.info(f'Loan repayment schedule: {repayment_schedule}')
|
||||
# if repayment_schedule, loop through each installment
|
||||
if repayment_schedule:
|
||||
for installment in repayment_schedule:
|
||||
try:
|
||||
logger.info(f'Processing installment: {installment}')
|
||||
# Update each installment as paid
|
||||
LoanRepaymentScheduleService.update_repayment_schedule_status(installment.id, True)
|
||||
logger.info(f'Updated installment {installment.id} as paid')
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to update installment {installment.id}: {e}")
|
||||
|
||||
logger.info('All installments processed')
|
||||
|
||||
return ResponseHelper.success(result, "Successful")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user