Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3242a57586 | |||
| 463c0a0def | |||
| c061c9b5a4 | |||
| 201fa4202e | |||
| bb4d7ac064 | |||
| 5a2161acaa | |||
| 10138f66f3 | |||
| 9ea0027f71 | |||
| d1b8d15f31 | |||
| f716b47603 | |||
| c95e2786b5 | |||
| 29b2697b0e |
@@ -88,6 +88,7 @@ def loan_status():
|
||||
@jwt_required()
|
||||
def repayment():
|
||||
data = request.get_json()
|
||||
logger.error(f"HERE 0000a **** ")
|
||||
# logger.info(f"Repayment request received: {data}")
|
||||
response = RepaymentService.process_request(data)
|
||||
return response
|
||||
|
||||
@@ -48,12 +48,14 @@ class BaseService:
|
||||
"""
|
||||
Create a new transaction.
|
||||
"""
|
||||
channel = "USSD" if validated_data.get("channel") is None else validated_data.get("channel")
|
||||
|
||||
return Transaction.create_transaction(
|
||||
transaction_id = validated_data.get("transactionId"),
|
||||
customer_id = validated_data.get('customerId', None),
|
||||
account_id = validated_data.get("accountId", None),
|
||||
type = cls.TRANSACTION_TYPE,
|
||||
channel = validated_data.get("channel"),
|
||||
channel = channel,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -70,20 +70,31 @@ class EligibilityCheckService(BaseService):
|
||||
return ResponseHelper.error(result_description="RACCheck failed")
|
||||
|
||||
response = response.json()
|
||||
|
||||
logger.info(f"This is Response (from Eligibility Check): {str(response)}", exc_info=True)
|
||||
|
||||
|
||||
if not response or response['responseCode'] != '00':
|
||||
|
||||
if response:
|
||||
logger.error(f"{response['responseMessage']}")
|
||||
|
||||
return ResponseHelper.error(result_description=f"RACCheck failed")
|
||||
|
||||
rack_checks_response = response['data']['racResponse']
|
||||
|
||||
rac_check = RACCheck.add_rac_check(
|
||||
customer_id = customer_id,
|
||||
account_id = account_id,
|
||||
transaction_id = transaction.transaction_id,
|
||||
data = response['racResponse']
|
||||
data = rack_checks_response
|
||||
)
|
||||
|
||||
if not rac_check:
|
||||
logger.error(f"Failed to save RACCheck")
|
||||
return ResponseHelper.error(result_description="Failed to save RACCheck.")
|
||||
|
||||
rack_checks_response = response['racResponse']
|
||||
# -----------------TIME FOR ANALYSIS TO REGISTER OFFER ----------------------
|
||||
if not rac_check:
|
||||
logger.error(f"Failed to save RACCheck")
|
||||
return ResponseHelper.error(result_description="Failed to save RACCheck.")
|
||||
|
||||
# -----------------TIME FOR ANALYSIS TO REGISTER OFFER ----------------------
|
||||
# eligible_offers = []
|
||||
try:
|
||||
eligible_offers = OfferAnalysis.decide_offer(
|
||||
|
||||
@@ -55,6 +55,7 @@ class LoanStatusService(BaseService):
|
||||
# Simulated processing logic
|
||||
response_data = {
|
||||
"customerId": customer_id,
|
||||
"accountId": account_id,
|
||||
"transactionId": transactionId,
|
||||
"loans": loans,
|
||||
"totalDebtAmount": total_debt_amount,
|
||||
|
||||
@@ -29,6 +29,7 @@ class RepaymentService(BaseService):
|
||||
try:
|
||||
with db.session.begin():
|
||||
validated_data = RepaymentService.validate_data(data, RepaymentSchema())
|
||||
|
||||
customer_id = validated_data.get('customerId')
|
||||
request_id = validated_data.get('requestId')
|
||||
loan_id = validated_data.get('debtId')
|
||||
@@ -37,9 +38,9 @@ class RepaymentService(BaseService):
|
||||
# customer = Customer.get_customer_with_loan_list(customer_id)
|
||||
transaction_id = validated_data.get('transactionId')
|
||||
initiated_by = validated_data.get('initiatedBy')
|
||||
|
||||
logger.error(f"HERE 0002a **** ")
|
||||
if(RepaymentService.validate_account_ownership(account_id = account_id, customer_id = customer_id)):
|
||||
|
||||
logger.error(f"HERE 0001a **** ")
|
||||
# Check loan exists
|
||||
loan = Loan.get_customer_loan(loan_id = loan_id, customer_id = customer_id)
|
||||
|
||||
@@ -61,7 +62,8 @@ class RepaymentService(BaseService):
|
||||
if not transaction:
|
||||
logger.error(f"Failed to log transaction")
|
||||
return ResponseHelper.error(result_description="Failed to log transaction.")
|
||||
else:
|
||||
else:
|
||||
logger.error(f"Invalid Customer or AccountID {account_id} to CustomerID{customer_id} ")
|
||||
return ResponseHelper.error(result_description="Invalid Customer or Account")
|
||||
|
||||
# Simulated processing logic
|
||||
|
||||
@@ -45,6 +45,10 @@ class Loan(db.Model):
|
||||
disburse_date = db.Column(db.DateTime, nullable=True)
|
||||
disburse_verify = db.Column(db.DateTime, nullable=True)
|
||||
reference = db.Column(db.String(50), nullable=True)
|
||||
disburse_result = db.Column(db.String(10), nullable=True)
|
||||
disburse_description = db.Column(db.String(100), nullable=True)
|
||||
verify_result = db.Column(db.String(10), nullable=True)
|
||||
verify_description = db.Column(db.String(100), nullable=True)
|
||||
|
||||
customer = relationship(
|
||||
"Customer",
|
||||
|
||||
@@ -21,6 +21,12 @@ class Repayment(db.Model):
|
||||
created_at = db.Column(db.DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
transaction_id = db.Column(db.String(50), nullable=True)
|
||||
repay_date = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||
repay_result = db.Column(db.String(10), nullable=True)
|
||||
repay_description = db.Column(db.String(100), nullable=True)
|
||||
verify_date = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||
verify_result = db.Column(db.String(10), nullable=True)
|
||||
verify_description = db.Column(db.String(100), nullable=True)
|
||||
|
||||
@classmethod
|
||||
def create_repayment(cls, customer_id, loan, transaction_id):
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
"""empty message
|
||||
|
||||
Revision ID: 45790fd659fb
|
||||
Revises: b3a5e10bc77e
|
||||
Create Date: 2025-06-04 12:37:48.180736
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '45790fd659fb'
|
||||
down_revision = 'b3a5e10bc77e'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table('loans', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('disburse_result', sa.String(length=10), nullable=True))
|
||||
batch_op.add_column(sa.Column('disburse_description', sa.String(length=100), nullable=True))
|
||||
batch_op.add_column(sa.Column('verify_result', sa.String(length=10), nullable=True))
|
||||
batch_op.add_column(sa.Column('verify_description', sa.String(length=100), nullable=True))
|
||||
|
||||
with op.batch_alter_table('repayments', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('repay_date', sa.DateTime(), nullable=True))
|
||||
batch_op.add_column(sa.Column('repay_result', sa.String(length=10), nullable=True))
|
||||
batch_op.add_column(sa.Column('repay_description', sa.String(length=100), nullable=True))
|
||||
batch_op.add_column(sa.Column('verify_date', sa.DateTime(), nullable=True))
|
||||
batch_op.add_column(sa.Column('verify_result', sa.String(length=10), nullable=True))
|
||||
batch_op.add_column(sa.Column('verify_description', sa.String(length=100), nullable=True))
|
||||
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table('repayments', schema=None) as batch_op:
|
||||
batch_op.drop_column('verify_description')
|
||||
batch_op.drop_column('verify_result')
|
||||
batch_op.drop_column('verify_date')
|
||||
batch_op.drop_column('repay_description')
|
||||
batch_op.drop_column('repay_result')
|
||||
batch_op.drop_column('repay_date')
|
||||
|
||||
with op.batch_alter_table('loans', schema=None) as batch_op:
|
||||
batch_op.drop_column('verify_description')
|
||||
batch_op.drop_column('verify_result')
|
||||
batch_op.drop_column('disburse_description')
|
||||
batch_op.drop_column('disburse_result')
|
||||
|
||||
# ### end Alembic commands ###
|
||||
Reference in New Issue
Block a user