fix loan returns

This commit is contained in:
2025-04-27 19:20:22 -04:00
parent 3bb00eb7c3
commit 56c7e594cb
+70 -39
View File
@@ -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,6 +215,9 @@ 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