From 2e60c5e7bf3039d3e3a750754a5295e91bdac3fa Mon Sep 17 00:00:00 2001 From: Arona Jones Date: Fri, 3 Jul 2020 17:09:32 +0100 Subject: [PATCH] Do not use Django 'required' for radio selects As this requires them to be True, whereas we just need to require that an option be entered. --- RIGS/forms.py | 5 +- RIGS/migrations/0042_auto_20200703_1513.py | 108 +++++++++++++++++++++ RIGS/models.py | 11 ++- RIGS/templates/partials/yes_no_radio.html | 2 +- RIGS/templates/risk_assessment_form.html | 9 +- RIGS/templates/risk_assessment_table.html | 59 +++++------ 6 files changed, 158 insertions(+), 36 deletions(-) create mode 100644 RIGS/migrations/0042_auto_20200703_1513.py diff --git a/RIGS/forms.py b/RIGS/forms.py index 27638719..065f440e 100644 --- a/RIGS/forms.py +++ b/RIGS/forms.py @@ -163,10 +163,9 @@ class EventRiskAssessmentForm(forms.ModelForm): field.widget = forms.RadioSelect(choices=[ (True, 'Yes'), (False, 'No') - ], attrs={'class': 'custom-control-input'}) - field.required = True + ], attrs={'class': 'custom-control-input', 'required': 'true'}) class Meta: model = models.RiskAssessment fields = '__all__' - exclude = ['event'] + exclude = [] diff --git a/RIGS/migrations/0042_auto_20200703_1513.py b/RIGS/migrations/0042_auto_20200703_1513.py new file mode 100644 index 00000000..735b8e3e --- /dev/null +++ b/RIGS/migrations/0042_auto_20200703_1513.py @@ -0,0 +1,108 @@ +# Generated by Django 3.0.7 on 2020-07-03 14:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('RIGS', '0041_auto_20200528_2253'), + ] + + operations = [ + migrations.AlterField( + model_name='riskassessment', + name='area_outside_of_control', + field=models.BooleanField(help_text="Is any part of the work area out of TEC's direct control or openly accessible during the build or breakdown period?"), + ), + migrations.AlterField( + model_name='riskassessment', + name='barrier_required', + field=models.BooleanField(help_text='Is there a requirement for TEC to provide any barrier for security or protection of persons/equipment?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='big_power', + field=models.BooleanField(help_text='Does the event require larger power supplies than 13A or 16A single phase wall sockets, or draw more than 20A total current?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='contractors', + field=models.BooleanField(help_text='Are you using any external contractors?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='crew_fatigue', + field=models.BooleanField(help_text='Is crew fatigue likely to be a risk at any point during this event?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='generators', + field=models.BooleanField(help_text='Will generators be used?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='known_venue', + field=models.BooleanField(help_text='Is the event in a venue that you and/or TEC have experience working in?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='multiple_electrical_environments', + field=models.BooleanField(help_text='Will the electrical installation occupy more than one electrical environment?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='noise_monitoring', + field=models.BooleanField(help_text='Does the event require noise monitoring or any non-standard procedures in order to comply with health and safety legislation or site rules?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='nonstandard_emergency_procedure', + field=models.BooleanField(help_text="Does the emergency procedure for the event differ from TEC's standard procedures?"), + ), + migrations.AlterField( + model_name='riskassessment', + name='nonstandard_equipment', + field=models.BooleanField(help_text="Does the event require any hired in equipment or use of equipment that is not covered by TEC's standard risk assessments and method statements?"), + ), + migrations.AlterField( + model_name='riskassessment', + name='nonstandard_equipment_power', + field=models.BooleanField(help_text='Does the power plan require the use of any power equipment (distros, dimmers, motor controllers, etc.) that does not belong to TEC?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='nonstandard_use', + field=models.BooleanField(help_text='Are TEC using their equipment in a way that is abnormal?
i.e. Not covered by TECs standard health and safety documentation'), + ), + migrations.AlterField( + model_name='riskassessment', + name='other_companies', + field=models.BooleanField(help_text='Are TEC working with any other companies on site?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='other_companies_power', + field=models.BooleanField(help_text='Will TEC be supplying power to any other companies?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='safe_loading', + field=models.BooleanField(help_text='Is there a safe load in/out?
e.g. sufficient lighting, flat, not in a crowded area etc.'), + ), + migrations.AlterField( + model_name='riskassessment', + name='safe_storage', + field=models.BooleanField(help_text='Are there areas to safely store equipment?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='special_structures', + field=models.BooleanField(help_text='Does the event require use of winch stands, motors, MPT Towers, or staging?'), + ), + migrations.AlterField( + model_name='riskassessment', + name='suspended_structures', + field=models.BooleanField(help_text="Are any structures (excluding projector screens and IWBs) being suspended from TEC's structures?"), + ), + ] diff --git a/RIGS/models.py b/RIGS/models.py index 5c5ff45d..34fe50a8 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -3,6 +3,7 @@ import hashlib import datetime import pytz +from django import forms from django.db import models from django.contrib.auth.models import AbstractUser from django.conf import settings @@ -615,11 +616,19 @@ class RiskAssessment(models.Model, RevisionMixin): # Blimey that was a lot of options - # created = models.DateTimeField(auto_now_add=True) # reviewed_at = models.DateTimeField() # reviewed_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, # verbose_name="Reviewer", on_delete=models.CASCADE) + def clean(self): + errdict = {} + for field in RiskAssessment._meta.fields: + if field.__class__ == forms.BooleanField and self.field is None: + errdict[field.name] = ["This field is required"] + + if errdict != {}: # If there was an error when validation + raise ValidationError(errdict) + @property def activity_feed_string(self): return str(self.event) diff --git a/RIGS/templates/partials/yes_no_radio.html b/RIGS/templates/partials/yes_no_radio.html index 7ae89db8..84aecfa4 100644 --- a/RIGS/templates/partials/yes_no_radio.html +++ b/RIGS/templates/partials/yes_no_radio.html @@ -7,4 +7,4 @@ {% endfor %} - + diff --git a/RIGS/templates/risk_assessment_form.html b/RIGS/templates/risk_assessment_form.html index b65c681d..79c01e78 100644 --- a/RIGS/templates/risk_assessment_form.html +++ b/RIGS/templates/risk_assessment_form.html @@ -3,7 +3,7 @@ {% load static %} {% load help_text from filters %} -{% block title %}{% if edit %}Edit{% else %}Create{% endif %} Risk Assessment for Event N{{ object.event.pk|stringformat:"05d" }} {{ object.event.name }}{% endblock %} +{% block title %}{% if edit %}Edit{% else %}Create{% endif %} Risk Assessment for Event N{{ event.pk|stringformat:"05d" }}{% endblock %} {% block css %} {{ block.super }} @@ -29,12 +29,15 @@ {% block content %}
-

{% if edit %}Edit{% else %}Create{% endif %} Risk Assessment for Event N{{ object.event.pk|stringformat:"05d" }} {{ object.event.name }}

+

{% if edit %}Edit{% else %}Create{% endif %} Risk Assessment for Event N{{ event.pk|stringformat:"05d" }}

+ {% include 'form_errors.html' %} {% if edit %} -
+ {% else %} {% endif %} + {% csrf_token %}
diff --git a/RIGS/templates/risk_assessment_table.html b/RIGS/templates/risk_assessment_table.html index a2cc26be..b6476d20 100644 --- a/RIGS/templates/risk_assessment_table.html +++ b/RIGS/templates/risk_assessment_table.html @@ -18,30 +18,33 @@ Event - {{ object_list.0|verbose_name:'nonstandard_equipment'|title }} - {{ object_list.0|verbose_name:'nonstandard_use'|title }} - {{ object_list.0|verbose_name:'contractors'|title }} - {{ object_list.0|verbose_name:'other_companies'|title }} - {{ object_list.0|verbose_name:'crew_fatigue'|title }} - {{ object_list.0|verbose_name:'general_notes'|title }} - {{ object_list.0|verbose_name:'big_power'|title }} - {{ object_list.0|verbose_name:'power_mic'|title }} - {{ object_list.0|verbose_name:'generators'|title }} - {{ object_list.0|verbose_name:'other_companies_power'|title }} - {{ object_list.0|verbose_name:'nonstandard_equipment_power'|title }} - {{ object_list.0|verbose_name:'multiple_electrical_environments'|title }} - {{ object_list.0|verbose_name:'power_notes'|title }} - {{ object_list.0|verbose_name:'noise_monitoring'|title }} - {{ object_list.0|verbose_name:'sound_notes'|title }} - {{ object_list.0|verbose_name:'known_venue'|title }} - {{ object_list.0|verbose_name:'safe_loading'|title }} - {{ object_list.0|verbose_name:'safe_storage'|title }} - {{ object_list.0|verbose_name:'area_outside_of_control'|title }} - {{ object_list.0|verbose_name:'nonstandard_emergency_procedure'|title }} - {{ object_list.0|verbose_name:'barrier_required'|title }} - {{ 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 }} + {# mmm hax #} + {% if object_list.0 %} + {{ object_list.0|verbose_name:'nonstandard_equipment'|title }} + {{ object_list.0|verbose_name:'nonstandard_use'|title }} + {{ object_list.0|verbose_name:'contractors'|title }} + {{ object_list.0|verbose_name:'other_companies'|title }} + {{ object_list.0|verbose_name:'crew_fatigue'|title }} + {{ object_list.0|verbose_name:'general_notes'|title }} + {{ object_list.0|verbose_name:'big_power'|title }} + {{ object_list.0|verbose_name:'power_mic'|title }} + {{ object_list.0|verbose_name:'generators'|title }} + {{ object_list.0|verbose_name:'other_companies_power'|title }} + {{ object_list.0|verbose_name:'nonstandard_equipment_power'|title }} + {{ object_list.0|verbose_name:'multiple_electrical_environments'|title }} + {{ object_list.0|verbose_name:'power_notes'|title }} + {{ object_list.0|verbose_name:'noise_monitoring'|title }} + {{ object_list.0|verbose_name:'sound_notes'|title }} + {{ object_list.0|verbose_name:'known_venue'|title }} + {{ object_list.0|verbose_name:'safe_loading'|title }} + {{ object_list.0|verbose_name:'safe_storage'|title }} + {{ object_list.0|verbose_name:'area_outside_of_control'|title }} + {{ object_list.0|verbose_name:'nonstandard_emergency_procedure'|title }} + {{ object_list.0|verbose_name:'barrier_required'|title }} + {{ 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 }} + {% endif %} @@ -54,7 +57,7 @@ {{object.other_companies|yesno|title}} {{object.crew_fatigue|yesno|title}} {{ object.general_notes|default:'N/A'|linebreaks }} - + {{object.big_power|yesno|title}} {{ object.power_mic.name|default:'N/A' }} {{object.generators|yesno|title}} @@ -62,17 +65,17 @@ {{object.nonstandard_equipment_power|yesno|title}} {{object.multiple_electrical_environments|yesno|title}} {{ object.power_notes|default:'N/A'|linebreaks }} - + {{object.noise_monitoring|yesno|title}} {{ object.sound_notes|default:'N/A'|linebreaks }} - + {{object.known_venue|yesno|title}} {{object.safe_loading|yesno|title}} {{object.safe_storage|yesno|title}} {{object.area_outside_of_control|yesno|title}} {{object.nonstandard_emergency_procedure|yesno|title}} {{object.barrier_required|yesno|title}} - + {{object.special_structures|yesno|title}} {{ object.persons_responsible_structures|default:'N/A'|linebreaks }} {{object.suspended_structures|yesno|title}}