Merge branch 'develop/hinged_window' of https://gitlab.cern.ch/cara/cara into develop/hinged_window

This commit is contained in:
Nicolas Mounet 2020-12-01 08:24:15 +01:00
commit 0c46bac365
4 changed files with 37 additions and 5 deletions

View file

@ -44,13 +44,15 @@ class FormData:
ventilation_type: str
volume_type: str
window_height: float
window_type: str
window_width: float
windows_number: int
windows_open: str
@classmethod
def from_dict(cls, form_data: typing.Dict) -> "FormData":
valid_na_values = ['windows_open', 'mechanical_ventilation_type']
valid_na_values = ['windows_open', 'window_type', 'mechanical_ventilation_type']
for name in valid_na_values:
if not form_data.get(name, ''):
form_data[name] = 'not-applicable'
@ -66,7 +68,8 @@ class FormData:
('mask_wearing', MASK_WEARING),
('ventilation_type', VENTILATION_TYPES),
('volume_type', VOLUME_TYPES),
('windows_open', WINDOWS_OPEN)]
('windows_open', WINDOWS_OPEN),
('window_type', WINDOWS_TYPES)]
for key, valid_set in validation_tuples:
if key not in form_data:
raise ValueError(f"Missing key {key}")
@ -114,6 +117,8 @@ class FormData:
ventilation_type=form_data['ventilation_type'],
volume_type=form_data['volume_type'],
window_height=float(form_data['window_height']),
window_type=form_data['window_type'],
window_width=float(form_data['window_width']),
windows_number=int(form_data['windows_number']),
windows_open=form_data['windows_open'],
infected_start=time_string_to_minutes(form_data['infected_start']),
@ -414,6 +419,8 @@ def baseline_raw_form_data():
'ventilation_type': 'natural',
'volume_type': 'room_volume',
'window_height': '2',
'window_type': 'hinged',
'window_width': '2',
'windows_number': '1',
'windows_open': 'interval'
}
@ -427,6 +434,7 @@ MASK_WEARING = {'continuous', 'removed'}
VENTILATION_TYPES = {'natural', 'mechanical', 'no-ventilation'}
VOLUME_TYPES = {'room_volume', 'room_dimensions'}
WINDOWS_OPEN = {'always', 'interval', 'breaks', 'not-applicable'}
WINDOWS_TYPES = {'sliding', 'hinged', 'not-applicable'}
def time_string_to_minutes(time: str) -> int:

View file

@ -30,6 +30,12 @@ function require_fields(obj) {
require_mechanical_ventilation(false);
require_natural_ventilation(true);
break;
case "window_sliding":
require_window_width(false);
break;
case "window_hinged":
require_window_width(true);
break;
case "air_type_changes":
require_air_changes(true);
require_air_supply(false);
@ -107,10 +113,17 @@ function require_natural_ventilation(option) {
require_input_field("#windows_number", option);
require_input_field("#window_height", option);
require_input_field("#opening_distance", option);
$("#window_sliding").prop('required', option);
$("#window_hinged").prop('required', option);
$("#always").prop('required', option);
$("#interval").prop('required', option);
}
function require_window_width(option) {
require_input_field("#window_width", option);
disable_input_field("#window_width", option);
}
function require_air_changes(option) {
require_input_field("#air_changes", option);
disable_input_field("#air_changes", option);
@ -324,7 +337,7 @@ function validateValue(obj) {
$(obj).removeClass("red_border");
$(obj).next('span').remove();
if (!isNonZeroOrEmpty($(obj).val())) {
if (!isLessThanZeroOrEmpty($(obj).val())) {
$(obj).addClass("red_border");
insertSpanAfter(obj, "Value must be > 0");
return false;
@ -332,9 +345,9 @@ function validateValue(obj) {
return true;
}
function isNonZeroOrEmpty(value) {
function isLessThanZeroOrEmpty(value) {
if (value === "") return true;
if (value == 0)
if (value <= 0)
return false;
return true;
}
@ -402,6 +415,7 @@ $(document).ready(function () {
require_fields($("input[name='lunch_option']:checked"));
require_fields($("input[name='volume_type']:checked"));
require_fields($("input[name='mechanical_ventilation_type']:checked"));
require_fields($("input[name='window_type']:checked"));
require_fields($("input[name='hepa_option']:checked"));
// Setup the maximum number of people at page load (to handle back/forward),

View file

@ -79,6 +79,12 @@
<div id="DIVnatural_ventilation" style="display:none">
Number of windows: <input type="number" id="windows_number" class="non_zero" name="windows_number" min="1"><br>
Height of window: <input type="number" step="any" id="window_height" class="non_zero" name="window_height" placeholder="meters" min="0"><br>
Window type:
<input type="radio" id="window_sliding" name="window_type" value="sliding" onclick="require_fields(this)">
<label for="window_sliding">Sliding</label>&nbsp;&nbsp;
<input type="radio" id="window_hinged" name="window_type" value="hinged" onclick="require_fields(this)">
<label for="window_hinged">Hinged</label>&nbsp;&nbsp;<br>
Width of window: <input type="number" step="any" id="window_width" class="non_zero" name="window_width" placeholder="meters" min="0"><br>
Opening distance: <input type="number" step="any" id="opening_distance" class="non_zero" name="opening_distance" placeholder="meters" min="0"><br>
Windows open: <input type="radio" id="always" name="windows_open" value="always">
<label for="always">Always</label> &nbsp;&nbsp;

View file

@ -53,6 +53,10 @@
<ul>
<li><p class="data_subtext">Number of windows: {{ form.windows_number }}</p></li>
<li><p class="data_subtext">Height of window: {{ form.window_height }}</p></li>
<li><p class="data_subtext">Window type: {{ form.window_type }}</p></li>
{% if form.window_type == "hinged" %}
<li><p class="data_subtext">Width of window: {{ form.window_width }}</p></li>
{% endif %}
<li><p class="data_subtext">Opening distance: {{ form.opening_distance }}</p></li>
<li><p class="data_subtext">Windows open: {{ form.windows_open }}</p></li>
</ul>