diff --git a/RIGS/hs.py b/RIGS/hs.py new file mode 100644 index 00000000..8fb10afb --- /dev/null +++ b/RIGS/hs.py @@ -0,0 +1,81 @@ +from RIGS import models, forms +from django.views import generic +from django.utils import timezone +from django.http import HttpResponseRedirect +from django.urls import reverse_lazy +from reversion import revisions as reversion + + +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): + # TODO Invalidate review here + return reverse_lazy('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 + 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' + + +class EventRiskAssessmentReview(generic.View): + def get(self, *args, **kwargs): + rpk = kwargs.get('pk') + ra = models.RiskAssessment.objects.get(pk=rpk) + with reversion.create_revision(): + ra.reviewed_by = self.request.user + ra.reviewed_at = timezone.now() + ra.save() + return HttpResponseRedirect(reverse_lazy('ra_list')) diff --git a/RIGS/migrations/0043_auto_20200805_1606.py b/RIGS/migrations/0043_auto_20200805_1606.py new file mode 100644 index 00000000..95782b66 --- /dev/null +++ b/RIGS/migrations/0043_auto_20200805_1606.py @@ -0,0 +1,25 @@ +# Generated by Django 3.0.7 on 2020-08-05 15:06 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('RIGS', '0042_auto_20200703_1513'), + ] + + operations = [ + migrations.AddField( + model_name='riskassessment', + name='reviewed_at', + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name='riskassessment', + name='reviewed_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Reviewer'), + ), + ] diff --git a/RIGS/templates/risk_assessment_table.html b/RIGS/templates/risk_assessment_table.html index e8892984..4fe4ddf8 100644 --- a/RIGS/templates/risk_assessment_table.html +++ b/RIGS/templates/risk_assessment_table.html @@ -44,48 +44,51 @@