mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-24 00:42:17 +00:00
Split power related parts of event checklist into a seperate form
This commit is contained in:
@@ -206,3 +206,8 @@ class RiskAssessmentAdmin(VersionAdmin):
|
|||||||
@admin.register(models.EventChecklist)
|
@admin.register(models.EventChecklist)
|
||||||
class EventChecklistAdmin(VersionAdmin):
|
class EventChecklistAdmin(VersionAdmin):
|
||||||
list_display = ('id', 'event', 'reviewed_at', 'reviewed_by')
|
list_display = ('id', 'event', 'reviewed_at', 'reviewed_by')
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(models.PowerTestRecord)
|
||||||
|
class EventChecklistAdmin(VersionAdmin):
|
||||||
|
list_display = ('id', 'event', 'reviewed_at', 'reviewed_by')
|
||||||
|
|||||||
@@ -283,3 +283,17 @@ class EventChecklistForm(forms.ModelForm):
|
|||||||
model = models.EventChecklist
|
model = models.EventChecklist
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
exclude = ['reviewed_at', 'reviewed_by']
|
exclude = ['reviewed_at', 'reviewed_by']
|
||||||
|
|
||||||
|
|
||||||
|
class PowerTestRecordForm(forms.ModelForm):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
for name, field in self.fields.items():
|
||||||
|
if field.__class__ == forms.NullBooleanField:
|
||||||
|
# Only display yes/no to user, the 'none' is only ever set in the background
|
||||||
|
field.widget = forms.CheckboxInput()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.PowerTestRecord
|
||||||
|
fields = '__all__'
|
||||||
|
exclude = ['reviewed_at', 'reviewed_by']
|
||||||
|
|||||||
71
RIGS/migrations/0046_create_powertests.py
Normal file
71
RIGS/migrations/0046_create_powertests.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# Generated by Django 3.2.16 on 2023-05-08 15:58
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import versioning.versioning
|
||||||
|
|
||||||
|
def migrate_old_data(apps, schema_editor):
|
||||||
|
EventChecklist = apps.get_model('RIGS', 'EventChecklist')
|
||||||
|
PowerTestRecord = apps.get_model('RIGS', 'PowerTestRecord')
|
||||||
|
for ec in EventChecklist.objects.all():
|
||||||
|
# New highscore for the most pythonic BS I've ever written.
|
||||||
|
PowerTestRecord.objects.create(event=ec.event, **{i.name:getattr(ec, i.attname) for i in PowerTestRecord._meta.get_fields() if not (i.is_relation or i.auto_created)})
|
||||||
|
|
||||||
|
|
||||||
|
def revert(apps, schema_editor):
|
||||||
|
apps.get_model('RIGS', 'PowerTestRecord').objects.all().delete()
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('RIGS', '0045_alter_profile_is_approved'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='PowerTestRecord',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='power_tests', to='RIGS.event')),
|
||||||
|
('notes', models.TextField(blank=True, default='')),
|
||||||
|
('venue', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='RIGS.venue')),
|
||||||
|
('reviewed_at', models.DateTimeField(null=True)),
|
||||||
|
('rcds', models.BooleanField(blank=True, help_text='RCDs installed where needed and tested?', null=True)),
|
||||||
|
('supply_test', models.BooleanField(blank=True, help_text='Electrical supplies tested?<br><small>(using socket tester)</small>', null=True)),
|
||||||
|
('earthing', models.BooleanField(blank=True, help_text='Equipment appropriately earthed?<br><small>(truss, stage, generators etc)</small>', null=True)),
|
||||||
|
('pat', models.BooleanField(blank=True, help_text='All equipment in PAT period?', null=True)),
|
||||||
|
('source_rcd', models.BooleanField(blank=True, help_text='Source RCD protected?<br><small>(if cable is more than 3m long) </small>', null=True)),
|
||||||
|
('labelling', models.BooleanField(blank=True, help_text='Appropriate and clear labelling on distribution and cabling?', null=True)),
|
||||||
|
('fd_voltage_l1', models.IntegerField(blank=True, help_text='L1 - N', null=True, verbose_name='First Distro Voltage L1-N')),
|
||||||
|
('fd_voltage_l2', models.IntegerField(blank=True, help_text='L2 - N', null=True, verbose_name='First Distro Voltage L2-N')),
|
||||||
|
('fd_voltage_l3', models.IntegerField(blank=True, help_text='L3 - N', null=True, verbose_name='First Distro Voltage L3-N')),
|
||||||
|
('fd_phase_rotation', models.BooleanField(blank=True, help_text='Phase Rotation<br><small>(if required)</small>', null=True, verbose_name='Phase Rotation')),
|
||||||
|
('fd_earth_fault', models.DecimalField(blank=True, decimal_places=2, help_text='Earth Fault Loop Impedance (Z<small>S</small>)', max_digits=5, null=True, verbose_name='Earth Fault Loop Impedance')),
|
||||||
|
('fd_pssc', models.IntegerField(blank=True, help_text='Prospective Short Circuit Current', null=True, verbose_name='PSCC')),
|
||||||
|
('w1_description', models.CharField(blank=True, default='', help_text='Description', max_length=255)),
|
||||||
|
('w1_polarity', models.BooleanField(blank=True, help_text='Polarity Checked?', null=True)),
|
||||||
|
('w1_voltage', models.IntegerField(blank=True, help_text='Voltage', null=True)),
|
||||||
|
('w1_earth_fault', models.DecimalField(blank=True, decimal_places=2, help_text='Earth Fault Loop Impedance (Z<small>S</small>)', max_digits=5, null=True, verbose_name='Earth Fault Loop Impedance')),
|
||||||
|
('w2_description', models.CharField(blank=True, default='', help_text='Description', max_length=255)),
|
||||||
|
('w2_polarity', models.BooleanField(blank=True, help_text='Polarity Checked?', null=True)),
|
||||||
|
('w2_voltage', models.IntegerField(blank=True, help_text='Voltage', null=True)),
|
||||||
|
('w2_earth_fault', models.DecimalField(blank=True, decimal_places=2, help_text='Earth Fault Loop Impedance (Z<small>S</small>)', max_digits=5, null=True, verbose_name='Earth Fault Loop Impedance')),
|
||||||
|
('w3_description', models.CharField(blank=True, default='', help_text='Description', max_length=255)),
|
||||||
|
('w3_polarity', models.BooleanField(blank=True, help_text='Polarity Checked?', null=True)),
|
||||||
|
('w3_voltage', models.IntegerField(blank=True, help_text='Voltage', null=True)),
|
||||||
|
('w3_earth_fault', models.DecimalField(blank=True, decimal_places=2, help_text='Earth Fault Loop Impedance (Z<small>S</small>)', max_digits=5, null=True, verbose_name='Earth Fault Loop Impedance')),
|
||||||
|
('all_rcds_tested', models.BooleanField(blank=True, help_text='All circuit RCDs tested?<br><small>(using test button)</small>', null=True)),
|
||||||
|
('public_sockets_tested', models.BooleanField(blank=True, help_text='Public/Performer accessible circuits tested?<br><small>(using socket tester)</small>', null=True)),
|
||||||
|
('reviewed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Reviewer')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
'ordering': ['event'],
|
||||||
|
'permissions': [('review_power', 'Can review Power Test Records')],
|
||||||
|
},
|
||||||
|
bases=(models.Model, versioning.versioning.RevisionMixin),
|
||||||
|
),
|
||||||
|
migrations.RunPython(migrate_old_data, reverse_code=revert),
|
||||||
|
]
|
||||||
117
RIGS/migrations/0047_auto_20230508_1946.py
Normal file
117
RIGS/migrations/0047_auto_20230508_1946.py
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
# Generated by Django 3.2.16 on 2023-05-08 18:46
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('RIGS', '0046_create_powertests'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='all_rcds_tested',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='earthing',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='fd_earth_fault',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='fd_phase_rotation',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='fd_pssc',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='fd_voltage_l1',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='fd_voltage_l2',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='fd_voltage_l3',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='labelling',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='pat',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='public_sockets_tested',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='rcds',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='source_rcd',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='supply_test',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w1_description',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w1_earth_fault',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w1_polarity',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w1_voltage',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w2_description',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w2_earth_fault',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w2_polarity',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w2_voltage',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w3_description',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w3_earth_fault',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w3_polarity',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventchecklist',
|
||||||
|
name='w3_voltage',
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -689,8 +689,21 @@ def validate_url(value):
|
|||||||
raise ValidationError('URL must point to a location on the TEC Sharepoint')
|
raise ValidationError('URL must point to a location on the TEC Sharepoint')
|
||||||
|
|
||||||
|
|
||||||
|
class ReviewableModel(models.Model):
|
||||||
|
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)
|
||||||
|
|
||||||
|
@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
|
@reversion.register
|
||||||
class RiskAssessment(models.Model, RevisionMixin):
|
class RiskAssessment(ReviewableModel, RevisionMixin):
|
||||||
SMALL = (0, 'Small')
|
SMALL = (0, 'Small')
|
||||||
MEDIUM = (1, 'Medium')
|
MEDIUM = (1, 'Medium')
|
||||||
LARGE = (2, 'Large')
|
LARGE = (2, 'Large')
|
||||||
@@ -738,10 +751,6 @@ class RiskAssessment(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
# Blimey that was a lot of options
|
# Blimey that was a lot of options
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
supervisor_consulted = models.BooleanField(null=True)
|
supervisor_consulted = models.BooleanField(null=True)
|
||||||
|
|
||||||
expected_values = {
|
expected_values = {
|
||||||
@@ -778,10 +787,6 @@ class RiskAssessment(models.Model, RevisionMixin):
|
|||||||
('review_riskassessment', 'Can review Risk Assessments')
|
('review_riskassessment', 'Can review Risk Assessments')
|
||||||
]
|
]
|
||||||
|
|
||||||
@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]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def event_size(self):
|
def event_size(self):
|
||||||
# Confirm event size. Check all except generators, since generators entails outside
|
# Confirm event size. Check all except generators, since generators entails outside
|
||||||
@@ -811,7 +816,7 @@ class RiskAssessment(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
|
|
||||||
@reversion.register(follow=['vehicles', 'crew'])
|
@reversion.register(follow=['vehicles', 'crew'])
|
||||||
class EventChecklist(models.Model, RevisionMixin):
|
class EventChecklist(ReviewableModel, RevisionMixin):
|
||||||
event = models.ForeignKey('Event', related_name='checklists', on_delete=models.CASCADE)
|
event = models.ForeignKey('Event', related_name='checklists', on_delete=models.CASCADE)
|
||||||
|
|
||||||
# General
|
# General
|
||||||
@@ -830,6 +835,30 @@ class EventChecklist(models.Model, RevisionMixin):
|
|||||||
hs_location = models.CharField(blank=True, default='', max_length=255, help_text="Location of Safety Bag/Box")
|
hs_location = models.CharField(blank=True, default='', max_length=255, help_text="Location of Safety Bag/Box")
|
||||||
extinguishers_location = models.CharField(blank=True, default='', max_length=255, help_text="Location of fire extinguishers")
|
extinguishers_location = models.CharField(blank=True, default='', max_length=255, help_text="Location of fire extinguishers")
|
||||||
|
|
||||||
|
inverted_fields = []
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ['event']
|
||||||
|
permissions = [
|
||||||
|
('review_eventchecklist', 'Can review Event Checklists')
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def activity_feed_string(self):
|
||||||
|
return str(self.event)
|
||||||
|
|
||||||
|
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):
|
||||||
|
event = models.ForeignKey('Event', related_name='power_tests', on_delete=models.CASCADE)
|
||||||
|
venue = models.ForeignKey('Venue', on_delete=models.CASCADE)
|
||||||
|
notes = models.TextField(blank=True, default='')
|
||||||
# Small Electrical Checks
|
# Small Electrical Checks
|
||||||
rcds = models.BooleanField(blank=True, null=True, help_text="RCDs installed where needed and tested?")
|
rcds = models.BooleanField(blank=True, null=True, help_text="RCDs installed where needed and tested?")
|
||||||
supply_test = models.BooleanField(blank=True, null=True, help_text="Electrical supplies tested?<br><small>(using socket tester)</small>")
|
supply_test = models.BooleanField(blank=True, null=True, help_text="Electrical supplies tested?<br><small>(using socket tester)</small>")
|
||||||
@@ -865,32 +894,15 @@ class EventChecklist(models.Model, RevisionMixin):
|
|||||||
all_rcds_tested = models.BooleanField(blank=True, null=True, help_text="All circuit RCDs tested?<br><small>(using test button)</small>")
|
all_rcds_tested = models.BooleanField(blank=True, null=True, help_text="All circuit RCDs tested?<br><small>(using test button)</small>")
|
||||||
public_sockets_tested = models.BooleanField(blank=True, null=True, help_text="Public/Performer accessible circuits tested?<br><small>(using socket tester)</small>")
|
public_sockets_tested = models.BooleanField(blank=True, null=True, help_text="Public/Performer accessible circuits tested?<br><small>(using socket tester)</small>")
|
||||||
|
|
||||||
reviewed_at = models.DateTimeField(null=True)
|
def __str__(self):
|
||||||
reviewed_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
|
return f"{self.pk} - {self.event}"
|
||||||
verbose_name="Reviewer", on_delete=models.CASCADE)
|
|
||||||
|
|
||||||
inverted_fields = []
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['event']
|
ordering = ['event']
|
||||||
permissions = [
|
permissions = [
|
||||||
('review_eventchecklist', 'Can review Event Checklists')
|
('review_power', 'Can review Power Test Records')
|
||||||
]
|
]
|
||||||
|
|
||||||
@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]
|
|
||||||
|
|
||||||
@property
|
|
||||||
def activity_feed_string(self):
|
|
||||||
return str(self.event)
|
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
return reverse('ec_detail', kwargs={'pk': self.pk})
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.pk} - {self.event}"
|
|
||||||
|
|
||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
class EventChecklistVehicle(models.Model, RevisionMixin):
|
class EventChecklistVehicle(models.Model, RevisionMixin):
|
||||||
|
|||||||
@@ -228,123 +228,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if event.riskassessment.event_size == 0 %}
|
|
||||||
<div class="row my-3" id="size-0">
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="card border-success">
|
|
||||||
<div class="card-header">Electrical Checks <small>for ‘Small’ TEC Events <6kVA (approx. 26A)</small></div>
|
|
||||||
<div class="card-body">
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.rcds %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.supply_test %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.earthing %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.pat %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="row my-3" id="size-1">
|
|
||||||
<div class="col-12">
|
|
||||||
{% if event.riskassessment.event_size == 1 %}
|
|
||||||
<div class="card border-warning">
|
|
||||||
<div class="card-header">Electrical Checks <small>for ‘Medium’ TEC Events </small></div>
|
|
||||||
<div class="card-body">
|
|
||||||
{% else %}
|
|
||||||
<div class="card border-danger">
|
|
||||||
<div class="card-header">Electrical Checks <small>for ‘Large’ TEC Events</small></div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="alert alert-danger"><strong>Here be dragons. Ensure you have appeased the Power Gods before continuing... (If you didn't check with a Supervisor, <em>you cannot continue your event!</em>)</strong></div>
|
|
||||||
{% endif %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.source_rcd %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.labelling %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.earthing %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.pat %}
|
|
||||||
<hr>
|
|
||||||
<p>Tests at first distro</p>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-sm">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col" class="text-center">Test</th>
|
|
||||||
<th scope="col" colspan="3" class="text-center">Value</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th scope="row" rowspan="2">Voltage<br><small>(cube meter)</small></th>
|
|
||||||
<th class="text-center">{{ form.fd_voltage_l1.help_text }}</th>
|
|
||||||
<th class="text-center">{{ form.fd_voltage_l2.help_text }}</th>
|
|
||||||
<th class="text-center">{{ form.fd_voltage_l3.help_text }}</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>{% render_field form.fd_voltage_l1 class+="form-control" style="min-width: 5rem;" %}</td>
|
|
||||||
<td>{% render_field form.fd_voltage_l2 class+="form-control" style="min-width: 5rem;" %}</td>
|
|
||||||
<td>{% render_field form.fd_voltage_l3 class+="form-control" style="min-width: 5rem;" %}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{{form.fd_phase_rotation.help_text|safe}}</th>
|
|
||||||
<td colspan="3">{% include 'partials/checklist_checkbox.html' with formitem=form.fd_phase_rotation %}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{{form.fd_earth_fault.help_text|safe}}</th>
|
|
||||||
<td colspan="3">{% render_field form.fd_earth_fault class+="form-control" %}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{{form.fd_pssc.help_text|safe}}</th>
|
|
||||||
<td colspan="3">{% render_field form.fd_pssc class+="form-control" %}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<p>Tests at 'Worst Case' points (at least 1 point required)</p>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col" class="text-center">Test</th>
|
|
||||||
<th scope="col" class="text-center">Point 1</th>
|
|
||||||
<th scope="col" class="text-center">Point 2</th>
|
|
||||||
<th scope="col" class="text-center">Point 3</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{{form.w1_description.help_text|safe}}</th>
|
|
||||||
<td>{% render_field form.w1_description class+="form-control" style="min-width: 5rem;" %}</td>
|
|
||||||
<td>{% render_field form.w2_description class+="form-control" style="min-width: 5rem;" %}</td>
|
|
||||||
<td>{% render_field form.w3_description class+="form-control" style="min-width: 5rem;" %}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{{form.w1_polarity.help_text|safe}}</th>
|
|
||||||
<td>{% render_field form.w1_polarity %}</td>
|
|
||||||
<td>{% render_field form.w2_polarity %}</td>
|
|
||||||
<td>{% render_field form.w3_polarity %}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{{form.w1_voltage.help_text|safe}}</th>
|
|
||||||
<td>{% render_field form.w1_voltage class+="form-control" %}</td>
|
|
||||||
<td>{% render_field form.w2_voltage class+="form-control" %}</td>
|
|
||||||
<td>{% render_field form.w3_voltage class+="form-control" %}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{{form.w1_earth_fault.help_text|safe}}</th>
|
|
||||||
<td>{% render_field form.w1_earth_fault class+="form-control" %}</td>
|
|
||||||
<td>{% render_field form.w2_earth_fault class+="form-control" %}</td>
|
|
||||||
<td>{% render_field form.w3_earth_fault class+="form-control" %}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<hr/>
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.all_rcds_tested %}
|
|
||||||
{% include 'partials/checklist_checkbox.html' with formitem=form.public_sockets_tested %}
|
|
||||||
{% include 'partials/ec_power_info.html' %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
<div class="row mt-3">
|
<div class="row mt-3">
|
||||||
<div class="col-sm-12 text-right">
|
<div class="col-sm-12 text-right">
|
||||||
{% button 'submit' %}
|
{% button 'submit' %}
|
||||||
|
|||||||
167
RIGS/templates/hs/power_detail.html
Normal file
167
RIGS/templates/hs/power_detail.html
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
{% extends request.is_ajax|yesno:"base_ajax.html,base_rigs.html" %}
|
||||||
|
{% load help_text from filters %}
|
||||||
|
{% load profile_by_index from filters %}
|
||||||
|
{% load yesnoi from filters %}
|
||||||
|
{% load button from filters %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 text-right my-3">
|
||||||
|
{% button 'edit' url='pt_edit' pk=object.pk %}
|
||||||
|
{% button 'view' url='event_detail' pk=object.event.pk text="Event" %}
|
||||||
|
{% include 'partials/review_status.html' with perm=perms.RIGS.review_power review='pt_review' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-header">{% include 'partials/event_size.html' with object=object.event.riskassessment %}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<dl class="row">
|
||||||
|
<dt class="col-6">Venue</dt>
|
||||||
|
<dd class="col-6">
|
||||||
|
{% if object.venue %}
|
||||||
|
<a href="{% url 'venue_detail' object.venue.pk %}" class="modal-href">
|
||||||
|
{{ object.venue }}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-6">Notes</dt>
|
||||||
|
<dd class="col-6">
|
||||||
|
{{ object.notes }}
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
{% if object.event.riskassessment.event_size == 0 %}
|
||||||
|
<dl class="row">
|
||||||
|
<dt class="col-10">{{ object|help_text:'rcds'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.rcds|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-10">{{ object|help_text:'supply_test'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.supply_test|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-10">{{ object|help_text:'earthing'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.earthing|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-10">{{ object|help_text:'pat'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.pat|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
{% else %}
|
||||||
|
<dl class="row">
|
||||||
|
<dt class="col-10">{{ object|help_text:'source_rcd'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.source_rcd|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-10">{{ object|help_text:'labelling'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.labelling|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-10">{{ object|help_text:'earthing'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.earthing|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-10">{{ object|help_text:'pat'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.pat|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<hr>
|
||||||
|
<p>Tests at first distro</p>
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="text-center">Test</th>
|
||||||
|
<th scope="col" colspan="3" class="text-center">Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row" rowspan="2">Voltage<br><small>(cube meter)</small></th>
|
||||||
|
<th>{{ object|help_text:'fd_voltage_l1' }}</th>
|
||||||
|
<th>{{ object|help_text:'fd_voltage_l2' }}</th>
|
||||||
|
<th>{{ object|help_text:'fd_voltage_l3' }}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{{ object.fd_voltage_l1 }}</td>
|
||||||
|
<td>{{ object.fd_voltage_l2 }}</td>
|
||||||
|
<td>{{ object.fd_voltage_l3 }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{ object|help_text:'fd_phase_rotation'|safe }}</th>
|
||||||
|
<td colspan="3">{{ object.fd_phase_rotation|yesnoi }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{ object|help_text:'fd_earth_fault'|safe}}</th>
|
||||||
|
<td colspan="3">{{ object.fd_earth_fault }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{ object|help_text:'fd_pssc'}}</th>
|
||||||
|
<td colspan="3">{{ object.fd_pssc }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<p>Tests at 'Worst Case' points (at least 1 point required)</p>
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="text-center">Test</th>
|
||||||
|
<th scope="col" class="text-center">Point 1</th>
|
||||||
|
<th scope="col" class="text-center">Point 2</th>
|
||||||
|
<th scope="col" class="text-center">Point 3</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{ object|help_text:'w1_description'|safe}}</th>
|
||||||
|
<td>{{ object.w1_description }}</td>
|
||||||
|
<td>{{ object.w2_description|default:'' }}</td>
|
||||||
|
<td>{{ object.w3_description|default:'' }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{ object|help_text:'w1_polarity'|safe}}</th>
|
||||||
|
<td>{{ object.w1_polarity|yesnoi }}</td>
|
||||||
|
<td>{{ object.w2_polarity|default:''|yesnoi }}</td>
|
||||||
|
<td>{{ object.w3_polarity|default:''|yesnoi }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{ object|help_text:'w1_voltage'|safe}}</th>
|
||||||
|
<td>{{ object.w1_voltage }}</td>
|
||||||
|
<td>{{ object.w2_voltage|default:'' }}</td>
|
||||||
|
<td>{{ object.w3_voltage|default:'' }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{ object|help_text:'w1_earth_fault'|safe}}</th>
|
||||||
|
<td>{{ object.w1_earth_fault }}</td>
|
||||||
|
<td>{{ object.w2_earth_fault|default:'' }}</td>
|
||||||
|
<td>{{ object.w3_earth_fault|default:'' }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<dl class="row">
|
||||||
|
<dt class="col-10">{{ object|help_text:'all_rcds_tested'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.all_rcds_tested|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
<dt class="col-10">{{ object|help_text:'public_sockets_tested'|safe }}</dt>
|
||||||
|
<dd class="col-2">
|
||||||
|
{{ object.public_sockets_tested|yesnoi }}
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<hr>
|
||||||
|
{% include 'partials/ec_power_info.html' %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 text-right">
|
||||||
|
{% button 'edit' url='ec_edit' pk=object.pk %}
|
||||||
|
{% button 'view' url='event_detail' pk=object.pk text="Event" %}
|
||||||
|
{% include 'partials/review_status.html' with perm=perms.RIGS.review_eventchecklist review='ec_review' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-12 text-right">
|
||||||
|
{% include 'partials/last_edited.html' with target="eventchecklist_history" %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
191
RIGS/templates/hs/power_form.html
Normal file
191
RIGS/templates/hs/power_form.html
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
{% extends request.is_ajax|yesno:'base_ajax.html,base_rigs.html' %}
|
||||||
|
{% load widget_tweaks %}
|
||||||
|
{% load static %}
|
||||||
|
{% load help_text from filters %}
|
||||||
|
{% load profile_by_index from filters %}
|
||||||
|
{% load button from filters %}
|
||||||
|
|
||||||
|
{% block css %}
|
||||||
|
{{ block.super }}
|
||||||
|
<link rel="stylesheet" href="{% static 'css/selects.css' %}"/>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block preload_js %}
|
||||||
|
{{ block.super }}
|
||||||
|
<script src="{% static 'js/selects.js' %}"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
|
{{ block.super }}
|
||||||
|
<script src="{% static 'js/autocompleter.js' %}"></script>
|
||||||
|
<script src="{% static 'js/tooltip.js' %}"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="col-12">
|
||||||
|
{% include 'form_errors.html' %}
|
||||||
|
{% if edit %}
|
||||||
|
<form role="form" method="POST" action="{% url 'pt_edit' pk=object.pk %}">
|
||||||
|
{% else %}
|
||||||
|
<form role="form" method="POST" action="{% url 'event_pt' pk=event.pk %}">
|
||||||
|
{% endif %}
|
||||||
|
<input type="hidden" name="{{ form.event.name }}" id="{{ form.event.id_for_label }}"
|
||||||
|
value="{{event.pk}}"/>
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">Event Information</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<dl class="row">
|
||||||
|
<dt class="col-4">Event Date</dt>
|
||||||
|
<dd class="col-8">{{ event.start_date}}{%if event.end_date %}-{{ event.end_date}}{%endif%}</dd>
|
||||||
|
<dt class="col-4">Event Name</dt>
|
||||||
|
<dd class="col-8">{{ event.name }}</dd>
|
||||||
|
<dt class="col-4">Client</dt>
|
||||||
|
<dd class="col-8">{{ event.person }}</dd>
|
||||||
|
<dt class="col-4">Event Size</dt>
|
||||||
|
<dd class="col-8">{% include 'partials/event_size.html' with object=event.riskassessment %}</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="form-group form-row" id="{{ form.venue.id_for_label }}-group">
|
||||||
|
<label for="{{ form.venue.id_for_label }}"
|
||||||
|
class="col-4 col-form-label">{{ form.venue.label }}</label>
|
||||||
|
<select id="{{ form.venue.id_for_label }}" name="{{ form.venue.name }}" class="form-control selectpicker col-8" data-live-search="true" data-sourceurl="{% url 'api_secure' model='venue' %}">
|
||||||
|
{% if venue %}
|
||||||
|
<option value="{{venue.pk}}" selected="selected">{{ venue.name }}</option>
|
||||||
|
{% elif event.venue %}
|
||||||
|
<option value="{{event.venue.pk}}" selected="selected">{{ event.venue.name }}</option>
|
||||||
|
{% endif %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label for="{{ form.notes.id_for_label }}">Notes</label>
|
||||||
|
{% render_field form.notes class+="form-control" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if event.riskassessment.event_size == 0 %}
|
||||||
|
<div class="row my-3" id="size-0">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card border-success">
|
||||||
|
<div class="card-header">Electrical Checks <small>for ‘Small’ TEC Events <6kVA (approx. 26A)</small></div>
|
||||||
|
<div class="card-body">
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.rcds %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.supply_test %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.earthing %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.pat %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="row my-3" id="size-1">
|
||||||
|
<div class="col-12">
|
||||||
|
{% if event.riskassessment.event_size == 1 %}
|
||||||
|
<div class="card border-warning">
|
||||||
|
<div class="card-header">Electrical Checks <small>for ‘Medium’ TEC Events </small></div>
|
||||||
|
<div class="card-body">
|
||||||
|
{% else %}
|
||||||
|
<div class="card border-danger">
|
||||||
|
<div class="card-header">Electrical Checks <small>for ‘Large’ TEC Events</small></div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="alert alert-danger"><strong>Here be dragons. Ensure you have appeased the Power Gods before continuing... (If you didn't check with a Supervisor, <em>you cannot continue your event!</em>)</strong></div>
|
||||||
|
{% endif %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.source_rcd %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.labelling %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.earthing %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.pat %}
|
||||||
|
<hr>
|
||||||
|
<p>Tests at first distro</p>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered table-sm">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="text-center">Test</th>
|
||||||
|
<th scope="col" colspan="3" class="text-center">Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row" rowspan="2">Voltage<br><small>(cube meter)</small></th>
|
||||||
|
<th class="text-center">{{ form.fd_voltage_l1.help_text }}</th>
|
||||||
|
<th class="text-center">{{ form.fd_voltage_l2.help_text }}</th>
|
||||||
|
<th class="text-center">{{ form.fd_voltage_l3.help_text }}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{% render_field form.fd_voltage_l1 class+="form-control" style="min-width: 5rem;" %}</td>
|
||||||
|
<td>{% render_field form.fd_voltage_l2 class+="form-control" style="min-width: 5rem;" %}</td>
|
||||||
|
<td>{% render_field form.fd_voltage_l3 class+="form-control" style="min-width: 5rem;" %}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{form.fd_phase_rotation.help_text|safe}}</th>
|
||||||
|
<td colspan="3">{% include 'partials/checklist_checkbox.html' with formitem=form.fd_phase_rotation %}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{form.fd_earth_fault.help_text|safe}}</th>
|
||||||
|
<td colspan="3">{% render_field form.fd_earth_fault class+="form-control" %}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{form.fd_pssc.help_text|safe}}</th>
|
||||||
|
<td colspan="3">{% render_field form.fd_pssc class+="form-control" %}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<p>Tests at 'Worst Case' points (at least 1 point required)</p>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="text-center">Test</th>
|
||||||
|
<th scope="col" class="text-center">Point 1</th>
|
||||||
|
<th scope="col" class="text-center">Point 2</th>
|
||||||
|
<th scope="col" class="text-center">Point 3</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{form.w1_description.help_text|safe}}</th>
|
||||||
|
<td>{% render_field form.w1_description class+="form-control" style="min-width: 5rem;" %}</td>
|
||||||
|
<td>{% render_field form.w2_description class+="form-control" style="min-width: 5rem;" %}</td>
|
||||||
|
<td>{% render_field form.w3_description class+="form-control" style="min-width: 5rem;" %}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{form.w1_polarity.help_text|safe}}</th>
|
||||||
|
<td>{% render_field form.w1_polarity %}</td>
|
||||||
|
<td>{% render_field form.w2_polarity %}</td>
|
||||||
|
<td>{% render_field form.w3_polarity %}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{form.w1_voltage.help_text|safe}}</th>
|
||||||
|
<td>{% render_field form.w1_voltage class+="form-control" %}</td>
|
||||||
|
<td>{% render_field form.w2_voltage class+="form-control" %}</td>
|
||||||
|
<td>{% render_field form.w3_voltage class+="form-control" %}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{{form.w1_earth_fault.help_text|safe}}</th>
|
||||||
|
<td>{% render_field form.w1_earth_fault class+="form-control" %}</td>
|
||||||
|
<td>{% render_field form.w2_earth_fault class+="form-control" %}</td>
|
||||||
|
<td>{% render_field form.w3_earth_fault class+="form-control" %}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.all_rcds_tested %}
|
||||||
|
{% include 'partials/checklist_checkbox.html' with formitem=form.public_sockets_tested %}
|
||||||
|
{% include 'partials/ec_power_info.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-sm-12 text-right">
|
||||||
|
{% button 'submit' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@@ -47,6 +47,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><strong>Voltage Drop on Circuit:</strong> 5% (approx. 12v)</p>
|
<p><strong>Voltage Drop on Circuit:</strong> ≤5% (approx. 12v)</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,10 +10,18 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<h5>Event Checklists:</h5>
|
<h5>Event Checklists:</h5>
|
||||||
{% for checklist in event.checklists.all %}
|
{% for checklist in event.checklists.all %}
|
||||||
{% include 'partials/hs_status.html' with event=event object=checklist view='ec_detail' edit='ec_edit' create='event_ec' review='ec_review' perm=perms.RIGS.review_eventchecklist %}
|
{% include 'partials/hs_status.html' with event=event object=checklist view='ec_detail' edit='ec_edit' create='event_ec' review='ec_review' perm=perms.RIGS.review_eventchecklist %}
|
||||||
<br/>
|
<br/>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<a href="{% url 'event_ec' event.pk %}" class="btn btn-info mt-2"><span class="fas fa-paperclip"></span> <span
|
<a href="{% url 'event_ec' event.pk %}" class="btn btn-info mt-2"><span class="fas fa-paperclip"></span> <span
|
||||||
class="hidden-xs">Create</span></a>
|
class="hidden-xs">Create</span></a>
|
||||||
|
<hr>
|
||||||
|
<h5>Power Test Records:</h5>
|
||||||
|
{% for record in event.power_tests.all %}
|
||||||
|
{% include 'partials/hs_status.html' with event=event object=record view='pt_detail' edit='pt_edit' create='event_pt' review='pt_review' perm=perms.RIGS.review_power %}
|
||||||
|
<br/>
|
||||||
|
{% endfor %}
|
||||||
|
<a href="{% url 'event_pt' event.pk %}" class="btn btn-info mt-2"><span class="fas fa-paperclip"></span> <span
|
||||||
|
class="hidden-xs">Create</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
17
RIGS/urls.py
17
RIGS/urls.py
@@ -81,8 +81,8 @@ urlpatterns = [
|
|||||||
name='ra_edit'),
|
name='ra_edit'),
|
||||||
path('event/ra/list', permission_required_with_403('RIGS.view_riskassessment')(views.EventRiskAssessmentList.as_view()),
|
path('event/ra/list', permission_required_with_403('RIGS.view_riskassessment')(views.EventRiskAssessmentList.as_view()),
|
||||||
name='ra_list'),
|
name='ra_list'),
|
||||||
path('event/ra/<int:pk>/review/', permission_required_with_403('RIGS.review_riskassessment')(views.EventRiskAssessmentReview.as_view()),
|
path('event/ra/<int:pk>/review/', permission_required_with_403('RIGS.review_riskassessment')(views.MarkReviewed.as_view()),
|
||||||
name='ra_review'),
|
name='ra_review', kwargs={'model': 'RiskAssessment'}),
|
||||||
path('event/ra/<int:pk>/print/', permission_required_with_403('RIGS.view_riskassessment')(views.RAPrint.as_view()), name='ra_print'),
|
path('event/ra/<int:pk>/print/', permission_required_with_403('RIGS.view_riskassessment')(views.RAPrint.as_view()), name='ra_print'),
|
||||||
|
|
||||||
path('event/<int:pk>/checklist/', permission_required_with_403('RIGS.add_eventchecklist')(views.EventChecklistCreate.as_view()),
|
path('event/<int:pk>/checklist/', permission_required_with_403('RIGS.add_eventchecklist')(views.EventChecklistCreate.as_view()),
|
||||||
@@ -93,8 +93,17 @@ urlpatterns = [
|
|||||||
name='ec_edit'),
|
name='ec_edit'),
|
||||||
path('event/checklist/list', permission_required_with_403('RIGS.view_eventchecklist')(views.EventChecklistList.as_view()),
|
path('event/checklist/list', permission_required_with_403('RIGS.view_eventchecklist')(views.EventChecklistList.as_view()),
|
||||||
name='ec_list'),
|
name='ec_list'),
|
||||||
path('event/checklist/<int:pk>/review/', permission_required_with_403('RIGS.review_eventchecklist')(views.EventChecklistReview.as_view()),
|
path('event/checklist/<int:pk>/review/', permission_required_with_403('RIGS.review_eventchecklist')(views.MarkReviewed.as_view()),
|
||||||
name='ec_review'),
|
name='ec_review', kwargs={'model': 'EventChecklist'}),
|
||||||
|
|
||||||
|
path('event/<int:pk>/power/', permission_required_with_403('RIGS.add_powertestrecord')(views.PowerTestCreate.as_view()),
|
||||||
|
name='event_pt'),
|
||||||
|
path('event/power/<int:pk>/', login_required(views.PowerTestDetail.as_view()),
|
||||||
|
name='pt_detail'),
|
||||||
|
path('event/power/<int:pk>/edit/', permission_required_with_403('RIGS.change_powertestrecord')(views.PowerTestEdit.as_view()),
|
||||||
|
name='pt_edit'),
|
||||||
|
path('event/power/<int:pk>/review/', permission_required_with_403('RIGS.review_power')(views.MarkReviewed.as_view()),
|
||||||
|
name='pt_review', kwargs={'model': 'PowerTestRecord'}),
|
||||||
|
|
||||||
# Finance
|
# Finance
|
||||||
path('invoice/', permission_required_with_403('RIGS.view_invoice')(views.InvoiceIndex.as_view()),
|
path('invoice/', permission_required_with_403('RIGS.view_invoice')(views.InvoiceIndex.as_view()),
|
||||||
|
|||||||
137
RIGS/views/hs.py
137
RIGS/views/hs.py
@@ -1,3 +1,4 @@
|
|||||||
|
from django.apps import apps
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
@@ -10,7 +11,35 @@ from RIGS.views.rigboard import get_related
|
|||||||
from PyRIGS.views import PrintView
|
from PyRIGS.views import PrintView
|
||||||
|
|
||||||
|
|
||||||
class EventRiskAssessmentCreate(generic.CreateView):
|
class HSCreateView(generic.CreateView):
|
||||||
|
def get_form(self, **kwargs):
|
||||||
|
form = super().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().get_context_data(**kwargs)
|
||||||
|
epk = self.kwargs.get('pk')
|
||||||
|
event = models.Event.objects.get(pk=epk)
|
||||||
|
context['event'] = event
|
||||||
|
context['page_title'] = f'Create {self} for Event {event.display_id}'
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class MarkReviewed(generic.View):
|
||||||
|
def get(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 HttpResponseRedirect(reverse_lazy('hs_list'))
|
||||||
|
|
||||||
|
|
||||||
|
class EventRiskAssessmentCreate(HSCreateView):
|
||||||
model = models.RiskAssessment
|
model = models.RiskAssessment
|
||||||
template_name = 'hs/risk_assessment_form.html'
|
template_name = 'hs/risk_assessment_form.html'
|
||||||
form_class = forms.EventRiskAssessmentForm
|
form_class = forms.EventRiskAssessmentForm
|
||||||
@@ -27,22 +56,6 @@ class EventRiskAssessmentCreate(generic.CreateView):
|
|||||||
|
|
||||||
return super(EventRiskAssessmentCreate, self).get(self)
|
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
|
|
||||||
context['page_title'] = f'Create Risk Assessment for Event {event.display_id}'
|
|
||||||
get_related(context['form'], context)
|
|
||||||
return context
|
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk})
|
return reverse_lazy('ra_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
@@ -98,18 +111,6 @@ class EventRiskAssessmentList(generic.ListView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class EventRiskAssessmentReview(generic.View):
|
|
||||||
def get(self, *args, **kwargs):
|
|
||||||
rpk = kwargs.get('pk')
|
|
||||||
ra = models.RiskAssessment.objects.get(pk=rpk)
|
|
||||||
with reversion.create_revision():
|
|
||||||
reversion.set_user(self.request.user)
|
|
||||||
ra.reviewed_by = self.request.user
|
|
||||||
ra.reviewed_at = timezone.now()
|
|
||||||
ra.save()
|
|
||||||
return HttpResponseRedirect(reverse_lazy('ra_list'))
|
|
||||||
|
|
||||||
|
|
||||||
class EventChecklistDetail(generic.DetailView):
|
class EventChecklistDetail(generic.DetailView):
|
||||||
model = models.EventChecklist
|
model = models.EventChecklist
|
||||||
template_name = 'hs/event_checklist_detail.html'
|
template_name = 'hs/event_checklist_detail.html'
|
||||||
@@ -143,7 +144,7 @@ class EventChecklistEdit(generic.UpdateView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class EventChecklistCreate(generic.CreateView):
|
class EventChecklistCreate(HSCreateView):
|
||||||
model = models.EventChecklist
|
model = models.EventChecklist
|
||||||
template_name = 'hs/event_checklist_form.html'
|
template_name = 'hs/event_checklist_form.html'
|
||||||
form_class = forms.EventChecklistForm
|
form_class = forms.EventChecklistForm
|
||||||
@@ -162,21 +163,6 @@ class EventChecklistCreate(generic.CreateView):
|
|||||||
|
|
||||||
return super(EventChecklistCreate, self).get(self)
|
return super(EventChecklistCreate, self).get(self)
|
||||||
|
|
||||||
def get_form(self, **kwargs):
|
|
||||||
form = super(EventChecklistCreate, 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(EventChecklistCreate, self).get_context_data(**kwargs)
|
|
||||||
epk = self.kwargs.get('pk')
|
|
||||||
event = models.Event.objects.get(pk=epk)
|
|
||||||
context['event'] = event
|
|
||||||
context['page_title'] = f'Create Event Checklist for Event {event.display_id}'
|
|
||||||
return context
|
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk})
|
return reverse_lazy('ec_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
@@ -199,16 +185,59 @@ class EventChecklistList(generic.ListView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class EventChecklistReview(generic.View):
|
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_lazy('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):
|
def get(self, *args, **kwargs):
|
||||||
rpk = kwargs.get('pk')
|
epk = kwargs.get('pk')
|
||||||
ec = models.EventChecklist.objects.get(pk=rpk)
|
event = models.Event.objects.get(pk=epk)
|
||||||
with reversion.create_revision():
|
|
||||||
reversion.set_user(self.request.user)
|
# Check if RA exists
|
||||||
ec.reviewed_by = self.request.user
|
ra = models.RiskAssessment.objects.filter(event=event).first()
|
||||||
ec.reviewed_at = timezone.now()
|
|
||||||
ec.save()
|
if ra is None:
|
||||||
return HttpResponseRedirect(reverse_lazy('ec_list'))
|
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 super().get(self)
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
return reverse_lazy('pt_detail', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
|
|
||||||
class HSList(generic.ListView):
|
class HSList(generic.ListView):
|
||||||
|
|||||||
Reference in New Issue
Block a user