fix loan returns
This commit is contained in:
+71
-40
@@ -10,6 +10,26 @@ from app.models import Customer
|
|||||||
|
|
||||||
class Loan(db.Model):
|
class Loan(db.Model):
|
||||||
__tablename__ = 'loans'
|
__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(
|
id = db.Column(
|
||||||
db.Integer,
|
db.Integer,
|
||||||
@@ -17,17 +37,23 @@ class Loan(db.Model):
|
|||||||
autoincrement=True,
|
autoincrement=True,
|
||||||
)
|
)
|
||||||
customer_id = db.Column(db.String(50), nullable=False)
|
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)
|
account_id = db.Column(db.String(50), nullable=False)
|
||||||
offer_id = db.Column(db.String(20), 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)
|
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')
|
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))
|
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))
|
||||||
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 = relationship(
|
||||||
"Customer",
|
"Customer",
|
||||||
@@ -36,40 +62,40 @@ class Loan(db.Model):
|
|||||||
back_populates="loans",
|
back_populates="loans",
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
# @classmethod
|
||||||
def create_loan(cls, customer_id, account_id, offer_id, initial_loan_amount, status='pending',
|
# 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,
|
# product_id=None, current_loan_amount=None, default_penalty_fee=None,
|
||||||
continuous_fee=None, due_date=None):
|
# continuous_fee=None, due_date=None):
|
||||||
|
#
|
||||||
# Check if customer exists
|
# # Check if customer exists
|
||||||
is_valid = Customer.is_valid_customer(customer_id)
|
# is_valid = Customer.is_valid_customer(customer_id)
|
||||||
if not is_valid:
|
# if not is_valid:
|
||||||
raise ValueError("Customer does not exist")
|
# raise ValueError("Customer does not exist")
|
||||||
|
#
|
||||||
# # Check for active loans
|
# # # Check for active loans
|
||||||
# has_active_loans = cls.has_active_loans(customer_id)
|
# # has_active_loans = cls.has_active_loans(customer_id)
|
||||||
# if has_active_loans:
|
# # if has_active_loans:
|
||||||
# raise ValueError("Customer has active loans")
|
# # raise ValueError("Customer has active loans")
|
||||||
|
#
|
||||||
# Create and save the loan
|
# # Create and save the loan
|
||||||
loan = cls(
|
# loan = cls(
|
||||||
customer_id=customer_id,
|
# customer_id=customer_id,
|
||||||
account_id=account_id,
|
# account_id=account_id,
|
||||||
offer_id=offer_id,
|
# offer_id=offer_id,
|
||||||
initial_loan_amount=initial_loan_amount,
|
# initial_loan_amount=initial_loan_amount,
|
||||||
status=status,
|
# status=status,
|
||||||
product_id=product_id,
|
# product_id=product_id,
|
||||||
current_loan_amount=current_loan_amount or initial_loan_amount,
|
# current_loan_amount=current_loan_amount or initial_loan_amount,
|
||||||
default_penalty_fee=default_penalty_fee,
|
# default_penalty_fee=default_penalty_fee,
|
||||||
continuous_fee=continuous_fee,
|
# continuous_fee=continuous_fee,
|
||||||
due_date=due_date
|
# due_date=due_date
|
||||||
)
|
# )
|
||||||
|
#
|
||||||
try:
|
# try:
|
||||||
db.session.add(loan)
|
# db.session.add(loan)
|
||||||
except IntegrityError as err:
|
# except IntegrityError as err:
|
||||||
raise ValueError(f"Database integrity error: {err}")
|
# raise ValueError(f"Database integrity error: {err}")
|
||||||
return loan
|
# return loan
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def has_active_loans(cls, customer_id):
|
def has_active_loans(cls, customer_id):
|
||||||
@@ -180,6 +206,8 @@ class Loan(db.Model):
|
|||||||
'id': self.id,
|
'id': self.id,
|
||||||
'customer_id': self.customer_id,
|
'customer_id': self.customer_id,
|
||||||
'account_id': self.account_id,
|
'account_id': self.account_id,
|
||||||
|
'transaction_id': self.transaction_id,
|
||||||
|
'original_transaction': self.original_transaction,
|
||||||
'offer_id': self.offer_id,
|
'offer_id': self.offer_id,
|
||||||
'initial_loan_amount': self.initial_loan_amount,
|
'initial_loan_amount': self.initial_loan_amount,
|
||||||
'current_loan_amount': self.current_loan_amount,
|
'current_loan_amount': self.current_loan_amount,
|
||||||
@@ -187,10 +215,13 @@ class Loan(db.Model):
|
|||||||
'product_id': self.product_id,
|
'product_id': self.product_id,
|
||||||
'default_penalty_fee': self.default_penalty_fee,
|
'default_penalty_fee': self.default_penalty_fee,
|
||||||
'continuous_fee': self.continuous_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,
|
'due_date': self.due_date.isoformat() if self.due_date else None,
|
||||||
'created_at': self.created_at.isoformat() if self.created_at 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
|
'updated_at': self.updated_at.isoformat() if self.updated_at else None
|
||||||
}
|
}
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'<Loan {self.id}>'
|
return f'<Loan {self.id}>'
|
||||||
Reference in New Issue
Block a user