diff --git a/caimira/apps/calculator/model_generator.py b/caimira/apps/calculator/model_generator.py index 6b9a6796..290d22d3 100644 --- a/caimira/apps/calculator/model_generator.py +++ b/caimira/apps/calculator/model_generator.py @@ -189,9 +189,12 @@ class FormData: return form_dict def validate(self): + # Validate number of infected people == 1 when activity is Conference/Training. + if self.activity_type == 'training' and self.infected_people > 1: + raise ValueError('Conference/Training activities are limited to 1 infected.') # Validate number of infected <= number of total people - if self.infected_people > self.total_people: - raise ValueError('Number of infected people cannot be more than number of total people.') + elif self.infected_people >= self.total_people: + raise ValueError('Number of infected people cannot be more or equal than number of total people.') # Validate time intervals selected by user time_intervals = [ diff --git a/caimira/apps/calculator/static/js/form.js b/caimira/apps/calculator/static/js/form.js index 5361a043..6c0525fa 100644 --- a/caimira/apps/calculator/static/js/form.js +++ b/caimira/apps/calculator/static/js/form.js @@ -195,16 +195,26 @@ function set_disabled_status(id, option) { $(id).removeClass("disabled"); } -function setMaxInfectedPeople() { - $("#training_limit_error").hide(); - var max = $("#total_people").val() +function validateMaxInfectedPeople() { + let infected_people = document.getElementById("infected_people"); + removeErrorFor(infected_people); + $(infected_people).removeClass("red_border"); + + let infected = infected_people.valueAsNumber; + let max = document.getElementById("total_people").valueAsNumber; - if ($("#activity_type").val() === "training") { - max = 1; - $("#training_limit_error").show(); + if ($("#activity_type").val() === "training" && infected > 1) { + insertErrorFor(infected_people, "Conference/Training activities limited to 1 infected person."); + $(infected_people).addClass("red_border"); + return false; + } + else if (infected >= max) { + insertErrorFor(infected_people, "Value is equal or higher than the total number of occupants."); + $(infected_people).addClass("red_border"); + return false; } - $("#infected_people").attr("max", max); + return true; } function removeInvalid(id) { @@ -497,6 +507,9 @@ function validate_form(form) { } } + //Validate number of infected people + if (!validateMaxInfectedPeople()) submit = false; + //Validate all non zero values $("input[required].non_zero").each(function() { if (!validateValue(this)) { @@ -876,9 +889,11 @@ $(document).ready(function () { // Setup the maximum number of people at page load (to handle back/forward), // and update it when total people is changed. - setMaxInfectedPeople(); - $("#total_people").change(setMaxInfectedPeople); - $("#activity_type").change(setMaxInfectedPeople); + validateMaxInfectedPeople(); + $("#total_people").change(validateMaxInfectedPeople); + $("#activity_type").change(validateMaxInfectedPeople); + $("#total_people").change(validateMaxInfectedPeople); + $("#infected_people").change(validateMaxInfectedPeople); //Validate all non zero values $("input[required].non_zero").each(function() {validateValue(this)}); diff --git a/caimira/apps/templates/base/calculator.form.html.j2 b/caimira/apps/templates/base/calculator.form.html.j2 index 770df231..37d8d932 100644 --- a/caimira/apps/templates/base/calculator.form.html.j2 +++ b/caimira/apps/templates/base/calculator.form.html.j2 @@ -313,11 +313,10 @@