mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-23 16:32:15 +00:00
Different approach to RA linking
This commit is contained in:
@@ -102,7 +102,7 @@ class CalendarICS(ICalFeed):
|
|||||||
return item.earliest_time
|
return item.earliest_time
|
||||||
|
|
||||||
def item_end_datetime(self, item):
|
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 + datetime.timedelta(days=1)
|
||||||
|
|
||||||
return item.latest_time
|
return item.latest_time
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 3.0.3 on 2020-05-28 16:51
|
# Generated by Django 3.0.3 on 2020-05-28 20:43
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
@@ -20,8 +20,6 @@ class Migration(migrations.Migration):
|
|||||||
name='RiskAssessment',
|
name='RiskAssessment',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
('created', models.DateTimeField(blank=True, null=True)),
|
|
||||||
('last_edited', models.DateTimeField(blank=True, null=True)),
|
|
||||||
('nonstandard_equipment', models.BooleanField(default=False)),
|
('nonstandard_equipment', models.BooleanField(default=False)),
|
||||||
('nonstandard_use', models.BooleanField(default=False)),
|
('nonstandard_use', models.BooleanField(default=False)),
|
||||||
('contractors', models.BooleanField(default=False)),
|
('contractors', models.BooleanField(default=False)),
|
||||||
@@ -45,13 +43,8 @@ class Migration(migrations.Migration):
|
|||||||
('special_structures', models.BooleanField(default=False)),
|
('special_structures', models.BooleanField(default=False)),
|
||||||
('persons_responsible_structures', models.TextField(blank=True, null=True)),
|
('persons_responsible_structures', models.TextField(blank=True, null=True)),
|
||||||
('suspended_structures', models.BooleanField(default=False)),
|
('suspended_structures', models.BooleanField(default=False)),
|
||||||
('completed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='completer', to=settings.AUTH_USER_MODEL, verbose_name='Completed By')),
|
('event', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='RIGS.Event')),
|
||||||
('power_mic', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='power_mic', to=settings.AUTH_USER_MODEL, verbose_name='Power MIC')),
|
('power_mic', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='power_mic', to=settings.AUTH_USER_MODEL, verbose_name='Power MIC')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
|
||||||
model_name='event',
|
|
||||||
name='risk_assessment',
|
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='RIGS.RiskAssessment'),
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
@@ -325,10 +325,7 @@ class Event(models.Model, RevisionMixin):
|
|||||||
auth_request_by = models.ForeignKey('Profile', null=True, blank=True, on_delete=models.CASCADE)
|
auth_request_by = models.ForeignKey('Profile', null=True, blank=True, on_delete=models.CASCADE)
|
||||||
auth_request_at = models.DateTimeField(null=True, blank=True)
|
auth_request_at = models.DateTimeField(null=True, blank=True)
|
||||||
auth_request_to = models.EmailField(null=True, blank=True)
|
auth_request_to = models.EmailField(null=True, blank=True)
|
||||||
|
|
||||||
# Risk assessment info
|
|
||||||
risk_assessment = models.ForeignKey('RiskAssessment', null=True, blank=True, on_delete=models.CASCADE)
|
|
||||||
|
|
||||||
# Calculated values
|
# Calculated values
|
||||||
"""
|
"""
|
||||||
EX Vat
|
EX Vat
|
||||||
@@ -574,11 +571,7 @@ class Payment(models.Model):
|
|||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
class RiskAssessment(models.Model):
|
class RiskAssessment(models.Model):
|
||||||
completed_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='completer', blank=True, null=True,
|
event = models.OneToOneField('Event', on_delete=models.CASCADE)
|
||||||
verbose_name="Completed By", on_delete=models.CASCADE)
|
|
||||||
created = models.DateTimeField(blank=True, null=True)
|
|
||||||
last_edited = models.DateTimeField(blank=True, null=True)
|
|
||||||
|
|
||||||
# General
|
# General
|
||||||
nonstandard_equipment = models.BooleanField(default=False)
|
nonstandard_equipment = models.BooleanField(default=False)
|
||||||
nonstandard_use = models.BooleanField(default=False)
|
nonstandard_use = models.BooleanField(default=False)
|
||||||
@@ -586,21 +579,21 @@ class RiskAssessment(models.Model):
|
|||||||
other_companies = models.BooleanField(default=False)
|
other_companies = models.BooleanField(default=False)
|
||||||
crew_fatigue = models.BooleanField(default=False)
|
crew_fatigue = models.BooleanField(default=False)
|
||||||
general_notes = models.TextField(blank=True, null=True)
|
general_notes = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
# Power
|
# Power
|
||||||
big_power = models.BooleanField(default=False)
|
big_power = models.BooleanField(default=False)
|
||||||
power_mic = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='power_mic', blank=True, null=True,
|
power_mic = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='power_mic', blank=True, null=True,
|
||||||
verbose_name="Power MIC", on_delete=models.CASCADE)
|
verbose_name="Power MIC", on_delete=models.CASCADE)
|
||||||
generators = models.BooleanField(default=False)
|
generators = models.BooleanField(default=False)
|
||||||
other_companies_power = models.BooleanField(default=False)
|
other_companies_power = models.BooleanField(default=False)
|
||||||
nonstandard_equipment_power = models.BooleanField(default=False)
|
nonstandard_equipment_power = models.BooleanField(default=False)
|
||||||
multiple_electrical_environments = models.BooleanField(default=False)
|
multiple_electrical_environments = models.BooleanField(default=False)
|
||||||
power_notes = models.TextField(blank=True, null=True)
|
power_notes = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
# Sound
|
# Sound
|
||||||
noise_monitoring = models.BooleanField(default=False)
|
noise_monitoring = models.BooleanField(default=False)
|
||||||
sound_notes = models.TextField(blank=True, null=True)
|
sound_notes = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
# Site
|
# Site
|
||||||
known_venue = models.BooleanField(default=False)
|
known_venue = models.BooleanField(default=False)
|
||||||
safe_loading = models.BooleanField(default=False)
|
safe_loading = models.BooleanField(default=False)
|
||||||
@@ -608,10 +601,10 @@ class RiskAssessment(models.Model):
|
|||||||
area_outside_of_control = models.BooleanField(default=False)
|
area_outside_of_control = models.BooleanField(default=False)
|
||||||
barrier_required = models.BooleanField(default=False)
|
barrier_required = models.BooleanField(default=False)
|
||||||
nonstandard_emergency_procedure = models.BooleanField(default=False)
|
nonstandard_emergency_procedure = models.BooleanField(default=False)
|
||||||
|
|
||||||
# Structures
|
# Structures
|
||||||
special_structures = models.BooleanField(default=False)
|
special_structures = models.BooleanField(default=False)
|
||||||
persons_responsible_structures = models.TextField(blank=True, null=True)
|
persons_responsible_structures = models.TextField(blank=True, null=True)
|
||||||
suspended_structures = models.BooleanField(default=False)
|
suspended_structures = models.BooleanField(default=False)
|
||||||
|
|
||||||
# Blimey that was a lot of options
|
# Blimey that was a lot of options
|
||||||
|
|||||||
@@ -92,25 +92,17 @@ class EventRADetail(generic.DetailView):
|
|||||||
epk = self.kwargs.get(self.pk_url_kwarg)
|
epk = self.kwargs.get(self.pk_url_kwarg)
|
||||||
event = models.Event.objects.get(pk=epk)
|
event = models.Event.objects.get(pk=epk)
|
||||||
ra, created = models.RiskAssessment.objects.get_or_create(event=event)
|
ra, created = models.RiskAssessment.objects.get_or_create(event=event)
|
||||||
|
|
||||||
ra.event = event
|
|
||||||
|
|
||||||
if created:
|
|
||||||
ra.created = timezone.now()
|
|
||||||
|
|
||||||
return ra
|
return ra
|
||||||
|
|
||||||
|
|
||||||
class EventRAEdit(generic.UpdateView):
|
class EventRAEdit(generic.UpdateView):
|
||||||
model = models.RiskAssessment
|
model = models.RiskAssessment
|
||||||
template_name = 'risk_assessment_form.html'
|
template_name = 'risk_assessment_form.html'
|
||||||
form_class = forms.EventRiskAssessmentForm
|
form_class = forms.EventRiskAssessmentForm
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
ra = self.get_object()
|
return reverse_lazy('event_ra', kwargs={'pk': self.object.event.pk })
|
||||||
ra.completed_by = self.request.user
|
|
||||||
ra.last_edited = timezone.now()
|
|
||||||
ra.save()
|
|
||||||
return super().get_success_url()
|
|
||||||
|
|
||||||
class EventCreate(generic.CreateView):
|
class EventCreate(generic.CreateView):
|
||||||
model = models.Event
|
model = models.Event
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
<div class="row my-3 py-3">
|
<div class="row my-3 py-3">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<h3>Risk Assessment for Event N{{ object.event.pk|stringformat:"05d" }} {{ object.event.name }}</h3>
|
<h3>Risk Assessment for Event N{{ object.event.pk|stringformat:"05d" }} {{ object.event.name }}</h3>
|
||||||
<div class="col-sm">
|
<a href="{% url 'event_ra_edit' object.pk %}" class="btn btn-warning"><span class="fas fa-edit"></span> <span
|
||||||
|
class="hidden-xs">Edit</span></a>
|
||||||
<div class="card card-default mb-3">
|
<div class="card card-default mb-3">
|
||||||
<div class="card-header">Meta Details</div>
|
<div class="card-header">Meta Details</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@@ -27,5 +28,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-12 text-right">
|
||||||
|
{% include 'partials/last_edited.html' with target="ra_history" %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
11
RIGS/urls.py
11
RIGS/urls.py
@@ -84,10 +84,6 @@ urlpatterns = [
|
|||||||
name='event_oembed'),
|
name='event_oembed'),
|
||||||
path('event/<int:pk>/print/', permission_required_with_403('RIGS.view_event')(rigboard.EventPrint.as_view()),
|
path('event/<int:pk>/print/', permission_required_with_403('RIGS.view_event')(rigboard.EventPrint.as_view()),
|
||||||
name='event_print'),
|
name='event_print'),
|
||||||
path('event/<int:pk>/ra/', permission_required_with_403('RIGS.change_event')(rigboard.EventRADetail.as_view()),
|
|
||||||
name='event_ra'),
|
|
||||||
path('event/<int:pk>/ra/edit/', permission_required_with_403('RIGS.change_event')(rigboard.EventRAEdit.as_view()),
|
|
||||||
name='event_ra_edit'),
|
|
||||||
path('event/<int:pk>/edit/', permission_required_with_403('RIGS.change_event')(rigboard.EventUpdate.as_view()),
|
path('event/<int:pk>/edit/', permission_required_with_403('RIGS.change_event')(rigboard.EventUpdate.as_view()),
|
||||||
name='event_update'),
|
name='event_update'),
|
||||||
path('event/<int:pk>/duplicate/', permission_required_with_403('RIGS.add_event')(rigboard.EventDuplicate.as_view()),
|
path('event/<int:pk>/duplicate/', permission_required_with_403('RIGS.add_event')(rigboard.EventDuplicate.as_view()),
|
||||||
@@ -95,6 +91,13 @@ urlpatterns = [
|
|||||||
path('event/<int:pk>/history/',
|
path('event/<int:pk>/history/',
|
||||||
permission_required_with_403('RIGS.view_event')(versioning.VersionHistory.as_view()),
|
permission_required_with_403('RIGS.view_event')(versioning.VersionHistory.as_view()),
|
||||||
name='event_history', kwargs={'model': models.Event}),
|
name='event_history', kwargs={'model': models.Event}),
|
||||||
|
# Event H&S
|
||||||
|
path('event/<int:pk>/ra/', permission_required_with_403('RIGS.change_event')(rigboard.EventRADetail.as_view()),
|
||||||
|
name='event_ra'),
|
||||||
|
path('event/ra/<int:pk>/edit/', permission_required_with_403('RIGS.change_event')(rigboard.EventRAEdit.as_view()),
|
||||||
|
name='event_ra_edit'),
|
||||||
|
path('event/ra/<int:pk>/history/', permission_required_with_403('RIGS.change_event')(rigboard.EventRAEdit.as_view()),
|
||||||
|
name='ra_history', kwargs={'model': models.RiskAssessment}),
|
||||||
|
|
||||||
# Finance
|
# Finance
|
||||||
path('invoice/', permission_required_with_403('RIGS.view_invoice')(finance.InvoiceIndex.as_view()),
|
path('invoice/', permission_required_with_403('RIGS.view_invoice')(finance.InvoiceIndex.as_view()),
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ urlpatterns = [
|
|||||||
path('asset/search/', views.AssetSearch.as_view(), name='asset_search_json'),
|
path('asset/search/', views.AssetSearch.as_view(), name='asset_search_json'),
|
||||||
path('asset/id/<str:pk>/embed/',
|
path('asset/id/<str:pk>/embed/',
|
||||||
xframe_options_exempt(
|
xframe_options_exempt(
|
||||||
login_required(login_url='/user/login/embed/')(views.AssetEmbed.as_view())),
|
login_required(login_url='/user/login/embed/')(views.AssetEmbed.as_view())),
|
||||||
name='asset_embed'),
|
name='asset_embed'),
|
||||||
path('asset/id/<str:pk>/oembed_json/',
|
path('asset/id/<str:pk>/oembed_json/',
|
||||||
views.AssetOembed.as_view(),
|
views.AssetOembed.as_view(),
|
||||||
|
|||||||
Reference in New Issue
Block a user