From 5282266bce80cebc771d68046c67efa1af3c55e2 Mon Sep 17 00:00:00 2001 From: gaazzopa Date: Wed, 2 Dec 2020 21:18:03 +0100 Subject: [PATCH] Restructured lunch time validation --- cara/apps/calculator/static/js/form.js | 83 +++++++++---------- .../templates/calculator.form.html.j2 | 4 +- 2 files changed, 40 insertions(+), 47 deletions(-) diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js index 72d80711..41bd3ad8 100644 --- a/cara/apps/calculator/static/js/form.js +++ b/cara/apps/calculator/static/js/form.js @@ -4,13 +4,17 @@ function getChildElement(elem) { return $("#" + elem.data("enables")); } -function insertSpanAfter(referenceNode, text) { +function insertErrorSpanAfter(referenceNode, text) { var element = document.createElement("span"); + element.setAttribute("id", "error_text"); element.classList.add("red_text"); element.innerHTML = "  " + text; referenceNode.parentNode.insertBefore(element, referenceNode.nextSibling); } +function removeErrorSpanAfter(referenceNode) { +} + /* -------Required fields------- */ function require_fields(obj) { switch ($(obj).attr('id')) { @@ -333,7 +337,7 @@ function validate_form(form) { var activity_mins = parseTimeToMins(activity_finish.value) - parseTimeToMins(activity_start.value); if ((lunch_mins + coffee_mins) >= activity_mins) { - insertSpanAfter(button, "Length of breaks >= Length of activity"); + insertErrorSpanAfter(button, "Length of breaks >= Length of activity"); submit = false; } } @@ -347,7 +351,7 @@ function validateValue(obj) { if (!isNonZeroOrEmpty($(obj).val())) { $(obj).addClass("red_border"); - insertSpanAfter(obj, "Value must be > 0"); + insertErrorSpanAfter(obj, "Value must be > 0"); return false; } return true; @@ -366,7 +370,7 @@ function validateDate(obj) { if (!isValidDateOrEmpty($(obj).val())) { $(obj).addClass("red_border"); - insertSpanAfter(obj, "Incorrect date format"); + insertErrorSpanAfter(obj, "Incorrect date format"); return false; } return true; @@ -392,54 +396,49 @@ function validateFinishTime(obj) { if ($(finishObj).hasClass("finish_time_error")) { $(finishObj).removeClass("red_border finish_time_error"); - if (!$(finishObj).hasClass("lunch_break_error")) { - $(finishObj).next('span').remove(); - } + $(finishObj).next('span').remove(); } + //Check if finish time error (takes precedence over lunch break error) var startTime = parseValToNumber(startObj.value); var finishTime = parseValToNumber(finishObj.value); - //Check if finish time error (takes presedence over lunch break error) - if (startTime > finishTime) { + if (startTime >= finishTime) { $(finishObj).addClass("red_border finish_time_error"); $(finishObj).next('span').remove(); - insertSpanAfter(finishObj, "Finish time must be after start"); + insertErrorSpanAfter(finishObj, "Finish time must be after start"); return false; } - //If no finish time error -> Display any lunch break error - else { - $("input[required].lunch").each(function() {validateLunchBreak(this)}); - } return true; } -function validateLunchBreak(obj) { +function validateLunchBreak(lunchGroup) { + var lunchStartObj = $(".start_time[data-time-group='"+lunchGroup+"']")[0]; + var lunchFinishObj = $(".finish_time[data-time-group='"+lunchGroup+"']")[0]; + + //Skip if finish time error present (it takes precedence over lunch break error) + if ($(lunchStartObj).hasClass("finish_time_error") || $(lunchFinishObj).hasClass("finish_time_error")) + return true; + + $(lunchFinishObj).next('span').remove(); + var valid = validateLunchTime(lunchStartObj) & validateLunchTime(lunchFinishObj); + if (!valid) { + insertErrorSpanAfter(lunchFinishObj, "Lunch break must be within activity times"); + } + + return valid; +} + +//Check if exposed/infected lunch time within exposed/infected presence times +function validateLunchTime(obj) { + + var activityGroup = $(obj).data('lunch-for'); + var activityStart = parseValToNumber($(".start_time[data-time-group='"+activityGroup+"']")[0].value); + var activityFinish = parseValToNumber($(".finish_time[data-time-group='"+activityGroup+"']")[0].value); - var groupID = $(obj).data('time-group'); - var startObj = $(".start_time[data-time-group='"+groupID+"']")[0]; - var finishObj = $(".finish_time[data-time-group='"+groupID+"']")[0]; var time = parseValToNumber(obj.value); - - var otherObj = startObj; - if ($(obj).hasClass("start_time")) { - otherObj = finishObj; - } - $(obj).removeClass("red_border lunch_break_error"); - if (!$(otherObj).hasClass("red_border") && !$(finishObj).hasClass("finish_time_error")) { - $(finishObj).next('span').remove(); - } - - //Check if exposed/infected lunch times within exposed/infected presence times - var activityID = $(obj).data('lunch-for'); - var activityStart = parseValToNumber($(".start_time[data-time-group='"+activityID+"']")[0].value); - var activityFinish = parseValToNumber($(".finish_time[data-time-group='"+activityID+"']")[0].value); - if ((time < activityStart) || (time > activityFinish)) { $(obj).addClass("red_border lunch_break_error"); - if (!$(otherObj).hasClass("red_border") && !$(finishObj).hasClass("finish_time_error")) { - insertSpanAfter(finishObj, "Lunch break must be within activity times"); - } return false; } @@ -493,15 +492,9 @@ $(document).ready(function () { $(".start_time").change(function() {validateFinishTime(this)}); //Validate lunch times - $("[data-lunch-for]").each(function() {validateLunchBreak(this)}); - $("[data-lunch-for]").change(function() {validateLunchBreak(this)}); - $("[data-lunch-break]").change(function() { - var lunchGroup = $(this).data('lunch-break'); - var lunchStart = $(".start_time[data-time-group='"+lunchGroup+"']")[0]; - var lunchFinish = $(".finish_time[data-time-group='"+lunchGroup+"']")[0]; - validateLunchBreak(lunchStart) - validateLunchBreak(lunchFinish) - }); + $(".start_time[data-lunch-for]").each(function() {validateLunchBreak($(this).data('time-group'))}); + $("[data-lunch-for]").change(function() {validateLunchBreak($(this).data('time-group'))}); + $("[data-lunch-break]").change(function() {validateLunchBreak($(this).data('lunch-break'))}); var radioValue = $("input[name='event_type']:checked"); if (radioValue.val()) { diff --git a/cara/apps/calculator/templates/calculator.form.html.j2 b/cara/apps/calculator/templates/calculator.form.html.j2 index 4691274f..450bbb3e 100644 --- a/cara/apps/calculator/templates/calculator.form.html.j2 +++ b/cara/apps/calculator/templates/calculator.form.html.j2 @@ -137,8 +137,8 @@ Start:    Finish:
Infected person(s) presence:
- Start:    - Finish:
+ Start:    + Finish:

When is the event?