onboard/board/views.py
2021-07-21 20:58:18 -06:00

173 lines
5.3 KiB
Python

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'