From 521d2543c4c51f68c635922bb90c7ffac2b4bb26 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Thu, 26 Nov 2020 15:52:11 +0100
Subject: [PATCH 01/15] 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:
From f4795a6198db6e5395ce871dd57981452d3f668e Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Thu, 26 Nov 2020 15:57:57 +0100
Subject: [PATCH 02/15] Fixed breaks length error location
---
cara/apps/calculator/templates/calculator.form.html.j2 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cara/apps/calculator/templates/calculator.form.html.j2 b/cara/apps/calculator/templates/calculator.form.html.j2
index 4466b2c1..d5ad4e6d 100644
--- a/cara/apps/calculator/templates/calculator.form.html.j2
+++ b/cara/apps/calculator/templates/calculator.form.html.j2
@@ -167,9 +167,9 @@
-
+
Activity breaks:
-
+
Lunch break:
From 8041cb3da63d6b5162858a1b94eb28abeb839f0d Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Thu, 26 Nov 2020 16:04:26 +0100
Subject: [PATCH 03/15] Remove finish time error when not required
---
cara/apps/calculator/static/js/form.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index 16e77256..a48ae32d 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -381,6 +381,9 @@ function validateFinishTime(obj) {
if ($(obj).hasClass("finish_time_error")) {
$(obj).removeClass("red_border");
$(obj).removeClass("finish_time_error");
+ if (!$(obj).hasClass("lunch_break_error")) {
+ $(obj).next('span').remove();
+ }
}
var startTime = parseValToNumber($(obj).prev().val());
@@ -413,6 +416,7 @@ function validateLunchBreak(obj) {
}
$(obj).removeClass("red_border");
+ $(obj).removeClass("lunch_break_error");
if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) {
$(spanObj).next('span').remove();
}
@@ -429,6 +433,7 @@ function validateLunchBreak(obj) {
if ((time < globalStart) || (time > globalFinish)) {
$(obj).addClass("red_border");
+ $(obj).addClass("lunch_break_error");
if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) {
insertSpanAfter(spanObj, "Lunch break must be within activity times");
}
From 5c111085fb01d987e139bd42ff69526629b141fc Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Thu, 26 Nov 2020 16:14:54 +0100
Subject: [PATCH 04/15] Acknowledge removal of lunch break
---
cara/apps/calculator/static/js/form.js | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index a48ae32d..0f68ac01 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -145,8 +145,9 @@ function require_lunch(option) {
else {
document.getElementById("lunch_start").value = "";
document.getElementById("lunch_finish").value = "";
- $("#lunch_finish").removeClass("red_border");
- $("#lunch_time_error").hide();
+ $("#lunch_start").removeClass("red_border finish_time_error lunch_break_error");
+ $("#lunch_finish").removeClass("red_border finish_time_error lunch_break_error");
+ $(document.getElementById("lunch_finish")).next('span').remove();
}
}
@@ -379,8 +380,7 @@ function isValidDateOrEmpty(date) {
function validateFinishTime(obj) {
if ($(obj).hasClass("finish_time_error")) {
- $(obj).removeClass("red_border");
- $(obj).removeClass("finish_time_error");
+ $(obj).removeClass("red_border finish_time_error");
if (!$(obj).hasClass("lunch_break_error")) {
$(obj).next('span').remove();
}
@@ -389,8 +389,7 @@ function validateFinishTime(obj) {
var startTime = parseValToNumber($(obj).prev().val());
var finishTime = parseValToNumber(obj.value);
if (startTime > finishTime) {
- $(obj).addClass("red_border");
- $(obj).addClass("finish_time_error");
+ $(obj).addClass("red_border finish_time_error");
$(obj).next('span').remove();
insertSpanAfter(obj, "Finish time must be after start");
return false;
@@ -415,8 +414,7 @@ function validateLunchBreak(obj) {
otherObj = obj.previousSibling.previousSibling;
}
- $(obj).removeClass("red_border");
- $(obj).removeClass("lunch_break_error");
+ $(obj).removeClass("red_border lunch_break_error");
if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) {
$(spanObj).next('span').remove();
}
@@ -432,8 +430,7 @@ function validateLunchBreak(obj) {
var globalFinish = parseValToNumber(document.getElementById(finishID).value);
if ((time < globalStart) || (time > globalFinish)) {
- $(obj).addClass("red_border");
- $(obj).addClass("lunch_break_error");
+ $(obj).addClass("red_border lunch_break_error");
if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) {
insertSpanAfter(spanObj, "Lunch break must be within activity times");
}
From 2a6a7143bb13e2289a8c8e4d56274eab9dbb7b9c Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Fri, 27 Nov 2020 13:12:55 +0100
Subject: [PATCH 05/15] Added braces
---
cara/apps/calculator/static/js/form.js | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index 0f68ac01..ece53531 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -136,11 +136,13 @@ function require_lunch(option) {
$("#lunch_finish").prop('required', option);
if (option) {
var start = document.getElementById("lunch_start");
- if (start.value === "")
+ if (start.value === "") {
start.value = "12:30";
+ }
var finish = document.getElementById("lunch_finish");
- if (finish.value === "")
+ if (finish.value === "") {
finish.value = "13:30";
+ }
}
else {
document.getElementById("lunch_start").value = "";
@@ -278,31 +280,35 @@ function validate_form(form) {
//Validate all non zero values
$("input[required].non_zero").each(function() {
- if (!validateValue(this))
+ if (!validateValue(this)) {
submit = false;
+ }
});
//Validate all dates
if (submit) {
$("input[required].datepicker").each(function() {
- if (!validateDate(this))
+ if (!validateDate(this)) {
submit = false;
+ }
});
}
//Validate all times
if (submit) {
$("input[required].finish_time").each(function() {
- if (!validateFinishTime(this))
+ if (!validateFinishTime(this)) {
submit = false;
+ }
});
}
//Validate all lunch breaks
if (submit) {
$("input[required].lunch").each(function() {
- if (!validateLunchBreak(this))
+ if (!validateLunchBreak(this)) {
submit = false;
+ }
});
}
@@ -404,8 +410,9 @@ function validateLunchBreak(obj) {
//Span element is only after finish time
var spanObj = obj;
- if ($(obj).hasClass("start_time"))
+ if ($(obj).hasClass("start_time")) {
spanObj = obj.nextSibling.nextSibling;
+ }
var time = parseValToNumber(obj.value);
From fa60b44966808f5d3c79a9cf38d537f173e65da5 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Fri, 27 Nov 2020 16:50:01 +0100
Subject: [PATCH 06/15] Added data attributes for time windows
---
cara/apps/calculator/static/js/form.js | 52 +++++++++----------
.../templates/calculator.form.html.j2 | 12 ++---
2 files changed, 31 insertions(+), 33 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index ece53531..38c533b4 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -385,15 +385,20 @@ function isValidDateOrEmpty(date) {
}
function validateFinishTime(obj) {
- if ($(obj).hasClass("finish_time_error")) {
- $(obj).removeClass("red_border finish_time_error");
- if (!$(obj).hasClass("lunch_break_error")) {
- $(obj).next('span').remove();
+
+ var groupID = $(obj).data('time-group');
+ var startObj = $(".start_time[data-time-group='"+groupID+"']")[0];
+ var finishObj = $(".finish_time[data-time-group='"+groupID+"']")[0];
+
+ if ($(finishObj).hasClass("finish_time_error")) {
+ $(finishObj).removeClass("red_border finish_time_error");
+ if (!$(finishObj).hasClass("lunch_break_error")) {
+ $(finishObj).next('span').remove();
}
}
- var startTime = parseValToNumber($(obj).prev().val());
- var finishTime = parseValToNumber(obj.value);
+ var startTime = parseValToNumber(startObj.value);
+ var finishTime = parseValToNumber(finishObj.value);
if (startTime > finishTime) {
$(obj).addClass("red_border finish_time_error");
$(obj).next('span').remove();
@@ -408,38 +413,31 @@ function validateFinishTime(obj) {
function validateLunchBreak(obj) {
- //Span element is only after finish time
- var spanObj = obj;
- if ($(obj).hasClass("start_time")) {
- spanObj = obj.nextSibling.nextSibling;
- }
-
+ 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 = spanObj;
- if ($(obj).hasClass("finish_time")) {
- otherObj = obj.previousSibling.previousSibling;
+
+ var otherObj = startObj;
+ if ($(obj).hasClass("start_time")) {
+ otherObj = finishObj;
}
$(obj).removeClass("red_border lunch_break_error");
- if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) {
- $(spanObj).next('span').remove();
+ if (!$(otherObj).hasClass("red_border") && !$(finishObj).hasClass("finish_time_error")) {
+ $(finishObj).next('span').remove();
}
- var startID = "";
- var finishID = "";
- if ($(obj).hasClass("activity")) {
- startID = "activity_start";
- finishID = "activity_finish";
- }
+ var startID = groupID.split("_")[1] + "_start";
+ var finishID = groupID.split("_")[1] + "_finish";
var globalStart = parseValToNumber(document.getElementById(startID).value);
var globalFinish = parseValToNumber(document.getElementById(finishID).value);
if ((time < globalStart) || (time > globalFinish)) {
$(obj).addClass("red_border lunch_break_error");
- if (!$(otherObj).hasClass("red_border") && !$(spanObj).hasClass("finish_time_error")) {
- insertSpanAfter(spanObj, "Lunch break must be within activity times");
+ if (!$(otherObj).hasClass("red_border") && !$(finishObj).hasClass("finish_time_error")) {
+ insertSpanAfter(finishObj, "Lunch break must be within activity times");
}
return false;
}
@@ -491,7 +489,7 @@ $(document).ready(function () {
//Validate all finish times
$("input[required].finish_time").each(function() {validateFinishTime(this)});
$(".finish_time").change(function() {validateFinishTime(this)});
- $(".start_time").change(function() {validateFinishTime(this.nextSibling.nextSibling)});
+ $(".start_time").change(function() {validateFinishTime(this)});
//Validate lunch times
$("input[required].lunch").each(function() {validateLunchBreak(this)});
diff --git a/cara/apps/calculator/templates/calculator.form.html.j2 b/cara/apps/calculator/templates/calculator.form.html.j2
index d5ad4e6d..5db0526d 100644
--- a/cara/apps/calculator/templates/calculator.form.html.j2
+++ b/cara/apps/calculator/templates/calculator.form.html.j2
@@ -134,11 +134,11 @@
- Start:
- Finish:
+ Start:
+ Finish:
Infected person(s) presence:
- Start:
- Finish:
+ Start:
+ Finish:
When is the event?
@@ -178,8 +178,8 @@
- Start:
- Finish:
+ Start:
+ Finish:
From 8ff4ff2878c7a716575b60fcc7a2ae65a73ad35c Mon Sep 17 00:00:00 2001
From: Andre Henriques
Date: Mon, 30 Nov 2020 16:02:32 +0000
Subject: [PATCH 07/15] correct report: exposed/infected times
---
cara/apps/calculator/templates/report.html.j2 | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/cara/apps/calculator/templates/report.html.j2 b/cara/apps/calculator/templates/report.html.j2
index 3701f2e2..bd388e93 100644
--- a/cara/apps/calculator/templates/report.html.j2
+++ b/cara/apps/calculator/templates/report.html.j2
@@ -90,10 +90,11 @@
Gym = For comparison only, all persons doing heavy physical exercise, breathing and not talking.
{% endif %}
+ Presence of exposed occupant(s):
- Exposure time (presence of infected person):
+ Presence of infected occupant(s):
From 8006f58166ee3cffce55a8a412ee1bcd2dea1279 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Mon, 30 Nov 2020 17:39:41 +0100
Subject: [PATCH 08/15] Added comment
---
cara/apps/calculator/static/js/form.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index 38c533b4..cddbde05 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -428,6 +428,7 @@ function validateLunchBreak(obj) {
$(finishObj).next('span').remove();
}
+ //Check if lunch times within presence times
var startID = groupID.split("_")[1] + "_start";
var finishID = groupID.split("_")[1] + "_finish";
From 4a2fc49f106b659ad40f0bec666add07ee3d18e6 Mon Sep 17 00:00:00 2001
From: Gaby Azzopardi
Date: Tue, 1 Dec 2020 09:56:47 +0100
Subject: [PATCH 09/15] Fixed error display
---
cara/apps/calculator/static/js/form.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index cddbde05..c512c380 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -400,9 +400,9 @@ function validateFinishTime(obj) {
var startTime = parseValToNumber(startObj.value);
var finishTime = parseValToNumber(finishObj.value);
if (startTime > finishTime) {
- $(obj).addClass("red_border finish_time_error");
- $(obj).next('span').remove();
- insertSpanAfter(obj, "Finish time must be after start");
+ $(finishObj).addClass("red_border finish_time_error");
+ $(finishObj).next('span').remove();
+ insertSpanAfter(finishObj, "Finish time must be after start");
return false;
}
else {
From a1c61640148eae79bd2556cb2fb9d735516d2028 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Tue, 1 Dec 2020 11:44:09 +0100
Subject: [PATCH 10/15] Added comments
---
cara/apps/calculator/static/js/form.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index cddbde05..b6233204 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -399,12 +399,14 @@ function validateFinishTime(obj) {
var startTime = parseValToNumber(startObj.value);
var finishTime = parseValToNumber(finishObj.value);
+ //Check if finish time error (takes presedence over lunch break error)
if (startTime > finishTime) {
$(obj).addClass("red_border finish_time_error");
$(obj).next('span').remove();
insertSpanAfter(obj, "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)});
}
@@ -428,7 +430,7 @@ function validateLunchBreak(obj) {
$(finishObj).next('span').remove();
}
- //Check if lunch times within presence times
+ //Check if exposed/infected lunch times within exposed/infected presence times
var startID = groupID.split("_")[1] + "_start";
var finishID = groupID.split("_")[1] + "_finish";
From 7a6f4701e217c5b1c90bc7a8b2ede061ae242f71 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Wed, 2 Dec 2020 11:42:50 +0100
Subject: [PATCH 11/15] Validate lunch break on activity time change
---
cara/apps/calculator/static/js/form.js | 21 ++++++++++++-------
.../templates/calculator.form.html.j2 | 8 +++----
2 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index b48bc8cd..72d80711 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -431,13 +431,11 @@ function validateLunchBreak(obj) {
}
//Check if exposed/infected lunch times within exposed/infected presence times
- var startID = groupID.split("_")[1] + "_start";
- var finishID = groupID.split("_")[1] + "_finish";
-
- var globalStart = parseValToNumber(document.getElementById(startID).value);
- var globalFinish = parseValToNumber(document.getElementById(finishID).value);
+ 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 < globalStart) || (time > globalFinish)) {
+ 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");
@@ -495,8 +493,15 @@ $(document).ready(function () {
$(".start_time").change(function() {validateFinishTime(this)});
//Validate lunch times
- $("input[required].lunch").each(function() {validateLunchBreak(this)});
- $("input[required].lunch").change(function() {validateLunchBreak(this)});
+ $("[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)
+ });
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 5db0526d..4691274f 100644
--- a/cara/apps/calculator/templates/calculator.form.html.j2
+++ b/cara/apps/calculator/templates/calculator.form.html.j2
@@ -134,8 +134,8 @@
- Start:
- Finish:
+ Start:
+ Finish:
Infected person(s) presence:
Start:
Finish:
@@ -178,8 +178,8 @@
- Start:
- Finish:
+ Start:
+ Finish:
From 5282266bce80cebc771d68046c67efa1af3c55e2 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Wed, 2 Dec 2020 21:18:03 +0100
Subject: [PATCH 12/15] 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?
From 485aa3a3b05718b4fd5b52a340769f85be2ab563 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Wed, 2 Dec 2020 21:46:19 +0100
Subject: [PATCH 13/15] Added ID to error span
---
cara/apps/calculator/static/js/form.js | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index 41bd3ad8..cb7c6ab7 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -13,6 +13,7 @@ function insertErrorSpanAfter(referenceNode, text) {
}
function removeErrorSpanAfter(referenceNode) {
+ $(referenceNode).next('span#error_text').remove();
}
/* -------Required fields------- */
@@ -153,7 +154,7 @@ function require_lunch(option) {
document.getElementById("lunch_finish").value = "";
$("#lunch_start").removeClass("red_border finish_time_error lunch_break_error");
$("#lunch_finish").removeClass("red_border finish_time_error lunch_break_error");
- $(document.getElementById("lunch_finish")).next('span').remove();
+ removeErrorSpanAfter($("#lunch_finish")[0]);
}
}
@@ -197,7 +198,7 @@ function removeInvalid(id) {
if ($(id).hasClass("red_border")) {
$(id).val("");
$(id).removeClass("red_border");
- $(id).next('span').remove();
+ removeErrorSpanAfter(id);
}
}
@@ -318,8 +319,7 @@ function validate_form(form) {
//Check if breaks length >= activity length
if (submit) {
- var button = document.getElementById("activity_breaks");
- $(button).next('span').remove();
+ removeErrorSpanAfter($("#activity_breaks")[0]);
var lunch_mins = 0;
if (document.getElementById('lunch_option_yes').checked) {
@@ -337,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) {
- insertErrorSpanAfter(button, "Length of breaks >= Length of activity");
+ insertErrorSpanAfter($("#activity_breaks")[0], "Length of breaks >= Length of activity");
submit = false;
}
}
@@ -347,7 +347,7 @@ function validate_form(form) {
function validateValue(obj) {
$(obj).removeClass("red_border");
- $(obj).next('span').remove();
+ removeErrorSpanAfter(obj);
if (!isNonZeroOrEmpty($(obj).val())) {
$(obj).addClass("red_border");
@@ -366,7 +366,7 @@ function isNonZeroOrEmpty(value) {
function validateDate(obj) {
$(obj).removeClass("red_border");
- $(obj).next('span').remove();
+ removeErrorSpanAfter(obj);
if (!isValidDateOrEmpty($(obj).val())) {
$(obj).addClass("red_border");
@@ -396,7 +396,7 @@ function validateFinishTime(obj) {
if ($(finishObj).hasClass("finish_time_error")) {
$(finishObj).removeClass("red_border finish_time_error");
- $(finishObj).next('span').remove();
+ removeErrorSpanAfter(finishObj);
}
//Check if finish time error (takes precedence over lunch break error)
@@ -404,7 +404,7 @@ function validateFinishTime(obj) {
var finishTime = parseValToNumber(finishObj.value);
if (startTime >= finishTime) {
$(finishObj).addClass("red_border finish_time_error");
- $(finishObj).next('span').remove();
+ removeErrorSpanAfter(finishObj);
insertErrorSpanAfter(finishObj, "Finish time must be after start");
return false;
}
@@ -419,7 +419,7 @@ function validateLunchBreak(lunchGroup) {
if ($(lunchStartObj).hasClass("finish_time_error") || $(lunchFinishObj).hasClass("finish_time_error"))
return true;
- $(lunchFinishObj).next('span').remove();
+ removeErrorSpanAfter(lunchFinishObj);
var valid = validateLunchTime(lunchStartObj) & validateLunchTime(lunchFinishObj);
if (!valid) {
insertErrorSpanAfter(lunchFinishObj, "Lunch break must be within activity times");
From f55dffee60dbee7b66311e6dfb397ce0d5984e2b Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Wed, 2 Dec 2020 21:55:21 +0100
Subject: [PATCH 14/15] Make obj argument consistent
---
cara/apps/calculator/static/js/form.js | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index cb7c6ab7..d5e5d129 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -139,22 +139,23 @@ function require_recurrent_event(option) {
function require_lunch(option) {
$("#lunch_start").prop('required', option);
$("#lunch_finish").prop('required', option);
+
+ var lunchStartObj = document.getElementById("lunch_start");
+ var lunchFinishObj = document.getElementById("lunch_finish");
if (option) {
- var start = document.getElementById("lunch_start");
- if (start.value === "") {
- start.value = "12:30";
+ if (lunchStartObj.value === "") {
+ lunchStartObj.value = "12:30";
}
- var finish = document.getElementById("lunch_finish");
- if (finish.value === "") {
- finish.value = "13:30";
+ if (lunchFinishObj.value === "") {
+ lunchFinishObj.value = "13:30";
}
}
else {
- document.getElementById("lunch_start").value = "";
- document.getElementById("lunch_finish").value = "";
- $("#lunch_start").removeClass("red_border finish_time_error lunch_break_error");
+ lunchStartObj.value = "";
+ lunchFinishObj.value = "";
$("#lunch_finish").removeClass("red_border finish_time_error lunch_break_error");
- removeErrorSpanAfter($("#lunch_finish")[0]);
+ $("#lunch_finish").removeClass("red_border finish_time_error lunch_break_error");
+ removeErrorSpanAfter(lunchFinishObj);
}
}
@@ -319,7 +320,8 @@ function validate_form(form) {
//Check if breaks length >= activity length
if (submit) {
- removeErrorSpanAfter($("#activity_breaks")[0]);
+ var activityBreaksObj= document.getElementById("activity_breaks");
+ removeErrorSpanAfter(activityBreaksObj);
var lunch_mins = 0;
if (document.getElementById('lunch_option_yes').checked) {
@@ -337,7 +339,7 @@ function validate_form(form) {
var activity_mins = parseTimeToMins(activity_finish.value) - parseTimeToMins(activity_start.value);
if ((lunch_mins + coffee_mins) >= activity_mins) {
- insertErrorSpanAfter($("#activity_breaks")[0], "Length of breaks >= Length of activity");
+ insertErrorSpanAfter(activityBreaksObj, "Length of breaks >= Length of activity");
submit = false;
}
}
From a3054a2d17c8cc0810246376b92066835bdf4fc9 Mon Sep 17 00:00:00 2001
From: gaazzopa
Date: Thu, 3 Dec 2020 09:38:21 +0100
Subject: [PATCH 15/15] Renaming and minor updating of code elements
---
cara/apps/calculator/static/js/form.js | 36 +++++++++++++-------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js
index d5e5d129..6203a677 100644
--- a/cara/apps/calculator/static/js/form.js
+++ b/cara/apps/calculator/static/js/form.js
@@ -4,16 +4,16 @@ function getChildElement(elem) {
return $("#" + elem.data("enables"));
}
-function insertErrorSpanAfter(referenceNode, text) {
+function insertErrorFor(referenceNode, text) {
var element = document.createElement("span");
- element.setAttribute("id", "error_text");
+ element.setAttribute("class", "error_text");
element.classList.add("red_text");
element.innerHTML = " " + text;
referenceNode.parentNode.insertBefore(element, referenceNode.nextSibling);
}
-function removeErrorSpanAfter(referenceNode) {
- $(referenceNode).next('span#error_text').remove();
+function removeErrorFor(referenceNode) {
+ $(referenceNode).next('span.error_text').remove();
}
/* -------Required fields------- */
@@ -155,7 +155,7 @@ function require_lunch(option) {
lunchFinishObj.value = "";
$("#lunch_finish").removeClass("red_border finish_time_error lunch_break_error");
$("#lunch_finish").removeClass("red_border finish_time_error lunch_break_error");
- removeErrorSpanAfter(lunchFinishObj);
+ removeErrorFor(lunchFinishObj);
}
}
@@ -199,7 +199,7 @@ function removeInvalid(id) {
if ($(id).hasClass("red_border")) {
$(id).val("");
$(id).removeClass("red_border");
- removeErrorSpanAfter(id);
+ removeErrorFor(id);
}
}
@@ -321,7 +321,7 @@ function validate_form(form) {
//Check if breaks length >= activity length
if (submit) {
var activityBreaksObj= document.getElementById("activity_breaks");
- removeErrorSpanAfter(activityBreaksObj);
+ removeErrorFor(activityBreaksObj);
var lunch_mins = 0;
if (document.getElementById('lunch_option_yes').checked) {
@@ -339,7 +339,7 @@ function validate_form(form) {
var activity_mins = parseTimeToMins(activity_finish.value) - parseTimeToMins(activity_start.value);
if ((lunch_mins + coffee_mins) >= activity_mins) {
- insertErrorSpanAfter(activityBreaksObj, "Length of breaks >= Length of activity");
+ insertErrorFor(activityBreaksObj, "Length of breaks >= Length of activity");
submit = false;
}
}
@@ -349,11 +349,11 @@ function validate_form(form) {
function validateValue(obj) {
$(obj).removeClass("red_border");
- removeErrorSpanAfter(obj);
+ removeErrorFor(obj);
if (!isNonZeroOrEmpty($(obj).val())) {
$(obj).addClass("red_border");
- insertErrorSpanAfter(obj, "Value must be > 0");
+ insertErrorFor(obj, "Value must be > 0");
return false;
}
return true;
@@ -368,11 +368,11 @@ function isNonZeroOrEmpty(value) {
function validateDate(obj) {
$(obj).removeClass("red_border");
- removeErrorSpanAfter(obj);
+ removeErrorFor(obj);
if (!isValidDateOrEmpty($(obj).val())) {
$(obj).addClass("red_border");
- insertErrorSpanAfter(obj, "Incorrect date format");
+ insertErrorFor(obj, "Incorrect date format");
return false;
}
return true;
@@ -398,7 +398,7 @@ function validateFinishTime(obj) {
if ($(finishObj).hasClass("finish_time_error")) {
$(finishObj).removeClass("red_border finish_time_error");
- removeErrorSpanAfter(finishObj);
+ removeErrorFor(finishObj);
}
//Check if finish time error (takes precedence over lunch break error)
@@ -406,8 +406,8 @@ function validateFinishTime(obj) {
var finishTime = parseValToNumber(finishObj.value);
if (startTime >= finishTime) {
$(finishObj).addClass("red_border finish_time_error");
- removeErrorSpanAfter(finishObj);
- insertErrorSpanAfter(finishObj, "Finish time must be after start");
+ removeErrorFor(finishObj);
+ insertErrorFor(finishObj, "Finish time must be after start");
return false;
}
return true;
@@ -419,12 +419,12 @@ function validateLunchBreak(lunchGroup) {
//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;
+ return false;
- removeErrorSpanAfter(lunchFinishObj);
+ removeErrorFor(lunchFinishObj);
var valid = validateLunchTime(lunchStartObj) & validateLunchTime(lunchFinishObj);
if (!valid) {
- insertErrorSpanAfter(lunchFinishObj, "Lunch break must be within activity times");
+ insertErrorFor(lunchFinishObj, "Lunch break must be within activity times");
}
return valid;