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