53 lines
2.0 KiB
Python
53 lines
2.0 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 decimal import Decimal, ROUND_HALF_UP
|
|
from app.services.loan_repayment_schedule import LoanRepaymentScheduleService
|
|
from app.enums.loan_status import LoanStatus
|
|
|
|
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):
|
|
debtId = str(loan_data.get('debtId', "")).strip().zfill(6)
|
|
t_id = ''.join(random.choices(string.ascii_uppercase, k=22))
|
|
|
|
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"
|
|
}
|
|
|
|
|