Merge branch 'develop/hinged_window' of https://gitlab.cern.ch/cara/cara into develop/hinged_window
This commit is contained in:
commit
0c46bac365
4 changed files with 37 additions and 5 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
<input type="radio" id="window_hinged" name="window_type" value="hinged" onclick="require_fields(this)">
|
||||
<label for="window_hinged">Hinged</label> <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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in a new issue