diff options
| -rw-r--r-- | app/dispatch/migrations/0001_initial.py | 3 | ||||
| -rw-r--r-- | app/dispatch/migrations/0002_auto_20171018_1602.py | 30 | ||||
| -rw-r--r-- | app/dispatch/models.py | 17 | ||||
| -rw-r--r-- | app/dispatch/templates/dispatch/loads/detail.html | 83 | ||||
| -rw-r--r-- | app/dispatch/templates/dispatch/paperwork/add.html | 3 | ||||
| -rw-r--r-- | app/dispatch/urls.py | 4 | ||||
| -rw-r--r-- | app/dispatch/views.py | 18 |
7 files changed, 148 insertions, 10 deletions
diff --git a/app/dispatch/migrations/0001_initial.py b/app/dispatch/migrations/0001_initial.py index b93c66b..7a920f7 100644 --- a/app/dispatch/migrations/0001_initial.py +++ b/app/dispatch/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2017-10-13 14:52 +# Generated by Django 1.11.5 on 2017-10-18 15:46 from __future__ import unicode_literals from django.conf import settings @@ -44,6 +44,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('description', models.CharField(max_length=256)), + ('filename', models.CharField(max_length=256)), ('document', models.FileField(upload_to='paperwork/')), ('load', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dispatch.Load')), ], diff --git a/app/dispatch/migrations/0002_auto_20171018_1602.py b/app/dispatch/migrations/0002_auto_20171018_1602.py new file mode 100644 index 0000000..6446dd4 --- /dev/null +++ b/app/dispatch/migrations/0002_auto_20171018_1602.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-10-18 16:02 +from __future__ import unicode_literals + +import dispatch.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dispatch', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='paperwork', + name='filename', + ), + migrations.AddField( + model_name='load', + name='delivered_to', + field=models.CharField(default='', max_length=256), + ), + migrations.AlterField( + model_name='paperwork', + name='document', + field=models.FileField(upload_to=dispatch.models.paperwork_user_directory_path), + ), + ] diff --git a/app/dispatch/models.py b/app/dispatch/models.py index 13b4e8b..0dd2ac7 100644 --- a/app/dispatch/models.py +++ b/app/dispatch/models.py @@ -2,6 +2,8 @@ from django.db import models from django.conf import settings from auditlog.registry import auditlog +import uuid + # Create your models here. class Company(models.Model): @@ -20,16 +22,26 @@ class Load(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL) company = models.ForeignKey(Company) description = models.CharField(max_length=256) + delivered_to = models.CharField(max_length=256, default="") amount = models.DecimalField(max_digits=10,decimal_places=2, default="0") def __str__(self): return "{c}, {d} ( {a} )".format(c=self.company, d=self.description, a=self.amount) + + + +# 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) - filename = models.CharField(max_length=256) - document = models.FileField(upload_to='paperwork/') + document = models.FileField(upload_to=paperwork_user_directory_path) def __str__(self): return "%s" % self.load @@ -37,5 +49,6 @@ class Paperwork(models.Model): + auditlog.register(Company) auditlog.register(Load) diff --git a/app/dispatch/templates/dispatch/loads/detail.html b/app/dispatch/templates/dispatch/loads/detail.html index 3460ccc..bf6d809 100644 --- a/app/dispatch/templates/dispatch/loads/detail.html +++ b/app/dispatch/templates/dispatch/loads/detail.html @@ -5,7 +5,88 @@ {% block content %} <div class="row"> <div class="col s12 m6"> - <h1>Load details {{object.load_number}}</h1> + <h1>Details for {{object.load_number}}</h1> </div> </div> + +<div class="row"> + <div class="col s12"> + <div class="right-align"> + <a class="btn blue" href="{%url 'load_edit' object.id %}">Edit</a> + </div> + <table class="bordered"> + <tr> + <th>Date</th> + <td>{{object.date}}</td> + </tr> + + <tr> + <th>User</th> + <td>{{object.user}}</td> + </tr> + + <tr> + <th>Company</th> + <td>{{object.company}}</td> + </tr> + + <tr> + <th>Load Number</th> + <td>{{object.load_number}}</td> + </tr> + + <tr> + <th>Description</th> + <td>{{object.description}}</td> + </tr> + + <tr> + <th>Delivered To</th> + <td>{{object.delivered_to}}</td> + </tr> + + <tr> + <th>Amount</th> + <td>{{object.amount}}</td> + </tr> + + + + </table> + + </div> + + + <div class="row"> + <div class="col s12" style="padding-top: 50px;"> + <h4>Attached Files:</h4> + + <div class="right-align"> + <a class="btn blue" href="{% url 'paperwork_upload' object.id %}">Upload</a> + </div> + + <table> + <thead> + <th>Description: </th> + <th></th> + </thead> + <tbody> + {% for p in paperwork_list %} + <tr> + <td>{{p.description}}</td> + <td class="right-align"> + <a class="btn red" href="{% url 'paperwork_delete' object.id p.id %}">Delete</a> + <a class="btn green" target="_blank" href="{{p.document.url}}">Download</a> + </td> + </tr> + {% endfor %} + </tbody> + </table> + + </div> + </div> + + +</div> + {% endblock %} diff --git a/app/dispatch/templates/dispatch/paperwork/add.html b/app/dispatch/templates/dispatch/paperwork/add.html index 107c905..840a387 100644 --- a/app/dispatch/templates/dispatch/paperwork/add.html +++ b/app/dispatch/templates/dispatch/paperwork/add.html @@ -9,8 +9,6 @@ </div> </div> -fuck - {% if form.errors %} {{form.errors}} @@ -19,6 +17,7 @@ fuck <form action="" method="post" enctype="multipart/form-data">{% csrf_token %} {{ form.as_p }} + <div style="padding-top: 10px;"></div> <input type="submit" class="btn blue" value="Update" /> </form> diff --git a/app/dispatch/urls.py b/app/dispatch/urls.py index 683e91f..9ea0057 100644 --- a/app/dispatch/urls.py +++ b/app/dispatch/urls.py @@ -27,6 +27,8 @@ urlpatterns = [ url(r'^loads/delete/(?P<pk>\d+)$', views.LoadDelete.as_view(), name='load_delete'), - url(r'^loads/upload/(?P<load_id>\d+)$$', views.PaperworkUpload, name='paperwork_upload'), + url(r'^loads/upload/(?P<load_id>\d+)$', views.PaperworkUpload, name='paperwork_upload'), + url(r'^loads/(?P<load_id>\d+)/paperwork/delete/(?P<pk>\d+)$', \ + views.PaperworkDelete, name='paperwork_delete'), ] diff --git a/app/dispatch/views.py b/app/dispatch/views.py index c436b7d..ef17666 100644 --- a/app/dispatch/views.py +++ b/app/dispatch/views.py @@ -188,7 +188,7 @@ class LoadCreate(CreateView): template_name = "dispatch/loads/create.html" model = Load success_url = reverse_lazy('load_list') - fields = ['date', 'company', 'load_number', 'description','amount'] + fields = ['date', 'company', 'load_number', 'description', 'delivered_to', 'amount'] def get(self,request): if request.user.is_superuser: @@ -207,13 +207,16 @@ class LoadDetail(DetailView): def get_context_data(self, **kwargs): context = super(LoadDetail, self).get_context_data(**kwargs) + + context['paperwork_list'] = Paperwork.objects.filter(load=context['object']) + return context class LoadUpdate(FilteredUpdateView): template_name = "dispatch/loads/edit.html" model = Load success_url = reverse_lazy('load_list') - fields = ['date', 'company','load_number','description','amount'] + fields = ['date', 'company','load_number','description', 'delivered_to', 'amount'] def get(self,request,pk): if request.user.is_superuser: @@ -242,10 +245,19 @@ def PaperworkUpload(request, load_id): pw = form.save(commit=False) pw.load = l pw.save() - return redirect(reverse('load_edit', kwargs={'pk': load_id})) + return redirect(reverse('load_detail', kwargs={'pk': load_id})) else: form = AddPaperworkForm() ctx = { 'form': form, 'load': l } return render(request, 'dispatch/paperwork/add.html', ctx) +def PaperworkDelete(request, load_id, pk): + # TODO: Someday we should return the errors deleting the file, if any + try: + p = Paperwork.objects.get(pk=pk) + p.delete() + except Exception as e: + print(e) + + return redirect(reverse('load_detail', kwargs={'pk': load_id})) |
