diff --git a/RIGS/forms.py b/RIGS/forms.py index 065f440e..0b4b14de 100644 --- a/RIGS/forms.py +++ b/RIGS/forms.py @@ -168,4 +168,4 @@ class EventRiskAssessmentForm(forms.ModelForm): class Meta: model = models.RiskAssessment fields = '__all__' - exclude = [] + exclude = ['reviewed_at', 'reviewed_by'] diff --git a/RIGS/ical.py b/RIGS/ical.py index bd3dfcba..3940390b 100644 --- a/RIGS/ical.py +++ b/RIGS/ical.py @@ -102,7 +102,7 @@ class CalendarICS(ICalFeed): return item.earliest_time def item_end_datetime(self, item): - if type(item.latest_time) == datetime.date: # Ical end_datetime is non-inclusive, so add a day + if isinstance(item.latest_time, datetime.date): # Ical end_datetime is non-inclusive, so add a day return item.latest_time + datetime.timedelta(days=1) return item.latest_time diff --git a/RIGS/models.py b/RIGS/models.py index 34fe50a8..f0ffe0be 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -67,6 +67,8 @@ class Profile(AbstractUser): return self.name # TODO move to versioning - currently get import errors with that + + class RevisionMixin(object): @property def is_first_version(self): @@ -100,7 +102,6 @@ class RevisionMixin(object): return "V{0} | R{1}".format(version.pk, version.revision.pk) - class Person(models.Model, RevisionMixin): name = models.CharField(max_length=50) phone = models.CharField(max_length=15, blank=True, null=True) @@ -616,9 +617,9 @@ class RiskAssessment(models.Model, RevisionMixin): # Blimey that was a lot of options - # reviewed_at = models.DateTimeField() - # reviewed_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, - # verbose_name="Reviewer", on_delete=models.CASCADE) + reviewed_at = models.DateTimeField(null=True) + reviewed_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, + verbose_name="Reviewer", on_delete=models.CASCADE) def clean(self): errdict = {} diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 8d11f0a3..7c1f401f 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -6,19 +6,18 @@ import urllib.parse from django.contrib.staticfiles.storage import staticfiles_storage from django.core.mail import EmailMessage, EmailMultiAlternatives from django.views import generic -from django.urls import reverse_lazy from django.shortcuts import get_object_or_404 from django.http import HttpResponseRedirect from django.template import RequestContext from django.template.loader import get_template from django.conf import settings from django.urls import reverse +from django.urls import reverse_lazy from django.core import signing from django.http import HttpResponse from django.core.exceptions import SuspiciousOperation from django.db.models import Q from django.contrib import messages -from django.utils import timezone from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.utils import timezone @@ -426,63 +425,3 @@ class EventAuthoriseRequestEmailPreview(generic.DetailView): }) context['to_name'] = self.request.GET.get('to_name', None) return context - - -class EventRiskAssessmentCreate(generic.CreateView): - model = models.RiskAssessment - template_name = '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_lazy('ra_edit', kwargs={'pk': ra.pk})) - - return super(EventRiskAssessmentCreate, self).get(self) - - def get_form(self, **kwargs): - form = super(EventRiskAssessmentCreate, self).get_form(**kwargs) - epk = self.kwargs.get('pk') - event = models.Event.objects.get(pk=epk) - form.instance.event = event - return form - - def get_context_data(self, **kwargs): - context = super(EventRiskAssessmentCreate, self).get_context_data(**kwargs) - epk = self.kwargs.get('pk') - event = models.Event.objects.get(pk=epk) - context['event'] = event - return context - - def get_success_url(self): - return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk}) - - -class EventRiskAssessmentEdit(generic.UpdateView): - model = models.RiskAssessment - template_name = 'risk_assessment_form.html' - form_class = forms.EventRiskAssessmentForm - - def get_success_url(self): - return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk}) - - def get_context_data(self, **kwargs): - context = super(EventRiskAssessmentEdit, self).get_context_data(**kwargs) - context['edit'] = True - return context - - -class EventRiskAssessmentDetail(generic.DetailView): - model = models.RiskAssessment - template_name = 'risk_assessment_detail.html' - - -class EventRiskAssessmentList(generic.ListView): - paginate_by = 20 - model = models.RiskAssessment - template_name = 'risk_assessment_table.html' diff --git a/RIGS/templates/base_rigs.html b/RIGS/templates/base_rigs.html index 6bda8547..46b1d2da 100644 --- a/RIGS/templates/base_rigs.html +++ b/RIGS/templates/base_rigs.html @@ -53,6 +53,16 @@ {% if perms.RIGS.view_venue %} {% endif %} + {% if perms.RIGS.view_riskassessment %} + + {% endif %} {% endif %} {% endblock %} diff --git a/RIGS/templates/event_form.html b/RIGS/templates/event_form.html index cf18edbc..f962977d 100644 --- a/RIGS/templates/event_form.html +++ b/RIGS/templates/event_form.html @@ -154,14 +154,14 @@
- + - + - +
diff --git a/RIGS/templates/risk_assessment_detail.html b/RIGS/templates/risk_assessment_detail.html index 98483ca3..13fb1456 100644 --- a/RIGS/templates/risk_assessment_detail.html +++ b/RIGS/templates/risk_assessment_detail.html @@ -32,8 +32,8 @@
{{ object.crewfatigue|yesno|title }}
-
{{ object|help_text:'general_notes' }}
-
+
{{ object|help_text:'general_notes' }}
+
{{ object.general_notes|default:'N/A'|linebreaks }}
@@ -67,8 +67,8 @@
{{ object.multiple_electrical_environments|yesno|title }}
-
{{ object|help_text:'power_notes' }}
-
+
{{ object|help_text:'power_notes' }}
+
{{ object.power_notes|default:'N/A'|linebreaks }}
@@ -82,8 +82,8 @@
{{ object.noise_monitoring|yesno|title }}
-
{{ object|help_text:'sound_notes' }}
-
+
{{ object|help_text:'sound_notes' }}
+
{{ object.sound_notes|default:'N/A'|linebreaks }}
diff --git a/RIGS/templates/risk_assessment_table.html b/RIGS/templates/risk_assessment_table.html index b6476d20..e8892984 100644 --- a/RIGS/templates/risk_assessment_table.html +++ b/RIGS/templates/risk_assessment_table.html @@ -7,12 +7,12 @@ {% block content %}
-
+

Risk Assessment List

-
+
@@ -44,6 +44,7 @@ + {% endif %} @@ -79,10 +80,17 @@ + {% empty %} - + {% endfor %} diff --git a/RIGS/urls.py b/RIGS/urls.py index c49143b1..a85fd2d8 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -5,7 +5,7 @@ from django.views.decorators.clickjacking import xframe_options_exempt from django.views.generic import RedirectView from PyRIGS.decorators import (api_key_required, has_oembed, permission_required_with_403) -from RIGS import finance, ical, models, rigboard, views +from RIGS import finance, ical, models, rigboard, views, hs from versioning import versioning from django.views.decorators.cache import cache_page @@ -89,17 +89,19 @@ urlpatterns = [ path('event//history/', permission_required_with_403('RIGS.view_event')(versioning.VersionHistory.as_view()), name='event_history', kwargs={'model': models.Event}), + # Event H&S - path('event//ra/', permission_required_with_403('RIGS.change_event')(rigboard.EventRiskAssessmentCreate.as_view()), + path('event//ra/', permission_required_with_403('RIGS.change_event')(hs.EventRiskAssessmentCreate.as_view()), name='event_ra'), - path('event/ra//', permission_required_with_403('RIGS.change_event')(rigboard.EventRiskAssessmentDetail.as_view()), + path('event/ra//', permission_required_with_403('RIGS.change_event')(hs.EventRiskAssessmentDetail.as_view()), name='ra_detail'), - path('event/ra//edit/', permission_required_with_403('RIGS.change_event')(rigboard.EventRiskAssessmentEdit.as_view()), + path('event/ra//edit/', permission_required_with_403('RIGS.change_event')(hs.EventRiskAssessmentEdit.as_view()), name='ra_edit'), path('event/ra//history/', permission_required_with_403('RIGS.change_event')(versioning.VersionHistory.as_view()), name='ra_history', kwargs={'model': models.RiskAssessment}), - path('event/ra/list', permission_required_with_403('RIGS.change_event')(rigboard.EventRiskAssessmentList.as_view()), + path('event/ra/list', permission_required_with_403('RIGS.change_event')(hs.EventRiskAssessmentList.as_view()), name='ra_list'), + path('event/ra//review/', permission_required_with_403('RIGS.change_event')(hs.EventRiskAssessmentReview.as_view()), name='ra_review'), # Finance path('invoice/', permission_required_with_403('RIGS.view_invoice')(finance.InvoiceIndex.as_view()),
{{ object_list.0|verbose_name:'special_structures'|title }} {{ object_list.0|verbose_name:'persons_responsible_structures'|title }} {{ object_list.0|verbose_name:'suspended_structures'|title }}Review
{{object.special_structures|yesno|title}} {{ object.persons_responsible_structures|default:'N/A'|linebreaks }} {{object.suspended_structures|yesno|title}} + {% if object.reviewed_by %} + Reviewed by {{ object.reviewed_by }} at {{ object.reviewed_at }} + {% else %} + Mark Reviewed + {% endif %} +
Not FoundNo risk assessments found