2021-12-24 17:42:53 +10:00

88 lines
2.8 KiB
Python
Executable File

import datetime
import logging
from django.contrib import messages
from django.shortcuts import get_object_or_404
from django.shortcuts import render, redirect
from django.views import View
from django.urls import reverse_lazy
from django.views.generic import CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from .form import TimerForm
from .models import Timer
logger = logging.getLogger(__name__)
class BaseTimerView(LoginRequiredMixin, PermissionRequiredMixin, View):
pass
class TimerView(BaseTimerView):
template_name = 'timerboard/view.html'
permission_required = 'auth.timer_view'
def get(self, request):
logger.debug(f"timer_view called by user {request.user}")
char = request.user.profile.main_character
if char:
corp = char.corporation
else:
corp = None
base_query = Timer.objects.select_related('eve_character')
render_items = {
'timers': base_query.filter(corp_timer=False),
'corp_timers': base_query.filter(corp_timer=True, eve_corp=corp),
'future_timers': base_query.filter(corp_timer=False, eve_time__gte=timezone.now()),
'past_timers': base_query.filter(corp_timer=False, eve_time__lt=timezone.now()),
}
return render(request, self.template_name, context=render_items)
class TimerManagementView(BaseTimerView):
permission_required = 'auth.timer_management'
index_redirect = 'timerboard:view'
success_url = reverse_lazy(index_redirect)
model = Timer
form_class = TimerForm
def get_timer(self, timer_id):
return get_object_or_404(self.model, id=timer_id)
class AddUpdateMixin:
def get_form_kwargs(self):
"""
Inject the request user into the kwargs passed to the form
"""
kwargs = super().get_form_kwargs()
kwargs.update({'user': self.request.user})
return kwargs
class AddTimerView(TimerManagementView, AddUpdateMixin, CreateView):
template_name_suffix = '_create_form'
def form_valid(self, form):
result = super().form_valid(form)
timer = self.object
logger.info(f"Created new timer in {timer.system} at {timer.eve_time} by user {self.request.user}")
messages.success(self.request, _('Added new timer in %(system)s at %(time)s.') % {"system": timer.system, "time": timer.eve_time})
return result
class EditTimerView(TimerManagementView, AddUpdateMixin, UpdateView):
template_name_suffix = '_update_form'
def form_valid(self, form):
messages.success(self.request, _('Saved changes to the timer.'))
return super().form_valid(form)
class RemoveTimerView(TimerManagementView, DeleteView):
pass