Merge branch 'loan_schedule_fix' of DigiFi/digifi-BankToProductCore into master
This commit is contained in:
@@ -95,7 +95,8 @@ class ProvideLoanService(BaseService):
|
|||||||
upfront_fee = upfront_fee,
|
upfront_fee = upfront_fee,
|
||||||
repayment_amount = repayment_amount,
|
repayment_amount = repayment_amount,
|
||||||
installment_amount = installment_amount,
|
installment_amount = installment_amount,
|
||||||
status= LoanStatus.ACTIVE
|
status = LoanStatus.ACTIVE,
|
||||||
|
tenor = offer.tenor
|
||||||
)
|
)
|
||||||
|
|
||||||
if not loan:
|
if not loan:
|
||||||
@@ -106,7 +107,7 @@ class ProvideLoanService(BaseService):
|
|||||||
|
|
||||||
db.session.flush()
|
db.session.flush()
|
||||||
|
|
||||||
schedule = LoanRepaymentSchedule.add_repayment_schedule(loan = loan, tenor = tenor)
|
schedule = LoanRepaymentSchedule.add_repayment_schedule(loan = loan, tenor = tenor, transaction_id = transaction_id)
|
||||||
|
|
||||||
|
|
||||||
if not schedule:
|
if not schedule:
|
||||||
|
|||||||
+6
-3
@@ -30,6 +30,7 @@ class Loan(db.Model):
|
|||||||
repayment_amount = db.Column(db.Float, nullable=True, default=0.0)
|
repayment_amount = db.Column(db.Float, nullable=True, default=0.0)
|
||||||
installment_amount = db.Column(db.Float, nullable=True, default=0.0)
|
installment_amount = db.Column(db.Float, nullable=True, default=0.0)
|
||||||
status = db.Column(db.String(20), default='pending')
|
status = db.Column(db.String(20), default='pending')
|
||||||
|
tenor = db.Column(db.Integer, nullable=True)
|
||||||
due_date = db.Column(db.DateTime, nullable=True)
|
due_date = db.Column(db.DateTime, nullable=True)
|
||||||
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
||||||
@@ -69,7 +70,8 @@ class Loan(db.Model):
|
|||||||
upfront_fee,
|
upfront_fee,
|
||||||
repayment_amount,
|
repayment_amount,
|
||||||
installment_amount,
|
installment_amount,
|
||||||
status="pending",
|
tenor,
|
||||||
|
status = "pending",
|
||||||
):
|
):
|
||||||
# Check if customer exists
|
# Check if customer exists
|
||||||
customer = Customer.is_valid_customer(customer_id)
|
customer = Customer.is_valid_customer(customer_id)
|
||||||
@@ -92,8 +94,9 @@ class Loan(db.Model):
|
|||||||
upfront_fee = upfront_fee,
|
upfront_fee = upfront_fee,
|
||||||
repayment_amount = repayment_amount,
|
repayment_amount = repayment_amount,
|
||||||
installment_amount = installment_amount,
|
installment_amount = installment_amount,
|
||||||
due_date=now,
|
due_date=now,
|
||||||
status = status
|
tenor = tenor,
|
||||||
|
status = status,
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ class LoanRepaymentSchedule(db.Model):
|
|||||||
|
|
||||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||||
loan_id = db.Column(db.Integer, nullable=False)
|
loan_id = db.Column(db.Integer, nullable=False)
|
||||||
|
transaction_id = db.Column(db.String(50), nullable=True)
|
||||||
product_id = db.Column(db.String(20), nullable=True)
|
product_id = db.Column(db.String(20), nullable=True)
|
||||||
installment_number = db.Column(db.Integer, nullable=False)
|
installment_number = db.Column(db.Integer, nullable=False)
|
||||||
due_date = db.Column(db.DateTime, nullable=False)
|
due_date = db.Column(db.DateTime, nullable=False)
|
||||||
@@ -18,7 +19,6 @@ class LoanRepaymentSchedule(db.Model):
|
|||||||
|
|
||||||
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
||||||
# transaction_id = db.Column(db.String(50), nullable=False)
|
|
||||||
|
|
||||||
loan = relationship(
|
loan = relationship(
|
||||||
"Loan",
|
"Loan",
|
||||||
@@ -29,7 +29,7 @@ class LoanRepaymentSchedule(db.Model):
|
|||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def add_repayment_schedule(cls, loan, tenor):
|
def add_repayment_schedule(cls, loan, tenor, transaction_id):
|
||||||
"""
|
"""
|
||||||
Add repayment schedules for a given loan.
|
Add repayment schedules for a given loan.
|
||||||
"""
|
"""
|
||||||
@@ -44,7 +44,8 @@ class LoanRepaymentSchedule(db.Model):
|
|||||||
due_date=due_date,
|
due_date=due_date,
|
||||||
total_repayment_amount = round(loan.repayment_amount, 2),
|
total_repayment_amount = round(loan.repayment_amount, 2),
|
||||||
installment_amount=round(loan.installment_amount, 2),
|
installment_amount=round(loan.installment_amount, 2),
|
||||||
product_id = loan.product_id
|
product_id = loan.product_id,
|
||||||
|
transaction_id = transaction_id
|
||||||
)
|
)
|
||||||
|
|
||||||
db.session.add(schedule)
|
db.session.add(schedule)
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
"""Migration for mloan table
|
||||||
|
|
||||||
|
Revision ID: 38acee611d55
|
||||||
|
Revises: f1e83a993034
|
||||||
|
Create Date: 2025-04-30 09:55:30.552838
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '38acee611d55'
|
||||||
|
down_revision = 'f1e83a993034'
|
||||||
|
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('tenor', sa.Integer(), nullable=True))
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('loans', schema=None) as batch_op:
|
||||||
|
batch_op.drop_column('tenor')
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
@@ -19,7 +19,7 @@ depends_on = None
|
|||||||
def upgrade():
|
def upgrade():
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op:
|
with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op:
|
||||||
batch_op.add_column(sa.Column('transaction_id', sa.String(length=50), nullable=False))
|
batch_op.add_column(sa.Column('transaction_id', sa.String(length=50), nullable=True))
|
||||||
|
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user