aboutsummaryrefslogtreecommitdiff
path: root/app/dispatch/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/dispatch/models.py')
-rw-r--r--app/dispatch/models.py134
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)