Models added
This commit is contained in:
@@ -31,6 +31,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))
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
from datetime import datetime, timezone
|
||||||
|
from app.extensions import db
|
||||||
|
from app.models.charge import Charge
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
|
class Offer(db.Model):
|
||||||
|
__tablename__ = 'offers'
|
||||||
|
|
||||||
|
id = db.Column(db.String, primary_key=True)
|
||||||
|
product_id = db.Column(db.String, nullable=False)
|
||||||
|
min_amount = db.Column(db.Float, nullable=False)
|
||||||
|
max_amount = db.Column(db.Float, nullable=False)
|
||||||
|
tenor = db.Column(db.Integer, nullable=False)
|
||||||
|
schedule = db.Column(db.Integer, nullable=True)
|
||||||
|
interest_rate = db.Column(db.Float, default=3.0)
|
||||||
|
management_rate = db.Column(db.Float, default=1.0)
|
||||||
|
insurance_rate = db.Column(db.Float, default=1.0)
|
||||||
|
vat_rate = db.Column(db.Float, default=7.5)
|
||||||
|
list_order = db.Column(db.Integer, 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))
|
||||||
|
|
||||||
|
charges = relationship(
|
||||||
|
"Charge",
|
||||||
|
primaryjoin="Offer.id == Charge.offer_id",
|
||||||
|
foreign_keys="Charge.offer_id",
|
||||||
|
back_populates="offer",
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_all_offers(cls):
|
||||||
|
"""
|
||||||
|
Return all offers in dictionary format.
|
||||||
|
"""
|
||||||
|
offers = cls.query.all()
|
||||||
|
|
||||||
|
if not offers:
|
||||||
|
raise ValueError(f"No available offers")
|
||||||
|
return offers
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def is_valid_offer(cls, offer_id):
|
||||||
|
offer = cls.query.filter_by(id=str(offer_id)).first()
|
||||||
|
|
||||||
|
|
||||||
|
if not offer:
|
||||||
|
return False
|
||||||
|
return offer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return {
|
||||||
|
"offerId": self.id,
|
||||||
|
"productId": self.product_id,
|
||||||
|
"minAmount": self.min_amount,
|
||||||
|
"maxAmount": self.max_amount,
|
||||||
|
"tenor": self.tenor,
|
||||||
|
"interest_rate": self.interest_rate,
|
||||||
|
"management_rate": self.management_rate,
|
||||||
|
"insurance_rate": self.insurance_rate,
|
||||||
|
"vat_rate": self.vat_rate
|
||||||
|
}
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'<LoanOffer {self.id}>'
|
||||||
Reference in New Issue
Block a user