From 9cf081efc7d65688f28dce5c700d747d7bc96c4c Mon Sep 17 00:00:00 2001 From: Arona Jones Date: Tue, 25 Aug 2020 16:00:19 +0100 Subject: [PATCH] Proof of concept for JSON parsing/storage \o/ --- RIGS/templates/event_checklist_detail.html | 69 ++++++++++++++++------ RIGS/templates/event_checklist_form.html | 25 ++++++-- RIGS/templatetags/filters.py | 18 ++++++ 3 files changed, 89 insertions(+), 23 deletions(-) diff --git a/RIGS/templates/event_checklist_detail.html b/RIGS/templates/event_checklist_detail.html index ff912528..102f77c3 100644 --- a/RIGS/templates/event_checklist_detail.html +++ b/RIGS/templates/event_checklist_detail.html @@ -1,6 +1,9 @@ {% extends request.is_ajax|yesno:"base_ajax.html,base_rigs.html" %} {% block title %}Risk Assessment for Event N{{ object.event.pk|stringformat:"05d" }} {{ object.event.name }}{% endblock %} {% load help_text from filters %} +{% load get_json_element from filters %} +{% load get_item from filters %} +{% load profile_by_index from filters %} {% block content %}
@@ -16,35 +19,63 @@
General
+
{{ object|help_text:'power_mic' }}
+
+ {{ object.power_mic.name }} +
+
+

{{ object|help_text:'vehicles' }}

+
    + {% for i in object.vehicles %} + +
  • Vehicle {{ object.vehicles|get_item:i|get_item:'vehicle'|default:'none' }} driven by {{ object.vehicles|get_item:i|get_item:'driver'|profile_by_index|default:'nobody'}}
  • + {% endfor %} +
+
+
+
+
Safety Checks
+
+
+
{{ object|help_text:'safe_parking'|safe }}
+
+ {{ object.safe_parking|yesno|title }} +
+
{{ object|help_text:'safe_packing'|safe }}
+
+ {{ object.safe_packing|yesno|title }} +
+
{{ object|help_text:'exits'|safe }}
+
+ {{ object.exits|yesno|title }} +
+
{{ object|help_text:'trip_hazard'|safe }}
+
+ {{ object.trip_hazard|yesno|title }} +
+
{{ object|help_text:'warning_signs'|safe }}
+
+ {{ object.warning_signs|yesno|title }} +
+
{{ object|help_text:'ear_plugs'|safe }}
+
+ {{ object.ear_plugs|yesno|title }} +
Power
+ {% if object.medium_event %} + Small Event + {% else %} + Medium Event + {% endif %}
-
-
Sound
-
-
-
-
-
-
-
Site Details
-
-
-
-
-
-
-
Structures
-
-
-
diff --git a/RIGS/templates/event_checklist_form.html b/RIGS/templates/event_checklist_form.html index 37822adb..bb797f00 100644 --- a/RIGS/templates/event_checklist_form.html +++ b/RIGS/templates/event_checklist_form.html @@ -2,6 +2,9 @@ {% load widget_tweaks %} {% load static %} {% load help_text from filters %} +{% load get_json_element from filters %} +{% load get_item from filters %} +{% load profile_by_index from filters %} {% block title %}{% if edit %}Edit{% else %}Create{% endif %} Event Checklist for Event N{{ event.pk|stringformat:"05d" }}{% endblock %} @@ -53,7 +56,18 @@ } }); $("form").submit(function( event ) { - $({{form.vehicles.id_for_label}}).val(JSON.stringify($('*[data-serialize]').serializeArray())); + // Mmmm Javascript data mangling... + var raw = $('*[data-serialize]').serializeArray(); + var post = raw.reduce(function (result, current) { + var index = current.name.split('_')[1]; + var name = current.name.split('_')[0]; + result[index] = result[index] || {}; + var nested = result[index] || {}; + nested[name] = current.value; + result[index] = nested; + return result; + }, {}); + $({{form.vehicles.id_for_label}}).val(JSON.stringify(post)); }); }); @@ -97,7 +111,7 @@
+ value="{{ form.vehicles.value }}" style="display: none"/> @@ -107,10 +121,13 @@ {% for i in '012'|make_list %} - - + + diff --git a/RIGS/templatetags/filters.py b/RIGS/templatetags/filters.py index 8f684ef5..14175f0f 100644 --- a/RIGS/templatetags/filters.py +++ b/RIGS/templatetags/filters.py @@ -6,6 +6,8 @@ from django.utils.text import normalize_newlines from django.template.defaultfilters import stringfilter from django.utils.safestring import SafeData, mark_safe from django.utils.html import escape +from RIGS import models +import json register = template.Library() @@ -126,3 +128,19 @@ def verbose_name(obj, field): @register.filter def get_list(dictionary, key): return dictionary.getlist(key) + + +@register.filter +def profile_by_index(value): + if(value): + return models.Profile.objects.get(pk=int(value)) + else: + return "" + +@register.filter +def get_json_element(value, element): + return json.loads(value)[element] + +@register.filter +def get_item(dictionary, key): + return dictionary.get(key)