mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-19 06:22:16 +00:00
"This might be a problem if the risk assessment is being done by one person and the power plan by another."
296 lines
11 KiB
Python
296 lines
11 KiB
Python
from django.apps import apps
|
|
from django.contrib import messages
|
|
from django.http import HttpResponseRedirect
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
from django.views import generic
|
|
from reversion import revisions as reversion
|
|
|
|
from RIGS import models, forms
|
|
from RIGS.views.rigboard import get_related
|
|
from PyRIGS.views import PrintView, ModalURLMixin
|
|
from django.shortcuts import redirect
|
|
|
|
|
|
class HSCreateView(generic.CreateView):
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
event = models.Event.objects.get(pk=self.kwargs.get('pk'))
|
|
context['event'] = event
|
|
context['page_title'] = f'Create {self.model.__name__} for Event {event.display_id}'
|
|
get_related(context['form'], context)
|
|
return context
|
|
|
|
|
|
class MarkReviewed(generic.RedirectView):
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
obj = apps.get_model('RIGS', kwargs.get('model')).objects.get(pk=kwargs.get('pk'))
|
|
with reversion.create_revision():
|
|
reversion.set_user(self.request.user)
|
|
obj.reviewed_by = self.request.user
|
|
obj.reviewed_at = timezone.now()
|
|
obj.save()
|
|
return self.request.META.get('HTTP_REFERER', reverse('hs_list'))
|
|
|
|
|
|
class EventRiskAssessmentCreate(HSCreateView):
|
|
model = models.RiskAssessment
|
|
template_name = 'hs/risk_assessment_form.html'
|
|
form_class = forms.EventRiskAssessmentForm
|
|
|
|
def get(self, *args, **kwargs):
|
|
epk = kwargs.get('pk')
|
|
event = models.Event.objects.get(pk=epk)
|
|
|
|
# Check if RA exists
|
|
ra = models.RiskAssessment.objects.filter(event=event).first()
|
|
|
|
if ra is not None:
|
|
return HttpResponseRedirect(reverse('ra_edit', kwargs={'pk': ra.pk}))
|
|
|
|
form = forms.EventRiskAssessmentForm(initial={'venue': "66"})
|
|
|
|
return super().get(self)
|
|
|
|
def get_success_url(self):
|
|
return reverse('ra_detail', kwargs={'pk': self.object.pk})
|
|
|
|
|
|
class EventRiskAssessmentEdit(generic.UpdateView):
|
|
model = models.RiskAssessment
|
|
template_name = 'hs/risk_assessment_form.html'
|
|
form_class = forms.EventRiskAssessmentForm
|
|
|
|
def get_success_url(self):
|
|
ra = self.get_object()
|
|
ra.reviewed_by = None
|
|
ra.reviewed_at = None
|
|
ra.save()
|
|
return reverse('ra_detail', kwargs={'pk': self.object.pk})
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(EventRiskAssessmentEdit, self).get_context_data(**kwargs)
|
|
rpk = self.kwargs.get('pk')
|
|
ra = models.RiskAssessment.objects.get(pk=rpk)
|
|
context['event'] = ra.event
|
|
context['edit'] = True
|
|
context['page_title'] = f'Edit Risk Assessment for Event {ra.event.display_id}'
|
|
get_related(context['form'], context)
|
|
return context
|
|
|
|
|
|
class EventRiskAssessmentDetail(generic.DetailView):
|
|
model = models.RiskAssessment
|
|
template_name = 'hs/risk_assessment_detail.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(EventRiskAssessmentDetail, self).get_context_data(**kwargs)
|
|
context['page_title'] = f"Risk Assessment for Event <a href='{self.object.event.get_absolute_url()}'>{self.object.event.display_id} {self.object.event.name}</a>"
|
|
return context
|
|
|
|
|
|
class EventChecklistDetail(generic.DetailView):
|
|
model = models.EventChecklist
|
|
template_name = 'hs/event_checklist_detail.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(EventChecklistDetail, self).get_context_data(**kwargs)
|
|
context['page_title'] = f"Event Checklist for Event <a href='{self.object.event.get_absolute_url()}'>{self.object.event.display_id} {self.object.event.name}</a>"
|
|
return context
|
|
|
|
|
|
class EventChecklistEdit(generic.UpdateView):
|
|
model = models.EventChecklist
|
|
template_name = 'hs/event_checklist_form.html'
|
|
form_class = forms.EventChecklistForm
|
|
|
|
def get_success_url(self):
|
|
ec = self.get_object()
|
|
ec.reviewed_by = None
|
|
ec.reviewed_at = None
|
|
ec.save()
|
|
return reverse('ec_detail', kwargs={'pk': self.object.pk})
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(EventChecklistEdit, self).get_context_data(**kwargs)
|
|
pk = self.kwargs.get('pk')
|
|
ec = models.EventChecklist.objects.get(pk=pk)
|
|
context['event'] = ec.event
|
|
context['edit'] = True
|
|
context['page_title'] = f'Edit Event Checklist for Event {ec.event.display_id}'
|
|
get_related(context['form'], context)
|
|
return context
|
|
|
|
|
|
class EventChecklistCreate(HSCreateView):
|
|
model = models.EventChecklist
|
|
template_name = 'hs/event_checklist_form.html'
|
|
form_class = forms.EventChecklistForm
|
|
|
|
# From both business logic and programming POVs, RAs must exist before ECs!
|
|
def get(self, *args, **kwargs):
|
|
epk = kwargs.get('pk')
|
|
event = models.Event.objects.get(pk=epk)
|
|
# Check if RA exists
|
|
ra = models.RiskAssessment.objects.filter(event=event).first()
|
|
if ra is None:
|
|
messages.error(self.request, f'A Risk Assessment must exist prior to creating any Event Checklists for {event}! Please create one now.')
|
|
return HttpResponseRedirect(reverse('event_ra', kwargs={'pk': epk}))
|
|
return super().get(self)
|
|
|
|
def get_success_url(self):
|
|
return reverse('ec_detail', kwargs={'pk': self.object.pk})
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
if context['event'].venue:
|
|
context['venue'] = context['event'].venue
|
|
return context
|
|
|
|
|
|
class PowerTestDetail(generic.DetailView):
|
|
model = models.PowerTestRecord
|
|
template_name = 'hs/power_detail.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['page_title'] = f"Power Test Record for Event <a href='{self.object.event.get_absolute_url()}'>{self.object.event.display_id} {self.object.event.name}</a>"
|
|
return context
|
|
|
|
|
|
class PowerTestEdit(generic.UpdateView):
|
|
model = models.PowerTestRecord
|
|
template_name = 'hs/power_form.html'
|
|
form_class = forms.PowerTestRecordForm
|
|
|
|
def get_success_url(self):
|
|
ec = self.get_object()
|
|
ec.reviewed_by = None
|
|
ec.reviewed_at = None
|
|
ec.save()
|
|
return reverse('ec_detail', kwargs={'pk': self.object.pk})
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
pk = self.kwargs.get('pk')
|
|
ec = models.PowerTestRecord.objects.get(pk=pk)
|
|
context['event'] = ec.event
|
|
context['edit'] = True
|
|
context['page_title'] = f'Edit Power Test Record for Event {ec.event.display_id}'
|
|
# get_related(context['form'], context)
|
|
return context
|
|
|
|
|
|
class PowerTestCreate(HSCreateView):
|
|
model = models.PowerTestRecord
|
|
template_name = 'hs/power_form.html'
|
|
form_class = forms.PowerTestRecordForm
|
|
|
|
def get(self, *args, **kwargs):
|
|
epk = kwargs.get('pk')
|
|
event = models.Event.objects.get(pk=epk)
|
|
# Check if RA exists
|
|
ra = models.RiskAssessment.objects.filter(event=event).first()
|
|
|
|
if ra is None:
|
|
messages.error(self.request, f'A Risk Assessment must exist prior to creating any Power Test Records for {event}! Please create one now.')
|
|
return HttpResponseRedirect(reverse('event_ra', kwargs={'pk': epk}))
|
|
|
|
return super().get(self)
|
|
|
|
def get_success_url(self):
|
|
return reverse('pt_detail', kwargs={'pk': self.object.pk})
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
if context['event'].venue:
|
|
context['venue'] = context['event'].venue
|
|
if context['event'].riskassessment.power_mic:
|
|
context['power_mic'] = context['event'].riskassessment.power_mic
|
|
return context
|
|
|
|
|
|
class HSList(generic.ListView):
|
|
paginate_by = 20
|
|
model = models.Event
|
|
template_name = 'hs/hs_list.html'
|
|
|
|
def get_queryset(self):
|
|
return models.Event.objects.all().exclude(status=models.Event.CANCELLED).order_by('-start_date').select_related('riskassessment').prefetch_related('checklists')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(HSList, self).get_context_data(**kwargs)
|
|
context['page_title'] = 'H&S Overview'
|
|
return context
|
|
|
|
|
|
class RAPrint(PrintView):
|
|
model = models.RiskAssessment
|
|
template_name = 'hs/ra_print.xml'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['filename'] = f"EventSpecificRiskAssessment_for_{context['object'].event.display_id}.pdf"
|
|
return context
|
|
|
|
|
|
class EventCheckIn(generic.CreateView, ModalURLMixin):
|
|
model = models.EventCheckIn
|
|
template_name = 'hs/eventcheckin_form.html'
|
|
form_class = forms.EventCheckInForm
|
|
|
|
def get_success_url(self):
|
|
return self.get_close_url('event_detail', 'event_detail') # Well, that's one way of doing that...!
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['event'] = models.Event.objects.get(pk=self.kwargs.get('pk'))
|
|
context['page_title'] = f'Check In to Event {context["event"].display_id}'
|
|
# get_related(context['form'], context)
|
|
return context
|
|
|
|
|
|
class EventCheckInOverride(generic.CreateView):
|
|
model = models.EventCheckIn
|
|
template_name = 'hs/eventcheckin_form.html'
|
|
form_class = forms.EditCheckInForm
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['event'] = models.Event.objects.get(pk=self.kwargs.get('pk'))
|
|
context['page_title'] = f'Manually add Check In to Event {context["event"].display_id}'
|
|
context['manual'] = True
|
|
return context
|
|
|
|
|
|
class EventCheckInEdit(generic.UpdateView, ModalURLMixin):
|
|
model = models.EventCheckIn
|
|
template_name = 'hs/eventcheckin_form.html'
|
|
form_class = forms.EditCheckInForm
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
obj = self.get_object()
|
|
if not obj.person == self.request.user and not obj.event.mic == self.request.user:
|
|
return redirect(self.request.META.get('HTTP_REFERER', '/'))
|
|
return super().dispatch(request)
|
|
|
|
def get_success_url(self):
|
|
return self.get_close_url('event_detail', 'event_detail') # Well, that's one way of doing that...!
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['event'] = self.object.event
|
|
context['page_title'] = f'Edit Check In for Event {context["event"].display_id}'
|
|
context['edit'] = True
|
|
# get_related(context['form'], context)
|
|
return context
|
|
|
|
|
|
class EventCheckOut(generic.RedirectView):
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
checkin = self.request.user.current_event()
|
|
if checkin:
|
|
checkin.end_time = timezone.now()
|
|
checkin.save()
|
|
return self.request.META.get('HTTP_REFERER', '/')
|