diff options
| author | Kyle Blanker <kyle@stridet.com> | 2017-09-13 14:04:47 -0400 |
|---|---|---|
| committer | Kyle Blanker <kyle@stridet.com> | 2017-09-13 14:04:47 -0400 |
| commit | 0be25b7fed14e59ebb7ac52930a8284535eb4276 (patch) | |
| tree | 9f4e0e78df7f15bdc037d582100c7736536c5a41 /app/dispatch/views.py | |
| parent | 207be6ecd78719808836b49af4878c60b61e7d0a (diff) | |
| download | dispatch-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.py | 99 |
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 |
