aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitch Riedstra <mitch@riedstra.us>2017-10-28 10:38:02 -0400
committerMitch Riedstra <mitch@riedstra.us>2017-10-28 10:38:02 -0400
commitd1c5b666d8e55572cdceb3401222d8e4dfecdb58 (patch)
tree0c210ee51539b735834e3d23765994b8b6739300
parentc74a4e1b2251cac6adbb812d0f3a98cca89dfcc8 (diff)
downloaddispatch-tracker-d1c5b666d8e55572cdceb3401222d8e4dfecdb58.tar.gz
dispatch-tracker-d1c5b666d8e55572cdceb3401222d8e4dfecdb58.tar.xz
Ability to edit your Invoice Number. Clean up some of the forms for non-admins
-rw-r--r--README.md6
-rw-r--r--app/dispatch/models.py41
-rw-r--r--app/dispatch/templates/dispatch/drivers/detail.html48
-rw-r--r--app/dispatch/templates/dispatch/userinvoicenumber/edit.html18
-rw-r--r--app/dispatch/urls.py2
-rw-r--r--app/dispatch/views.py35
6 files changed, 103 insertions, 47 deletions
diff --git a/README.md b/README.md
index bf4ca16..87c12fe 100644
--- a/README.md
+++ b/README.md
@@ -3,11 +3,13 @@
Requirements going forward:
- * Be able to set default invoice number
+ * Javascript confirmation on Delete button
+ * Redirect properly on Invoice Delete
+ * Delete Views are completely fucked--this needs to be fixed
+ * Cannot delete invoice at this time
* Settings:
* `default_bill_to` must be set
* Identity Edit page needs a little bit of work for regular users
- * Delete Views are completely fucked--this needs to be fixed
* Upload Invoice logos on Identity Objects for use in Invoices
* Change "user" to Vendor on the "Add Load Page"
* Change Name To "Load Pay System" -- we're going to think about it
diff --git a/app/dispatch/models.py b/app/dispatch/models.py
index dd088c4..a1e06d7 100644
--- a/app/dispatch/models.py
+++ b/app/dispatch/models.py
@@ -82,6 +82,9 @@ class UserInvoiceNumber(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
number = models.IntegerField(default=1200)
+ def get_absolute_url(self):
+ return '/drivers/view/{:d}'.format(self.user.pk)
+
class Invoice(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
owner = models.ForeignKey(Identity, on_delete=models.CASCADE, related_name="owner")
@@ -97,8 +100,6 @@ class Invoice(models.Model):
self.owner.name,
self.total())
- # def __init__(self, user, invoice_date, due_date):
- # super(Invoice, self).__init__()
def setup(self):
try:
uinv = UserInvoiceNumber.objects.get(user=self.user.pk)
@@ -174,42 +175,6 @@ class InvoiceItem(models.Model):
-# 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)
diff --git a/app/dispatch/templates/dispatch/drivers/detail.html b/app/dispatch/templates/dispatch/drivers/detail.html
index 9e4e7f3..26a2ba8 100644
--- a/app/dispatch/templates/dispatch/drivers/detail.html
+++ b/app/dispatch/templates/dispatch/drivers/detail.html
@@ -12,8 +12,12 @@
</div>
<div class="row">
- <div class="col s12">
+ <div class="col s6">
+ <h5>General Information</h5>
+ </div>
+ <div class="col s6">
<div class="right-align">
+ <a class="btn blue" href="{% url 'driver_summary' object.pk %}">View Summary</a>
<a class="btn green" href="{% url 'driver_edit' object.pk %}">Edit</a>
</div>
</div>
@@ -42,9 +46,13 @@
</div>
+
{% if ident is not None %}
<div class="row">
- <div class="col s12">
+ <div class="col s6">
+ <h5>Invoice Identity</h5>
+ </div>
+ <div class="col s6">
<div class="right-align">
{% if request.user.is_superuser %}
<a class="btn orange" href="{% url 'identity_default' object.pk ident.pk %}">Make Default Bill To</a>
@@ -86,7 +94,7 @@
<div class="row">
<div class="col s12">
<div class="right-align">
- <a class="btn green" href="{% url 'identity_create' object.pk %}">Create New Identity</a>
+ <a class="btn green" href="{% url 'identity_create' object.pk ident.pk %}">Create New Identity</a>
</div>
</div>
</div>
@@ -97,4 +105,38 @@
</div>
{% endif %}
+
+<div class="row">
+ <div class="col s6">
+ <h5>
+ Current Invoice Number
+ </h5>
+ </div>
+ <div class="col s6">
+ <div class="right-align">
+ <a class="btn green" href="{% url 'userinvoicenumber_edit' object.pk invoice_number.pk %}">
+ Edit
+ </a>
+ </div>
+ </div>
+</div>
+
+<div class="row">
+ <div class="col s12">
+ <table>
+ <tr>
+ <th>Invoice Number</th>
+ <td>{{invoice_number.number}}</td>
+ </tr>
+ </table>
+ </div>
+</div>
+
+<div class="row">
+ <div class="col s12">
+ <p>This number will automatically increment when new invoices
+ are generated from the load summary page</p>
+ </div>
+</div>
+
{% endblock %}
diff --git a/app/dispatch/templates/dispatch/userinvoicenumber/edit.html b/app/dispatch/templates/dispatch/userinvoicenumber/edit.html
new file mode 100644
index 0000000..e858d3f
--- /dev/null
+++ b/app/dispatch/templates/dispatch/userinvoicenumber/edit.html
@@ -0,0 +1,18 @@
+{% extends 'dispatch/base.html' %}
+
+{% block title %}Edit Invoice Number for {{object.user.username}}{% endblock %}
+
+{% block content %}
+<div class="row">
+ <div class="col s12 m6">
+ <h1>
+ Invoice Number for {{object.user.username}}
+ </h1>
+ </div>
+</div>
+
+<form action="" method="post">{% csrf_token %}
+ {{ form.as_p }}
+ <input type="submit" class="btn blue" value="Update" />
+</form>
+{% endblock %}
diff --git a/app/dispatch/urls.py b/app/dispatch/urls.py
index 9d8b77b..270c674 100644
--- a/app/dispatch/urls.py
+++ b/app/dispatch/urls.py
@@ -20,6 +20,8 @@ urlpatterns = [
url(r'^drivers/(?P<user_id>\d+)/identity/edit/(?P<pk>\d+)$', views.IdentityUpdate.as_view(), name='identity_edit'),
url(r'^drivers/(?P<user_id>\d+)/identity/default/(?P<pk>\d+)$', views.SetDefaultIdentity, name='identity_default'),
+ url(r'drivers/(?P<user_id>\d+)/invoice/edit/(?P<pk>\d+)$', views.UserInvoiceNumberUpdate.as_view(), name='userinvoicenumber_edit'),
+
url(r'^customers/$', views.CustomerList.as_view(), name='customer_list'),
url(r'^customers/new$', views.CustomerCreate.as_view(), name='customer_new'),
url(r'^customers/view/(?P<pk>\d+)$', views.CustomerDetail.as_view(), name='customer_detail'),
diff --git a/app/dispatch/views.py b/app/dispatch/views.py
index bf4c3fb..087091a 100644
--- a/app/dispatch/views.py
+++ b/app/dispatch/views.py
@@ -6,6 +6,7 @@ from django.core.urlresolvers import reverse
# import django.contrib.auth as auth
# from django.conf import settings
# Create your views here.
+from django.core.exceptions import ObjectDoesNotExist
from django.views.generic import TemplateView,ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
@@ -90,6 +91,14 @@ class DriverDetail(UserPassesTestMixin, DetailView):
except:
context['ident'] = None
+ try:
+ context['invoice_number'] = \
+ UserInvoiceNumber.objects.get(user=self.get_object().pk)
+ except ObjectDoesNotExist:
+ uinv = UserInvoiceNumber(user=self.get_object())
+ uinv.save()
+ context['invoice_number'] = uinv
+
return context
@@ -132,7 +141,15 @@ class DriverUpdate(UserPassesTestMixin, UpdateView):
template_name = "dispatch/drivers/edit.html"
model = User
success_url = reverse_lazy('driver_list')
- fields = ['username', 'first_name','last_name','email','groups', 'is_active']
+ # fields = ['username', 'first_name','last_name','email','groups']
+ fields = ['username', 'first_name','last_name','email']
+
+
+ def get(self,request, *args, **kwargs):
+ if request.user.is_superuser:
+ self.fields.append('is_active')
+ self.fields.append('is_superuser')
+ return super(DriverUpdate, self).get(request)
def get_context_data(self, **kwargs):
# Shit gets fucky with super() really fast, but this seems to work
@@ -313,7 +330,7 @@ def PaperworkDownload(request, load_id, pk):
class UserInvoiceNumberUpdate(UserPassesTestMixin, UpdateView):
template_name = "dispatch/userinvoicenumber/edit.html"
- model = UserInvoiceNumber
+ model = UserInvoiceNumber
fields = ['number']
def get(self,request, *args, **kwargs):
@@ -341,7 +358,12 @@ def SetDefaultIdentity(request, user_id, pk):
class IdentityCreate(UserPassesTestMixin, CreateView):
template_name = "dispatch/identity/edit.html"
model = Identity
- fields = ['user', 'name', 'address', 'city', 'state', 'zip_code']
+ fields = ['name', 'address', 'city', 'state', 'zip_code']
+
+ def get(self, request, *args, **kwargs):
+ if request.user.is_superuser:
+ self.fields.insert(1,'user')
+ return super(IdentityCreate, self).get(request)
def test_func(self):
return self.request.user.is_superuser or \
@@ -350,7 +372,12 @@ class IdentityCreate(UserPassesTestMixin, CreateView):
class IdentityUpdate(UserPassesTestMixin, UpdateView):
template_name = "dispatch/identity/edit.html"
model = Identity
- fields = ['user', 'name', 'address', 'city', 'state', 'zip_code']
+ fields = ['name', 'address', 'city', 'state', 'zip_code']
+
+ def get(self, request, *args, **kwargs):
+ if request.user.is_superuser:
+ self.fields.insert(1,'user')
+ return super(IdentityUpdate, self).get(request)
def test_func(self):
return self.request.user.is_superuser or \