57 lines
1.5 KiB
Python
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 |