aboutsummaryrefslogtreecommitdiff
path: root/app/dispatch/views.py
diff options
context:
space:
mode:
authorKyle Blanker <kyle@stridet.com>2017-09-13 14:04:47 -0400
committerKyle Blanker <kyle@stridet.com>2017-09-13 14:04:47 -0400
commit0be25b7fed14e59ebb7ac52930a8284535eb4276 (patch)
tree9f4e0e78df7f15bdc037d582100c7736536c5a41 /app/dispatch/views.py
parent207be6ecd78719808836b49af4878c60b61e7d0a (diff)
downloaddispatch-tracker-0be25b7fed14e59ebb7ac52930a8284535eb4276.tar.gz
dispatch-tracker-0be25b7fed14e59ebb7ac52930a8284535eb4276.tar.xz
Setup driver, company details to show loads, loads list now shows per week as well
Diffstat (limited to 'app/dispatch/views.py')
-rw-r--r--app/dispatch/views.py99
1 files changed, 94 insertions, 5 deletions
diff --git a/app/dispatch/views.py b/app/dispatch/views.py
index 8101ac0..f487ef7 100644
--- a/app/dispatch/views.py
+++ b/app/dispatch/views.py
@@ -10,10 +10,39 @@ from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from dispatch.models import Company, Load
+from django.contrib.auth.models import User
+from django.contrib.auth.mixins import UserPassesTestMixin
+from django.http import HttpResponseRedirect
+from datetime import datetime, timedelta
+from django.utils import formats
+from dateutil import rrule
def home(request):
return render(request,"dispatch/index.html")
+def get_week_dates(date=None):
+ if date == None:
+ date = formats.date_format(datetime.now(), "SHORT_DATE_FORMAT")
+ dt = datetime.strptime(date, '%m/%d/%Y')
+ weekday = dt.weekday()
+ if weekday == 6:
+ start_date = dt
+ else:
+ weekday = weekday + 1
+ start_date = dt - timedelta(days=weekday)
+ end_date = start_date + timedelta(days=6)
+ next_week = end_date + timedelta(days=1)
+ previous_week = start_date - timedelta(days=1)
+ return start_date, end_date, next_week, previous_week
+
+def split_loads_by_day(loads,start_date,end_date):
+ split_loads = {}
+ for date in rrule.rrule(rrule.DAILY,dtstart=start_date, until=end_date):
+ print(date)
+ str_date = formats.date_format(date, "SHORT_DATE_FORMAT")
+ if str_date not in split_loads:
+ split_loads[str_date] = loads.filter(date=date)
+ return split_loads
class FilteredListView(ListView):
def get_queryset(self):
@@ -36,6 +65,54 @@ class FilteredDeleteView(DeleteView):
return base_qs.filter(user=self.request.user)
return base_qs
+
+# Driver CRUD
+
+class DriverList(UserPassesTestMixin, ListView):
+ template_name = "dispatch/drivers/list.html"
+ model = User
+
+ def test_func(self):
+ return self.request.user.is_superuser
+
+class LoadDateSort(DetailView):
+ def get_context_data(self, **kwargs):
+ context = super(DetailView, self).get_context_data(**kwargs)
+ start_date, end_date, next_week, previous_week = get_week_dates(self.request.GET.get('date',None))
+ loads = self.get_object().load_set.filter(date__range=(start_date, end_date)).prefetch_related('company')
+ context['loads'] = split_loads_by_day(loads,start_date,end_date)
+ context['start_date'] = formats.date_format(start_date, "SHORT_DATE_FORMAT")
+ context['end_date'] = formats.date_format(end_date, "SHORT_DATE_FORMAT")
+ context['next_week'] = formats.date_format(next_week, "SHORT_DATE_FORMAT")
+ context['previous_week'] = formats.date_format(previous_week, "SHORT_DATE_FORMAT")
+ return context
+
+class DriverDetail(LoadDateSort):
+ template_name = "dispatch/drivers/detail.html"
+ model = User
+
+ def test_func(self):
+ return self.request.user.is_superuser
+
+class DriverUpdate(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']
+
+ def test_func(self):
+ return self.request.user.is_superuser
+
+class DriverDelete(DeleteView):
+ template_name = "dispatch/loads/delete.html"
+ model = User
+ success_url = reverse_lazy('driver_list')
+
+ def test_func(self):
+ return self.request.user.is_superuser
+
+# Company CRUD
+
class CompanyList(ListView):
template_name = "dispatch/companies/list.html"
model = Company
@@ -46,14 +123,10 @@ class CompanyCreate(CreateView):
success_url = reverse_lazy('company_list')
fields = ['name', 'address', 'phone_number','email_address']
-class CompanyDetail(DetailView):
+class CompanyDetail(LoadDateSort):
template_name = "dispatch/companies/detail.html"
model = Company
- def get_context_data(self, **kwargs):
- context = super(CompanyDetail, self).get_context_data(**kwargs)
- return context
-
class CompanyUpdate(UpdateView):
template_name = "dispatch/loads/edit.html"
model = Company
@@ -71,6 +144,22 @@ class LoadList(FilteredListView):
template_name = "dispatch/loads/list.html"
model = Load
+
+ def get_queryset(self):
+ base_qs = super(LoadList, self).get_queryset()
+ start_date, end_date, next_week, previous_week = get_week_dates(self.request.GET.get('date',None))
+ return base_qs.filter(date__range=(start_date, end_date))
+
+ def get_context_data(self, **kwargs):
+ context = super(LoadList, self).get_context_data(**kwargs)
+ start_date, end_date, next_week, previous_week = get_week_dates(self.request.GET.get('date',None))
+ context['start_date'] = formats.date_format(start_date, "SHORT_DATE_FORMAT")
+ context['end_date'] = formats.date_format(end_date, "SHORT_DATE_FORMAT")
+ context['next_week'] = formats.date_format(next_week, "SHORT_DATE_FORMAT")
+ context['previous_week'] = formats.date_format(previous_week, "SHORT_DATE_FORMAT")
+ context['loads'] = split_loads_by_day(self.object_list,start_date,end_date)
+ return context
+
class LoadCreate(CreateView):
template_name = "dispatch/loads/create.html"
model = Load