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

151
forms/dog/assessment.py Normal file
View File

@@ -0,0 +1,151 @@
"""
Project: PARTS Website
Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: Backend
Feature: Assessment Form
Description:
Defines Flask-WTF form for handling user input on Assessments page.
"""
# IMPORTS
# internal
from business_objects.base import Base
"""
from business_objects.dog.distraction_intensity_level import Distraction_Intensity_Level
from business_objects.dog.distraction_type import Distraction_Type
from business_objects.dog.command import Lighting_Level
from business_objects.dog.command_category import Lighting_Level
from business_objects.dog.lighting_level import Lighting_Level
from business_objects.dog.lighting_level import Lighting_Level
"""
from business_objects.dog.lighting_level import Lighting_Level
from business_objects.dog.location import Location
from business_objects.dog.weather import Weather
from helpers.helper_app import Helper_App
# from models.model_view_store import Model_View_Store # circular
# from models.model_view_base import Model_View_Base
from forms.base import Form_Base
import lib.argument_validation as av
# external
from flask import Flask, render_template, request, flash, redirect, url_for, current_app
from flask_wtf import FlaskForm
from wtforms import SelectField, BooleanField, StringField, SubmitField
from wtforms.validators import DataRequired, Email, ValidationError
import markupsafe
from flask_wtf.recaptcha import RecaptchaField
from abc import ABCMeta, abstractmethod
import json
from typing import ClassVar
class Filters_Assessment(Form_Base):
ATTR_ID_ASSESSMENT: ClassVar[str] = 'id_assessment'
FLAG_USER_HANDLER: ClassVar[str] = 'id_user_handler'
search = StringField(
'Search'
)
id_assessment = SelectField(
'Assessment'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_weather = SelectField(
'Weather'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_lighting_level = SelectField(
'Lighting Level'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_location = SelectField(
'Location'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_user_handler = SelectField(
'Handler'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
"""
id_distraction_type = SelectField(
'Distraction Type'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_intensity_level_emotional = SelectField(
'Intensity Level Emotional'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_intensity_level_scent = SelectField(
'Intensity Level Scent'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_intensity_level_sight = SelectField(
'Intensity Level Sight'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_intensity_level_sound = SelectField(
'Intensity Level Sound'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_intensity_level_touch = SelectField(
'Intensity Level Touch'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_command_category = SelectField(
'Command Category'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_command = SelectField(
'Command'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_command_modality = SelectField(
'Command Modality'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
id_bribe = SelectField(
'Bribe'
, choices = [Form_Base.get_select_option_all()]
, default = Form_Base.get_select_option_default_value()
)
"""
active_only = BooleanField(
'Active'
, default = True
)
@classmethod
def from_json(cls, json):
_m = f'{cls.__qualname__}.from_json'
Helper_App.console_log(f'{_m}\njson: {json}')
filters = cls()
filters.search.data = json[Base.FLAG_SEARCH]
filters.id_assessment.data = json[cls.ATTR_ID_ASSESSMENT]
filters.id_weather.data = json[Weather.ATTR_ID_WEATHER]
filters.id_lighting_level.data = json[Lighting_Level.ATTR_ID_LIGHTING_LEVEL]
filters.id_location.data = json[Location.ATTR_ID_LOCATION]
filters.id_user_handler.data = json[cls.FLAG_USER_HANDLER]
# filters.id_distraction_type = json[Distraction_Type.ATTR_ID_DISTRACTION_TYPE]
filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json')
return filters
def to_json(self):
return {
Base.FLAG_SEARCH: self.search.data
, Base.FLAG_ACTIVE_ONLY: self.active_only.data
}