From 56c7e594cb9fdc342a4a91e0f2ca0e2b15da608e Mon Sep 17 00:00:00 2001 From: ameye Date: Sun, 27 Apr 2025 19:20:22 -0400 Subject: [PATCH] fix loan returns --- app/models/loan.py | 111 +++++++++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/app/models/loan.py b/app/models/loan.py index 0dcdb6c..5eac72a 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -10,6 +10,26 @@ from app.models import Customer class Loan(db.Model): __tablename__ = 'loans' + # + # id = db.Column( + # db.Integer, + # primary_key=True, + # autoincrement=True, + # ) + # customer_id = db.Column(db.String(50), nullable=False) + # account_id = db.Column(db.String(50), nullable=False) + # offer_id = db.Column(db.String(20), nullable=False) + # initial_loan_amount = db.Column(db.Float, nullable=False) + # status = db.Column(db.String(20), default='pending') + # 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)) + # product_id = db.Column(db.String(20)) + # current_loan_amount = db.Column(db.Float) + # default_penalty_fee = db.Column(db.Float) + # continuous_fee = db.Column(db.Float) + # due_date = db.Column(db.DateTime) + # + # __tablename__ = 'loans' id = db.Column( db.Integer, @@ -17,17 +37,23 @@ class Loan(db.Model): autoincrement=True, ) customer_id = db.Column(db.String(50), nullable=False) + transaction_id = db.Column(db.String(50), nullable=True) + original_transaction = db.Column(db.String(50), nullable=True) account_id = db.Column(db.String(50), nullable=False) offer_id = db.Column(db.String(20), nullable=False) + product_id = db.Column(db.String(20), nullable=True) + collection_type = db.Column(db.String(20), nullable=True) + current_loan_amount = db.Column(db.Float, nullable=True) initial_loan_amount = db.Column(db.Float, nullable=False) + default_penalty_fee = db.Column(db.Float, default=0) + continuous_fee = db.Column(db.Float, default=0) + upfront_fee = 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) status = db.Column(db.String(20), default='pending') + 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)) - product_id = db.Column(db.String(20)) - current_loan_amount = db.Column(db.Float) - default_penalty_fee = db.Column(db.Float) - continuous_fee = db.Column(db.Float) - due_date = db.Column(db.DateTime) customer = relationship( "Customer", @@ -36,40 +62,40 @@ class Loan(db.Model): back_populates="loans", ) - @classmethod - def create_loan(cls, customer_id, account_id, offer_id, initial_loan_amount, status='pending', - product_id=None, current_loan_amount=None, default_penalty_fee=None, - continuous_fee=None, due_date=None): - - # Check if customer exists - is_valid = Customer.is_valid_customer(customer_id) - if not is_valid: - raise ValueError("Customer does not exist") - - # # Check for active loans - # has_active_loans = cls.has_active_loans(customer_id) - # if has_active_loans: - # raise ValueError("Customer has active loans") - - # Create and save the loan - loan = cls( - customer_id=customer_id, - account_id=account_id, - offer_id=offer_id, - initial_loan_amount=initial_loan_amount, - status=status, - product_id=product_id, - current_loan_amount=current_loan_amount or initial_loan_amount, - default_penalty_fee=default_penalty_fee, - continuous_fee=continuous_fee, - due_date=due_date - ) - - try: - db.session.add(loan) - except IntegrityError as err: - raise ValueError(f"Database integrity error: {err}") - return loan + # @classmethod + # def create_loan(cls, customer_id, account_id, offer_id, initial_loan_amount, status='pending', + # product_id=None, current_loan_amount=None, default_penalty_fee=None, + # continuous_fee=None, due_date=None): + # + # # Check if customer exists + # is_valid = Customer.is_valid_customer(customer_id) + # if not is_valid: + # raise ValueError("Customer does not exist") + # + # # # Check for active loans + # # has_active_loans = cls.has_active_loans(customer_id) + # # if has_active_loans: + # # raise ValueError("Customer has active loans") + # + # # Create and save the loan + # loan = cls( + # customer_id=customer_id, + # account_id=account_id, + # offer_id=offer_id, + # initial_loan_amount=initial_loan_amount, + # status=status, + # product_id=product_id, + # current_loan_amount=current_loan_amount or initial_loan_amount, + # default_penalty_fee=default_penalty_fee, + # continuous_fee=continuous_fee, + # due_date=due_date + # ) + # + # try: + # db.session.add(loan) + # except IntegrityError as err: + # raise ValueError(f"Database integrity error: {err}") + # return loan @classmethod def has_active_loans(cls, customer_id): @@ -180,6 +206,8 @@ class Loan(db.Model): 'id': self.id, 'customer_id': self.customer_id, 'account_id': self.account_id, + 'transaction_id': self.transaction_id, + 'original_transaction': self.original_transaction, 'offer_id': self.offer_id, 'initial_loan_amount': self.initial_loan_amount, 'current_loan_amount': self.current_loan_amount, @@ -187,10 +215,13 @@ class Loan(db.Model): 'product_id': self.product_id, 'default_penalty_fee': self.default_penalty_fee, 'continuous_fee': self.continuous_fee, + 'upfront_fee': self.upfront_fee, + 'repayment_amount': self.repayment_amount, + 'installment_amount': self.installment_amount, 'due_date': self.due_date.isoformat() if self.due_date else None, 'created_at': self.created_at.isoformat() if self.created_at else None, 'updated_at': self.updated_at.isoformat() if self.updated_at else None } - + def __repr__(self): return f'' \ No newline at end of file