from django.shortcuts import render from django.urls import reverse_lazy, reverse from django.views.generic.base import TemplateView from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteView from django.views.generic.detail import DetailView from django.views.generic.list import ListView from django.contrib.auth.mixins import LoginRequiredMixin from django.db.models import Q from .models import Employee, LogEntry, Todo from .forms import ( EmployeeForm, EmployeePreCreateForm, EmployeeArchiveForm, LogEntryForm, TodoForm, TodoCreateForm ) class SearchResultsView(ListView): model = Employee template_name_suffix = '_search_results' def get_queryset(self): query = self.request.GET.get('q') object_list = Employee.objects.filter( Q(first_name__icontains=query) | Q(last_name__icontains=query) ) return object_list # Employees class EmployeeListView(LoginRequiredMixin, ListView): model = Employee queryset = Employee.objects.filter(archived=False).order_by('hire_date') class EmployeeArchivedView(LoginRequiredMixin, ListView): model = Employee paginate_by = 100 template_name_suffix = '_archived' queryset = Employee.objects.filter(archived=True) class EmployeePreCreateView(LoginRequiredMixin, FormView): template_name = 'board/employee_pre_form.html' form_class = EmployeePreCreateForm def form_valid(self, form): form.filter_onboarding_email() return super().form_valid(form) def get_success_url(self): return reverse('employee-list') class EmployeeCreateView(LoginRequiredMixin, CreateView): model = Employee template_name_suffix = '_create_form' form_class = EmployeeForm class EmployeeDetailView(LoginRequiredMixin, DetailView): model = Employee class EmployeeUpdateView(LoginRequiredMixin, UpdateView): model = Employee form_class = EmployeeForm success_url = reverse_lazy('employee-list') class EmployeeArchiveView(LoginRequiredMixin, UpdateView): model = Employee form_class = EmployeeArchiveForm template_name_suffix = '_archive_form' success_url = reverse_lazy('employee-list') class EmployeeDeleteView(LoginRequiredMixin, DeleteView): model = Employee success_url = reverse_lazy('employee-list') # LogEntries class LogEntryListView(LoginRequiredMixin, ListView): model = LogEntry pk_url_kwarg = 'entry_pk' class LogEntryCreateView(LoginRequiredMixin, CreateView): model = LogEntry pk_url_kwarg = 'entry_pk' template_name_suffix = '_create_form' form_class = LogEntryForm def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['employee'] = Employee.objects.get(pk=self.kwargs['pk']) return context def form_valid(self, form): form.instance.employee = Employee.objects.get(pk=self.kwargs['pk']) return super().form_valid(form) def get_success_url(self): return reverse('employee-detail', kwargs={'pk': self.kwargs['pk']}) class LogEntryDetailView(LoginRequiredMixin, DetailView): model = LogEntry pk_url_kwarg = 'entry_pk' class LogEntryUpdateView(LoginRequiredMixin, UpdateView): model = LogEntry pk_url_kwarg = 'entry_pk' form_class = LogEntryForm def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['employee'] = Employee.objects.get(pk=self.kwargs['pk']) return context def get_success_url(self): return reverse('employee-detail', kwargs={'pk': self.kwargs['pk']}) class LogEntryDeleteView(LoginRequiredMixin, DeleteView): model = LogEntry pk_url_kwarg = 'entry_pk' success_url = reverse_lazy('entry-list') # Todos class TodoListView(LoginRequiredMixin, ListView): model = Todo pk_url_kwarg = 'todo_pk' class TodoCreateView(LoginRequiredMixin, CreateView): model = Todo pk_url_kwarg = 'todo_pk' template_name_suffix = '_create_form' form_class = TodoCreateForm def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['employee'] = Employee.objects.get(pk=self.kwargs['pk']) return context def form_valid(self, form): form.instance.employee = Employee.objects.get(pk=self.kwargs['pk']) return super().form_valid(form) def get_success_url(self): return reverse('employee-detail', kwargs={'pk': self.kwargs['pk']}) class TodoDetailView(LoginRequiredMixin, DetailView): model = Todo pk_url_kwarg = 'todo_pk' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['employee'] = Employee.objects.get(pk=self.kwargs['pk']) return context class TodoUpdateView(LoginRequiredMixin, UpdateView): model = Todo pk_url_kwarg = 'todo_pk' form_class = TodoForm def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['employee'] = Employee.objects.get(pk=self.kwargs['pk']) return context class TodoDeleteView(LoginRequiredMixin, DeleteView): model = Todo pk_url_kwarg = 'todo_pk' def get_success_url(self): return reverse('todo-deleted', kwargs={'pk': self.kwargs['pk']}) class TodoDeleteDoneView(LoginRequiredMixin, TemplateView): template_name = 'board/item_deleted.html'