from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.urls import reverse_lazy 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): context = super().get_context_data(**kwargs) containers = Container.objects.filter(expedited=False).count() preinfos = Preinfo.objects.filter(received=False).count() bookings = Booking.objects.filter(status='active').count() context['containers'] = containers context['preinfos'] = preinfos context['bookings'] = bookings context['recent_containers'] = Container.objects.order_by('-expedited_on', '-received_on')[:10] context['recent_payments'] = Payment.objects.order_by('-created_on')[:10] 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