diff --git a/app/models/loan.py b/app/models/loan.py index ab8e89f..0e4e592 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -36,6 +36,13 @@ class Loan(db.Model): back_populates="loans", ) + loan_charges = relationship( + "LoanCharge", + primaryjoin="Loan.id == LoanCharge.loan_id", + foreign_keys="LoanCharge.loan_id", + back_populates="loan", + ) + @classmethod def create_loan(cls, customer_id, account_id, offer_id, initial_loan_amount, collection_type, transaction_id, status='pending'): diff --git a/app/models/loan_charge.py b/app/models/loan_charge.py new file mode 100644 index 0000000..f01a9f4 --- /dev/null +++ b/app/models/loan_charge.py @@ -0,0 +1,41 @@ +from datetime import datetime, timezone +from app.extensions import db +from sqlalchemy.orm import relationship + + +class LoanCharge(db.Model): + __tablename__ = 'loan_charges' + + 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_date = db.Column(db.DateTime, nullable=False) + 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)) + + loan = relationship( + "Loan", + primaryjoin="LoanCharge.loan_id == Loan.id", + foreign_keys=[loan_id], + back_populates="loan_charges", + ) + + + def to_dict(self): + return { + 'id': self.id, + 'loanId': self.loan_id, + 'transactionId': self.transaction_id, + 'code': self.code, + 'amount': self.amount, + 'percent': self.percent, + 'description': self.description, + 'dueDate': self.due_date.isoformat() if self.due_date else None, + } + + def __repr__(self): + return f""