@@ -285,6 +285,10 @@ class Invoice(models.Model): # noqa: PLR0904
285285 blank = True ,
286286 help_text = "Due date / Quote validity, keep blank unless specific terms are needed" ,
287287 )
288+ tax_date = models .DateField (
289+ blank = True ,
290+ help_text = "Date of taxable supply, keep blank for issue date" ,
291+ )
288292
289293 kind = models .IntegerField (choices = InvoiceKind )
290294 category = models .IntegerField (
@@ -355,6 +359,8 @@ def save( # type: ignore[override]
355359 if self .extra is None :
356360 self .extra = {}
357361 extra_fields : list [str ] = []
362+ if not self .tax_date :
363+ self .tax_date = self .issue_date
358364 if not self .due_date :
359365 self .due_date = self .issue_date + datetime .timedelta (
360366 days = self .get_due_delta ()
@@ -699,6 +705,7 @@ def duplicate( # noqa: PLR0913
699705 extra : dict [str , int ] | None = None ,
700706 customer_reference : str | None = None ,
701707 customer_note : str | None = None ,
708+ tax_date : datetime .date | None = None ,
702709 ) -> Invoice :
703710 """Create a final invoice from draft/proforma upon payment."""
704711 invoice = Invoice .objects .create (
@@ -710,6 +717,7 @@ def duplicate( # noqa: PLR0913
710717 discount = self .discount ,
711718 vat_rate = self .vat_rate ,
712719 currency = self .currency ,
720+ tax_date = tax_date ,
713721 parent = self ,
714722 prepaid = prepaid ,
715723 extra = extra if extra is not None else self .extra ,
0 commit comments