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,118 @@
"""
Project: PARTS Website
Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: App Routing
Feature: Dog - Assessment Routes
Description:
Dog Assessments Page Controller.
"""
# IMPORTS
# internal
from business_objects.api import API
from business_objects.dog.command import Command
from business_objects.dog.assessment import Assessment
from datastores.datastore_dog import DataStore_Dog
from forms.dog.assessment import Filters_Assessment
from helpers.helper_app import Helper_App
from models.model_view_dog_assessment import Model_View_Dog_Assessment
from models.model_view_home import Model_View_Home
import lib.argument_validation as av
# external
from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app, flash
from flask_mail import Mail, Message
from extensions import db, oauth, mail
from urllib.parse import quote_plus, urlencode
from authlib.integrations.flask_client import OAuth
from authlib.integrations.base_client import OAuthError
from urllib.parse import quote, urlparse, parse_qs
import json
import base64
import hmac
import hashlib
import datetime
from altcha import ChallengeOptions, create_challenge, verify_solution
routes_dog_assessment = Blueprint('routes_dog_assessment', __name__)
@routes_dog_assessment.route(Model_View_Dog_Assessment.HASH_PAGE_DOG_ASSESSMENTS, methods=['GET'])
def assessments():
Helper_App.console_log('assessments')
Helper_App.console_log(f'request_args: {request.args}')
try:
form_filters = Filters_Assessment.from_json(request.args)
except Exception as e:
Helper_App.console_log(f'Error: {e}')
form_filters = Filters_Assessment()
Helper_App.console_log(f'form_filters={form_filters}')
model = Model_View_Dog_Assessment(form_filters_old = form_filters)
if not model.is_user_logged_in:
return redirect(url_for('routes_core_home.home'))
Helper_App.console_log(f'form_filters={form_filters}')
return render_template('pages/dog/_assessments.html', model = model)
@routes_dog_assessment.route(Model_View_Dog_Assessment.HASH_SAVE_DOG_ASSESSMENT, methods=['POST'])
def save_assessment():
data = Helper_App.get_request_data(request)
try:
form_filters = Filters_Assessment.from_json(data[Model_View_Dog_Assessment.FLAG_FORM_FILTERS])
if not form_filters.validate_on_submit():
return jsonify({
Model_View_Dog_Assessment.FLAG_STATUS: Model_View_Dog_Assessment.FLAG_FAILURE,
Model_View_Dog_Assessment.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
})
model_return = Model_View_Dog_Assessment(form_filters_old=form_filters)
if not model_return.is_user_logged_in:
raise Exception('User not logged in')
assessments = data[Model_View_Dog_Assessment.FLAG_ASSESSMENT]
if len(assessments) == 0:
return jsonify({
Model_View_Dog_Assessment.FLAG_STATUS: Model_View_Dog_Assessment.FLAG_FAILURE,
Model_View_Dog_Assessment.FLAG_MESSAGE: f'No assessments.'
})
objs_assessment = []
for assessment in assessments:
objs_assessment.append(Assessment.from_json(assessment))
Helper_App.console_log(f'objs_assessment={objs_assessment}')
errors = DataStore_Dog.save_assessments(data.get('comment', 'No comment'), objs_assessment)
if (len(errors) > 0):
return jsonify({
Model_View_Dog_Assessment.FLAG_STATUS: Model_View_Dog_Assessment.FLAG_FAILURE,
Model_View_Dog_Assessment.FLAG_MESSAGE: f'Error saving assessments.\n{model_return.convert_list_objects_to_json(errors)}'
})
return jsonify({
Model_View_Dog_Assessment.FLAG_STATUS: Model_View_Dog_Assessment.FLAG_SUCCESS,
Model_View_Dog_Assessment.FLAG_DATA: Model_View_Dog_Assessment.convert_list_objects_to_json(model_return.assessments)
})
except Exception as e:
return jsonify({
Model_View_Dog_Assessment.FLAG_STATUS: Model_View_Dog_Assessment.FLAG_FAILURE,
Model_View_Dog_Assessment.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
})
@routes_dog_assessment.route(Model_View_Dog_Assessment.HASH_PAGE_DOG_ASSESSMENT, methods=['GET'])
def assessment():
Helper_App.console_log('assessment:')
Helper_App.console_log(f'request_args: {request.args}')
try:
form_filters = Filters_Assessment.from_json(request.args)
except Exception as e:
Helper_App.console_log(f'Error: {e}')
form_filters = Filters_Assessment()
Helper_App.console_log(f'form_filters={form_filters}')
id_assessment = request.args.get(Model_View_Dog_Assessment.ATTR_ID_ASSESSMENT, None)
model = Model_View_Dog_Assessment(form_filters_old = form_filters, id_assessment = id_assessment, hash_page_current = Model_View_Dog_Assessment.HASH_PAGE_DOG_ASSESSMENT)
model._title = 'Assessment'
if model.assessments is None or len(model.assessments) == 0:
return assessments()
if not model.is_user_logged_in:
return redirect(url_for('routes_core_home.home'))
Helper_App.console_log(f'form_filters={form_filters}')
return render_template('pages/dog/_assessment.html', model = model)