From 2c8fda1792e40cfe5d4a7671babd5606beec47fc Mon Sep 17 00:00:00 2001 From: VivianDee <115420678+VivianDee@users.noreply.github.com> Date: Thu, 17 Apr 2025 11:31:05 +0100 Subject: [PATCH 1/3] [add]: transaction id and due date --- app/api/services/provide_loan.py | 2 +- app/models/loan_charge.py | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/api/services/provide_loan.py b/app/api/services/provide_loan.py index 30da2ca..49c7e19 100644 --- a/app/api/services/provide_loan.py +++ b/app/api/services/provide_loan.py @@ -90,7 +90,7 @@ class ProvideLoanService(BaseService): ] loan_id = loan.id - loan_charges = LoanCharge.create_charges_for_loan(loan_id = loan_id, charges = charges) + loan_charges = LoanCharge.create_charges_for_loan(loan_id = loan_id, transaction_id = transaction_id, charges = charges) # logger.error(f"********* We need to develop the fee array here") diff --git a/app/models/loan_charge.py b/app/models/loan_charge.py index 3e71030..e00002b 100644 --- a/app/models/loan_charge.py +++ b/app/models/loan_charge.py @@ -1,4 +1,4 @@ -from datetime import datetime, timezone +from datetime import datetime, timezone, timedelta from app.extensions import db from sqlalchemy.orm import relationship @@ -8,11 +8,13 @@ class LoanCharge(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) loan_id = db.Column(db.Integer, nullable=False) + transaction_id = db.Column(db.String(50), nullable=True) code = db.Column(db.String(50), nullable=False) amount = db.Column(db.Float, default=0.0) percent = db.Column(db.Float, default=0.0) description = db.Column(db.Text, nullable=True) due = db.Column(db.Integer, nullable=False) + due_date = db.Column(db.DateTime, nullable=True) 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)) @@ -24,7 +26,7 @@ class LoanCharge(db.Model): ) @classmethod - def create_charges_for_loan(cls, loan_id, charges): + def create_charges_for_loan(cls, loan_id, transaction_id, referenced_amount = 0.0, charges): """ Create loan charges for a given loan. @@ -40,15 +42,27 @@ class LoanCharge(db.Model): raise ValueError("loan_id cannot be None") loan_charges = [] + now = datetime.now(timezone.utc) + for charge in charges: + due_days = charge.get("due", 0) + amount = charge.get("amount", 0.0) + percent = charge.get("percent", 0.0) + + if amount == 0.0: + amount = (percent / 100.0) * referenced_amount + charge_obj = cls( loan_id=loan_id, + transaction_id=charge.get("transaction_id"), code=charge.get("code"), - amount=charge.get("amount", 0.0), - percent=charge.get("percent", 0.0), + amount=amount, + percent=percent, description=charge.get("description", ""), - due=charge.get("due", 0) + due=due_days, + due_date=now + timedelta(days=due_days) ) + db.session.add(charge_obj) loan_charges.append(charge_obj) From f461b826e60499dece045bb4f5f5a3a138356f26 Mon Sep 17 00:00:00 2001 From: VivianDee <115420678+VivianDee@users.noreply.github.com> Date: Thu, 17 Apr 2025 11:39:43 +0100 Subject: [PATCH 2/3] [fix]: Refernce amount --- app/api/services/provide_loan.py | 2 +- app/models/loan_charge.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/api/services/provide_loan.py b/app/api/services/provide_loan.py index 49c7e19..aeeb575 100644 --- a/app/api/services/provide_loan.py +++ b/app/api/services/provide_loan.py @@ -90,7 +90,7 @@ class ProvideLoanService(BaseService): ] loan_id = loan.id - loan_charges = LoanCharge.create_charges_for_loan(loan_id = loan_id, transaction_id = transaction_id, charges = charges) + loan_charges = LoanCharge.create_charges_for_loan(loan_id = loan_id, transaction_id = transaction_id, referenced_amount = 800, charges = charges) # logger.error(f"********* We need to develop the fee array here") diff --git a/app/models/loan_charge.py b/app/models/loan_charge.py index e00002b..00b3606 100644 --- a/app/models/loan_charge.py +++ b/app/models/loan_charge.py @@ -26,7 +26,7 @@ class LoanCharge(db.Model): ) @classmethod - def create_charges_for_loan(cls, loan_id, transaction_id, referenced_amount = 0.0, charges): + def create_charges_for_loan(cls, loan_id, transaction_id, charges, referenced_amount = 0.0): """ Create loan charges for a given loan. From 9a1c81ab10559eeb0dccdf2f1794597173514183 Mon Sep 17 00:00:00 2001 From: VivianDee <115420678+VivianDee@users.noreply.github.com> Date: Thu, 17 Apr 2025 11:44:42 +0100 Subject: [PATCH 3/3] [fix]: Missing Transaction ID --- app/models/loan_charge.py | 16 ++++----- ...4_migration_on_thu_apr_17_10_40_05_utc_.py | 34 +++++++++++++++++++ 2 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 migrations/versions/ec8d97f9b584_migration_on_thu_apr_17_10_40_05_utc_.py diff --git a/app/models/loan_charge.py b/app/models/loan_charge.py index 00b3606..a9ed283 100644 --- a/app/models/loan_charge.py +++ b/app/models/loan_charge.py @@ -53,14 +53,14 @@ class LoanCharge(db.Model): amount = (percent / 100.0) * referenced_amount charge_obj = cls( - loan_id=loan_id, - transaction_id=charge.get("transaction_id"), - code=charge.get("code"), - amount=amount, - percent=percent, - description=charge.get("description", ""), - due=due_days, - due_date=now + timedelta(days=due_days) + loan_id = loan_id, + transaction_id = transaction_id, + code = charge.get("code"), + amount = amount, + percent = percent, + description = charge.get("description", ""), + due = due_days, + due_date = now + timedelta(days=due_days) ) db.session.add(charge_obj) diff --git a/migrations/versions/ec8d97f9b584_migration_on_thu_apr_17_10_40_05_utc_.py b/migrations/versions/ec8d97f9b584_migration_on_thu_apr_17_10_40_05_utc_.py new file mode 100644 index 0000000..1cf6d46 --- /dev/null +++ b/migrations/versions/ec8d97f9b584_migration_on_thu_apr_17_10_40_05_utc_.py @@ -0,0 +1,34 @@ +"""Migration on Thu Apr 17 10:40:05 UTC 2025 + +Revision ID: ec8d97f9b584 +Revises: 287ecb02d3d7 +Create Date: 2025-04-17 10:40:34.751272 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'ec8d97f9b584' +down_revision = '287ecb02d3d7' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('loan_charges', schema=None) as batch_op: + batch_op.add_column(sa.Column('transaction_id', sa.String(length=50), nullable=True)) + batch_op.add_column(sa.Column('due_date', sa.DateTime(), nullable=True)) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('loan_charges', schema=None) as batch_op: + batch_op.drop_column('due_date') + batch_op.drop_column('transaction_id') + + # ### end Alembic commands ###