diff --git a/RIGS/migrations/0047_auto_20230510_1823.py b/RIGS/migrations/0047_auto_20230517_0944.py similarity index 88% rename from RIGS/migrations/0047_auto_20230510_1823.py rename to RIGS/migrations/0047_auto_20230517_0944.py index 1e3e6892..c58bb091 100644 --- a/RIGS/migrations/0047_auto_20230510_1823.py +++ b/RIGS/migrations/0047_auto_20230517_0944.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.16 on 2023-05-10 17:23 +# Generated by Django 3.2.19 on 2023-05-17 08:44 from django.conf import settings from django.db import migrations, models @@ -19,7 +19,7 @@ class Migration(migrations.Migration): ('time', models.DateTimeField()), ('role', models.CharField(blank=True, max_length=50)), ('vehicle', models.CharField(blank=True, max_length=100)), - ('end_time', models.DateTimeField(null=True)), + ('end_time', models.DateTimeField(blank=True, null=True)), ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='crew', to='RIGS.event')), ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checkins', to=settings.AUTH_USER_MODEL)), ], @@ -145,6 +145,21 @@ class Migration(migrations.Migration): name='power_mic', field=models.ForeignKey(blank=True, help_text='Who is the Power MIC?', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='checklists', to=settings.AUTH_USER_MODEL, verbose_name='Power MIC'), ), + migrations.AlterField( + model_name='eventchecklist', + name='reviewed_at', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AlterField( + model_name='powertestrecord', + name='reviewed_at', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AlterField( + model_name='riskassessment', + name='reviewed_at', + field=models.DateTimeField(blank=True, null=True), + ), migrations.DeleteModel( name='EventChecklistCrew', ), diff --git a/RIGS/models.py b/RIGS/models.py index ccac6b4e..715faaa4 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -711,17 +711,17 @@ def validate_url(value): class ReviewableModel(models.Model): - reviewed_at = models.DateTimeField(null=True) + reviewed_at = models.DateTimeField(null=True, blank=True) reviewed_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, verbose_name="Reviewer", on_delete=models.CASCADE) + class Meta: + abstract = True + @cached_property def fieldz(self): return [n.name for n in list(self._meta.get_fields()) if n.name != 'reviewed_at' and n.name != 'reviewed_by' and not n.is_relation and not n.auto_created] - class Meta: - abstract = True - @reversion.register class RiskAssessment(ReviewableModel, RevisionMixin): @@ -821,6 +821,12 @@ class RiskAssessment(ReviewableModel, RevisionMixin): def get_event_size_display(self): return self.SIZES[self.event_size][1] + " Event" + def __str__(self): + return f"{self.pk} | {self.event}" + + def get_absolute_url(self): + return reverse('ra_detail', kwargs={'pk': self.pk}) + @property def activity_feed_string(self): return str(self.event) @@ -829,12 +835,6 @@ class RiskAssessment(ReviewableModel, RevisionMixin): def name(self): return str(self) - def get_absolute_url(self): - return reverse('ra_detail', kwargs={'pk': self.pk}) - - def __str__(self): - return f"{self.pk} | {self.event}" - @reversion.register class EventChecklist(ReviewableModel, RevisionMixin): @@ -862,6 +862,9 @@ class EventChecklist(ReviewableModel, RevisionMixin): ('review_eventchecklist', 'Can review Event Checklists') ] + def __str__(self): + return f"{self.pk} - {self.event}" + @property def activity_feed_string(self): return str(self.event) @@ -869,9 +872,6 @@ class EventChecklist(ReviewableModel, RevisionMixin): def get_absolute_url(self): return reverse('ec_detail', kwargs={'pk': self.pk}) - def __str__(self): - return f"{self.pk} - {self.event}" - @reversion.register class PowerTestRecord(ReviewableModel, RevisionMixin): @@ -915,6 +915,12 @@ class PowerTestRecord(ReviewableModel, RevisionMixin): all_rcds_tested = models.BooleanField(blank=True, null=True, help_text="All circuit RCDs tested?
(using test button)") public_sockets_tested = models.BooleanField(blank=True, null=True, help_text="Public/Performer accessible circuits tested?
(using socket tester)") + class Meta: + ordering = ['event'] + permissions = [ + ('review_power', 'Can review Power Test Records') + ] + def __str__(self): return f"{self.pk} - {self.event}" @@ -922,12 +928,6 @@ class PowerTestRecord(ReviewableModel, RevisionMixin): def activity_feed_string(self): return str(self.event) - class Meta: - ordering = ['event'] - permissions = [ - ('review_power', 'Can review Power Test Records') - ] - class EventCheckIn(models.Model): event = models.ForeignKey('Event', related_name='crew', on_delete=models.CASCADE) @@ -935,7 +935,10 @@ class EventCheckIn(models.Model): time = models.DateTimeField() role = models.CharField(max_length=50, blank=True) vehicle = models.CharField(max_length=100, blank=True) - end_time = models.DateTimeField(null=True) + end_time = models.DateTimeField(null=True, blank=True) + + def __str__(self): + return f"{self.person} on {self.event}" def clean(self): sass = " Please invent time travel and retry." @@ -944,11 +947,8 @@ class EventCheckIn(models.Model): if self.end_time and self.end_time < self.time: raise ValidationError("May not check out before you've checked in." + sass) + def get_absolute_url(self): + return reverse('event_detail', kwargs={'pk': self.event_id}) + def active(self): return end_time is not None - - def get_absolute_url(self): - return reverse('event_detail', kwargs={'pk': self.event.pk}) - - def __str__(self): - return f"{self.person} on {self.event}" diff --git a/RIGS/views/hs.py b/RIGS/views/hs.py index 845b015f..ef38bb81 100644 --- a/RIGS/views/hs.py +++ b/RIGS/views/hs.py @@ -1,7 +1,7 @@ from django.apps import apps from django.contrib import messages from django.http import HttpResponseRedirect -from django.urls import reverse_lazy +from django.urls import reverse from django.utils import timezone from django.views import generic from reversion import revisions as reversion @@ -37,7 +37,7 @@ class MarkReviewed(generic.View): obj.reviewed_by = self.request.user obj.reviewed_at = timezone.now() obj.save() - return HttpResponseRedirect(reverse_lazy('hs_list')) + return HttpResponseRedirect(reverse('hs_list')) class EventRiskAssessmentCreate(HSCreateView): @@ -53,12 +53,12 @@ class EventRiskAssessmentCreate(HSCreateView): ra = models.RiskAssessment.objects.filter(event=event).first() if ra is not None: - return HttpResponseRedirect(reverse_lazy('ra_edit', kwargs={'pk': ra.pk})) + return HttpResponseRedirect(reverse('ra_edit', kwargs={'pk': ra.pk})) return super(EventRiskAssessmentCreate, self).get(self) def get_success_url(self): - return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk}) + return reverse('ra_detail', kwargs={'pk': self.object.pk}) class EventRiskAssessmentEdit(generic.UpdateView): @@ -71,7 +71,7 @@ class EventRiskAssessmentEdit(generic.UpdateView): ra.reviewed_by = None ra.reviewed_at = None ra.save() - return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk}) + return reverse('ra_detail', kwargs={'pk': self.object.pk}) def get_context_data(self, **kwargs): context = super(EventRiskAssessmentEdit, self).get_context_data(**kwargs) @@ -114,7 +114,7 @@ class EventChecklistEdit(generic.UpdateView): ec.reviewed_by = None ec.reviewed_at = None ec.save() - return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk}) + return reverse('ec_detail', kwargs={'pk': self.object.pk}) def get_context_data(self, **kwargs): context = super(EventChecklistEdit, self).get_context_data(**kwargs) @@ -142,12 +142,12 @@ class EventChecklistCreate(HSCreateView): 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_lazy('event_ra', kwargs={'pk': epk})) + return HttpResponseRedirect(reverse('event_ra', kwargs={'pk': epk})) return super(EventChecklistCreate, self).get(self) def get_success_url(self): - return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk}) + return reverse('ec_detail', kwargs={'pk': self.object.pk}) class PowerTestDetail(generic.DetailView): @@ -170,7 +170,7 @@ class PowerTestEdit(generic.UpdateView): ec.reviewed_by = None ec.reviewed_at = None ec.save() - return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk}) + return reverse('ec_detail', kwargs={'pk': self.object.pk}) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -197,12 +197,12 @@ class PowerTestCreate(HSCreateView): 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_lazy('event_ra', kwargs={'pk': epk})) + return HttpResponseRedirect(reverse('event_ra', kwargs={'pk': epk})) return super().get(self) def get_success_url(self): - return reverse_lazy('pt_detail', kwargs={'pk': self.object.pk}) + return reverse('pt_detail', kwargs={'pk': self.object.pk}) class HSList(generic.ListView):