From 521d2543c4c51f68c635922bb90c7ffac2b4bb26 Mon Sep 17 00:00:00 2001 From: gaazzopa Date: Thu, 26 Nov 2020 15:52:11 +0100 Subject: [PATCH] Lunch times must be within activity times --- cara/apps/calculator/static/js/form.js | 123 +++++++++++++----- .../templates/calculator.form.html.j2 | 4 +- 2 files changed, 96 insertions(+), 31 deletions(-) diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js index db3874a7..16e77256 100644 --- a/cara/apps/calculator/static/js/form.js +++ b/cara/apps/calculator/static/js/form.js @@ -282,39 +282,53 @@ function validate_form(form) { }); //Validate all dates - $("input[required].datepicker").each(function() { - if (!validateDate(this)) - submit = false; - }); + if (submit) { + $("input[required].datepicker").each(function() { + if (!validateDate(this)) + submit = false; + }); + } //Validate all times - $("input[required].finish_time").each(function() { - if (!validateFinishTime(this)) - submit = false; - }); + if (submit) { + $("input[required].finish_time").each(function() { + if (!validateFinishTime(this)) + submit = false; + }); + } + + //Validate all lunch breaks + if (submit) { + $("input[required].lunch").each(function() { + if (!validateLunchBreak(this)) + submit = false; + }); + } //Check if breaks length >= activity length - var button = document.getElementById("activity_breaks"); - $(button).next('span').remove(); + if (submit) { + var button = document.getElementById("activity_breaks"); + $(button).next('span').remove(); - var lunch_mins = 0; - if (document.getElementById('lunch_option_yes').checked) { - var lunch_start = document.getElementById("lunch_start"); - var lunch_finish = document.getElementById("lunch_finish"); - lunch_mins = parseTimeToMins(lunch_finish.value) - parseTimeToMins(lunch_start.value); - } - - var coffee_breaks = parseInt(document.querySelector('input[name="coffee_breaks"]:checked').value); - var coffee_duration = parseInt(document.getElementById("break_duration").value); - var coffee_mins = coffee_breaks * coffee_duration; - - var activity_start = document.getElementById("activity_start"); - var activity_finish = document.getElementById("activity_finish"); - var activity_mins = parseTimeToMins(activity_finish.value) - parseTimeToMins(activity_start.value); + var lunch_mins = 0; + if (document.getElementById('lunch_option_yes').checked) { + var lunch_start = document.getElementById("lunch_start"); + var lunch_finish = document.getElementById("lunch_finish"); + lunch_mins = parseTimeToMins(lunch_finish.value) - parseTimeToMins(lunch_start.value); + } + + var coffee_breaks = parseInt(document.querySelector('input[name="coffee_breaks"]:checked').value); + var coffee_duration = parseInt(document.getElementById("break_duration").value); + var coffee_mins = coffee_breaks * coffee_duration; + + var activity_start = document.getElementById("activity_start"); + var activity_finish = document.getElementById("activity_finish"); + 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"); - submit = false; + if ((lunch_mins + coffee_mins) >= activity_mins) { + insertSpanAfter(button, "Length of breaks >= Length of activity"); + submit = false; + } } return submit; @@ -364,16 +378,63 @@ function isValidDateOrEmpty(date) { } function validateFinishTime(obj) { - $(obj).removeClass("red_border"); - $(obj).next('span').remove(); + if ($(obj).hasClass("finish_time_error")) { + $(obj).removeClass("red_border"); + $(obj).removeClass("finish_time_error"); + } var startTime = parseValToNumber($(obj).prev().val()); var finishTime = parseValToNumber(obj.value); if (startTime > finishTime) { $(obj).addClass("red_border"); + $(obj).addClass("finish_time_error"); + $(obj).next('span').remove(); insertSpanAfter(obj, "Finish time must be after start"); return false; } + else { + $("input[required].lunch").each(function() {validateLunchBreak(this)}); + } + return true; +} + +function validateLunchBreak(obj) { + + //Span element is only after finish time + var spanObj = obj; + if ($(obj).hasClass("start_time")) + spanObj = obj.nextSibling.nextSibling; + + var time = parseValToNumber(obj.value); + + var otherObj = spanObj; + if ($(obj).hasClass("finish_time")) { + otherObj = obj.previousSibling.previousSibling; + } + + $(obj).removeClass("red_border"); + if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) { + $(spanObj).next('span').remove(); + } + + var startID = ""; + var finishID = ""; + if ($(obj).hasClass("activity")) { + startID = "activity_start"; + finishID = "activity_finish"; + } + + var globalStart = parseValToNumber(document.getElementById(startID).value); + var globalFinish = parseValToNumber(document.getElementById(finishID).value); + + if ((time < globalStart) || (time > globalFinish)) { + $(obj).addClass("red_border"); + if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) { + insertSpanAfter(spanObj, "Lunch break must be within activity times"); + } + return false; + } + return true; } @@ -423,6 +484,10 @@ $(document).ready(function () { $(".finish_time").change(function() {validateFinishTime(this)}); $(".start_time").change(function() {validateFinishTime(this.nextSibling.nextSibling)}); + //Validate lunch times + $("input[required].lunch").each(function() {validateLunchBreak(this)}); + $("input[required].lunch").change(function() {validateLunchBreak(this)}); + var radioValue = $("input[name='event_type']:checked"); if (radioValue.val()) { require_fields(radioValue.get(0)); diff --git a/cara/apps/calculator/templates/calculator.form.html.j2 b/cara/apps/calculator/templates/calculator.form.html.j2 index 3e12229a..4466b2c1 100644 --- a/cara/apps/calculator/templates/calculator.form.html.j2 +++ b/cara/apps/calculator/templates/calculator.form.html.j2 @@ -178,8 +178,8 @@
- Start:    - Finish:
+ Start:    + Finish: