Feat(SQL, UI): Logic for Get-Many SQL Stored Procedures refactored to use Calc Stored Procedures and Dog Command Links page styling improved.

This commit is contained in:
2025-07-01 21:21:51 +01:00
parent caeb13429a
commit 0d1e644e6c
102 changed files with 6971 additions and 1797 deletions

View File

@@ -20,8 +20,11 @@ Base data model for views
from dog_training.business_objects.base import Base
from dog_training.business_objects.dog.user import User
from dog_training.business_objects.dog.command import Command
from dog_training.business_objects.dog.dog import Dog
from dog_training.business_objects.dog.dog_command_link import Dog_Command_Link
from dog_training.datastores.datastore_base import DataStore_Base
from dog_training.datastores.datastore_dog import DataStore_Dog
from dog_training.datastores.datastore_user import DataStore_User
from dog_training.helpers.helper_app import Helper_App
import dog_training.lib.argument_validation as av
# external
@@ -33,10 +36,24 @@ from typing import ClassVar
class Model_View_Base(BaseModel, ABC):
ATTR_ID_COMMAND: ClassVar[str] = Command.ATTR_ID_COMMAND
ATTR_ID_DOG: ClassVar[str] = Dog.ATTR_ID_DOG
ATTR_ID_DOG_COMMAND_LINK: ClassVar[str] = Dog_Command_Link.ATTR_ID_DOG_COMMAND_LINK
ATTR_TEXT_COLLAPSED: ClassVar[str] = 'textCollapsed'
ATTR_TEXT_EXPANDED: ClassVar[str] = 'textExpanded'
ATTR_VALUE_CURRENT: ClassVar[str] = 'current-value'
ATTR_VALUE_PREVIOUS: ClassVar[str] = 'previous-value'
COLOUR_ACCENT: ClassVar[str] = '#C77DFF'
COLOUR_ERROR: ClassVar[str] = 'red'
COLOUR_PAGE_BACKGROUND: ClassVar[str] = '#E0AAFF'
COLOUR_PAGE_BACKGROUND_1: ClassVar[str] = '#F5ECFE'
COLOUR_PAGE_BACKGROUND_2: ClassVar[str] = '#FAE0E2'
COLOUR_PRIMARY: ClassVar[str] = '#240046'
COLOUR_SECONDARY: ClassVar[str] = '#3C096C'
COLOUR_TEXT: ClassVar[str] = '#10002B'
COLOUR_TEXT_BACKGROUND: ClassVar[str] = 'white'
COLOUR_TEXT_LINK_UNVISITED: ClassVar[str] = '#0000EE'
COLOUR_TEXT_LINK_VISITED: ClassVar[str] = '#551A8B'
COMPANY_ADDRESS_SHORT: ClassVar[str] = '53 Alfred Green Close, Rugby, United Kingdom, CV22 6DN'
COMPANY_NUMBER: ClassVar[str] = '13587499'
ENDPOINT_GET_ALTCHA_CHALLENGE: ClassVar[str] = 'routes_core_contact.create_altcha_challenge'
@@ -66,6 +83,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_CODE: ClassVar[str] = Base.FLAG_CODE
FLAG_COLLAPSED: ClassVar[str] = 'collapsed'
FLAG_COLLAPSIBLE: ClassVar[str] = 'collapsible'
FLAG_COMMAND: ClassVar[str] = Command.FLAG_COMMAND
FLAG_COLUMN: ClassVar[str] = 'column'
FLAG_COMMENT: ClassVar[str] = 'comment'
FLAG_CONTAINER: ClassVar[str] = 'container'
@@ -82,6 +100,8 @@ class Model_View_Base(BaseModel, ABC):
FLAG_DIALOG: ClassVar[str] = 'dialog'
FLAG_DIRTY: ClassVar[str] = 'dirty'
FLAG_DISPLAY_ORDER: ClassVar[str] = Base.FLAG_DISPLAY_ORDER
FLAG_DOG: ClassVar[str] = Dog.FLAG_DOG
FLAG_DOG_COMMAND_LINK: ClassVar[str] = Dog_Command_Link.FLAG_DOG_COMMAND_LINK
FLAG_EDIT: ClassVar[str] = 'edit'
FLAG_EMAIL: ClassVar[str] = Base.FLAG_EMAIL
FLAG_ERROR: ClassVar[str] = 'error'
@@ -91,6 +111,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_FORM: ClassVar[str] = 'form'
FLAG_FORM_FILTERS: ClassVar[str] = 'form-filters'
FLAG_HAMBURGER: ClassVar[str] = 'hamburger'
FLAG_ICON: ClassVar[str] = "icon"
FLAG_IMAGE_LOGO: ClassVar[str] = 'image-logo'
FLAG_INITIALISED: ClassVar[str] = 'initialised'
FLAG_LEFT_HAND_STUB: ClassVar[str] = 'lhs'
@@ -102,16 +123,19 @@ class Model_View_Base(BaseModel, ABC):
FLAG_NAME_ATTR_OPTION_VALUE: ClassVar[str] = Base.FLAG_NAME_ATTR_OPTION_VALUE
FLAG_NAME_PLURAL: ClassVar[str] = Base.FLAG_NAME_PLURAL
# FLAG_NAME_SINGULAR: ClassVar[str] = Base.FLAG_NAME_SINGULAR
FLAG_SEARCH_TEXT: ClassVar[str] = Base.FLAG_SEARCH_TEXT
FLAG_NAV_ADMIN_HOME: ClassVar[str] = 'navAdminHome'
FLAG_NAV_CONTACT: ClassVar[str] = 'navContact'
FLAG_NAV_DOG_COMMAND: ClassVar[str] = 'navDogCommand'
FLAG_NAV_DOG_DOG: ClassVar[str] = 'navDogDog'
FLAG_NAV_DOG_DOG_COMMAND_LINK: ClassVar[str] = 'navDogDogCommandLink'
FLAG_NAV_DOG_COMMANDS: ClassVar[str] = 'navDogCommands'
FLAG_NAV_DOG_DOGS: ClassVar[str] = 'navDogDogs'
FLAG_NAV_DOG_DOG_COMMAND_LINKS: ClassVar[str] = 'navDogDogCommandLinks'
FLAG_NAV_DOG_HOME: ClassVar[str] = 'navDogHome'
FLAG_NAV_HOME: ClassVar[str] = 'navHome'
FLAG_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount'
FLAG_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin'
FLAG_NAV_USER_LOGIN: ClassVar[str] = 'navUserLogin'
FLAG_NAV_USER_LOGOUT: ClassVar[str] = 'navUserLogout'
FLAG_NOTES: ClassVar[str] = "notes"
FLAG_OVERLAY: ClassVar[str] = 'overlay'
FLAG_PAGE_BODY: ClassVar[str] = 'page-body'
FLAG_RIGHT_HAND_SIDE: ClassVar[str] = 'rhs'
@@ -128,12 +152,17 @@ class Model_View_Base(BaseModel, ABC):
FLAG_USER: ClassVar[str] = User.FLAG_USER
FLAG_WEBSITE: ClassVar[str] = Base.FLAG_WEBSITE
HASH_GET_ALTCHA_CHALLENGE: ClassVar[str] = '/altcha/create-challenge'
HASH_GET_DOG_SCRIPTS_SHARED: ClassVar[str] = '/dog/scripts_shared'
HASH_PAGE_ACCESSIBILITY_REPORT: ClassVar[str] = '/accessibility-report'
HASH_PAGE_ACCESSIBILITY_STATEMENT: ClassVar[str] = '/accessibility-statement'
HASH_PAGE_ADMIN_HOME: ClassVar[str] = '/admin'
HASH_PAGE_CONTACT: ClassVar[str] = '/contact'
HASH_PAGE_CONTACT_SUCCESS: ClassVar[str] = '/contact-success'
HASH_PAGE_DATA_RETENTION_SCHEDULE: ClassVar[str] = '/retention-schedule'
HASH_PAGE_DOG_COMMANDS: ClassVar[str] = '/dog/commands'
HASH_PAGE_DOG_DOG_COMMAND_LINKS: ClassVar[str] = '/dog/dog_command_links'
HASH_PAGE_DOG_DOGS: ClassVar[str] = '/dog/dogs'
HASH_PAGE_DOG_HOME: ClassVar[str] = '/dog/home'
HASH_PAGE_ERROR_NO_PERMISSION: ClassVar[str] = '/error'
HASH_PAGE_HOME: ClassVar[str] = '/'
HASH_PAGE_LICENSE: ClassVar[str] = '/license'
@@ -165,7 +194,7 @@ class Model_View_Base(BaseModel, ABC):
hash_page_current: str
app: Flask = None
session: None = None
is_page_store: bool = None
is_page_dog: bool = None
is_user_logged_in: bool = None
user: User = None
access_levels: list = None
@@ -182,7 +211,7 @@ class Model_View_Base(BaseModel, ABC):
self.app = current_app
with self.app.app_context():
self.session = session
self.is_page_store = False
self.is_page_dog = False
Helper_App.console_log(f'session: {self.session}')
datastore_base = DataStore_Base()

View File

@@ -36,19 +36,19 @@ class Model_View_Dog_Base(Model_View_Base):
# FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED
# HASH_GET_STORE_CUSTOMER_SALES_ORDER: ClassVar[str] = '/store/customer_sales_order_get'
# HASH_GET_STORE_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = '/store/manufacturing_purchase_order_get'
HASH_DOG_SCRIPTS_SHARED: ClassVar[str] = '/dog/scripts_shared'
HASH_PAGE_DOG_DOG_COMMAND_LINKS: ClassVar[str] = '/dog/dog_command_links'
@property
def title(self):
if self.hash_page_current == Model_View_Base.HASH_PAGE_DOG_HOME:
return 'Dog Home'
raise NotImplementedError('title must be implemented in child class')
def __init__(self, hash_page_current, **kwargs):
_m = 'Model_View_Dog_Base.__init__'
Helper_App.console_log(f'{_m}\nstarting')
super().__init__(hash_page_current=hash_page_current, **kwargs)
self.is_page_store = True
self.is_page_dog = True
"""
def get_many_dog(self, dog_filters):

View File

@@ -27,6 +27,7 @@ from pydantic import BaseModel
from typing import ClassVar
class Model_View_Dog_Dog_Command_Link(Model_View_Dog_Base):
FLAG_HAND_SIGNAL_DESCRIPTION: ClassVar[str] = Dog_Command_Link.FLAG_HAND_SIGNAL_DESCRIPTION
filter_dogs: list = None
filter_commands: list = None
dog_command_links: list = None
@@ -49,12 +50,15 @@ class Model_View_Dog_Dog_Command_Link(Model_View_Dog_Base):
parameters_filter_command = Parameters_Command.get_default()
self.filter_commands, errors = datastore.get_many_command(parameters_filter_command)
parameters_filter_dog_command_link = Parameters_Dog_Command_Link.get_default()
parameters_filter_dog_command_link = Parameters_Dog_Command_Link.from_form_filters_dog_command_link(self.form_filters)
self.dog_command_links, errors = datastore.get_many_dog_command_link(parameters_filter_dog_command_link)
Helper_App.console_log(f'dogs: {self.filter_dogs}')
Helper_App.console_log(f'commands: {self.filter_commands}')
Helper_App.console_log(f'links: {self.dog_command_links}')
# Helper_App.console_log(f'dogs: {self.filter_dogs}')
# Helper_App.console_log(f'commands: {self.filter_commands}')
# Helper_App.console_log(f'links: {self.dog_command_links}')
self.form_filters.id_dog.choices += [(str(dog.id_dog), dog.name) for dog in self.filter_dogs]
self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in self.filter_commands]
"""
@classmethod