You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
depot_django/common/views/employee_views.py

136 lines
4.6 KiB
Python

from datetime import timedelta
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.urls import reverse_lazy
from django.utils import timezone
from django.views.generic import TemplateView, ListView, CreateView, UpdateView
from booking.models import Booking
from common.forms.company import CompanyCreateForm, CompanyUpdateForm
from common.forms.line import LineCreateForm, LineUpdateForm
from common.models import CompanyModel, LinesModel
from containers.models import Container
from payments.models import Payment
from preinfo.models import Preinfo
class EmployeeDashboardView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
template_name = 'employee-dashboard-content.html'
extra_context = {
'title': 'Employee Dashboard',
'description': 'This is the depot employee dashboard page.',
}
def test_func(self):
return self.request.user.user_type == 'EM' or self.request.user.is_superuser
def get_context_data(self, **kwargs):
today = timezone.now()
last_week = today - timedelta(days=7)
context = super().get_context_data(**kwargs)
containers_queryset = Container.objects.all()
containers = containers_queryset.filter(expedited=False).count()
containers_week = containers_queryset.filter(received_on__gte=last_week).count()
preinfos_queryset = Preinfo.objects.all()
preinfos = preinfos_queryset.filter(received=False).count()
preinfos_week = preinfos_queryset.filter(created_on__gte=last_week).count()
bookings_queryset = Booking.objects.filter(status='active')
bookings = bookings_queryset.filter(status='active').count()
bookings_week = bookings_queryset.filter(created_on__gte=last_week).count()
context['containers'] = containers
context['preinfos'] = preinfos
context['bookings'] = bookings
context['containers_week'] = containers_week
context['preinfos_week'] = preinfos_week
context['bookings_week'] = bookings_week
context['recent_containers'] = containers_queryset.order_by('-expedited_on', '-received_on')[:10]
context['recent_payments'] = Payment.objects.order_by('-created_on')[:10]
print('context prepared')
return context
class EmployeeCompanyListView(LoginRequiredMixin, UserPassesTestMixin, ListView):
model = CompanyModel
template_name = 'employee/company-list.html'
context_object_name = 'objects'
paginate_by = 20
def test_func(self):
return self.request.user.is_superuser
def get_queryset(self):
queryset = super().get_queryset()
data_filter = self.request.GET.get('filter')
if data_filter != 'all':
queryset = queryset.filter(active=True)
queryset = queryset.order_by('name')
return queryset
class EmployeeCompanyCreateView(LoginRequiredMixin, UserPassesTestMixin, CreateView):
model = CompanyModel
template_name = 'common/../../templates/employee/company-create.html'
form_class = CompanyCreateForm
success_url = reverse_lazy('employee_company')
def test_func(self):
return self.request.user.is_superuser
class EmployeeCompanyUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = CompanyModel
template_name = 'common/../../templates/employee/company-update.html'
form_class = CompanyUpdateForm
success_url = reverse_lazy('employee_company')
def test_func(self):
return self.request.user.is_superuser
class EmployeeLineListView(LoginRequiredMixin, UserPassesTestMixin, ListView):
model = LinesModel
template_name = 'employee/line-list.html'
context_object_name = 'objects'
paginate_by = 20
def test_func(self):
return self.request.user.is_superuser
def get_queryset(self):
queryset = super().get_queryset()
data_filter = self.request.GET.get('filter')
if data_filter != 'all':
queryset = queryset.filter(active=True)
queryset = queryset.order_by('name')
return queryset
class EmployeeLineCreateView(LoginRequiredMixin, UserPassesTestMixin, CreateView):
model = LinesModel
template_name = 'employee/company-create.html'
form_class = LineCreateForm
success_url = reverse_lazy('employee_line')
def test_func(self):
return self.request.user.is_superuser
class EmployeeLineUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = LinesModel
template_name = 'employee/company-update.html'
form_class = LineUpdateForm
success_url = reverse_lazy('employee_line')
def test_func(self):
return self.request.user.is_superuser