Feat: Assessment page completed with save method combining Assessment, Distraction, Assessment Command Modality Link, and Assessment Response save for creating new complete Assessnent.

This commit is contained in:
2025-07-28 22:41:38 +01:00
parent 1bbe6f0040
commit 574d60442a
122 changed files with 3261 additions and 1057 deletions

View File

@@ -61,10 +61,10 @@ class Assessment_Response(SQLAlchemy_ABC, Base):
assessment_response.id_response = query_row[0]
assessment_response.id_assessment_command_modality_link = query_row[1]
assessment_response.id_response_quality_metric = query_row[2]
assessment_response.id_obedience_level = query_row[3]
assessment_response.value_measured = query_row[11]
assessment_response.notes = query_row[10]
assessment_response.active = av.input_bool(query_row[12], 'active', _m)
assessment_response.id_obedience_level = query_row[4]
assessment_response.value_measured = query_row[6]
assessment_response.notes = query_row[7]
assessment_response.active = av.input_bool(query_row[8], 'active', _m)
assessment_response.assessment_command_modality_link = Assessment_Command_Modality_Link.from_db_assessment_response(query_row)
assessment_response.response_quality_metric = Response_Quality_Metric.from_db_assessment_response(query_row)
@@ -76,17 +76,14 @@ class Assessment_Response(SQLAlchemy_ABC, Base):
_m = f'{cls.__qualname__}.from_json'
assessment_response = cls()
if json is None: return assessment_response
# Helper_App.console_log(f'{_m}\njson: {json}')
assessment_response.id_response = json.get(Assessment_Response.ATTR_ID_ASSESSMENT_RESPONSE, -1)
assessment_response.id_assessment_command_modality_link = json[Assessment_Command_Modality_Link.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK]
assessment_response.id_response_quality_metric = json[Response_Quality_Metric.ATTR_ID_ASSESSMENT_RESPONSE_QUALITY_METRIC]
assessment_response.id_response_quality_metric = json[Response_Quality_Metric.ATTR_ID_RESPONSE_QUALITY_METRIC]
assessment_response.id_obedience_level = json[Obedience_Level.ATTR_ID_OBEDIENCE_LEVEL]
assessment_response.value_measured = json[cls.FLAG_VALUE_MEASURED]
assessment_response.notes = json[cls.FLAG_NOTES]
assessment_response.active = json[cls.FLAG_ACTIVE]
assessment_response.active = av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, _m)
assessment_response.created_on = json.get(cls.FLAG_CREATED_ON, None)
# assessment_response.id_command_category = json[Command_Category.FLAG_COMMAND_CATEGORY]
# Helper_App.console_log(f'Dog Command Link: {assessment_response}')
return assessment_response
def to_json(self):
@@ -94,15 +91,13 @@ class Assessment_Response(SQLAlchemy_ABC, Base):
**self.get_shared_json_attributes(self)
, self.ATTR_ID_ASSESSMENT_RESPONSE: self.id_response
, Assessment_Command_Modality_Link.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK: { Assessment_Command_Modality_Link.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK: None } if self.assessment_command_modality_link is None else self.assessment_command_modality_link.to_json()
, Response_Quality_Metric.ATTR_ID_ASSESSMENT_RESPONSE_QUALITY_METRIC: { Response_Quality_Metric.ATTR_ID_ASSESSMENT_RESPONSE_QUALITY_METRIC: None } if self.response_quality_metric is None else self.response_quality_metric.to_json()
, Obedience_Level.ATTR_ID_OBEDIENCE_LEVEL: { Obedience_Level.ATTR_ID_OBEDIENCE_LEVEL: None } if self.assessment_command_modality_link is None else self.assessment_command_modality_link.to_json()
, Response_Quality_Metric.ATTR_ID_RESPONSE_QUALITY_METRIC: { Response_Quality_Metric.ATTR_ID_RESPONSE_QUALITY_METRIC: None } if self.response_quality_metric is None else self.response_quality_metric.to_json()
, Obedience_Level.ATTR_ID_OBEDIENCE_LEVEL: { Obedience_Level.ATTR_ID_OBEDIENCE_LEVEL: None } if self.obedience_level is None else self.obedience_level.to_json()
, self.FLAG_VALUE_MEASURED: self.value_measured
, self.FLAG_NOTES: self.notes
, self.FLAG_ACTIVE: self.active
, self.FLAG_CREATED_ON: self.created_on
}
# , Command_Category.FLAG_COMMAND_CATEGORY: self.id_command_category
# Helper_App.console_log(f'as_json: {as_json}')
return as_json
def __repr__(self):
@@ -163,8 +158,8 @@ class Parameters_Assessment_Response(Get_Many_Parameters_Base):
get_all_ACM_link: bool
get_inactive_ACM_link: bool
ids_ACM_link: str
min_distance_from_handler_ACM_link: Optional[float]
max_distance_from_handler_ACM_link: Optional[float]
min_distance_from_handler_metres_ACM_link: Optional[float]
max_distance_from_handler_metres_ACM_link: Optional[float]
value_is_in_sight_of_handler_ACM_link: Optional[bool]
value_is_in_scent_range_of_handler_ACM_link: Optional[bool]
value_is_in_hearing_range_of_handler_ACM_link: Optional[bool]
@@ -242,8 +237,8 @@ class Parameters_Assessment_Response(Get_Many_Parameters_Base):
, get_all_ACM_link = True
, get_inactive_ACM_link = False
, ids_ACM_link = ''
, min_distance_from_handler_ACM_link = None
, max_distance_from_handler_ACM_link = None
, min_distance_from_handler_metres_ACM_link = None
, max_distance_from_handler_metres_ACM_link = None
, value_is_in_sight_of_handler_ACM_link = None
, value_is_in_scent_range_of_handler_ACM_link = None
, value_is_in_hearing_range_of_handler_ACM_link = None
@@ -323,8 +318,8 @@ class Parameters_Assessment_Response(Get_Many_Parameters_Base):
, get_inactive_ACM_link = json.get('a_get_inactive_ACM_link', False)
, ids_ACM_link = json.get('a_ids_ACM_link', '')
, notes_assessment_command_modality_link = json.get('a_notes_assessment_command_modality_link', '')
, min_distance_from_handler_ACM_link = json.get('a_min_distance_from_handler_ACM_link', None)
, max_distance_from_handler_ACM_link = json.get('a_max_distance_from_handler_ACM_link', None)
, min_distance_from_handler_metres_ACM_link = json.get('a_min_distance_from_handler_metres_ACM_link', None)
, max_distance_from_handler_metres_ACM_link = json.get('a_max_distance_from_handler_metres_ACM_link', None)
, value_is_in_sight_of_handler_ACM_link = json.get('a_value_is_in_sight_of_handler_ACM_link', None)
, value_is_in_scent_range_of_handler_ACM_link = json.get('a_value_is_in_scent_range_of_handler_ACM_link', None)
, value_is_in_hearing_range_of_handler_ACM_link = json.get('a_value_is_in_hearing_range_of_handler_ACM_link', None)
@@ -393,8 +388,6 @@ class Parameters_Assessment_Response(Get_Many_Parameters_Base):
@classmethod
def from_form_filters_assessment(cls, form):
_m = f'{cls.__qualname__}.from_form_filters_assessment'
Helper_App.console_log(_m)
Helper_App.console_log(f'Filters: {form}')
av.val_instance(form, 'form', _m, Filters_Assessment)
has_filter_search_text = not (form.search.data == '' or form.search.data is None)
has_filter_assessment_command_modality_link = False
@@ -403,14 +396,7 @@ class Parameters_Assessment_Response(Get_Many_Parameters_Base):
has_filter_user_handler = False
has_filter_assessment = not (form.id_assessment.data == '' or form.id_assessment.data == '0' or form.id_assessment.data is None)
active_only = av.input_bool(form.active_only.data, "active", _m)
Helper_App.console_log(f'''
has_filter_search_text: {has_filter_search_text}
has_filter_assessment_command_modality_link: {has_filter_assessment_command_modality_link}
has_filter_response_quality_metric: {has_filter_response_quality_metric}
has_filter_obedience_level: {has_filter_obedience_level}
has_filter_user_handler: {has_filter_user_handler}
active_only: {active_only}
''')
filters = cls.get_default()
filters.get_all_assessment_response = True
filters.get_inactive_assessment_response = not active_only
@@ -448,8 +434,8 @@ active_only: {active_only}
, 'a_get_all_ACM_link': self.get_all_ACM_link
, 'a_get_inactive_ACM_link': self.get_inactive_ACM_link
, 'a_ids_ACM_link': self.ids_ACM_link
, 'a_min_distance_from_handler_ACM_link': self.min_distance_from_handler_ACM_link
, 'a_max_distance_from_handler_ACM_link': self.max_distance_from_handler_ACM_link
, 'a_min_distance_from_handler_metres_ACM_link': self.min_distance_from_handler_metres_ACM_link
, 'a_max_distance_from_handler_metres_ACM_link': self.max_distance_from_handler_metres_ACM_link
, 'a_value_is_in_sight_of_handler_ACM_link': self.value_is_in_sight_of_handler_ACM_link
, 'a_value_is_in_scent_range_of_handler_ACM_link': self.value_is_in_scent_range_of_handler_ACM_link
, 'a_value_is_in_hearing_range_of_handler_ACM_link': self.value_is_in_hearing_range_of_handler_ACM_link