From 82d2e741884a25528045b39414e8c4ec313bf2ee Mon Sep 17 00:00:00 2001 From: markus Date: Thu, 5 Nov 2020 13:58:55 +0100 Subject: [PATCH 1/3] add time_string_to_minutes --- cara/apps/calculator/model_generator.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py index 23744597..09dfe30d 100644 --- a/cara/apps/calculator/model_generator.py +++ b/cara/apps/calculator/model_generator.py @@ -188,3 +188,12 @@ def baseline_raw_form_data(): 'windows_number': '1', 'windows_open': 'interval' } + + +def time_string_to_minutes(time: str) -> int: + """ + Converts time from string-format to an integer number of minutes after 00:00 + :param time: A string of the form "HH:MM" representing a time of day + :return: The number of minutes between 'time' and 00:00 + """ + return 60 * int(time[:2]) + int(time[3:]) From ae0b91621be8383acd9cf0222b7ad41e29bfa06f Mon Sep 17 00:00:00 2001 From: markus Date: Thu, 5 Nov 2020 14:43:22 +0100 Subject: [PATCH 2/3] populate Formdata attributes --- cara/apps/calculator/model_generator.py | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py index 09dfe30d..6d477b99 100644 --- a/cara/apps/calculator/model_generator.py +++ b/cara/apps/calculator/model_generator.py @@ -7,7 +7,37 @@ from cara import models @dataclass class FormData: + # Number of minutes after 00:00 + activity_start: int + activity_finish: int + lunch_start: int + lunch_finish: int + + activity_type: str + air_changes: float + air_supply: float ceiling_height: float + coffee_breaks: int + coffee_duration: int + coffee_option: bool + event_type: str + floor_area: float + infected_people: int + lunch_option: bool + mask_wearing: str + opening_distance: float + recurrent_event_month: str + room_number: str + room_volume: float + simulation_name: str + single_event_date: str + total_people: int + ventilation_type: str + volume_type: str + window_height: float + window_width: float + windows_number: int + windows_open: str @classmethod def from_dict(cls, form_data: typing.Dict) -> "FormData": @@ -15,7 +45,35 @@ class FormData: form_data['ceiling_height'] = 1 return cls( + activity_finish=time_string_to_minutes(form_data['activity_finish']), + activity_start=time_string_to_minutes(form_data['activity_start']), + activity_type=form_data['activity_type'], + air_changes=float(form_data['air_changes']), + air_supply=float(form_data['air_supply']), ceiling_height=float(form_data['ceiling_height']), + coffee_breaks=int(form_data['coffee_breaks']), + coffee_duration=int(form_data['coffee_duration']), + coffee_option=(form_data['coffee_option'] == '1'), + event_type=form_data['event_type'], + floor_area=float(form_data['floor_area']), + infected_people=int(form_data['infected_people']), + lunch_finish=time_string_to_minutes(form_data['lunch_finish']), + lunch_option=(form_data['lunch_option'] == '1'), + lunch_start=time_string_to_minutes(form_data['lunch_start']), + mask_wearing=form_data['mask_wearing'], + opening_distance=float(form_data['opening_distance']), + recurrent_event_month=form_data['recurrent_event_month'], + room_number=form_data['room_number'], + room_volume=float(form_data['room_volume']), + simulation_name=form_data['simulation_name'], + single_event_date=form_data['single_event_date'], + total_people=int(form_data['total_people']), + ventilation_type=form_data['ventilation_type'], + volume_type=form_data['volume_type'], + window_height=float(form_data['window_height']), + window_width=float(form_data['window_width']), + windows_number=int(form_data['windows_number']), + windows_open=form_data['windows_open'] ) # TODO: Remove the tmp_raw_form_data usage. From 5f2f2e5dbf74ef3e05eea16ba8b967cc84e1fc80 Mon Sep 17 00:00:00 2001 From: markus Date: Thu, 5 Nov 2020 14:49:03 +0100 Subject: [PATCH 3/3] add quick-fix for undefined numerical attributes --- cara/apps/calculator/model_generator.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py index 6d477b99..6ed8a779 100644 --- a/cara/apps/calculator/model_generator.py +++ b/cara/apps/calculator/model_generator.py @@ -42,7 +42,9 @@ class FormData: @classmethod def from_dict(cls, form_data: typing.Dict) -> "FormData": # TODO: This fixup is a problem with the form.html. - form_data['ceiling_height'] = 1 + for key, value in form_data.items(): + if value == "": + form_data[key] = "0" return cls( activity_finish=time_string_to_minutes(form_data['activity_finish']),