Feat(SQL, UI): 1. Calc and Get Many Stored Procedures created for Weather, Lighting Level, Assessment, Distraction Type, Distraction Intensity Level, Distraction, Bribe, Assessment Command Modality Link, Response Quality Metric, Obedience Level, and Assessment Response. \n 2. Assessments and Assessment pages created with data loading and hooked up, but not saving.

This commit is contained in:
2025-07-24 16:48:18 +01:00
parent 6bb3a77a34
commit fad5336cc4
137 changed files with 10442 additions and 1116 deletions

View File

@@ -0,0 +1,205 @@
"""
Project: PARTS Website
Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: View Models
Feature: Dog Assessments View Model
Description:
Data model for dog assessments view
"""
# internal
from business_objects.dog.assessment import Assessment, Parameters_Assessment
from business_objects.dog.assessment_command_modality_link import Assessment_Command_Modality_Link, Parameters_Assessment_Command_Modality_Link
from business_objects.dog.assessment_response import Assessment_Response, Parameters_Assessment_Response
from business_objects.dog.bribe import Bribe, Parameters_Bribe
from business_objects.dog.command import Command, Parameters_Command
from business_objects.dog.command_category import Command_Category
from business_objects.dog.command_modality import Command_Modality, Parameters_Command_Modality
from business_objects.dog.distraction import Distraction, Parameters_Distraction
from business_objects.dog.distraction_intensity_level import Distraction_Intensity_Level, Parameters_Distraction_Intensity_Level
from business_objects.dog.distraction_type import Distraction_Type, Parameters_Distraction_Type
from business_objects.dog.lighting_level import Lighting_Level, Parameters_Lighting_Level
from business_objects.dog.location import Location, Parameters_Location
from business_objects.dog.obedience_level import Obedience_Level, Parameters_Obedience_Level
from business_objects.dog.response_quality_metric import Response_Quality_Metric, Parameters_Response_Quality_Metric
from business_objects.dog.user import User, Parameters_User
from business_objects.dog.weather import Weather, Parameters_Weather
from datastores.datastore_dog import DataStore_Dog
from datastores.datastore_user import DataStore_User
from models.model_view_dog_base import Model_View_Dog_Base
from forms.dog.assessment import Filters_Assessment
# from routes import bp_home
from helpers.helper_app import Helper_App
import lib.argument_validation as av
# external
from pydantic import BaseModel
from typing import ClassVar, Optional
from operator import attrgetter
class Model_View_Dog_Assessment(Model_View_Dog_Base):
FLAG_DISTANCE_FROM_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_DISTANCE_FROM_HANDLER
FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL
FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT
FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT
FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND
FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH
FLAG_IS_IN_HEARING_RANGE_OF_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER
FLAG_IS_IN_SCENT_RANGE_OF_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER
FLAG_IS_IN_SIGHT_OF_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_IN_SIGHT_OF_HANDLER
FLAG_IS_ON_LEAD: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_ON_LEAD
FLAG_PROXIMITY_METRES: ClassVar[str] = Distraction.FLAG_PROXIMITY_METRES
FLAG_TEMPERATURE_CELCIUS: ClassVar[str] = Assessment.FLAG_TEMPERATURE_CELCIUS
FLAG_TRIAL_COUNT: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_TRIAL_COUNT
FLAG_USER_HANDLER: ClassVar[str] = Assessment.FLAG_USER_HANDLER
FLAG_VALUE_MEASURED: ClassVar[str] = Assessment_Response.FLAG_VALUE_MEASURED
ID_FORM_ASSESSMENT: ClassVar[str] = 'form_assessment'
ID_FORM_ASSESSMENT_COMMAND_MODALITY_LINKS: ClassVar[str] = 'form_assessment_command_modality_links'
ID_FORM_DISTRACTIONS: ClassVar[str] = 'form_distractions'
ID_TABLE_ASSESSMENT: ClassVar[str] = 'table_assessment'
ID_TABLE_ASSESSMENT_COMMAND_MODALITY_LINKS: ClassVar[str] = 'table_assessment_command_modality_links'
ID_TABLE_ASSESSMENT_RESPONSES: ClassVar[str] = 'table_assessment_responses'
ID_TABLE_DISTRACTIONS: ClassVar[str] = 'table_distractions'
filter_bribes: list = None
filter_command_categories: list = None
filter_command_modalities: list = None
filter_commands: list = None
filter_distraction_intensity_levels: list = None
filter_distraction_types: list = None
filter_lighting_levels: list = None
filter_locations: list = None
filter_obedience_levels: list = None
filter_response_quality_metrics: list = None
filter_user_handlers: list = None
filter_weathers: list = None
assessments: list = None
form_filters: Filters_Assessment = None
form_filters_old: Filters_Assessment
id_assessment: Optional[int]
def __init__(self, form_filters_old, id_assessment = None, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_ASSESSMENTS):
_m = 'Model_View_Dog_Assessment.__init__'
Helper_App.console_log(f'{_m}\nstarting...')
super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old, id_assessment=id_assessment)
self._title = 'Assessments'
self.form_filters = form_filters_old
datastore_dog = DataStore_Dog()
datastore_user = DataStore_User()
# Assessments + filters
parameters_filter_lighting_level = Parameters_Lighting_Level.get_default()
self.filter_lighting_levels, errors = datastore_dog.get_many_lighting_level(parameters_filter_lighting_level)
if len(self.filter_lighting_levels) > 0:
self.form_filters.id_lighting_level.choices += [(str(lighting_level.id_lighting_level), lighting_level.name) for lighting_level in self.filter_lighting_levels]
parameters_filter_location = Parameters_Location.get_default()
self.filter_locations, errors = datastore_dog.get_many_location(parameters_filter_location)
if len(self.filter_locations) > 0:
self.form_filters.id_location.choices += [(str(location.id_location), location.name) for location in self.filter_locations]
parameters_filter_user = Parameters_User.get_default()
parameters_filter_user.id_user = self.user.id_user
parameters_filter_user.get_all_user = True
self.filter_user_handlers, errors = datastore_user.get_many_user(parameters_filter_user)
if len(self.filter_user_handlers) > 0:
self.form_filters.id_user_handler.choices += [(str(user.id_user), user.get_name()) for user in self.filter_user_handlers]
parameters_filter_weather = Parameters_Weather.get_default()
self.filter_weathers, errors = datastore_dog.get_many_weather(parameters_filter_weather)
if len(self.filter_weathers) > 0:
self.form_filters.id_weather.choices += [(str(weather.id_weather), weather.name) for weather in self.filter_weathers]
Helper_App.console_log(f'Form filters: {self.form_filters}')
parameters_filter_assessment = Parameters_Assessment.from_form_filters_assessment(self.form_filters)
if self.id_assessment is not None:
parameters_filter_assessment.ids_assessment = str(self.id_assessment)
Helper_App.console_log(f'Query args: {parameters_filter_assessment}')
self.assessments, errors = datastore_dog.get_many_assessment(parameters_filter_assessment)
# Distractions + filters
parameters_filter_distraction_type = Parameters_Distraction_Type.get_default()
self.filter_distraction_types, errors = datastore_dog.get_many_distraction_type(parameters_filter_distraction_type)
"""
if len(self.filter_distraction_types) > 0:
self.form_filters.id_distraction_type.choices += [(str(distraction_type.id_type), distraction_type.name) for distraction_type in self.filter_distraction_types]
"""
parameters_filter_distraction_intensity_level = Parameters_Distraction_Intensity_Level.get_default()
self.filter_distraction_intensity_levels, errors = datastore_dog.get_many_distraction_intensity_level(parameters_filter_distraction_intensity_level)
"""
if len(self.filter_distraction_intensity_levels) > 0:
self.form_filters.id_intensity_level.choices += [(str(distraction_intensity_level.id_intensity_level), distraction_intensity_level.name) for distraction_intensity_level in self.filter_distraction_intensity_levels]
"""
parameters_filter_distraction = Parameters_Distraction.from_form_filters_assessment(self.form_filters)
distractions, errors = datastore_dog.get_many_distraction(parameters_filter_distraction)
# Assessment Command Modality Links + filters
parameters_filter_command = Parameters_Command.get_default()
self.filter_command_categories, self.filter_commands, errors = datastore_dog.get_many_command(parameters_filter_command)
"""
if len(self.filter_command_categories) > 0:
self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]
if len(self.filter_commands) > 0:
Helper_App.console_log(f'filter commands: {self.filter_commands}')
sorted_filter_commands = self.filter_commands
sorted_filter_commands.sort(key = attrgetter('name'))
Helper_App.console_log(f'sorted filter commands: {sorted_filter_commands}')
self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in sorted_filter_commands] # .sort(key = lambda command: command[1])
"""
parameters_filter_command_modality = Parameters_Command_Modality.get_default()
self.filter_command_modalities, errors = datastore_dog.get_many_command_modality(parameters_filter_command_modality)
"""
if len(self.filter_command_modalities) > 0:
self.form_filters.id_command_modality.choices += [(str(command_modality.id_command_modality), command_modality.name) for command_modality in self.filter_command_modalities]
"""
parameters_filter_bribe = Parameters_Bribe.get_default()
self.filter_bribes, errors = datastore_dog.get_many_bribe(parameters_filter_bribe)
"""
if len(self.filter_bribes) > 0:
self.form_filters.id_bribe.choices += [(str(bribe.id_bribe), bribe.name) for bribe in self.filter_bribes]
"""
parameters_filter_assessment_command_modality_link = Parameters_Assessment_Command_Modality_Link.from_form_filters_assessment(self.form_filters)
assessment_command_modality_links, errors = datastore_dog.get_many_assessment_command_modality_link(parameters_filter_assessment_command_modality_link)
# Assessment Responses and filters
parameters_filter_response_quality_metric = Parameters_Response_Quality_Metric.get_default()
self.filter_response_quality_metrics, errors = datastore_dog.get_many_response_quality_metric(parameters_filter_response_quality_metric)
"""
if len(self.filter_response_quality_metrics) > 0:
self.form_filters.id_response_quality_metric.choices += [(str(response_quality_metric.id_response_quality_metric), response_quality_metric.name) for response_quality_metric in self.filter_response_quality_metrics]
"""
parameters_filter_obedience_level = Parameters_Obedience_Level.get_default()
self.filter_obedience_levels, errors = datastore_dog.get_many_obedience_level(parameters_filter_obedience_level)
"""
if len(self.filter_obedience_levels) > 0:
self.form_filters.id_obedience_level.choices += [(str(obedience_level.id_obedience_level), obedience_level.name) for obedience_level in self.filter_obedience_levels]
"""
parameters_filter_assessment_response = Parameters_Assessment_Response.from_form_filters_assessment(self.form_filters)
assessment_responses, errors = datastore_dog.get_many_assessment_response(parameters_filter_assessment_response)
for index_link in range(len(assessment_command_modality_links)):
link = assessment_command_modality_links[index_link]
link.assessment_responses = [response for response in assessment_responses if response.id_assessment_command_modality_link == link.id_link]
assessment_command_modality_links[index_link] = link
for index_assessment in range(len(self.assessments)):
assessment = self.assessments[index_assessment]
assessment.distractions = [distraction for distraction in distractions if distraction.id_assessment == assessment.id_assessment]
assessment.assessment_command_modality_links = [link for link in assessment_command_modality_links if link.id_assessment == assessment.id_assessment]
self.assessments[index_assessment] = assessment
Helper_App.console_log(f'Final assessments: {self.assessments}')
test_assessments = Model_View_Dog_Assessment.convert_list_objects_to_dict_json_by_attribute_key_default(self.assessments)
Helper_App.console_log(f'JSON assessments: {test_assessments}')