diff --git a/app/models/loan_repayment_schedule.py b/app/models/loan_repayment_schedule.py new file mode 100644 index 0000000..64c67cb --- /dev/null +++ b/app/models/loan_repayment_schedule.py @@ -0,0 +1,45 @@ +from datetime import datetime, timezone +from app.extensions import db +from sqlalchemy.orm import relationship +from dateutil.relativedelta import relativedelta + +class LoanRepaymentSchedule(db.Model): + __tablename__ = 'loan_repayment_schedules' + + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + loan_id = db.Column(db.Integer, nullable=False) + product_id = db.Column(db.String(20), nullable=True) + installment_number = db.Column(db.Integer, nullable=False) + due_date = db.Column(db.DateTime, nullable=False) + installment_amount= db.Column(db.Float, default=0.0) + total_repayment_amount = db.Column(db.Float, default=0.0) + paid = db.Column(db.Boolean, default=False) + paid_at = 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)) + + loan = relationship( + "Loan", + primaryjoin="LoanRepaymentSchedule.loan_id == Loan.id", + foreign_keys=[loan_id], + back_populates="loan_repayment_schedules", + ) + + + + def to_dict(self): + return { + 'id': self.id, + 'loanId': self.loan_id, + 'installmentNumber': self.installment_number, + 'dueDate': self.due_date.isoformat(), + 'principalAmount': self.principal_amount, + 'interestAmount': self.interest_amount, + 'totalInstallment': self.total_installment, + 'paid': self.paid, + 'paidAt': self.paid_at.isoformat() if self.paid_at else None + } + + def __repr__(self): + return f''