- N{{ object.pk|stringformat:"05d" }}: '{{ object.name }}'
+ N{{ object.pk|stringformat:"05d" }}: '{{ object.name }}'
{{object.start_date|date:"D jS N Y"}}
diff --git a/RIGS/templates/hs_list.html b/RIGS/templates/hs_list.html
deleted file mode 100644
index 221eecd2..00000000
--- a/RIGS/templates/hs_list.html
+++ /dev/null
@@ -1,52 +0,0 @@
-{% extends 'base_rigs.html' %}
-{% load paginator from filters %}
-{% load button from filters %}
-
-{% block content %}
-
-
-
-
- | Event |
- MIC |
- Dates |
- RA |
- Checklists |
-
-
-
- {% for event in object_list %}
-
- {{ event }} {{ event.get_status_display }} |
- {% if event.mic is not None %}{% else %}{% endif %}{{ event.mic }}{% if event.mic is not None %}{% else %}{%endif%} |
-
-
- {{ event.start_date|date:"D d/m/Y" }}
- {% if event.end_date and event.end_date != event.start_date %}
- {{ event.end_date|date:"D d/m/Y" }}
- {% endif %}
- |
- {% include 'partials/hs_status.html' with event=event object=event.riskassessment view='ra_detail' edit='ra_edit' create='event_ra' review='ra_review' perm=perms.RIGS.review_riskassessment %} |
-
- {% 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 %}
-
- {% endfor %}
- Create
- |
-
- {% empty %}
-
- | No events found |
-
- {% endfor %}
-
-
- {% if is_paginated %}
-
- {% paginator %}
-
- {% endif %}
-
-{% endblock %}
diff --git a/RIGS/templates/hs_object_list.html b/RIGS/templates/hs_object_list.html
deleted file mode 100644
index c3ebaf4d..00000000
--- a/RIGS/templates/hs_object_list.html
+++ /dev/null
@@ -1,59 +0,0 @@
-{% extends 'base_rigs.html' %}
-{% load paginator from filters %}
-{% load help_text from filters %}
-{% load verbose_name from filters %}
-{% load get_field from filters %}
-
-{% block title %}{{ title }} List{% endblock %}
-
-{% block content %}
-
-
-
-
-
-
-
- | Event |
- {# mmm hax #}
- {% if object_list.0 != None %}
- {% for field in object_list.0.fieldz %}
- {{ object_list.0|verbose_name:field|title }} |
- {% endfor %}
- {% endif %}
- |
-
-
-
- {% for object in object_list %}
-
- {# General #}
- {{ object.event }} {{ object.event.get_status_display }} |
- {% for field in object_list.0.fieldz %}
- {{ object|get_field:field }} |
- {% endfor %}
- {# Buttons #}
-
- {% include 'partials/hs_status.html' %}
- |
-
- {% empty %}
-
- | Nothing found |
-
- {% endfor %}
-
-
-
-
-
- {% if is_paginated %}
-
- {% paginator %}
-
- {% endif %}
-{% endblock %}
diff --git a/RIGS/templates/partials/event_status.html b/RIGS/templates/partials/event_status.html
index bc0e9579..cb93b8d3 100644
--- a/RIGS/templates/partials/event_status.html
+++ b/RIGS/templates/partials/event_status.html
@@ -16,7 +16,7 @@
{% endif %}
{% if not event.dry_hire %}
{% if event.riskassessment %}
- RA: {%if event.riskassessment.reviewed_by%}{%endif%}
+ RA:
{% else %}
RA:
{% endif %}
diff --git a/RIGS/templates/risk_assessment_detail.html b/RIGS/templates/risk_assessment_detail.html
deleted file mode 100644
index df9f1e6f..00000000
--- a/RIGS/templates/risk_assessment_detail.html
+++ /dev/null
@@ -1,167 +0,0 @@
-{% extends request.is_ajax|yesno:"base_ajax.html,base_rigs.html" %}
-{% load help_text from filters %}
-{% load yesnoi from filters %}
-{% load linkornone from filters %}
-
-{% block content %}
-
-
-
-
-
-
- - {{ object|help_text:'nonstandard_equipment'|safe }}
- -
- {{ object.nonstandard_equipment|yesnoi:'invert' }}
-
- - {{ object|help_text:'nonstandard_use'|safe }}
- -
- {{ object.nonstandard_use|yesnoi:'invert' }}
-
- - {{ object|help_text:'contractors'|safe }}
- -
- {{ object.contractors|yesnoi:'invert' }}
-
- - {{ object|help_text:'other_companies'|safe }}
- -
- {{ object.other_companies|yesnoi:'invert' }}
-
- - {{ object|help_text:'crew_fatigue' }}
- -
- {{ object.crew_fatigue|yesnoi:'invert' }}
-
- - {{ object|help_text:'general_notes' }}
- -
- {{ object.general_notes|default:'N/A'|linebreaks }}
-
-
-
-
-
-
-
-
- - {{ object|help_text:'big_power' }}
- -
- {{ object.big_power|yesnoi:'invert' }}
-
- - {{ object|help_text:'power_mic'|safe }}
- -
- {{ object.power_mic.name|default:'None' }}
-
- - {{ object|help_text:'outside' }}
- -
- {{ object.outside|yesnoi:'invert' }}
-
- - {{ object|help_text:'generators' }}
- -
- {{ object.generators|yesnoi:'invert' }}
-
- - {{ object|help_text:'other_companies_power' }}
- -
- {{ object.other_companies_power|yesnoi:'invert' }}
-
- - {{ object|help_text:'nonstandard_equipment_power' }}
- -
- {{ object.nonstandard_equipment_power|yesnoi:'invert' }}
-
- - {{ object|help_text:'multiple_electrical_environments' }}
- -
- {{ object.multiple_electrical_environments|yesnoi:'invert' }}
-
- - {{ object|help_text:'power_notes' }}
- -
- {{ object.power_notes|default:'N/A'|linebreaks }}
-
- - {{ object|help_text:'power_plan'|safe }}
- -
- {{ object.power_plan|linkornone }}
-
-
-
-
-
-
-
-
- - {{ object|help_text:'noise_monitoring' }}
- -
- {{ object.noise_monitoring|yesnoi:'invert' }}
-
- - {{ object|help_text:'sound_notes' }}
- -
- {{ object.sound_notes|default:'N/A'|linebreaks }}
-
-
-
-
-
-
-
-
-
-
- - {{ object|help_text:'known_venue' }}
- -
- {{ object.known_venue|yesnoi:'invert' }}
-
- - {{ object|help_text:'safe_loading'|safe }}
- -
- {{ object.safe_loading|yesnoi:'invert' }}
-
- - {{ object|help_text:'safe_storage' }}
- -
- {{ object.safe_storage|yesnoi:'invert' }}
-
- - {{ object|help_text:'area_outside_of_control' }}
- -
- {{ object.area_outside_of_control|yesnoi:'invert' }}
-
- - {{ object|help_text:'barrier_required' }}
- -
- {{ object.barrier_required|yesnoi:'invert' }}
-
- - {{ object|help_text:'nonstandard_emergency_procedure' }}
- -
- {{ object.nonstandard_emergency_procedure|yesnoi:'invert' }}
-
-
-
-
-
-
-
-
-
-
- - {{ object|help_text:'special_structures' }}
- -
- {{ object.special_structures|yesnoi:'invert' }}
-
- - {{ object|help_text:'suspended_structures' }}
- -
- {{ object.suspended_structures|yesnoi:'invert' }}
-
- - {{ object|help_text:'persons_responsible_structures' }}
- -
- {{ object.persons_responsible_structures.name|default:'N/A'|linebreaks }}
-
- - {{ object|help_text:'rigging_plan'|safe }}
- -
- {{ object.rigging_plan|linkornone|default:'N/A' }}
-
-
-
-
-
-
-
-
- Edit
- View Event
- {{ object.review_string|safe }}
- {% include 'partials/last_edited.html' with target="riskassessment_history" %}
-
-
-{% endblock %}
diff --git a/RIGS/templates/risk_assessment_form.html b/RIGS/templates/risk_assessment_form.html
deleted file mode 100644
index 28184cd3..00000000
--- a/RIGS/templates/risk_assessment_form.html
+++ /dev/null
@@ -1,176 +0,0 @@
-{% extends request.is_ajax|yesno:'base_ajax.html,base_rigs.html' %}
-{% load widget_tweaks %}
-{% load static %}
-{% load help_text from filters %}
-{% load nice_errors from filters %}
-
-{% block css %}
-
-{% endblock %}
-
-{% block preload_js %}
-
-{% endblock %}
-
-{% block js %}
-
-
-
-
-{% endblock %}
-
-{% block content %}
-
- {% if form.errors %}
-
-
-
- {% with form|nice_errors as qq %}
- {% for error_name,desc in qq.items %}
- {% if error_name == 'General form errors' %}
- {{ form.non_field_errors.0|safe }}
-
- {% render_field form.supervisor_consulted class+="form-check-input" form="form" %}
-
-
- {% else %}
-
- - {{error_name}}
- - {{desc}}
-
- {% endif %}
- {% endfor %}
- {% endwith %}
-
-
- {% endif %}
- {% if edit %}
-
-
-{% endblock %}
diff --git a/RIGS/urls.py b/RIGS/urls.py
index fe724c88..b67e3c93 100644
--- a/RIGS/urls.py
+++ b/RIGS/urls.py
@@ -83,6 +83,7 @@ urlpatterns = [
name='ra_list'),
path('event/ra//review/', permission_required_with_403('RIGS.review_riskassessment')(views.EventRiskAssessmentReview.as_view()),
name='ra_review'),
+ path('event/ra//print/', permission_required_with_403('RIGS.view_riskassessment')(views.RAPrint.as_view()), name='ra_print'),
path('event//checklist/', permission_required_with_403('RIGS.add_eventchecklist')(views.EventChecklistCreate.as_view()),
name='event_ec'),
diff --git a/RIGS/views/hs.py b/RIGS/views/hs.py
index c9b69bda..cc9dffa2 100644
--- a/RIGS/views/hs.py
+++ b/RIGS/views/hs.py
@@ -12,7 +12,7 @@ from PyRIGS.views import PrintView
class EventRiskAssessmentCreate(generic.CreateView):
model = models.RiskAssessment
- template_name = 'risk_assessment_form.html'
+ template_name = 'hs/risk_assessment_form.html'
form_class = forms.EventRiskAssessmentForm
def get(self, *args, **kwargs):
@@ -49,7 +49,7 @@ class EventRiskAssessmentCreate(generic.CreateView):
class EventRiskAssessmentEdit(generic.UpdateView):
model = models.RiskAssessment
- template_name = 'risk_assessment_form.html'
+ template_name = 'hs/risk_assessment_form.html'
form_class = forms.EventRiskAssessmentForm
def get_success_url(self):
@@ -72,7 +72,7 @@ class EventRiskAssessmentEdit(generic.UpdateView):
class EventRiskAssessmentDetail(generic.DetailView):
model = models.RiskAssessment
- template_name = 'risk_assessment_detail.html'
+ template_name = 'hs/risk_assessment_detail.html'
def get_context_data(self, **kwargs):
context = super(EventRiskAssessmentDetail, self).get_context_data(**kwargs)
@@ -83,7 +83,7 @@ class EventRiskAssessmentDetail(generic.DetailView):
class EventRiskAssessmentList(generic.ListView):
paginate_by = 20
model = models.RiskAssessment
- template_name = 'hs_object_list.html'
+ template_name = 'hs/hs_object_list.html'
def get_queryset(self):
return self.model.objects.exclude(event__status=models.Event.CANCELLED).order_by('reviewed_at').select_related('event')
@@ -112,7 +112,7 @@ class EventRiskAssessmentReview(generic.View):
class EventChecklistDetail(generic.DetailView):
model = models.EventChecklist
- template_name = 'event_checklist_detail.html'
+ template_name = 'hs/event_checklist_detail.html'
def get_context_data(self, **kwargs):
context = super(EventChecklistDetail, self).get_context_data(**kwargs)
@@ -122,7 +122,7 @@ class EventChecklistDetail(generic.DetailView):
class EventChecklistEdit(generic.UpdateView):
model = models.EventChecklist
- template_name = 'event_checklist_form.html'
+ template_name = 'hs/event_checklist_form.html'
form_class = forms.EventChecklistForm
def get_success_url(self):
@@ -145,7 +145,7 @@ class EventChecklistEdit(generic.UpdateView):
class EventChecklistCreate(generic.CreateView):
model = models.EventChecklist
- template_name = 'event_checklist_form.html'
+ template_name = 'hs/event_checklist_form.html'
form_class = forms.EventChecklistForm
# From both business logic and programming POVs, RAs must exist before ECs!
@@ -184,7 +184,7 @@ class EventChecklistCreate(generic.CreateView):
class EventChecklistList(generic.ListView):
paginate_by = 20
model = models.EventChecklist
- template_name = 'hs_object_list.html'
+ template_name = 'hs/hs_object_list.html'
def get_queryset(self):
return self.model.objects.exclude(event__status=models.Event.CANCELLED).order_by('reviewed_at').select_related('event')
@@ -214,7 +214,7 @@ class EventChecklistReview(generic.View):
class HSList(generic.ListView):
paginate_by = 20
model = models.Event
- template_name = 'hs_list.html'
+ template_name = 'hs/hs_list.html'
def get_queryset(self):
return models.Event.objects.all().exclude(status=models.Event.CANCELLED).order_by('-start_date').select_related('riskassessment').prefetch_related('checklists')
@@ -227,3 +227,9 @@ class HSList(generic.ListView):
class RAPrint(PrintView):
model = models.RiskAssessment
+ template_name = 'hs/ra_print.xml'
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['filename'] = f"EventSpecificRiskAssessment_for_{context['object'].event.display_id}.pdf"
+ return context
diff --git a/RIGS/views/rigboard.py b/RIGS/views/rigboard.py
index 7aa7a149..327c9088 100644
--- a/RIGS/views/rigboard.py
+++ b/RIGS/views/rigboard.py
@@ -1,14 +1,9 @@
import copy
import datetime
import re
-import urllib.error
-import urllib.parse
-import urllib.request
-from io import BytesIO
-
import premailer
import simplejson
-from PyPDF2 import PdfFileMerger, PdfFileReader
+
from django.conf import settings
from django.contrib import messages
from django.contrib.staticfiles import finders
@@ -24,10 +19,9 @@ from django.urls import reverse_lazy
from django.utils import timezone
from django.utils.decorators import method_decorator
from django.views import generic
-from z3c.rml import rml2pdf
from PyRIGS import decorators
-from PyRIGS.views import OEmbedView, is_ajax, ModalURLMixin
+from PyRIGS.views import OEmbedView, is_ajax, ModalURLMixin, PrintView
from RIGS import models, forms
__author__ = 'ghost'
@@ -178,42 +172,16 @@ class EventDuplicate(EventUpdate):
return context
-class EventPrint(generic.View):
- def get(self, request, pk):
- object = get_object_or_404(models.Event, pk=pk)
- template = get_template('event_print.xml')
+class EventPrint(PrintView):
+ model = models.Event
+ template_name = 'event_print.xml'
+ append_terms = True
- merger = PdfFileMerger()
-
- user_str = f"by {request.user.name} " if request.user is not None else ""
- time = timezone.now().strftime('%d/%m/%Y %H:%I')
-
- name = re.sub(r'[^a-zA-Z0-9 \n\.]', '', object.name)
- filename = f"Event_{object.display_id}_{name}_{object.start_date}.pdf"
-
- context = {
- 'object': object,
- 'quote': True,
- 'current_user': request.user,
- 'filename': filename,
- 'info_string': f"[Paperwork generated {user_str}on {time} - {object.current_version_id}]",
- }
-
- rml = template.render(context)
- buffer = rml2pdf.parseString(rml)
- merger.append(PdfFileReader(buffer))
- buffer.close()
-
- terms = urllib.request.urlopen(settings.TERMS_OF_HIRE_URL)
- merger.append(BytesIO(terms.read()))
-
- merged = BytesIO()
- merger.write(merged)
-
- response = HttpResponse(content_type='application/pdf')
- response['Content-Disposition'] = f'filename="{filename}"'
- response.write(merged.getvalue())
- return response
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['quote'] = True
+ context['filename'] = f"Event_{context['object'].display_id}_{context['object_name']}_{context['object'].start_date}.pdf"
+ return context
class EventArchive(generic.ListView):
@@ -223,7 +191,6 @@ class EventArchive(generic.ListView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
-
context['start'] = self.request.GET.get('start', None)
context['end'] = self.request.GET.get('end', datetime.date.today().strftime('%Y-%m-%d'))
context['statuses'] = models.Event.EVENT_STATUS_CHOICES
|