Django backend for WorkX project
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
Den här utvecklingskatalogen är arkiverad. Du kan se filer och klona katalogen, men inte öppna ärenden eller genomföra push- eller pull-förfrågningar.

51 rader
1.6 KiB

  1. from django.db import models
  2. from project.models import Project
  3. from client.models import Client, Address, TaxType
  4. class Invoice(models.Model):
  5. title = models.CharField(max_length=30)
  6. project = models.ForeignKey(Project, on_delete=models.CASCADE)
  7. invoice_id = models.CharField(max_length=15)
  8. raised_date = models.DateField()
  9. due_date = models.DateField()
  10. paid_date = models.DateField(null=True, blank=True)
  11. is_archived = models.BooleanField(default=False)
  12. @property
  13. def invoice_total(self):
  14. items = Item.objects.filter(invoice=self.pk)
  15. total = 0
  16. for item in items:
  17. total += item.item_total
  18. return total
  19. @property
  20. def invoice_total_after_tax(self):
  21. items = Item.objects.filter(invoice=self.pk)
  22. project = Project.objects.get(client=self.project)
  23. client = Client.objects.get(pk=project.client)
  24. address = Address.objects.get(pk=client.address)
  25. tax_type = TaxType.objects.get(pk=address.tax_type)
  26. total = 0
  27. for item in items:
  28. total += item.item_total
  29. return total
  30. def __str__(self):
  31. return self.invoice_id
  32. class Item(models.Model):
  33. name = models.TextField(blank=False, null=False)
  34. amount = models.DecimalField(max_digits=15, decimal_places=2)
  35. quantity = models.IntegerField()
  36. invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE, related_name='items')
  37. @property
  38. def item_total(self):
  39. return self.amount * self.quantity
  40. def __str__(self):
  41. return self.name