diff options
Diffstat (limited to 'app/dispatch/models.py')
| -rw-r--r-- | app/dispatch/models.py | 134 |
1 files changed, 124 insertions, 10 deletions
diff --git a/app/dispatch/models.py b/app/dispatch/models.py index 6cbaf6c..dfffb9a 100644 --- a/app/dispatch/models.py +++ b/app/dispatch/models.py @@ -2,8 +2,9 @@ from django.db import models from django.conf import settings from auditlog.registry import auditlog from auditlog.models import AuditlogHistoryField - -import uuid +from django.contrib.auth.models import User +from datetime import datetime +from .misc import get_week_dates, paperwork_user_directory_path # Create your models here. @@ -36,14 +37,6 @@ class Load(models.Model): return "/loads/view/%i" % self.id -# This is used to set the upload path of the document for Paperwork Objects -def paperwork_user_directory_path(instance, filename): - # We don't want the UUID to be too long, just enough so there aren't any - # filename conflicts - return 'paperwork/{:d}/'.format(instance.load.pk) + \ - str(uuid.uuid4())[0:9] + filename - - class Paperwork(models.Model): load = models.ForeignKey(Load, on_delete=models.CASCADE) description = models.CharField(max_length=256) @@ -53,5 +46,126 @@ class Paperwork(models.Model): return "%s" % self.load +class Identity(models.Model): + name = models.CharField(max_length=256) + address = models.CharField(max_length=256) + city = models.CharField(max_length=256) + state = models.CharField(max_length=256) + zip_code = models.CharField(max_length=256) + + def __str__(self): + return "{}".format(self.name) + +class Settings(models.Model): + key = models.CharField(max_length=256) + value = models.CharField(max_length=256) + + def __str__(self): + return "{}: {}".format(self.key, self.value) + + +class Invoice(models.Model): + user = models.ForeignKey(User, on_delete=models.CASCADE) + owner = models.ForeignKey(Identity, on_delete=models.CASCADE, related_name="owner") + bill_to = models.ForeignKey(Identity, on_delete=models.CASCADE, related_name="bill_to") + invoice_id = models.IntegerField() + invoice_date = models.DateField() + due_date = models.DateField() + + def __str__(self): + return "Invoice for {} by {} for ${}".format( + self.bill_to.name, + self.owner.name, + self.total()) + + def populate_bill_to(self): + pk = Settings.objects.get(key="default_bill_to") + self.bill_to = Identity.objects.get(pk=pk) + + def populate_owner(self): + key = "user_{:d}_identity".format(self.user.id) + pk = Settings.objects.get(key=key) + self.owner = Identity.objects.get(pk=pk) + + def populate_items_default_date(self): + wk = get_week_dates() + return self.populate_items(start_date=wk['start_date'], + end_date=wk['end_date']) + + def populate_items(self, start_date, end_date): + loads = Load.objects.filter(user__exact=self.user.id, date__range=(start_date, end_date)) + for load in loads: + i = InvoiceItem(invoice=self, + description=load.description, + quantity=1, + amount=load.amount) + i.save() + + def clear_items(self): + items = self.items() + for item in items: + item.delete() + + def items(self): + return InvoiceItem.objects.filter(invoice__exact=self.pk) + + def total(self): + t = 0 + for i in InvoiceItem.objects.filter(invoice__exact=self.pk): + t += i.amount + return t + +class InvoiceItem(models.Model): + invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE) + description = models.CharField(max_length=256) + quantity = models.IntegerField() + amount = models.DecimalField(max_digits=19,decimal_places=2) + + def __str__(self): + return "Invoice ID: {} Item: {} for ${}".format( + self.invoice.pk, + self.description, + self.amount) + + + +# class Invoice(): +# load_ids = [] +# total = 0.00 +# +# def __init__(self, **kwargs): +# # self.args = kwargs +# if isinstance(kwargs['driver'], User): +# self.driver = kwargs['driver'] +# else: +# raise Exception("'driver' must be a Django User instance") +# +# if isinstance(kwargs.get('start_date'), datetime) and isinstance(kwargs.get('end_date'), datetime): +# self.start_date = kwargs.get('start_date') +# self.end_date = kwargs.get('end_date') +# else: +# dates = get_week_dates() +# self.start_date = dates['start_date'] +# self.end_date = dates['end_date'] +# +# self.loads = Load.objects.filter(user__exact=self.driver.id, +# date__range=(self.start_date, self.end_date)) +# +# for l in self.loads: +# self.load_ids.append(l.pk) +# self.total += float(l.amount) +# +# if isinstance(kwargs.get('bill_to'), Owner): +# self.bill_to = kwargs.get('bill_to') +# else: +# self.bill_to = Owner.objects.get(pk=Settings.objects.get(key='default_owner').value) +# +# +# def __str__(self): +# return "Invoice for {} from {} for: {}".format(self.end_date, self.driver, self.total) + + + + auditlog.register(Customer) auditlog.register(Load) |
