63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
import random
|
|
import string
|
|
from app.services.repayment import RepaymentService
|
|
from app.services.loan import LoanService
|
|
from app.helpers.response_helper import ResponseHelper
|
|
from app.utils.logger import logger
|
|
from app.config import settings
|
|
|
|
OVERRIDE_COLLECTION_TRANCATION_ID = settings.OVERRIDE_COLLECTION_TRANCATION_ID
|
|
|
|
class CollectLoanHelper:
|
|
@staticmethod
|
|
def _validate_repayment_and_loan(data):
|
|
repayment = RepaymentService.get_repayment_by_id(id=data['Id'])
|
|
if not repayment:
|
|
logger.info(f"Repayment id: {data['Id']}, was not found")
|
|
return None, None, ResponseHelper.error("Repayment not found")
|
|
|
|
repayment_data = repayment.to_dict()
|
|
loan = LoanService.get_loan_by_loan_id(loan_id=int(repayment_data['loanId']))
|
|
if not loan:
|
|
logger.info(f"Loan id: {repayment_data['loanId']}, was not found")
|
|
return None, None, ResponseHelper.error("Loan not found")
|
|
|
|
loan
|
|
return repayment_data, loan, None
|
|
|
|
@staticmethod
|
|
def _build_collect_loan_payload(loan_data, repayment_data, data, collectionMethod):
|
|
logger.info(f"building CollectLoan endpoint with data: {loan_data}")
|
|
|
|
debtId = str(loan_data.get('debtId', "")).strip().zfill(6)
|
|
#this can be overridden based on config
|
|
t_id = ''.join(random.choices(string.ascii_uppercase, k=22))
|
|
if OVERRIDE_COLLECTION_TRANCATION_ID == 100:
|
|
t_id = loan_data['transactionId']
|
|
return {
|
|
"transactionId": t_id,
|
|
"fbnTransactionId": loan_data['transactionId'],
|
|
"debtId": debtId,
|
|
"customerId": repayment_data['customerId'],
|
|
"accountId": loan_data['accountId'],
|
|
"productId": repayment_data['productId'],
|
|
"collectAmount": (
|
|
data['overdueLoanScheduleAmount']
|
|
if data.get('overdueLoanScheduleAmount')
|
|
is not None else loan_data.get('balance', 0)
|
|
),
|
|
"penalCharge": 0,
|
|
"channel": "USSD",
|
|
"collectionMethod": collectionMethod,
|
|
"lienAmount": 0,
|
|
"countryId": "NG",
|
|
"comment": "COLLECT LOAN"
|
|
}
|
|
|
|
@staticmethod
|
|
def chunk_list(data, chunk_size):
|
|
"""Yield successive chunk_size chunks from data."""
|
|
for i in range(0, len(data), chunk_size):
|
|
yield data[i:i + chunk_size]
|
|
|
|
|