2025-01-16 17:31:44 +00:00

57 lines
1.5 KiB
Python

from django_ledger.models.invoice import InvoiceModel
class InvoiceModelBase(InvoiceModel):
"""
Custom Invoice Model with Net 15 payment terms.
"""
TERMS_ON_RECEIPT = 'on_receipt'
TERMS_NET_15 = 'net_15'
TERMS_NET_30 = 'net_30'
TERMS_NET_60 = 'net_60'
TERMS_NET_90 = 'net_90'
TERMS_NET_90_PLUS = 'net_90+'
TERM_CHOICES = [
(TERMS_ON_RECEIPT, 'Due On Receipt'),
(TERMS_NET_15, 'Net 15 Days'),
(TERMS_NET_30, 'Net 30 Days'),
(TERMS_NET_60, 'Net 60 Days'),
(TERMS_NET_90, 'Net 90 Days'),
]
TERM_CHOICES_VALID = tuple(i[0] for i in TERM_CHOICES)
TERM_DAYS_MAPPING = {
TERMS_ON_RECEIPT: 0,
TERMS_NET_15: 15,
TERMS_NET_30: 30,
TERMS_NET_60: 60,
TERMS_NET_90: 90,
TERMS_NET_90_PLUS: 120
}
def net_due_group(self):
"""
Determines the group where the financial instrument falls based on the number of days until the due date.
Returns
-------
str
The terms group as a string.
"""
due_in = self.due_in_days()
if due_in == 0:
return self.TERMS_ON_RECEIPT
elif due_in <= 15:
return self.TERMS_NET_15
elif due_in <= 30:
return self.TERMS_NET_30
elif due_in <= 60:
return self.TERMS_NET_60
elif due_in <= 90:
return self.TERMS_NET_90
return self.TERMS_NET_90_PLUS
class Meta:
proxy = True