Feat(SQL, UI): 1. Dog Command Links page completed with get + set functionality. \n 2. Commands page and Command Categories page completed with get + set functionality.

This commit is contained in:
2025-07-09 17:42:43 +01:00
parent 660b15cb8f
commit 28158cb0c4
68 changed files with 3302 additions and 3926 deletions

View File

@@ -13,6 +13,8 @@ from dog_training.business_objects.dog.command_category import Command_Category
from dog_training.business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base
import dog_training.lib.argument_validation as av
from dog_training.extensions import db
from dog_training.forms.dog.command import Filters_Command
from dog_training.forms.dog.command_category import Filters_Command_Category
from dog_training.helpers.helper_app import Helper_App
# external
from dataclasses import dataclass
@@ -59,6 +61,7 @@ class Command(SQLAlchemy_ABC, Base):
command.notes = query_row[5]
command.active = av.input_bool(query_row[6], 'active', _m)
# command.created_on = query_row[7]
# command.command_category = Command_Category.from_db_command(query_row)
return command
@classmethod
@@ -74,7 +77,7 @@ class Command(SQLAlchemy_ABC, Base):
# command.notes = query_row[4]
command.active = True # av.input_bool(True, 'active', _m)
# command.created_on = query_row[7]
command.command_category = Command_Category.from_db_dog_command_link(query_row)
command.command_category = Command_Category.from_db_dog_command_link(query_row) # this is done in datastore get many method using category dictionary
return command
@classmethod
@@ -84,7 +87,7 @@ class Command(SQLAlchemy_ABC, Base):
if json is None: return command
# Helper_App.console_log(f'{_m}\njson: {json}')
command.id_command = -1
command.id_command_category = json[Command_Category.FLAG_COMMAND_CATEGORY]
command.id_command_category = json[Command_Category.ATTR_ID_COMMAND_CATEGORY]
command.name = json[cls.FLAG_NAME]
command.hand_signal_default_description = json[cls.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION]
command.can_have_button = json[cls.FLAG_CAN_HAVE_BUTTON]
@@ -141,8 +144,8 @@ class Command_Temp(db.Model, Base):
super().__init__()
@classmethod
def from_Command(cls, command):
_m = 'Command_Temp.from_Command'
def from_command(cls, command):
_m = 'Command_Temp.from_command'
temp = cls()
temp.id_command = command.id_command
temp.id_command_category = command.id_command_category
@@ -215,25 +218,38 @@ class Parameters_Command(Get_Many_Parameters_Base):
, output_commands = json.get('a_output_commands', False)
)
"""
@classmethod
def from_form_filters_dog_command_link(cls, form):
av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_dog_command_link', Filters_Dog_Command_Link)
def from_form_filters_command(cls, form):
av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command', Filters_Command)
has_filter_search_text = not (form.search.data == '' or form.search.data is None)
has_filter_command_category = not (has_filter_search_text or form.id_command_category.data == '0' or form.id_command_category.data == '' or form.id_command_category.data is None)
has_filter_command = not (has_filter_search_text or form.id_command.data == '0' or form.id_command.data == '' or form.id_command.data is None)
active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_dog_command_link")
return cls(
get_all_command_category = not has_filter_command_category
, get_inactive_command_category = not active_only
, ids_command_category = form.id_command_category.data if has_filter_command_category else ''
, names_command_category = form.search_text.data if has_filter_search_text else ''
, get_all_command = not has_filter_command
, get_inactive_command = not active_only
, ids_command = form.id_command.data if has_filter_command else ''
, names_command = form.search_text.data if has_filter_search_text else ''
)
"""
active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command")
filters = cls.get_default()
filters.get_all_command_category = not has_filter_command_category
filters.get_inactive_command_category = not active_only
filters.ids_command_category = form.id_command_category.data if has_filter_command_category else ''
filters.names_command_category = form.search_text.data if has_filter_search_text else ''
filters.get_all_command = True
filters.get_inactive_command = not active_only
filters.ids_command = ''
filters.names_command = form.search_text.data if has_filter_search_text else ''
return filters
@classmethod
def from_form_filters_command_category(cls, form):
av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command_category', Filters_Command_Category)
has_filter_search_text = not (form.search.data == '' or form.search.data is None)
active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command")
filters = cls.get_default()
filters.get_all_command_category = True
filters.get_inactive_command_category = not active_only
filters.ids_command_category = ''
filters.names_command_category = form.search_text.data if has_filter_search_text else ''
filters.get_all_command = True
filters.get_inactive_command = not active_only
filters.ids_command = ''
filters.names_command = form.search_text.data if has_filter_search_text else ''
return filters
def to_json(self):
return {

View File

@@ -64,7 +64,7 @@ class Command_Category(SQLAlchemy_ABC, Base):
command_category = cls()
if json is None: return Command_Category
# Helper_App.console_log(f'{_m}\njson: {json}')
command_category.id_command_category = -1
command_category.id_command_category = json.get(cls.ATTR_ID_COMMAND_CATEGORY, -1)
command_category.code = json[cls.FLAG_CODE]
command_category.name = json[cls.FLAG_NAME]
command_category.active = json[cls.FLAG_ACTIVE]

View File

@@ -71,8 +71,8 @@ class Dog_Command_Link(SQLAlchemy_ABC, Base):
if json is None: return dog_command_link
# Helper_App.console_log(f'{_m}\njson: {json}')
dog_command_link.id_link = -1
dog_command_link.id_dog = json[Dog.FLAG_DOG]
dog_command_link.id_command = json[Command.FLAG_COMMAND]
dog_command_link.id_dog = json[Dog.ATTR_ID_DOG]
dog_command_link.id_command = json[Command.ATTR_ID_COMMAND]
dog_command_link.hand_signal_description = json[cls.FLAG_HAND_SIGNAL_DESCRIPTION]
dog_command_link.notes = json[cls.FLAG_NOTES]
dog_command_link.active = json[cls.FLAG_ACTIVE]
@@ -120,15 +120,15 @@ class Dog_Command_Link_Temp(db.Model, Base):
hand_signal_description = db.Column(db.Text)
notes = db.Column(db.Text)
active = db.Column(db.Boolean)
created_on = db.Column(db.DateTime)
# created_on = db.Column(db.DateTime)
guid: str = db.Column(db.String(36))
def __init__(self):
super().__init__()
@classmethod
def from_Dog_Command_Link(cls, dog_command_link):
_m = 'Dog_Command_Link_Temp.from_Dog_Command_Link'
def from_dog_command_link(cls, dog_command_link):
_m = 'Dog_Command_Link_Temp.from_dog_command_link'
temp = cls()
temp.id_link = dog_command_link.id_link
temp.id_dog = dog_command_link.id_dog
@@ -136,7 +136,7 @@ class Dog_Command_Link_Temp(db.Model, Base):
temp.hand_signal_description = dog_command_link.hand_signal_description
temp.notes = dog_command_link.notes
temp.active = dog_command_link.active
temp.created_on = dog_command_link.created_on
# temp.created_on = dog_command_link.created_on
return temp