Feat(SQL, UI): 1. Perfected architecture for modular Search functionality across heirarchical Get Many and Calc Stored Procedures that allows text search filtering on different fields as well as by record Id with control over how the filters are applied. \n 2. Updated User Calc and Get Many Stored Procedures with new Search functionality. \n 3. Improved styles on Dog Command Link page.

This commit is contained in:
2025-07-05 23:17:07 +01:00
parent 0d1e644e6c
commit 8cb8508dcd
51 changed files with 4161 additions and 1292 deletions

View File

@@ -63,7 +63,7 @@ class Base():
FLAG_PRIORITY: ClassVar[str] = 'priority'
FLAG_REGION: ClassVar[str] = 'region'
FLAG_ROWS: ClassVar[str] = 'rows'
FLAG_SEARCH_TEXT: ClassVar[str] = 'search_text'
FLAG_SEARCH: ClassVar[str] = 'search'
FLAG_SYMBOL: ClassVar[str] = 'symbol'
FLAG_URL: ClassVar[str] = 'url'
FLAG_USER: ClassVar[str] = 'authorisedUser' # 'user' already used

View File

@@ -41,13 +41,15 @@ class Command(SQLAlchemy_ABC, Base):
def __init__(self):
self.id_command = 0
self.command_category = None
self.is_new = False
self.has_button = False
super().__init__()
def from_db_command(query_row):
_m = 'Command.from_db_command'
command = Command()
@classmethod
def from_db_command(cls, query_row):
_m = f'{cls.__qualname__}.from_db_command'
command = cls()
command.id_command = query_row[0]
command.id_command_category = query_row[1]
command.name = query_row[2]
@@ -59,25 +61,27 @@ class Command(SQLAlchemy_ABC, Base):
# command.created_on = query_row[7]
return command
def from_db_dog_command_link(query_row):
_m = 'Command.from_db_dog_command_link'
command = Command()
@classmethod
def from_db_dog_command_link(cls, query_row):
_m = f'{cls.__qualname__}.from_db_dog_command_link'
command = cls()
command.id_command = query_row[5]
command.id_command_category = query_row[3]
command.name = query_row[6]
# command.hand_signal_default_description = query_row[2]
# command.can_have_button = av.input_bool(query_row[5], 'can_have_button', _m)
command.has_button = av.input_bool(query_row[7], 'has_button', _m)
command.can_have_button = av.input_bool(query_row[8], 'can_have_button', _m)
# command.has_button = av.input_bool(query_row[7], 'has_button', _m)
# command.notes = query_row[4]
command.active = av.input_bool(True, 'active', _m)
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)
return command
@classmethod
def from_json(cls, json):
_m = 'Command.from_json'
_m = f'{cls.__qualname__}.from_json'
command = cls()
if json is None: return Command
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]
@@ -94,7 +98,7 @@ class Command(SQLAlchemy_ABC, Base):
as_json = {
**self.get_shared_json_attributes(self)
, self.ATTR_ID_COMMAND: self.id_command
, Command_Category.FLAG_COMMAND_CATEGORY: self.id_command_category
, Command_Category.ATTR_ID_COMMAND_CATEGORY: self.id_command_category
, self.FLAG_NAME: self.name
, self.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION: self.hand_signal_default_description
, self.FLAG_CAN_HAVE_BUTTON: self.can_have_button
@@ -152,48 +156,102 @@ class Command_Temp(db.Model, Base):
class Parameters_Command(Get_Many_Parameters_Base):
get_all_command_category: bool
get_inactive_command_category: bool
ids_command_category: str
names_command_category: str
get_all_command: bool
get_inactive_command: bool
ids_command: str
names_command: str
hand_signal_default_descriptions_command: str
notes_command: str
require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool
output_command_categories: bool
output_commands: bool
@classmethod
def get_default(cls):
return cls(
get_all_command = True
get_all_command_category = True
, get_inactive_command_category = False
, ids_command_category = ''
, names_command_category = ''
, get_all_command = True
, get_inactive_command = False
, ids_command = ''
, names_command = ''
, hand_signal_default_descriptions_command = ''
, notes_command = ''
, require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False
, require_any_non_id_search_filters_met = True
, output_command_categories = True
, output_commands = True
)
@classmethod
def from_json(cls, json):
return cls(
get_all_command = json.get('a_get_all_command', False)
get_all_command_category = json.get('a_get_all_command_category', False)
, get_inactive_command_category = json.get('a_get_inactive_command_category', False)
, ids_command_category = json.get('a_ids_command_category', '')
, names_command_category = json.get('a_names_command_category', '')
, get_all_command = json.get('a_get_all_command', False)
, get_inactive_command = json.get('a_get_inactive_command', False)
, ids_command = json.get('a_ids_command', '')
, names_command = json.get('a_names_command', '')
, hand_signal_default_descriptions_command = json.get('a_hand_signal_default_descriptions_command', '')
, notes_command = json.get('a_notes_command', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
, require_any_non_id_search_filters_met = json.get('a_require_any_non_id_search_filters_met', True)
, output_command_categories = json.get('a_output_command_categories', False)
, output_commands = json.get('a_output_commands', False)
)
"""
@classmethod
def from_form_filters_command(cls, form):
av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command', Filters_Command)
has_filter_command = not (form.id_command.data == '0' or form.id_command.data == '' or form.id_command.data is None)
active_only = av.input_bool(form.active.data, "active", "Parameters_Command.from_form_filters_command")
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)
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 = not has_filter_command
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_id else ''
, names_command = form.name_command.data if has_filter_name else ''
, ids_command = form.id_command.data if has_filter_command else ''
, names_command = form.search_text.data if has_filter_search_text else ''
)
"""
def to_json(self):
return {
'a_get_all_command': self.get_all_command
'a_get_all_command_category': self.get_all_command_category
, 'a_get_inactive_command_category': self.get_inactive_command_category
, 'a_ids_command_category': self.ids_command_category
, 'a_names_command_category': self.names_command_category
, 'a_get_all_command': self.get_all_command
, 'a_get_inactive_command': self.get_inactive_command
, 'a_ids_command': self.ids_command
, 'a_names_command': self.names_command
, 'a_hand_signal_default_descriptions_command': self.hand_signal_default_descriptions_command
, 'a_notes_command': self.notes_command
, 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met
, 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met
, 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met
, 'a_require_any_non_id_search_filters_met': self.require_any_non_id_search_filters_met
, 'a_output_command_categories': self.output_command_categories
, 'a_output_commands': self.output_commands
}

View File

@@ -37,9 +37,21 @@ class Command_Category(SQLAlchemy_ABC, Base):
self.is_new = False
super().__init__()
def from_db_dog_command_link(query_row):
_m = 'Command_Category.from_db_dog_command_link'
level = Command_Category()
@classmethod
def from_db_command(cls, query_row):
_m = f'{cls.__qualname__}.from_db_command'
category = cls()
category.id_command_category = query_row[0]
category.code = query_row[1]
category.name = query_row[2]
category.active = av.input_bool(query_row[3], 'active', _m)
# command.created_on = query_row[7]
return category
@classmethod
def from_db_dog_command_link(cls, query_row):
_m = f'{cls.__qualname__}.from_db_dog_command_link'
level = cls()
level.id_command_category = query_row[3]
# level.code = query_row[6]
level.name = query_row[4]

View File

@@ -42,9 +42,10 @@ class Dog(SQLAlchemy_ABC, Base):
self.is_new = False
super().__init__()
def from_db_dog(query_row):
@classmethod
def from_db_dog(cls, query_row):
_m = 'Dog.from_db_dog'
dog = Dog()
dog = cls()
dog.id_dog = query_row[0]
dog.name = query_row[1]
dog.appearance = query_row[2]
@@ -53,9 +54,10 @@ class Dog(SQLAlchemy_ABC, Base):
dog.active = av.input_bool(query_row[5], 'active', _m)
return dog
def from_db_dog_command_link(query_row):
@classmethod
def from_db_dog_command_link(cls, query_row):
_m = 'Dog.from_db_dog_command_link'
dog = Dog()
dog = cls()
dog.id_dog = query_row[1]
dog.name = query_row[2]
"""
@@ -142,6 +144,10 @@ class Parameters_Dog(Get_Many_Parameters_Base):
get_inactive_dog: bool
ids_dog: str
names_dog: str
require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool
@classmethod
def get_default(cls):
@@ -150,6 +156,10 @@ class Parameters_Dog(Get_Many_Parameters_Base):
, get_inactive_dog = False
, ids_dog = ''
, names_dog = ''
, require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False
, require_any_non_id_search_filters_met = True
)
@classmethod
@@ -159,6 +169,10 @@ class Parameters_Dog(Get_Many_Parameters_Base):
, get_inactive_dog = json.get('a_get_inactive_dog', False)
, ids_dog = json.get('a_ids_dog', '')
, names_dog = json.get('names_dog', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
, require_any_non_id_search_filters_met = json.get('a_require_any_non_id_search_filters_met', True)
)
"""
@@ -183,5 +197,9 @@ class Parameters_Dog(Get_Many_Parameters_Base):
, 'a_get_inactive_dog': self.get_inactive_dog
, 'a_ids_dog': self.ids_dog
, 'a_names_dog': self.names_dog
, 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met
, 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met
, 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met
, 'a_require_any_non_id_search_filters_met': self.require_any_non_id_search_filters_met
}

View File

@@ -48,14 +48,15 @@ class Dog_Command_Link(SQLAlchemy_ABC, Base):
self.command = None
super().__init__()
def from_db_dog_command_link(query_row):
@classmethod
def from_db_dog_command_link(cls, query_row):
_m = 'Dog_Command_Link.from_db_dog_command_link'
dog_command_link = Dog_Command_Link()
dog_command_link = cls()
dog_command_link.id_link = query_row[0]
dog_command_link.id_dog = query_row[1]
#dog_command_link.id_command_category = query_row[3]
dog_command_link.id_command = query_row[5]
dog_command_link.hand_signal_description = query_row[8]
dog_command_link.hand_signal_description = query_row[7]
dog_command_link.notes = query_row[9]
dog_command_link.active = av.input_bool(query_row[10], 'active', _m)
# dog_command_link.created_on = query_row[7]
@@ -140,58 +141,146 @@ class Dog_Command_Link_Temp(db.Model, Base):
class Parameters_Dog_Command_Link(Get_Many_Parameters_Base):
get_all_link: bool
get_inactive_link: bool
ids_link: str
get_all_dog: bool
get_inactive_dog: bool
ids_dog: str
names_dog: str
get_all_command_category: bool
get_inactive_command_category: bool
ids_command_category: str
names_command_category: str
get_all_command: bool
get_inactive_command: bool
ids_command: str
names_command: str
hand_signal_descriptions_link: str
notes_command: str
notes_link: str
require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool
@classmethod
def get_default(cls):
return cls(
get_all_dog = True
get_all_link = True
, get_inactive_link = False
, ids_link = ''
, get_all_dog = True
, get_inactive_dog = False
, ids_dog = ''
, names_dog = ''
, get_all_command_category = True
, get_inactive_command_category = False
, ids_command_category = ''
, names_command_category = ''
, get_all_command = True
, get_inactive_command = False
, ids_command = ''
, names_command = ''
, hand_signal_descriptions_link = ''
, notes_command = ''
, notes_link = ''
, require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False
, require_any_non_id_search_filters_met = True
)
@classmethod
def from_json(cls, json):
return cls(
get_all_dog = json.get('a_get_all_dog', False)
get_all_link = json.get('a_get_all_link', False)
, get_inactive_link = json.get('a_get_inactive_link', False)
, ids_link = json.get('a_ids_link', '')
, get_all_dog = json.get('a_get_all_dog', False)
, get_inactive_dog = json.get('a_get_inactive_dog', False)
, ids_dog = json.get('a_ids_dog', '')
, names_dog = json.get('a_names_dog', '')
, get_all_command_category = json.get('a_get_all_command_category', False)
, get_inactive_command_category = json.get('a_get_inactive_command_category', False)
, ids_command_category = json.get('a_ids_command_category', '')
, names_command_category = json.get('a_names_command_category', '')
, get_all_command = json.get('a_get_all_command', False)
, get_inactive_command = json.get('a_get_inactive_command', False)
, ids_command = json.get('a_ids_command', '')
, names_command = json.get('a_names_command', '')
, hand_signal_descriptions_link = json.get('a_hand_signal_descriptions_link', '')
, notes_command = json.get('a_notes_command', '')
, notes_link = json.get('a_notes_link', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
, require_any_non_id_search_filters_met = json.get('a_require_any_non_id_search_filters_met', True)
)
@classmethod
def from_form_filters_dog_command_link(cls, form):
av.val_instance(form, 'form', 'Parameters_Dog_Command_Link.from_form_filters_dog_command_link', Filters_Dog_Command_Link)
_m = f'{cls.__qualname__}.from_form_filters_dog_command_link'
Helper_App.console_log(_m)
Helper_App.console_log(f'Filters: {form}')
av.val_instance(form, 'form', _m, Filters_Dog_Command_Link)
has_filter_search_text = not (form.search.data == '' or form.search.data is None)
has_filter_dog = not (has_filter_search_text or form.id_dog.data == '0' or form.id_dog.data == '' or form.id_dog.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_Dog_Command_Link.from_form_filters_dog_command_link")
return cls(
get_all_dog = not has_filter_dog
, get_inactive_dog = not active_only
, ids_dog = form.id_dog.data if has_filter_dog else form.search.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 form.search.data if has_filter_search_text else ''
)
has_filter_dog = not (form.id_dog.data == '0' or form.id_dog.data == '' or form.id_dog.data is None)
has_filter_command_category = not (form.id_command_category.data == '0' or form.id_command_category.data == '' or form.id_command_category.data is None)
has_filter_command = not (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", _m)
Helper_App.console_log(f'''
has_filter_search_text: {has_filter_search_text}
has_filter_dog: {has_filter_dog}
has_filter_command_category: {has_filter_command_category}
has_filter_command: {has_filter_command}
active_only: {active_only}
''')
filters = cls.get_default()
filters.get_all_link = True
filters.get_inactive_link = not active_only
filters.ids_link = ''
filters.get_all_dog = not has_filter_dog
filters.get_inactive_dog = not active_only
filters.ids_dog = form.id_dog.data if has_filter_dog else ''
filters.names_dog = form.search.data if has_filter_search_text else ''
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.data if has_filter_search_text else ''
filters.get_all_command = not has_filter_command
filters.get_inactive_command = not active_only
filters.ids_command = form.id_command.data if has_filter_command else ''
filters.names_command = form.search.data if has_filter_search_text else ''
filters.hand_signal_descriptions_link = form.search.data if has_filter_search_text else ''
# filters.notes_command = form.search.data if has_filter_search_text else ''
filters.notes_link = form.search.data if has_filter_search_text else ''
return filters
def to_json(self):
return {
'a_get_all_dog': self.get_all_dog
'a_get_all_link': self.get_all_link
, 'a_get_inactive_link': self.get_inactive_link
, 'a_ids_link': self.ids_link
, 'a_get_all_dog': self.get_all_dog
, 'a_get_inactive_dog': self.get_inactive_dog
, 'a_ids_dog': self.ids_dog
, 'a_names_dog': self.names_dog
, 'a_get_all_command_category': self.get_all_command_category
, 'a_get_inactive_command_category': self.get_inactive_command_category
, 'a_ids_command_category': self.ids_command_category
, 'a_names_command_category': self.names_command_category
, 'a_get_all_command': self.get_all_command
, 'a_get_inactive_command': self.get_inactive_command
, 'a_ids_command': self.ids_command
, 'a_names_command': self.names_command
, 'a_hand_signal_descriptions_link': self.hand_signal_descriptions_link
, 'a_notes_command': self.notes_command
, 'a_notes_link': self.notes_link
, 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met
, 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met
, 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met
, 'a_require_any_non_id_search_filters_met': self.require_any_non_id_search_filters_met
}

View File

@@ -37,9 +37,10 @@ class Obedience_Level(SQLAlchemy_ABC, Base):
self.is_new = False
super().__init__()
"""
def from_db_dog_command_link(query_row):
_m = 'Obedience_Level.from_db_dog_command_link'
level = Obedience_Level()
@classmethod
def from_db_dog_command_link(cls, query_row):
_m = f'{cls.__qualname__}.from_db_dog_command_link'
level = cls()
level.id_obedience_level = query_row[5]
level.code = query_row[6]
level.name = query_row[7]
@@ -48,7 +49,7 @@ class Obedience_Level(SQLAlchemy_ABC, Base):
"""
@classmethod
def from_json(cls, json):
_m = 'Obedience_Level.from_json'
_m = f'{cls.__qualname__}.from_json'
obedience_level = cls()
if json is None: return Obedience_Level
Helper_App.console_log(f'{_m}\njson: {json}')

View File

@@ -39,6 +39,7 @@ class User(SQLAlchemy_ABC, Base):
self.id_user = 0
self.is_new = False
self.can_admin_dog = False
self.can_admin_user = False
super().__init__()
def from_DB_user(query_row):
@@ -50,10 +51,10 @@ class User(SQLAlchemy_ABC, Base):
user.surname = query_row[3]
user.email = query_row[4]
user.is_email_verified = av.input_bool(query_row[5], 'is_email_verified', _m)
user.is_super_user = av.input_bool(query_row[9], 'is_super_user', _m)
user.is_new = av.input_bool(query_row[12], 'is_new', _m)
user.can_admin_dog = user.is_super_user
user.is_super_user = av.input_bool(query_row[6], 'is_super_user', _m)
user.can_admin_dog = av.input_bool(query_row[7], 'can_admin_dog', _m)
user.can_admin_user = av.input_bool(query_row[8], 'can_admin_user', _m)
user.is_new = av.input_bool(query_row[9], 'is_new', _m)
return user
@staticmethod
@@ -133,9 +134,6 @@ class User_Temp(db.Model, Base):
email = db.Column(db.String(250))
is_email_verified = db.Column(db.Boolean)
is_super_user = db.Column(db.Boolean)
id_currency_default = db.Column(db.Integer)
id_region_default = db.Column(db.Integer)
is_included_VAT_default = db.Column(db.Boolean)
# is_logged_in: bool
def __init__(self):
@@ -150,36 +148,51 @@ class Parameters_User(Get_Many_Parameters_Base):
get_inactive_user: bool
ids_user: str
ids_user_auth0: str
names_user: str
require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool
@staticmethod
def from_form(form):
@classmethod
def from_form(cls, form):
av.val_instance(form, 'form', 'Parameters_User.from_form', Form_Filters_User)
get_inactive = av.input_bool(form.active.data, "active", "Parameters_User.from_form")
id_user = '' if form.id_user.data is None else form.id_user.data
return Parameters_User(
get_all_user = (id_user == ''),
get_inactive_user = get_inactive,
ids_user = id_user,
ids_user_auth0 = '',
)
filters = cls.get_default()
filters.get_all_user = (id_user == '')
filters.get_inactive_user = get_inactive
filters.ids_user = id_user
filters.ids_user_auth0 = ''
filters.require_all_id_search_filters_met = True
filters.require_any_id_search_filters_met = True
filters.require_all_non_id_search_filters_met = False
filters.require_any_non_id_search_filters_met = True
return filters
@staticmethod
def from_user(user):
@classmethod
def from_user(cls, user):
av.val_instance(user, 'user', 'Parameters_User.from_user', User)
return Parameters_User(
get_all_user = ((user.id_user is None or user.id_user == 0) and user.id_user_auth0 is None),
get_inactive_user = False,
ids_user = '' if user.id_user is None else str(user.id_user),
ids_user_auth0 = user.id_user_auth0,
)
filters = cls.get_default()
filters.get_all_user = ((user.id_user is None or user.id_user == 0) and user.id_user_auth0 is None)
filters.get_inactive_user = False
filters.ids_user = '' if user.id_user is None else str(user.id_user)
filters.ids_user_auth0 = user.id_user_auth0
return filters
@staticmethod
def get_default():
return Parameters_User(
get_all_user = False,
get_inactive_user = False,
ids_user = '',
ids_user_auth0 = ''
@classmethod
def get_default(cls):
return cls(
get_all_user = False
, get_inactive_user = False
, ids_user = ''
, ids_user_auth0 = ''
, names_user = ''
, require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False
, require_any_non_id_search_filters_met = True
)
@classmethod
@@ -191,6 +204,11 @@ class Parameters_User(Get_Many_Parameters_Base):
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, 'a_ids_user_auth0': self.ids_user_auth0
, 'a_names_user': self.names_user
, 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met
, 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met
, 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met
, 'a_require_any_non_id_search_filters_met': self.require_any_non_id_search_filters_met
}
class User_Permission_Evaluation(db.Model):

View File

@@ -14,6 +14,7 @@ Datastore for Users
# from routes import bp_home
import dog_training.lib.argument_validation as av
from dog_training.business_objects.dog.command import Command, Command_Temp
from dog_training.business_objects.dog.command_category import Command_Category
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.business_objects.sql_error import SQL_Error
@@ -40,10 +41,7 @@ class DataStore_Dog(DataStore_Base):
user = cls.get_user_session()
argument_dict = {
'a_id_user': user.id_user
, 'a_get_all_dog': filters_dog.get_all_dog
, 'a_get_inactive_dog': filters_dog.get_inactive_dog
, 'a_ids_dog': filters_dog.ids_dog
, 'a_names_dog': filters_dog.names_dog
, **filters_dog.to_json()
, 'a_debug': 0
}
Helper_App.console_log(f'argument_dict: {argument_dict}')
@@ -80,17 +78,25 @@ class DataStore_Dog(DataStore_Base):
user = cls.get_user_session()
argument_dict = {
'a_id_user': user.id_user
, 'a_get_all_command': filters_command.get_all_command
, 'a_get_inactive_command': filters_command.get_inactive_command
, 'a_ids_command': filters_command.ids_command
, 'a_names_command': filters_command.names_command
, **filters_command.to_json()
, 'a_debug': 0
}
Helper_App.console_log(f'argument_dict: {argument_dict}')
result = cls.db_procedure_execute('p_dog_get_many_command', argument_dict)
cursor = result.cursor
# Command Categories
result_set_1 = cursor.fetchall()
Helper_App.console_log(f'raw command categories: {result_set_1}')
command_categories = []
command_category_indexes = {}
for row in result_set_1:
new_command_category = Command_Category.from_db_command(row)
command_category_indexes[new_command_category.id_command_category] = len(command_categories)
command_categories.append(new_command_category)
# Commands
cursor.nextset()
result_set_1 = cursor.fetchall()
Helper_App.console_log(f'raw commands: {result_set_1}')
commands = []
@@ -112,7 +118,7 @@ class DataStore_Dog(DataStore_Base):
cls.db_cursor_clear(cursor)
return commands, errors
return command_categories, commands, errors
@classmethod
def get_many_dog_command_link(cls, filters_dog_command_link):
@@ -120,12 +126,7 @@ class DataStore_Dog(DataStore_Base):
user = cls.get_user_session()
argument_dict = {
'a_id_user': user.id_user
, 'a_get_all_dog': filters_dog_command_link.get_all_dog
, 'a_get_inactive_dog': filters_dog_command_link.get_inactive_dog
, 'a_ids_dog': filters_dog_command_link.ids_dog
, 'a_get_all_command': filters_dog_command_link.get_all_command
, 'a_get_inactive_command': filters_dog_command_link.get_inactive_command
, 'a_ids_command': filters_dog_command_link.ids_command
, **filters_dog_command_link.to_json()
, 'a_debug': 0
}
Helper_App.console_log(f'argument_dict: {argument_dict}')
@@ -138,6 +139,7 @@ class DataStore_Dog(DataStore_Base):
dog_command_links = []
dog_command_link_indexes = {}
for row in result_set_1:
# Helper_App.console_log(f'Raw dog command link: {row}')
new_dog_command_link = Dog_Command_Link.from_db_dog_command_link(row)
dog_command_link_indexes[new_dog_command_link.id_link] = len(dog_command_links)
dog_command_links.append(new_dog_command_link)

View File

@@ -13,6 +13,7 @@ Defines Flask-WTF form for handling user input on Contact Us page.
# IMPORTS
# internal
from dog_training.business_objects.base import Base
from dog_training.business_objects.dog.command_category import Command_Category
from dog_training.business_objects.dog.command import Command
from dog_training.business_objects.dog.dog import Dog
from dog_training.business_objects.dog.obedience_level import Obedience_Level
@@ -40,6 +41,11 @@ class Filters_Dog_Command_Link(Form_Base):
, 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()]
@@ -55,19 +61,21 @@ class Filters_Dog_Command_Link(Form_Base):
_m = f'{cls.__qualname__}.from_json'
Helper_App.console_log(f'{_m}\njson: {json}')
filters = cls()
filters.search.data = json[Base.FLAG_SEARCH_TEXT]
filters.search.data = json[Base.FLAG_SEARCH]
# filters.id_dog.choices = [(json[Dog.ATTR_ID_DOG], json[Dog.ATTR_ID_DOG])]
filters.id_dog.data = json[Dog.ATTR_ID_DOG]
# filters.id_command_category.choices = [(json[Command.ATTR_ID_COMMAND], json[Command.ATTR_ID_COMMAND])]
filters.id_command_category.data = json[Command_Category.ATTR_ID_COMMAND_CATEGORY]
# filters.id_command.choices = [(json[Command.ATTR_ID_COMMAND], json[Command.ATTR_ID_COMMAND])]
filters.id_command.data = json[Command.ATTR_ID_COMMAND]
filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json')
# Helper_App.console_log(f'Command: {command}')
return filters
def to_json(self):
return {
Base.FLAG_SEARCH_TEXT: self.search.data
, Dog.FLAG_DOG: self.id_dog.data
, Command.FLAG_COMMAND: self.id_command.data
Base.FLAG_SEARCH: self.search.data
, Dog.ATTR_ID_DOG: self.id_dog.data
, Command_Category.ATTR_ID_COMMAND_CATEGORY: self.id_command_category.data
, Command.ATTR_ID_COMMAND: self.id_command.data
, Base.FLAG_ACTIVE_ONLY: self.active_only.data
}

View File

@@ -20,6 +20,7 @@ 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.command_category import Command_Category
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
@@ -37,6 +38,7 @@ from typing import ClassVar
class Model_View_Base(BaseModel, ABC):
ATTR_ID_COMMAND: ClassVar[str] = Command.ATTR_ID_COMMAND
ATTR_ID_COMMAND_CATEGORY: ClassVar[str] = Command_Category.ATTR_ID_COMMAND_CATEGORY
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'
@@ -68,6 +70,7 @@ class Model_View_Base(BaseModel, ABC):
ENDPOINT_PAGE_PRIVACY_POLICY: ClassVar[str] = 'routes_legal.privacy_policy'
ENDPOINT_POST_COMMAND: ClassVar[str] = 'routes_core_contact.contact_post'
FLAG_ACTIVE: ClassVar[str] = Base.FLAG_ACTIVE
FLAG_ACTIVE_ONLY: ClassVar[str] = Base.FLAG_ACTIVE_ONLY
FLAG_ADD: ClassVar[str] = 'add'
# FLAG_ADD_DELETE: ClassVar[str] = 'add-delete'
FLAG_BOOL_FALSE: ClassVar[str] = 'false'
@@ -79,15 +82,16 @@ class Model_View_Base(BaseModel, ABC):
FLAG_CALLBACK: ClassVar[str] = 'callback'
FLAG_CAPTCHA: ClassVar[str] = 'captcha'
FLAG_CARD: ClassVar[str] = 'card'
FLAG_CHECKBOX: ClassVar[str] = 'checkbox'
FLAG_CLOSE_TEMPORARY_ELEMENT: ClassVar[str] = 'button-temporary-element-close'
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_COMMAND_CATEGORY: ClassVar[str] = Command_Category.FLAG_COMMAND_CATEGORY
FLAG_COLUMN: ClassVar[str] = 'column'
FLAG_COMMENT: ClassVar[str] = 'comment'
FLAG_CONTAINER: ClassVar[str] = 'container'
FLAG_CONTAINER_CHECKBOX: ClassVar[str] = 'container-checkbox'
FLAG_CONTAINER_ICON_AND_LABEL: ClassVar[str] = 'container-icon-label'
FLAG_CONTAINER_INPUT: ClassVar[str] = 'container-input'
FLAG_CSRF_TOKEN: ClassVar[str] = 'X-CSRFToken'
@@ -114,6 +118,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_ICON: ClassVar[str] = "icon"
FLAG_IMAGE_LOGO: ClassVar[str] = 'image-logo'
FLAG_INITIALISED: ClassVar[str] = 'initialised'
FLAG_IS_CHECKED: ClassVar[str] = 'is_checked'
FLAG_LEFT_HAND_STUB: ClassVar[str] = 'lhs'
FLAG_LOGO: ClassVar[str] = 'logo'
FLAG_MESSAGE: ClassVar[str] = Command.FLAG_MESSAGE
@@ -123,7 +128,6 @@ 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_COMMANDS: ClassVar[str] = 'navDogCommands'
@@ -144,6 +148,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_ROWS: ClassVar[str] = Base.FLAG_ROWS
FLAG_SAVE: ClassVar[str] = 'save'
FLAG_SCROLLABLE: ClassVar[str] = 'scrollable'
FLAG_SEARCH: ClassVar[str] = Base.FLAG_SEARCH
FLAG_SLIDER: ClassVar[str] = 'slider'
FLAG_STATUS: ClassVar[str] = 'status'
FLAG_SUBMIT: ClassVar[str] = 'submit'

View File

@@ -29,6 +29,7 @@ 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_command_categories: list = None
filter_commands: list = None
dog_command_links: list = None
form_filters: Filters_Dog_Command_Link = None
@@ -48,9 +49,11 @@ class Model_View_Dog_Dog_Command_Link(Model_View_Dog_Base):
self.filter_dogs, errors = datastore.get_many_dog(parameters_filter_dog)
parameters_filter_command = Parameters_Command.get_default()
self.filter_commands, errors = datastore.get_many_command(parameters_filter_command)
self.filter_command_categories, self.filter_commands, errors = datastore.get_many_command(parameters_filter_command)
Helper_App.console_log(f'Form filters: {self.form_filters}')
parameters_filter_dog_command_link = Parameters_Dog_Command_Link.from_form_filters_dog_command_link(self.form_filters)
Helper_App.console_log(f'Query args: {parameters_filter_dog_command_link}')
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}')
@@ -58,6 +61,7 @@ class Model_View_Dog_Dog_Command_Link(Model_View_Dog_Base):
# 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_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]
self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in self.filter_commands]
"""

View File

@@ -0,0 +1,15 @@
CALL demo.p_dog_get_many_command (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_command_category
, 0 -- a_get_inactive_command_category
, '' -- a_ids_command_category
, '' -- a_names_command_category
, 1 -- a_get_all_command
, 0 -- a_get_inactive_command
, '' -- a_ids_command
, '' -- a_names_command
, 1 -- a_output_command_categories
, 1 -- a_output_commands
, 0 -- a_debug
);

View File

@@ -1,39 +1,42 @@
USE demo;
DROP PROCEDURE IF EXISTS demo.p_dog_get_many_dog_command;
DROP PROCEDURE IF EXISTS demo.p_dog_get_many_dog_command_link;
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_dog_get_many_user;
DELIMITER //
CREATE PROCEDURE demo.p_dog_get_many_dog_command_link (
IN a_id_user INT
, IN a_get_all_dog BIT
, IN a_get_inactive_dog BIT
, IN a_ids_dog TEXT
, IN a_names_dog TEXT
, IN a_get_all_command_category BIT
, IN a_get_inactive_command_category BIT
, IN a_ids_command_category TEXT
, IN a_names_command_category TEXT
, IN a_get_all_command BIT
, IN a_get_inactive_command BIT
, IN a_ids_command TEXT
, IN a_names_command TEXT
CREATE PROCEDURE p_dog_get_many_user (
IN a_id_user INT
, IN a_id_user_auth0 VARCHAR(200)
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_ids_user TEXT
, IN a_ids_user_auth0 TEXT
, IN a_names_user TEXT
, IN a_require_all_id_search_filters_met BIT
, IN a_require_any_id_search_filters_met BIT
, IN a_require_all_non_id_search_filters_met BIT
, IN a_require_any_non_id_search_filters_met BIT
, IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_code_type_error_warning VARCHAR(100);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT;
DECLARE v_id_type_error_warning INT;
DECLARE v_has_filter_dog BIT;
DECLARE v_code_type_error_bad_data VARCHAR(50);
DECLARE v_guid BINARY(36);
DECLARE v_id_permission_dog_view INT;
DECLARE v_has_filter_user_auth0_id BIT;
DECLARE v_has_filter_user_id BIT;
DECLARE v_has_filter_user_name BIT;
DECLARE v_id_access_level_admin INT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_admin INT;
DECLARE v_id_permission_user INT;
DECLARE v_id_permission_user_admin INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_ids_permission_required VARCHAR(4000);
DECLARE v_is_new BIT;
DECLARE v_rank_max INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_can_view BIT;
DECLARE exit handler for SQLEXCEPTION
BEGIN
@@ -49,7 +52,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -84,375 +87,606 @@ BEGIN
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := UUID();
SET v_id_access_level_admin := (SELECT id_access_level FROM demo.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1);
SET v_id_access_level_view := (SELECT id_access_level FROM demo.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_id_permission_dog_admin := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'DOG_ADMIN' LIMIT 1);
SET v_id_permission_user := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'USER_VIEW' LIMIT 1);
SET v_id_permission_user_admin := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'USER_ADMIN' LIMIT 1);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_code_type_error_warning := 'WARNING';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_type_error_warning := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_warning LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_type_error_bad_data := (SELECT id_type FROM demo.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_ids_permission_required := CONCAT(v_id_permission_user, ',', v_id_permission_user_admin, ',', v_id_permission_dog_admin);
SET v_is_new := FALSE;
SET a_id_user := IFNULL(a_id_user, 0);
-- SET a_get_all_dog := IFNULL(a_get_all_dog, 0);
-- SET a_get_inactive_dog := IFNULL(a_get_inactive_dog, 0);
-- SET a_ids_dog := TRIM(IFNULL(a_ids_dog, ''));
-- SET a_get_all_command_category := IFNULL(a_get_all_command_category, 0);
-- SET a_get_inactive_command_category := IFNULL(a_get_inactive_command_category, 0);
-- SET a_ids_command_category := TRIM(IFNULL(a_ids_command_category, ''));
-- SET a_get_all_command := IFNULL(a_get_all_command, 0);
-- SET a_get_inactive_command := IFNULL(a_get_inactive_command, 0);
-- SET a_ids_command := TRIM(IFNULL(a_ids_command, ''));
SET a_get_all_user := IFNULL(a_get_all_user, 1);
SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
SET a_ids_user_auth0 := TRIM(IFNULL(a_ids_user_auth0, ''));
SET a_names_user := TRIM(IFNULL(a_names_user, ''));
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_id_user
, a_get_all_dog
, a_get_inactive_dog
, a_ids_dog
, a_names_dog
, a_get_all_command_category
, a_get_inactive_command_category
, a_ids_command_category
, a_names_command_category
, a_get_all_command
, a_get_inactive_command
, a_ids_command
, a_names_command
, a_debug
a_id_user
, a_id_user_auth0
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_ids_user_auth0
, a_names_user
, a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met
, a_debug
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
CREATE TEMPORARY TABLE tmp_User (
id_user INT NULL
, can_admin_dog BIT NULL
, can_admin_user BIT NULL
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NOT NULL
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Id;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Auth0_Id (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Auth0_Id;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Name;
IF ISNULL(a_id_user) AND NOT ISNULL(a_id_user_auth0) THEN
SET a_id_user := (SELECT U.id_user FROM demo.DOG_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1);
END IF;
IF
ISNULL(a_id_user)
AND ISNULL(a_id_user_auth0)
THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('User ID required for authorisation.')
)
;
END IF;
SET v_has_filter_user_id := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_auth0_id := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_name := CASE WHEN a_names_user = '' THEN 0 ELSE 1 END;
IF a_debug = 1 THEN
SELECT
v_has_filter_user_id
, v_has_filter_user_auth0_id
, v_has_filter_user_name
;
END IF;
-- User IDs
IF v_has_filter_user_id = 1 THEN
CALL demo.p_core_split(v_guid, a_ids_user, ',', FALSE);
SET sql_mode = '';
INSERT INTO tmp_Split_Id (
substring
, as_int
)
SELECT
substring
, CAST(substring AS DECIMAL(10,0)) AS as_int
FROM demo.CORE_Split_Temp
WHERE
GUID = v_guid
AND IFNULL(substring, '') != ''
;
CALL demo.p_core_clear_split( v_guid );
IF EXISTS (
SELECT *
FROM tmp_Split_Id t_SPLIT_ID
LEFT JOIN demo.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
WHERE
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(USER.id_user)
OR USER.active = 0
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id t_SPLIT_ID
LEFT JOIN demo.DOG_User U ON t_SPLIT_ID.as_int = USER.id_user
WHERE
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(USER.id_user)
OR USER.active = 0
;
END IF;
END IF;
-- Auth0 User IDs
IF v_has_filter_user_auth0_id = 1 THEN
CALL demo.p_core_split(v_guid, a_ids_user_auth0, ',', FALSE);
INSERT INTO tmp_Split_Auth0_Id (
substring
)
SELECT
substring
FROM demo.CORE_Split_Temp
WHERE
GUID = v_guid
AND IFNULL(substring, '') != ''
;
CALL demo.p_core_clear_split( v_guid );
IF EXISTS (
SELECT *
FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
LEFT JOIN demo.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
WHERE
ISNULL(t_SPLIT_AUTH0.substring)
OR ISNULL(USER.id_user_auth0)
OR USER.active = 0
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive Auth0 User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_AUTH0.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
LEFT JOIN demo.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
WHERE
ISNULL(t_SPLIT_AUTH0.substring)
OR ISNULL(USER.id_user_auth0)
OR USER.active = 0
;
END IF;
END IF;
-- User Names
IF v_has_filter_user_name = 1 THEN
CALL demo.p_core_split(v_guid, a_names_user, ',', FALSE);
SET sql_mode = '';
INSERT INTO tmp_Split_Name (
substring
)
SELECT
substring
FROM demo.CORE_Split_Temp
WHERE
GUID = v_guid
AND IFNULL(substring, '') != ''
;
CALL demo.p_core_clear_split( v_guid );
END IF;
IF
v_has_filter_user_id = 1
OR v_has_filter_user_auth0_id = 1
THEN
INSERT INTO tmp_User (
id_user
, does_meet_id_filters
, does_meet_non_id_filters
)
WITH
User_Id_Filter AS (
SELECT USER.id_user
FROM tmp_Split_Id t_SPLIT_ID
INNER JOIN demo.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
)
, User_Auth0_Id_Filter AS (
SELECT USER.id_user
FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
INNER JOIN demo.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
)
, User_Name_Filter AS (
SELECT USER.id_user
FROM tmp_Split_Name t_SPLIT_NAME
INNER JOIN demo.DOG_User USER ON CONCAT(USER.firstname, ' ', USER.surname) LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE IFNULL(t_SPLIT_NAME.substring, '') <> ''
)
, User_Filters AS (
SELECT
USER_COMBINED.id_user
, MAX(USER_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(USER_COMBINED.does_meet_auth0_id_filter) AS does_meet_auth0_id_filter
, MAX(USER_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM (
SELECT
ID_FILTER.id_user
, 1 AS does_meet_id_filter
, 0 AS does_meet_auth0_id_filter
, 0 AS does_meet_name_filter
FROM User_Id_Filter ID_FILTER
UNION
SELECT
AUTH0_ID_FILTER.id_user
, 0 AS does_meet_id_filter
, 1 AS does_meet_auth0_id_filter
, 0 AS does_meet_name_filter
FROM User_Auth0_Id_Filter AUTH0_ID_FILTER
UNION
SELECT
NAME_FILTER.id_user
, 0 AS does_meet_id_filter
, 0 AS does_meet_auth0_id_filter
, 1 AS does_meet_name_filter
FROM User_Name_Filter NAME_FILTER
) USER_COMBINED
GROUP BY USER_COMBINED.id_user
)
SELECT
v_id_type_error_bad_data
, v_id_type_error_no_permission
, v_id_type_error_warning
, v_guid
, v_id_permission_dog_view
, v_time_start
USER.id_user
, CASE WHEN
(
v_has_filter_user_id = 0
AND v_has_filter_user_auth0_id = 0
)
OR IFNULL(USER_FILTERS.does_meet_id_filter, 0) = 1
OR IFNULL(USER_FILTERS.does_meet_auth0_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_user_name = 0
)
OR IFNULL(USER_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM demo.DOG_User USER
LEFT JOIN User_Filters USER_FILTERS ON USER.id_user = USER_FILTERS.id_user
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user_id = 1
AND USER_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_user_auth0_id = 1
AND USER_FILTERS.does_meet_auth0_id_filter = 1
)
OR (
v_has_filter_user_id = 1
AND USER_FILTERS.does_meet_id_filter = 1
)
)
AND (
a_get_inactive_user = 1
OR USER.active = 1
)
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Command;
DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog;
DELETE FROM tmp_Split_Id;
DELETE FROM tmp_Split_Auth0_Id;
DELETE FROM tmp_Split_Name;
CREATE TEMPORARY TABLE tmp_Dog (
id_dog INT NOT NULL
, name VARCHAR(250)
, appearance VARCHAR(1000)
, mass_kg DECIMAL(7, 3)
, notes TEXT
, active BIT
);
IF a_debug = 1 THEN
SELECT 'After get all Users';
SELECT * FROM tmp_User;
END IF;
CREATE TEMPORARY TABLE tmp_Command_Category (
id_command_category INT NOT NULL
, code VARCHAR(100)
, name VARCHAR(250)
, active BIT
);
-- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
DELETE t_USER
FROM tmp_User t_USER
WHERE
(
a_require_all_id_search_filters_met = 1
AND t_USER.does_meet_id_filters = 0
)
OR (
a_require_all_non_id_search_filters_met = 1
AND t_USER.does_meet_non_id_filters = 0
)
OR (
a_require_any_id_search_filters_met = 1
AND t_USER.does_meet_id_filters = 0
)
OR (
a_require_any_non_id_search_filters_met = 1
AND t_USER.does_meet_non_id_filters = 0
)
;
END IF;
CREATE TEMPORARY TABLE tmp_Command (
id_command INT NOT NULL
, id_command_category INT NOT NULL
, name VARCHAR(250)
, hand_signal_default_description TEXT
, can_have_button BIT
, notes TEXT
, active BIT
);
IF a_debug = 1 THEN
SELECT 'After filter Users';
SELECT * FROM tmp_User;
END IF;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
);
-- Calculated fields
-- Can admin dog
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM demo.DOG_Calc_User_Temp;
END IF;
CALL demo.p_dog_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM demo.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN demo.DOG_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_dog = CUT.can_admin
;
CALL demo.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Can admin user
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM demo.DOG_Calc_User_Temp;
END IF;
CALL demo.p_dog_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM demo.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN demo.DOG_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_user = CUT.can_admin
;
CALL demo.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Permissions
IF a_debug = 1 THEN
SELECT
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, 0 -- a_debug
;
END IF;
CALL demo.p_dog_calc_user(
v_guid -- a_guid
, a_id_user -- a_ids_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view -- a_ids_permission
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM demo.DOG_Calc_User_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = v_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Commands.'
)
;
END IF;
CALL demo.p_dog_clear_calc_user(
v_guid
, 0 -- a_debug
);
-- Call Dog Calc
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_dog -- a_get_all_dog
, a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM demo.DOG_Calc_User_Temp;
END IF;
CALL demo.p_dog_calc_dog(
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_dog -- a_get_all_dog
, a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog
, 0 -- a_show_errors
CALL demo.p_dog_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_Dog (
id_dog
, name
, appearance
, mass_kg
, notes
, active
)
SELECT
DOG_T.id_dog
, DOG_T.name
, DOG_T.appearance
, DOG_T.mass_kg
, DOG_T.notes
, DOG_T.active
FROM demo.DOG_Dog_Temp DOG_T
WHERE DOG_T.GUID = v_guid
;
);
IF a_debug = 1 THEN
SELECT * FROM tmp_Dog;
END IF;
END IF;
-- Call Command Calc
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_command_category
, a_get_inactive_command_category
, a_ids_command_category
, a_names_command_category
, a_get_all_command -- a_get_all_command
, a_get_inactive_command -- a_get_inactive_command
, a_ids_command -- a_ids_command
, a_names_command -- a_names_command
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM demo.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
CALL demo.p_dog_calc_command (
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_command_category
, a_get_inactive_command_category
, a_ids_command_category
, a_names_command_category
, a_get_all_command -- a_get_all_command
, a_get_inactive_command -- a_get_inactive_command
, a_ids_command -- a_ids_command
, a_names_command -- a_names_command
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_Command_Category (
id_command_category
, code
, name
, active
)
SELECT
COMMAND_CATEGORY_T.id_command_category
, COMMAND_CATEGORY_T.code
, COMMAND_CATEGORY_T.name
, COMMAND_CATEGORY_T.active
FROM demo.DOG_Command_Category_Temp COMMAND_CATEGORY_T
WHERE COMMAND_CATEGORY_T.GUID = v_guid
;
INSERT INTO tmp_Command (
id_command
, id_command_category
, name
, hand_signal_default_description
, can_have_button
, notes
, active
)
SELECT
COMMAND_T.id_command
, COMMAND_T.id_command_category
, COMMAND_T.name
, COMMAND_T.hand_signal_default_description
, COMMAND_T.can_have_button
, COMMAND_T.notes
, COMMAND_T.active
FROM demo.DOG_Command_Temp COMMAND_T
WHERE COMMAND_T.GUID = v_guid
;
IF a_debug = 1 THEN
SELECT * FROM tmp_Command_Category;
SELECT * FROM tmp_Command;
IF NOT EXISTS (
SELECT can_view
FROM demo.DOG_Calc_User_Temp CUT
WHERE
CUT.GUID = v_guid
AND can_view = 1
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('You do not have view permissions for ', (SELECT name FROM demo.DOG_Permission P INNER JOIN demo.DOG_Calc_User_Temp CUT ON P.id_permission = CUT.id_permission_required WHERE GUID = v_guid AND IFNULL(can_view, 0) = 0 LIMIT 1))
)
;
ELSE
SET a_debug := a_debug;
END IF;
END IF;
CALL demo.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Filter outputs
IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT * FROM tmp_Dog;
SELECT * FROM tmp_Command;
SELECT * FROM tmp_Command_Category;
SELECT * FROM tmp_Dog_Calc_Dog;
END IF;
DELETE FROM tmp_Dog;
DELETE FROM tmp_Command;
DELETE FROM tmp_Command_Category;
DELETE FROM tmp_Dog_Calc_Dog;
END IF;
-- Outputs
-- Commands
SELECT
DOG_COMMAND_LINK.id_link AS id_dog_command_link
, t_DOG.id_dog
, t_DOG.name AS name_dog
, t_COMMAND.id_command_category
, t_COMMAND_CATEGORY.name AS name_command_category
, t_COMMAND.id_command
, t_COMMAND.name AS name_command
-- , t_COMMAND.has_button AS command_has_button
, COALESCE(DOG_COMMAND_LINK.hand_signal_description, t_COMMAND.hand_signal_default_description) AS hand_signal_description_command
, t_COMMAND.can_have_button AS can_have_button_command
, DOG_COMMAND_LINK.notes
, DOG_COMMAND_LINK.active
FROM demo.DOG_Dog_Command_Link DOG_COMMAND_LINK
INNER JOIN tmp_Dog t_DOG ON DOG_COMMAND_LINK.id_dog = t_DOG.id_dog
INNER JOIN tmp_Command t_COMMAND ON DOG_COMMAND_LINK.id_command = t_COMMAND.id_command
INNER JOIN tmp_Command_Category t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
-- Returns
/* NULL record required for flask sql_alchemy to detect result set */
IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN
DELETE FROM tmp_User;
INSERT INTO tmp_User ( id_user )
VALUES ( NULL );
END IF;
SELECT
U.id_user
, U.id_user_auth0
, U.firstname
, U.surname
, U.email
, U.is_email_verified
, U.is_super_user
, t_U.can_admin_dog
, t_U.can_admin_user
, v_is_new AS is_new
FROM tmp_User t_U
INNER JOIN demo.DOG_User U ON t_U.id_user = U.id_user
;
-- Errors
# Errors
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
IF a_debug = 1 AND v_can_view = 1 THEN
SELECT * FROM tmp_Dog;
SELECT * FROM tmp_Command;
SELECT * FROM tmp_Command_Category;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Command;
DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog;
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
IF a_debug = 1 THEN
CALL demo.p_core_debug_timing_reporting ( v_time_start );
SELECT * FROM tmp_User;
END IF;
-- Clean up
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
IF a_debug = 1 THEN
CALL demo.p_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL demo.p_dog_get_many_dog_command_link (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_dog
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, 1 -- a_get_all_command_category
, 0 -- a_get_inactive_command_category
, '' -- a_ids_command_category
, 1 -- a_get_all_command
, 0 -- a_get_inactive_command
, '' -- a_ids_command
, 1 -- a_debug
CALL p_dog_get_many_user (
NULL
, 'google-oauth2|109567376920138999933'
, False
, False
-- , False
, NULL
, 'google-oauth2|109567376920138999933'
, 0
);
NULL # a_id_user
, 'auth0|6582b95c895d09a70ba10fef' # a_id_user_auth0
, 0 # a_get_all_user
, 0 # a_get_inactive_user
-- , 0 # a_get_first_user_only
, NULL # a_ids_user
, 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0
, 0 -- a_debug
);*/
/*
select * FROM demo.DOG_Calc_User_Temp;
delete FROM demo.DOG_Calc_User_Temp;
CALL demo.p_dog_get_many_dog_command_link (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_dog
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, '' -- a_names_dog
, 1 -- a_get_all_command_category
, 0 -- a_get_inactive_command_category
, '' -- a_ids_command_category
, '' -- a_names_command_category
, 0 -- a_get_all_command
, 0 -- a_get_inactive_command
, '2' -- a_ids_command
, '2' -- a_names_command
, 1 -- a_debug
SELECT *
FROM demo.DOG_USER;
CALL p_dog_get_many_user(
NULL -- :a_id_user,
, 'auth0|6582b95c895d09a70ba10fef' -- :a_id_user_auth0,
, 1 -- :a_get_all_user,
, 0 -- :a_get_inactive_user,
-- , 0 -- :a_get_first_user_only,
, NULL -- :a_ids_user,
, 'auth0|6582b95c895d09a70ba10fef' -- :a_ids_user_auth0
, '' -- a_names_user
, 1 -- :a_require_all_id_search_filters_met,
, 1 -- :a_require_any_id_search_filters_met,
, 0 -- :a_require_all_non_id_search_filters_met,
, 1 -- :a_require_any_non_id_search_filters_met,
, 0 -- a_debug
);
*/

View File

@@ -192,7 +192,7 @@ DROP PROCEDURE IF EXISTS parts.p_command_clear_calc_command;
DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_user;
DROP PROCEDURE IF EXISTS parts.p_dog_calc_user;
DROP PROCEDURE IF EXISTS parts.p_clear_split_temp;
DROP PROCEDURE IF EXISTS parts.p_core_clear_split;
/*
DROP PROCEDURE IF EXISTS parts.p_core_clear_split_key_value_pair_csv;

View File

@@ -1,6 +1,8 @@
USE parts;
-- DROP TABLE IF EXISTS demo.DOG_Calc_User_Temp;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
@@ -11,12 +13,12 @@ WHERE
CREATE TABLE IF NOT EXISTS parts.DOG_Calc_User_Temp (
guid BINARY(36) NOT NULL
, id_user INT
, id_permission_required INT NOT NULL
, CONSTRAINT FK_DOG_Calc_User_Temp_id_permission_required
FOREIGN KEY (id_permission_required)
REFERENCES parts.DOG_Permission (id_permission)
, priority_access_level_required INT NOT NULL
, id_permission_required INT
, priority_access_level_required INT
, is_super_user BIT
, priority_access_level_user INT
, has_access BIT
, can_view BIT
, can_edit BIT
, can_admin BIT
);

View File

@@ -17,4 +17,6 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Dog_Temp (
, notes TEXT
, active BIT
, guid BINARY(36)
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);

View File

@@ -15,4 +15,6 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Command_Category_Temp (
, name VARCHAR(250)
, active BIT
, guid BINARY(36)
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);

View File

@@ -18,6 +18,8 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Command_Temp (
, notes TEXT
, active BIT
, guid BINARY(36)
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
, name_command_category VARCHAR(250)
);

View File

@@ -0,0 +1,563 @@
USE parts;
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_dog_get_many_user;
DELIMITER //
CREATE PROCEDURE p_dog_get_many_user (
IN a_id_user INT
, IN a_id_user_auth0 VARCHAR(200)
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_ids_user LONGTEXT
, IN a_ids_user_auth0 LONGTEXT
, IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(50);
DECLARE v_guid BINARY(36);
DECLARE v_has_filter_user BIT;
DECLARE v_has_filter_user_auth0 BIT;
DECLARE v_id_access_level_admin INT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_admin INT;
DECLARE v_id_permission_user INT;
DECLARE v_id_permission_user_admin INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_ids_permission_required VARCHAR(4000);
DECLARE v_is_new BIT;
DECLARE v_rank_max INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE
, @errno = MYSQL_ERRNO
, @text = MESSAGE_TEXT
;
ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM parts.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := UUID();
SET v_id_access_level_admin := (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1);
SET v_id_access_level_view := (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_id_permission_dog_admin := (SELECT id_permission FROM parts.DOG_Permission WHERE code = 'DOG_ADMIN' LIMIT 1);
SET v_id_permission_user := (SELECT id_permission FROM parts.DOG_Permission WHERE code = 'USER_VIEW' LIMIT 1);
SET v_id_permission_user_admin := (SELECT id_permission FROM parts.DOG_Permission WHERE code = 'USER_ADMIN' LIMIT 1);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT id_type FROM parts.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_ids_permission_required := CONCAT(v_id_permission_user, ',', v_id_permission_user_admin, ',', v_id_permission_dog_admin);
SET v_is_new := FALSE;
SET a_get_all_user := IFNULL(a_get_all_user, 1);
SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
SET a_ids_user_auth0 := TRIM(IFNULL(a_ids_user_auth0, ''));
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_id_user
, a_id_user_auth0
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_ids_user_auth0
, a_debug
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
CREATE TEMPORARY TABLE tmp_User (
id_user INT NULL
, rank_user INT NULL
, can_admin_dog BIT NULL
, can_admin_user BIT NULL
);
CREATE TEMPORARY TABLE tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NOT NULL
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split;
IF ISNULL(a_id_user) AND NOT ISNULL(a_id_user_auth0) THEN
SET a_id_user := (SELECT U.id_user FROM parts.DOG_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1);
END IF;
IF ISNULL(a_id_user) THEN
IF NOT ISNULL(a_id_user_auth0) THEN
INSERT INTO parts.DOG_User (
id_user_auth0
, is_super_user
, active
)
VALUES (
a_id_user_auth0
, 0 -- is_super_user
, 1 -- active
)
;
SET a_id_user := (SELECT U.id_user FROM parts.DOG_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1);
SET v_is_new := TRUE;
ELSE
INSERT INTO tmp_Msg_Error (
id_type,
code,
msg
)
VALUES (
v_id_type_error_bad_data,
v_code_type_error_bad_data,
CONCAT('User ID required for authorisation.')
)
;
END IF;
END IF;
SET v_has_filter_user := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_auth0 := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END;
IF a_debug = 1 THEN
SELECT
v_has_filter_user
, v_has_filter_user_auth0
;
END IF;
-- User IDs
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user = 1) THEN
CALL parts.p_core_split(v_guid, a_ids_user, ',', FALSE);
SET sql_mode = '';
DELETE FROM tmp_Split;
INSERT INTO tmp_Split (
substring
, as_int
)
SELECT
substring
, CAST(substring AS DECIMAL(10,0)) AS as_int
FROM parts.Split_Temp
WHERE 1=1
AND GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL parts.p_core_clear_split( v_guid );
END IF;
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user = 1) THEN
IF EXISTS (
SELECT *
FROM tmp_Split t_S
LEFT JOIN parts.DOG_User U ON t_S.as_int = U.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive User IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_S
LEFT JOIN parts.DOG_User U ON t_S.as_int = U.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
;
ELSE
INSERT INTO tmp_User (
id_user
, rank_user
)
SELECT
U.id_user
, RANK() OVER (ORDER BY U.id_user DESC) AS rank_user
FROM tmp_Split t_S
RIGHT JOIN parts.DOG_User U ON t_S.as_int = U.id_user
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user = 1
AND NOT ISNULL(t_S.as_int)
)
)
AND (
a_get_inactive_user = 1
OR U.active = 1
)
;
END IF;
END IF;
-- Auth0 User IDs
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user_auth0 = 1) THEN
CALL parts.p_core_split(v_guid, a_ids_user_auth0, ',', FALSE);
DELETE FROM tmp_Split;
INSERT INTO tmp_Split (
substring
)
SELECT
substring
FROM parts.Split_Temp
WHERE
GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL parts.p_core_clear_split( v_guid );
END IF;
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user_auth0 = 1) THEN
IF EXISTS (
SELECT *
FROM tmp_Split t_S
LEFT JOIN parts.DOG_User U ON t_S.substring = U.id_user_auth0
WHERE
ISNULL(t_S.substring)
OR ISNULL(U.id_user_auth0)
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive Auth0 User IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_S
LEFT JOIN parts.DOG_User U ON t_S.substring = U.id_user_auth0
WHERE
ISNULL(t_S.substring)
OR ISNULL(U.id_user_auth0)
;
ELSE
SET v_rank_max := IFNULL((SELECT rank_user FROM tmp_User ORDER BY rank_user DESC LIMIT 1), 0);
INSERT INTO tmp_User (
id_user
, rank_user
)
SELECT
U.id_user
, v_rank_max + (RANK() OVER (ORDER BY U.id_user DESC)) AS rank_user
FROM tmp_Split t_S
RIGHT JOIN parts.DOG_User U ON t_S.substring = U.id_user_auth0
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user_auth0 = 1
AND NOT ISNULL(t_S.substring)
)
)
AND (
a_get_inactive_user = 1
OR U.active = 1
)
;
END IF;
END IF;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
-- Can admin dog
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM parts.DOG_Calc_User_Temp;
END IF;
CALL parts.p_dog_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN parts.DOG_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_dog = CUT.can_admin
;
CALL parts.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Can admin user
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM parts.DOG_Calc_User_Temp;
END IF;
CALL parts.p_dog_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN parts.DOG_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_user = CUT.can_admin
;
CALL parts.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Permissions
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM parts.DOG_Calc_User_Temp;
END IF;
CALL parts.p_dog_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
IF NOT EXISTS (
SELECT can_view
FROM parts.DOG_Calc_User_Temp CUT
WHERE
CUT.GUID = v_guid
AND can_view = 1
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('You do not have view permissions for ', (SELECT name FROM parts.DOG_Permission P INNER JOIN parts.DOG_Calc_User_Temp CUT ON P.id_permission = CUT.id_permission_required WHERE GUID = v_guid AND IFNULL(can_view, 0) = 0 LIMIT 1))
)
;
ELSE
SET a_debug := a_debug;
END IF;
CALL parts.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Returns
/* NULL record required for flask sql_alchemy to detect result set */
IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN
DELETE FROM tmp_User;
INSERT INTO tmp_User ( id_user )
VALUES ( NULL );
END IF;
SELECT
U.id_user
, U.id_user_auth0
, U.firstname
, U.surname
, U.email
, U.is_email_verified
, U.is_super_user
, t_U.can_admin_dog
, t_U.can_admin_user
, v_is_new AS is_new
FROM tmp_User t_U
INNER JOIN parts.DOG_User U ON t_U.id_user = U.id_user
;
# Errors
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
-- Clean up
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
/*
DELETE FROM parts.DOG_Calc_User_Temp
WHERE GUID = v_guid;
*/
IF a_debug = 1 THEN
CALL parts.p_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL p_dog_get_many_user (
NULL
, 'google-oauth2|109567376920138999933'
, False
, False
-- , False
, NULL
, 'google-oauth2|109567376920138999933'
, 0
);
NULL # a_id_user
, 'auth0|6582b95c895d09a70ba10fef' # a_id_user_auth0
, 0 # a_get_all_user
, 0 # a_get_inactive_user
-- , 0 # a_get_first_user_only
, NULL # a_ids_user
, 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0
, 0 -- a_debug
);*/
/*
select * FROM parts.DOG_Calc_User_Temp;
delete FROM parts.DOG_Calc_User_Temp;
SELECT *
FROM parts.DOG_USER;
CALL p_dog_get_many_user(
NULL -- :a_id_user,
, 'auth0|6582b95c895d09a70ba10fef' -- :a_id_user_auth0,
, 1 -- :a_get_all_user,
, 0 -- :a_get_inactive_user,
-- , 0 -- :a_get_first_user_only,
, NULL -- :a_ids_user,
, 'auth0|6582b95c895d09a70ba10fef' -- :a_ids_user_auth0
, 0 -- a_debug
);
*/

View File

@@ -11,44 +11,101 @@ CREATE PROCEDURE p_dog_get_many_user (
, IN a_id_user_auth0 VARCHAR(200)
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_ids_user LONGTEXT
, IN a_ids_user_auth0 LONGTEXT
, IN a_ids_user TEXT
, IN a_ids_user_auth0 TEXT
, IN a_names_user TEXT
, IN a_require_all_id_search_filters_met BIT
, IN a_require_any_id_search_filters_met BIT
, IN a_require_all_non_id_search_filters_met BIT
, IN a_require_any_non_id_search_filters_met BIT
, IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(50);
DECLARE v_guid BINARY(36);
DECLARE v_has_filter_user_auth0_id BIT;
DECLARE v_has_filter_user_id BIT;
DECLARE v_has_filter_user_name BIT;
DECLARE v_id_access_level_admin INT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_admin INT;
DECLARE v_id_permission_user INT;
DECLARE v_id_permission_user_admin INT;
DECLARE v_ids_permission_required VARCHAR(4000);
DECLARE v_id_minimum INT;
DECLARE v_code_error_bad_data VARCHAR(50);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_has_filter_user BIT;
DECLARE v_has_filter_user_auth0 BIT;
DECLARE v_guid BINARY(36);
DECLARE v_ids_permission_required VARCHAR(4000);
DECLARE v_is_new BIT;
DECLARE v_rank_max INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_is_new BIT;
DECLARE exit handler for SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE
, @errno = MYSQL_ERRNO
, @text = MESSAGE_TEXT
;
ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM parts.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := UUID();
SET v_id_access_level_admin := (SELECT id_access_level FROM parts.Shop_Access_Level WHERE code = 'ADMIN' LIMIT 1);
SET v_id_access_level_view := (SELECT id_access_level FROM parts.Shop_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_id_permission_dog_admin := (SELECT id_permission FROM parts.Shop_Permission WHERE code = 'DOG_ADMIN' LIMIT 1);
SET v_id_permission_user := (SELECT id_permission FROM parts.Shop_Permission WHERE code = 'USER_VIEW' LIMIT 1);
SET v_id_permission_user_admin := (SELECT id_permission FROM parts.Shop_Permission WHERE code = 'USER_ADMIN' LIMIT 1);
SET v_code_error_bad_data := (SELECT code FROM parts.Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1);
SET v_id_type_error_bad_data := (SELECT id_type FROM parts.Shop_Msg_Error_Type WHERE code = v_code_error_bad_data LIMIT 1);
SET v_id_access_level_admin := (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1);
SET v_id_access_level_view := (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_id_permission_dog_admin := (SELECT id_permission FROM parts.DOG_Permission WHERE code = 'DOG_ADMIN' LIMIT 1);
SET v_id_permission_user := (SELECT id_permission FROM parts.DOG_Permission WHERE code = 'USER_VIEW' LIMIT 1);
SET v_id_permission_user_admin := (SELECT id_permission FROM parts.DOG_Permission WHERE code = 'USER_ADMIN' LIMIT 1);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT id_type FROM parts.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_ids_permission_required := CONCAT(v_id_permission_user, ',', v_id_permission_user_admin, ',', v_id_permission_dog_admin);
SET v_is_new := FALSE;
SET a_get_all_user := IFNULL(a_get_all_user, 1);
SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
-- SET a_get_first_user_only := IFNULL(a_get_first_user_only, 0);
SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
SET a_ids_user_auth0 := TRIM(IFNULL(a_ids_user_auth0, ''));
SET a_names_user := TRIM(IFNULL(a_names_user, ''));
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
@@ -57,251 +114,341 @@ BEGIN
, a_id_user_auth0
, a_get_all_user
, a_get_inactive_user
-- , a_get_first_user_only
, a_ids_user
, a_ids_user_auth0
, a_names_user
, a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met
, a_debug
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
CREATE TEMPORARY TABLE tmp_User (
id_user INT NULL
, rank_user INT NULL
id_user INT NULL
, can_admin_dog BIT NULL
, can_admin_user BIT NULL
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Msg_Error (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-- guid BINARY(36) NOT NULL,
id_type INT NOT NULL,
code VARCHAR(50) NOT NULL,
msg VARCHAR(4000) NOT NULL
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NOT NULL
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split (
substring VARCHAR(4000) NOT NULL
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Id;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Auth0_Id (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Auth0_Id;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Name;
IF ISNULL(a_id_user) AND NOT ISNULL(a_id_user_auth0) THEN
SET a_id_user := (SELECT U.id_user FROM parts.Shop_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1); -- LIKE CONCAT('%', a_id_user_auth0, '%') LIMIT 1);
SET a_id_user := (SELECT U.id_user FROM parts.DOG_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1);
END IF;
IF ISNULL(a_id_user) THEN
IF NOT ISNULL(a_id_user_auth0) THEN
INSERT INTO parts.Shop_User (
id_user_auth0
, is_super_user
, active
)
VALUES (
a_id_user_auth0
, 0 -- is_super_user
, 1 -- active
)
;
SET a_id_user := (SELECT U.id_user FROM parts.Shop_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1);
SET v_is_new := TRUE;
ELSE
INSERT INTO tmp_Msg_Error (
id_type,
code,
msg
)
VALUES (
v_id_type_error_bad_data,
v_code_error_bad_data,
CONCAT('User ID required for authorisation.')
)
;
END IF;
IF
ISNULL(a_id_user)
AND ISNULL(a_id_user_auth0)
THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('User ID required for authorisation.')
)
;
END IF;
SET v_has_filter_user := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_auth0 := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_id := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_auth0_id := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_name := CASE WHEN a_names_user = '' THEN 0 ELSE 1 END;
IF a_debug = 1 THEN
SELECT
v_has_filter_user
, v_has_filter_user_auth0
v_has_filter_user_id
, v_has_filter_user_auth0_id
, v_has_filter_user_name
;
END IF;
-- User IDs
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user = 1) THEN
IF v_has_filter_user_id = 1 THEN
CALL parts.p_core_split(v_guid, a_ids_user, ',', FALSE);
DELETE FROM tmp_Split;
SET sql_mode = '';
INSERT INTO tmp_Split (
substring
INSERT INTO tmp_Split_Id (
substring
, as_int
)
SELECT
substring
, CONVERT(substring, DECIMAL(10,0)) AS as_int
FROM parts.Split_Temp
WHERE 1=1
AND GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
substring
, CAST(substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp
WHERE
GUID = v_guid
AND IFNULL(substring, '') != ''
;
CALL parts.p_core_clear_split( v_guid );
END IF;
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user = 1) THEN
IF EXISTS (
SELECT *
FROM tmp_Split t_S
LEFT JOIN parts.Shop_User U ON t_S.as_int = U.id_user
FROM tmp_Split_Id t_SPLIT_ID
LEFT JOIN parts.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(USER.id_user)
OR USER.active = 0
) THEN
INSERT INTO tmp_Msg_Error (
-- guid,
id_type,
code,
msg
id_type
, code
, msg
)
SELECT
-- v_guid,
v_id_type_error_bad_data,
v_code_error_bad_data,
CONCAT('Invalid or inactive User IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_S
LEFT JOIN parts.Shop_User U ON t_S.as_int = U.id_user
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id t_SPLIT_ID
LEFT JOIN parts.DOG_User U ON t_SPLIT_ID.as_int = USER.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
;
ELSE
INSERT INTO tmp_User (
id_user
, rank_user
)
SELECT
U.id_user
, RANK() OVER (ORDER BY U.id_user DESC) AS rank_user
FROM tmp_Split t_S
RIGHT JOIN parts.Shop_User U ON t_S.as_int = U.id_user
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user = 1
AND NOT ISNULL(t_S.as_int)
)
)
AND (
a_get_inactive_user = 1
OR U.active = 1
)
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(USER.id_user)
OR USER.active = 0
;
END IF;
END IF;
-- Auth0 User IDs
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user_auth0 = 1) THEN
IF v_has_filter_user_auth0_id = 1 THEN
CALL parts.p_core_split(v_guid, a_ids_user_auth0, ',', FALSE);
DELETE FROM tmp_Split;
INSERT INTO tmp_Split (
INSERT INTO tmp_Split_Auth0_Id (
substring
)
SELECT
substring
FROM parts.Split_Temp
WHERE 1=1
AND GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
FROM parts.CORE_Split_Temp
WHERE
GUID = v_guid
AND IFNULL(substring, '') != ''
;
CALL parts.p_core_clear_split( v_guid );
IF EXISTS (
SELECT *
FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
LEFT JOIN parts.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
WHERE
ISNULL(t_SPLIT_AUTH0.substring)
OR ISNULL(USER.id_user_auth0)
OR USER.active = 0
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive Auth0 User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_AUTH0.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
LEFT JOIN parts.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
WHERE
ISNULL(t_SPLIT_AUTH0.substring)
OR ISNULL(USER.id_user_auth0)
OR USER.active = 0
;
END IF;
END IF;
-- User Names
IF v_has_filter_user_name = 1 THEN
CALL parts.p_core_split(v_guid, a_names_user, ',', FALSE);
SET sql_mode = '';
INSERT INTO tmp_Split_Name (
substring
)
SELECT
substring
FROM parts.CORE_Split_Temp
WHERE
GUID = v_guid
AND IFNULL(substring, '') != ''
;
CALL parts.p_core_clear_split( v_guid );
END IF;
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user_auth0 = 1) THEN
IF EXISTS (
SELECT *
FROM tmp_Split t_S
LEFT JOIN parts.Shop_User U ON t_S.substring = U.id_user_auth0
WHERE
ISNULL(t_S.substring)
OR ISNULL(U.id_user_auth0)
) THEN
INSERT INTO tmp_Msg_Error (
-- guid,
id_type,
code,
msg
)
SELECT
-- v_guid,
v_id_type_error_bad_data,
v_code_error_bad_data,
CONCAT('Invalid or inactive Auth0 User IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_S
LEFT JOIN parts.Shop_User U ON t_S.substring = U.id_user_auth0
WHERE
ISNULL(t_S.substring)
OR ISNULL(U.id_user_auth0)
;
ELSE
SET v_rank_max := IFNULL((SELECT rank_user FROM tmp_User ORDER BY rank_user DESC LIMIT 1), 0);
IF
v_has_filter_user_id = 1
OR v_has_filter_user_auth0_id = 1
THEN
INSERT INTO tmp_User (
id_user
, does_meet_id_filters
, does_meet_non_id_filters
)
WITH
User_Id_Filter AS (
SELECT USER.id_user
FROM tmp_Split_Id t_SPLIT_ID
INNER JOIN parts.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
)
, User_Auth0_Id_Filter AS (
SELECT USER.id_user
FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
INNER JOIN parts.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
)
, User_Name_Filter AS (
SELECT USER.id_user
FROM tmp_Split_Name t_SPLIT_NAME
INNER JOIN parts.DOG_User USER ON CONCAT(USER.firstname, ' ', USER.surname) LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE IFNULL(t_SPLIT_NAME.substring, '') <> ''
)
, User_Filters AS (
SELECT
USER_COMBINED.id_user
, MAX(USER_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(USER_COMBINED.does_meet_auth0_id_filter) AS does_meet_auth0_id_filter
, MAX(USER_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM (
SELECT
ID_FILTER.id_user
, 1 AS does_meet_id_filter
, 0 AS does_meet_auth0_id_filter
, 0 AS does_meet_name_filter
FROM User_Id_Filter ID_FILTER
UNION
SELECT
AUTH0_ID_FILTER.id_user
, 0 AS does_meet_id_filter
, 1 AS does_meet_auth0_id_filter
, 0 AS does_meet_name_filter
FROM User_Auth0_Id_Filter AUTH0_ID_FILTER
UNION
SELECT
NAME_FILTER.id_user
, 0 AS does_meet_id_filter
, 0 AS does_meet_auth0_id_filter
, 1 AS does_meet_name_filter
FROM User_Name_Filter NAME_FILTER
) USER_COMBINED
GROUP BY USER_COMBINED.id_user
)
SELECT
USER.id_user
, CASE WHEN
(
v_has_filter_user_id = 0
AND v_has_filter_user_auth0_id = 0
)
OR IFNULL(USER_FILTERS.does_meet_id_filter, 0) = 1
OR IFNULL(USER_FILTERS.does_meet_auth0_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_user_name = 0
)
OR IFNULL(USER_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM parts.DOG_User USER
LEFT JOIN User_Filters USER_FILTERS ON USER.id_user = USER_FILTERS.id_user
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user_id = 1
AND USER_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_user_auth0_id = 1
AND USER_FILTERS.does_meet_auth0_id_filter = 1
)
OR (
v_has_filter_user_id = 1
AND USER_FILTERS.does_meet_id_filter = 1
)
)
AND (
a_get_inactive_user = 1
OR USER.active = 1
)
;
END IF;
INSERT INTO tmp_User (
id_user
, rank_user
)
SELECT
U.id_user
, v_rank_max + (RANK() OVER (ORDER BY U.id_user DESC)) AS rank_user
FROM tmp_Split t_S
RIGHT JOIN parts.Shop_User U ON t_S.substring = U.id_user_auth0
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user_auth0 = 1
AND NOT ISNULL(t_S.substring)
)
)
AND (
a_get_inactive_user = 1
OR U.active = 1
)
;
END IF;
END IF;
DELETE FROM tmp_Split_Id;
DELETE FROM tmp_Split_Auth0_Id;
DELETE FROM tmp_Split_Name;
IF a_debug = 1 THEN
SELECT 'After get all Users';
SELECT * FROM tmp_User;
END IF;
/*
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_get_first_user_only THEN
DELETE t_U
FROM tmp_User t_U
WHERE t_U.rank_user > 1
;
END IF;
END IF;
*/
-- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
DELETE t_USER
FROM tmp_User t_USER
WHERE
(
a_require_all_id_search_filters_met = 1
AND t_USER.does_meet_id_filters = 0
)
OR (
a_require_all_non_id_search_filters_met = 1
AND t_USER.does_meet_non_id_filters = 0
)
OR (
a_require_any_id_search_filters_met = 1
AND t_USER.does_meet_id_filters = 0
)
OR (
a_require_any_non_id_search_filters_met = 1
AND t_USER.does_meet_non_id_filters = 0
)
;
END IF;
IF a_debug = 1 THEN
SELECT 'After filter Users';
SELECT * FROM tmp_User;
END IF;
-- Calculated fields
-- Can admin dog
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
@@ -309,10 +456,10 @@ BEGIN
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM parts.Shop_Calc_User_Temp;
SELECT * FROM parts.DOG_Calc_User_Temp;
END IF;
CALL parts.p_dog_calc_user(
@@ -321,16 +468,16 @@ BEGIN
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM parts.Shop_Calc_User_Temp WHERE GUID = v_guid;
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN parts.Shop_Calc_User_Temp CUT
INNER JOIN parts.DOG_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_dog = CUT.can_admin
@@ -340,7 +487,7 @@ BEGIN
END IF;
-- Can admin user
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
@@ -348,10 +495,10 @@ BEGIN
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM parts.Shop_Calc_User_Temp;
SELECT * FROM parts.DOG_Calc_User_Temp;
END IF;
CALL parts.p_dog_calc_user(
@@ -360,16 +507,16 @@ BEGIN
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM parts.Shop_Calc_User_Temp WHERE GUID = v_guid;
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN parts.Shop_Calc_User_Temp CUT
INNER JOIN parts.DOG_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_user = CUT.can_admin
@@ -379,7 +526,7 @@ BEGIN
END IF;
-- Permissions
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
@@ -387,10 +534,10 @@ BEGIN
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, '' -- ids_product
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM parts.Shop_Calc_User_Temp;
SELECT * FROM parts.DOG_Calc_User_Temp;
END IF;
CALL parts.p_dog_calc_user(
@@ -399,37 +546,33 @@ BEGIN
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, '' -- ids_product
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM parts.Shop_Calc_User_Temp WHERE GUID = v_guid;
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid;
END IF;
IF NOT EXISTS (
SELECT can_view
FROM parts.Shop_Calc_User_Temp CUT
WHERE 1=1
AND CUT.GUID = v_guid
FROM parts.DOG_Calc_User_Temp CUT
WHERE
CUT.GUID = v_guid
AND can_view = 1
-- AND FIND_IN_SET(v_ids_permission_required, CUT.id_permission_required) > 0
) THEN
INSERT INTO tmp_Msg_Error (
id_type,
code,
msg
id_type
, code
, msg
)
VALUES (
v_id_type_error_bad_data,
v_code_error_bad_data,
-- CONCAT('You do not have view permissions for ', (SELECT name FROM parts.Shop_Permission WHERE id_permission = v_id_permission_user LIMIT 1))
-- CONCAT('You do not have view permissions for ', (SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM parts.Shop_Permission WHERE FIND_IN_SET(v_id_permission_user, id_permission) > 0))
CONCAT('You do not have view permissions for ', (SELECT name FROM parts.Shop_Permission P INNER JOIN parts.Shop_Calc_User_Temp CUT ON P.id_permission = CUT.id_permission_required WHERE GUID = v_guid AND IFNULL(can_view, 0) = 0 LIMIT 1)) -- WHERE IFNULL(CUT.can_view, 0) = 0
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('You do not have view permissions for ', (SELECT name FROM parts.DOG_Permission P INNER JOIN parts.DOG_Calc_User_Temp CUT ON P.id_permission = CUT.id_permission_required WHERE GUID = v_guid AND IFNULL(can_view, 0) = 0 LIMIT 1))
)
;
ELSE
-- INSERT INTO
SET a_debug := a_debug;
END IF;
@@ -437,6 +580,14 @@ BEGIN
END IF;
IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT * FROM tmp_Dog_Calc_Dog;
END IF;
DELETE FROM tmp_Dog_Calc_Dog;
END IF;
-- Returns
/* NULL record required for flask sql_alchemy to detect result set */
IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN
@@ -447,48 +598,45 @@ BEGIN
SELECT
U.id_user
U.id_user
, U.id_user_auth0
, U.firstname
, U.surname
, U.email
, U.is_email_verified
, U.id_currency_default
, U.id_region_default
, U.is_included_VAT_default
, U.is_super_user
, t_U.can_admin_dog
, t_U.can_admin_user
, v_is_new AS is_new
FROM tmp_User t_U
INNER JOIN parts.Shop_User U ON t_U.id_user = U.id_user
INNER JOIN parts.DOG_User U ON t_U.id_user = U.id_user
;
# Errors
SELECT
t_ME.display_order,
MET.code,
t_ME.msg,
MET.name,
MET.description
FROM tmp_Msg_Error t_ME
INNER JOIN parts.Shop_Msg_Error_Type MET
ON t_ME.id_type = MET.id_type
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
-- Clean up
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
/*
DELETE FROM parts.Shop_Calc_User_Temp
WHERE GUID = v_guid;
*/
DROP TEMPORARY TABLE IF EXISTS tmp_User;
IF a_debug = 1 THEN
CALL parts.p_debug_timing_reporting ( v_time_start );
@@ -518,13 +666,12 @@ CALL p_dog_get_many_user (
, 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0
, 0 -- a_debug
);*/
/*
select * FROM parts.Shop_Calc_User_Temp;
delete FROM parts.Shop_Calc_User_Temp;
select * FROM parts.DOG_Calc_User_Temp;
delete FROM parts.DOG_Calc_User_Temp;
SELECT *
FROM parts.Shop_USER;
FROM parts.DOG_USER;
CALL p_dog_get_many_user(
NULL -- :a_id_user,
@@ -534,6 +681,12 @@ CALL p_dog_get_many_user(
-- , 0 -- :a_get_first_user_only,
, NULL -- :a_ids_user,
, 'auth0|6582b95c895d09a70ba10fef' -- :a_ids_user_auth0
, '' -- a_names_user
, 1 -- :a_require_all_id_search_filters_met,
, 1 -- :a_require_any_id_search_filters_met,
, 0 -- :a_require_all_non_id_search_filters_met,
, 1 -- :a_require_any_non_id_search_filters_met,
, 0 -- a_debug
);
*/

View File

@@ -33,8 +33,8 @@ BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(50) NOT NULL
, msg VARCHAR(4000) NOT NULL
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
@@ -81,8 +81,8 @@ BEGIN
CREATE TABLE tmp_Msg_Error (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_type INT NOT NULL,
code VARCHAR(50) NOT NULL,
msg VARCHAR(4000) NOT NULL
code VARCHAR(100) NOT NULL,
msg TEXT NOT NULL
);
-- Get data from Temp table
@@ -191,6 +191,29 @@ BEGIN
, v_id_access_level_edit -- ID Access Level
, NULL -- IDs Product
);
-- replace with below
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM parts.DOG_Calc_User_Temp;
END IF;
CALL parts.p_dog_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SET v_can_admin_user := (
SELECT IFNULL(UE_T.can_edit, 0) = 1

View File

@@ -1,142 +1,210 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_dog_user_eval;
DROP PROCEDURE IF EXISTS parts.p_dog_calc_user;
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_dog_user_eval;
DROP PROCEDURE IF EXISTS p_dog_calc_user;
DELIMITER //
CREATE PROCEDURE parts.p_dog_calc_user (
CREATE PROCEDURE p_dog_calc_user (
IN a_guid BINARY(36)
, IN a_ids_user TEXT
, IN a_get_inactive_user BIT
, IN a_ids_permission VARCHAR(4000)
, IN a_ids_permission TEXT
, IN a_ids_access_level TEXT
, IN a_show_errors BIT
, IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(200);
DECLARE v_code_type_error_no_permission VARCHAR(200);
DECLARE v_has_filter_permission BIT;
DECLARE v_has_filter_user BIT;
DECLARE v_has_filter_access_level BIT;
DECLARE v_id_access_level INT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_permission INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_ids_row_delete VARCHAR(500);
DECLARE v_code_type_error_bad_data VARCHAR(250);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_code_type_error_no_permission VARCHAR(250);
DECLARE v_id_permission_required INT;
DECLARE v_priority_access_level_required INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_ids_row_delete VARCHAR(500);
DECLARE v_priority_access_level_view INT;
DECLARE v_priority_access_level_edit INT;
DECLARE v_priority_access_level_admin INT;
DECLARE v_priority_access_level INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE
, @errno = MYSQL_ERRNO
, @text = MESSAGE_TEXT
;
ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_User (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error_Calc_User (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM parts.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error_Calc_User t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User;
END;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_code_type_error_bad_data := (SELECT code FROM parts.CORE_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT id_type FROM parts.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_code_type_error_no_permission := (SELECT code FROM parts.CORE_Msg_Error_Type WHERE code = 'NO_PERMISSION' LIMIT 1);
SET v_priority_access_level_view := (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
CALL parts.p_core_validate_guid ( a_guid );
SET v_code_type_error_no_permission := (SELECT code FROM parts.CORE_Msg_Error_Type WHERE id_type = 2);
CALL parts.p_validate_guid ( a_guid );
SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
SET a_ids_permission := TRIM(IFNULL(a_ids_permission, ''));
SET a_ids_access_level := TRIM(IFNULL(a_ids_access_level, ''));
SET a_show_errors := IFNULL(a_show_errors, 0);
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT 'Arguments';
SELECT
a_guid
, a_ids_user
, a_get_inactive_user
, a_ids_permission
, a_ids_access_level
, a_show_errors
, a_debug
;
SELECT 'Derived variables';
SELECT
v_code_type_error_bad_data
, v_code_type_error_no_permission
, v_id_type_error_bad_data
, v_priority_access_level_view
, v_time_start
;
END IF;
DROP TABLE IF EXISTS tmp_Calc_User;
DROP TABLE IF EXISTS tmp_User_Calc_User;
-- Clear previous proc results
DROP TABLE IF EXISTS tmp_Split_Calc_User;
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User;
DROP TABLE IF EXISTS tmp_User_Calc_User;
DROP TABLE IF EXISTS tmp_Calc_User;
-- Permanent Table
CREATE TEMPORARY TABLE tmp_Calc_User (
id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT NULL
, id_user INT
, id_permission_required INT NOT NULL
, priority_access_level_required INT NOT NULL
, is_super_user BIT NULL
, priority_access_level_user INT NULL
, has_access BIT
, is_super_user BIT
, priority_access_level_user INT
, can_view BIT
, can_edit BIT
, can_admin BIT
);
CREATE TEMPORARY TABLE tmp_User_Calc_User (
id_user INT NOT NULL
id_user INT NOT NULL
, is_super_user BIT NOT NULL
-- , id_access_level INT
, priority_access_level INT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_User (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Calc_User (
substring VARCHAR(4000) NOT NULL
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Calc_User;
SET v_has_filter_user = CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
SET a_ids_permission = REPLACE(a_ids_permission, '|', ',');
SET v_has_filter_permission = CASE WHEN a_ids_permission = '' THEN 0 ELSE 1 END;
-- SET v_id_access_level_view = (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_has_filter_access_level = CASE WHEN a_ids_access_level = '' THEN 0 ELSE 1 END;
SET v_id_access_level_view = (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_priority_access_level_view = (SELECT priority FROM parts.DOG_Access_Level WHERE id_access_level = v_id_access_level_view);
SET v_priority_access_level_edit = (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'EDIT' LIMIT 1);
SET v_priority_access_level_admin = (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1);
IF a_debug = 1 THEN
SELECT
v_priority_access_level_view
, v_priority_access_level_edit
, v_priority_access_level_admin
;
END IF;
-- Permission IDs
IF NOT v_has_filter_permission THEN
INSERT INTO tmp_Msg_Error_Calc_User (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, 'Permission ID required.'
;
ELSE
CALL parts.p_core_split(a_guid, a_ids_permission, ',', a_debug);
# Access levels
IF v_has_filter_access_level = 1 THEN
IF a_debug = 1 THEN
SELECT
'p_core_split'
, a_guid
, a_ids_access_level
, ','
, a_debug
;
END IF;
CALL parts.p_core_clear_split( a_guid );
CALL parts.p_core_split(a_guid, a_ids_access_level, ',', a_debug);
DELETE FROM tmp_Split_Calc_User;
INSERT INTO tmp_Split_Calc_User (
substring
, as_int
)
SELECT
substring
, CONVERT(substring, DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) -- AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
GUID = a_guid
AND NOT ISNULL(substring)
AND substring != ''
GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') != ''
;
IF a_debug = 1 THEN
SELECT 'Access Levels split', a_ids_access_level;
SELECT *
FROM tmp_Split_Calc_User;
END IF;
CALL parts.p_core_clear_split( a_guid );
-- Invalid or inactive
# Invalid IDs
IF EXISTS (
SELECT PERM.id_permission
FROM tmp_Split_Calc_User t_S
LEFT JOIN parts.DOG_Permission PERM ON t_S.as_int = PERM.id_permission
WHERE
ISNULL(t_S.as_int)
OR ISNULL(PERM.id_permission)
OR PERM.active = 0
) THEN
SELECT t_SPLIT.substring
FROM tmp_Split_Calc_User t_SPLIT
LEFT JOIN parts.DOG_Access_Level ACCESS_LEVEL ON t_SPLIT.as_int = ACCESS_LEVEL.id_access_level
WHERE
ISNULL(t_SPLIT.as_int)
OR ISNULL(ACCESS_LEVEL.id_access_level)
OR ACCESS_LEVEL.active = 0
) THEN
INSERT INTO tmp_Msg_Error_Calc_User (
id_type
, code
@@ -145,69 +213,141 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive permission IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Calc_User t_S
LEFT JOIN parts.DOG_Permission PERM ON t_S.as_int = PERM.id_permission
, CONCAT('Invalid or inactive access level IDs: ', GROUP_CONCAT(t_SPLIT.substring SEPARATOR ','))
FROM tmp_Split_Calc_User t_SPLIT
LEFT JOIN parts.DOG_Access_Level ACCESS_LEVEL ON t_SPLIT.as_int = ACCESS_LEVEL.id_access_level
WHERE
ISNULL(t_S.as_int)
OR ISNULL(PERM.id_permission)
OR PERM.active = 0
ISNULL(t_SPLIT.as_int)
OR ISNULL(ACCESS_LEVEL.id_access_level)
OR ACCESS_LEVEL.active = 0
;
SET v_has_filter_access_level = 0;
ELSE
SET v_id_access_level := (
SELECT ACCESS_LEVEL.id_access_level
FROM tmp_Split_Calc_User t_SPLIT
INNER JOIN parts.DOG_Access_Level ACCESS_LEVEL
ON t_SPLIT.as_int = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
ORDER BY ACCESS_LEVEL.priority ASC
LIMIT 1
);
END IF;
END IF;
DELETE FROM tmp_Split_Calc_User;
IF ISNULL(v_id_access_level) THEN
SET v_id_access_level = v_id_access_level_view;
END IF;
SET v_priority_access_level := (SELECT priority FROM parts.DOG_Access_Level WHERE id_access_level = v_id_access_level LIMIT 1);
-- Permission IDs
IF v_has_filter_permission = 1 THEN
CALL parts.p_core_clear_split( a_guid );
CALL parts.p_core_split(a_guid, a_ids_permission, ',', a_debug);
DELETE FROM tmp_Split_Calc_User;
INSERT INTO tmp_Split_Calc_User (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') != ''
;
IF a_debug = 1 THEN
SELECT 'Permissions split', a_ids_permission;
SELECT *
FROM tmp_Split_Calc_User;
END IF;
CALL parts.p_core_clear_split( a_guid );
# Invalid or inactive
IF EXISTS (SELECT PERMISSION.id_permission FROM tmp_Split_Calc_User t_SPLIT LEFT JOIN parts.DOG_Permission PERMISSION ON t_SPLIT.as_int = PERMISSION.id_permission WHERE ISNULL(t_SPLIT.as_int) OR ISNULL(PERMISSION.id_permission) OR PERMISSION.active = 0) THEN
INSERT INTO tmp_Msg_Error_Calc_User (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive permission IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT.substring SEPARATOR ','), 'NULL'))
FROM tmp_Split_Calc_User t_SPLIT
LEFT JOIN parts.DOG_Permission PERMISSION ON t_SPLIT.as_int = PERMISSION.id_permission
WHERE
ISNULL(t_SPLIT.as_int)
OR ISNULL(PERMISSION.id_permission)
OR PERMISSION.active = 0
;
ELSE
SELECT
PERM.id_permission
, PERM.id_access_level_required
INTO
v_id_permission_required
, v_priority_access_level_required
FROM tmp_Split_Calc_User t_S
LEFT JOIN parts.DOG_Permission PERM ON t_S.as_int = PERM.id_permission
INNER JOIN parts.DOG_Access_Level AL ON PERM.id_access_level_required = AL.id_access_level
ORDER BY AL.priority ASC
LIMIT 1
;
IF ISNULL(v_id_permission_required) THEN
INSERT INTO tmp_Msg_Error_Calc_User (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, 'Valid Permission ID required.'
;
END IF;
SET v_id_permission_required := (
SELECT PERMISSION.id_permission
FROM tmp_Split_Calc_User t_SPLIT
INNER JOIN parts.DOG_Permission PERMISSION ON t_SPLIT.as_int = PERMISSION.id_permission
INNER JOIN parts.DOG_Access_Level ACCESS_LEVEL ON PERMISSION.id_access_level_required = ACCESS_LEVEL.id_access_level
ORDER BY ACCESS_LEVEL.priority ASC
LIMIT 1
);
END IF;
END IF;
DELETE FROM tmp_Split_Calc_User;
IF a_debug = 1 THEN
SELECT v_id_permission_required;
END IF;
-- Users
# Users
CALL parts.p_core_clear_split( a_guid );
CALL parts.p_core_split(a_guid, a_ids_user, ',', a_debug);
DELETE FROM tmp_Split_Calc_User;
INSERT INTO tmp_Split_Calc_User (
substring
, as_int
)
SELECT
substring
substring
, CONVERT(substring, DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp
WHERE
GUID = a_guid
GUID = a_guid
AND NOT ISNULL(substring)
AND substring != ''
;
IF a_debug = 1 THEN
SELECT 'Users split', a_ids_user;
SELECT *
FROM tmp_Split_Calc_User;
END IF;
CALL parts.p_core_clear_split( a_guid );
-- Invalid or inactive
IF EXISTS (SELECT U.id_user FROM tmp_Split_Calc_User t_S LEFT JOIN parts.DOG_User U ON t_S.as_int = U.id_user WHERE ISNULL(t_S.as_int) OR ISNULL(U.id_user) OR (a_get_inactive_user = 0 AND U.active = 0)) THEN
IF a_debug = 1 THEN
SELECT v_id_permission_required, v_id_access_level, v_priority_access_level;
SELECT * FROM tmp_User_Calc_User;
SELECT * FROM tmp_Msg_Error_Calc_User;
END IF;
# Invalid or inactive
IF EXISTS (
SELECT USER.id_user
FROM tmp_Split_Calc_User t_SPLIT
LEFT JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user
WHERE
ISNULL(t_SPLIT.as_int)
OR ISNULL(USER.id_user)
OR (
a_get_inactive_user = 0
AND USER.active = 0
)
)
THEN
INSERT INTO tmp_Msg_Error_Calc_User (
id_type
, code
@@ -216,88 +356,72 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive user IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Calc_User t_S
LEFT JOIN parts.DOG_User U ON t_S.as_int = U.id_user
, CONCAT('Invalid or inactive user IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT.substring SEPARATOR ','), 'NULL'))
FROM tmp_Split_Calc_User t_SPLIT
LEFT JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
ISNULL(t_SPLIT.as_int)
OR ISNULL(USER.id_user)
OR (
a_get_inactive_user = 0
AND U.active = 0
AND USER.active = 0
)
;
ELSE
IF NOT EXISTS (SELECT * FROM tmp_Split_Calc_User) THEN
INSERT INTO tmp_Split_Calc_User (substring, as_int)
INSERT INTO tmp_Split_Calc_User ( substring, as_int )
VALUES ( '', NULL );
END IF;
IF a_debug = 1 THEN
SELECT *
FROM tmp_Split_Calc_User;
END IF;
INSERT INTO tmp_User_Calc_User (
id_user
, is_super_user
, priority_access_level
)
SELECT
U.id_user
, IFNULL(U.is_super_user, 0) AS is_super_user
, IFNULL(MIN(AL_U.priority), v_priority_access_level_view) AS priority_access_level
FROM tmp_Split_Calc_User t_S
INNER JOIN parts.DOG_User U ON t_S.as_int = U.id_user
LEFT JOIN parts.DOG_User_Role_Link URL
ON U.id_user = URL.id_user
AND URL.active
LEFT JOIN parts.DOG_Role_Permission_Link RPL
ON URL.id_role = RPL.id_role
AND RPL.active
LEFT JOIN parts.DOG_Access_Level AL_U
ON RPL.id_access_level = AL_U.id_access_level
AND AL_U.active
GROUP BY U.id_user
USER.id_user
, IFNULL(USER.is_super_user, 0) AS is_super_user
, IFNULL(MIN(ACCESS_LEVEL.priority), v_priority_access_level_view) AS priority_access_level
FROM tmp_Split_Calc_User t_SPLIT
INNER JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user
LEFT JOIN parts.DOG_User_Role_Link USER_ROLE_LINK
ON USER.id_user = USER_ROLE_LINK.id_user
AND USER_ROLE_LINK.active
LEFT JOIN parts.DOG_Role_Permission_Link ROLE_PERMISSION_LINK
ON USER_ROLE_LINK.id_role = ROLE_PERMISSION_LINK.id_role
AND ROLE_PERMISSION_LINK.active
LEFT JOIN parts.DOG_Access_Level ACCESS_LEVEL
ON ROLE_PERMISSION_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active
GROUP BY USER.id_user
;
IF a_debug = 1 THEN
SELECT
t_UCU.id_user
, v_id_permission_required
, v_priority_access_level_required
, t_UCU.priority_access_level AS priority_access_level_user
, t_UCU.is_super_user AS is_super_user
FROM tmp_User_Calc_User t_UCU
;
END IF;
INSERT INTO tmp_Calc_User (
id_user
, id_permission_required
, priority_access_level_required
, priority_access_level_user
, is_super_user
, is_super_user
)
SELECT
t_UCU.id_user
t_USER.id_user
, v_id_permission_required
, v_priority_access_level_required
, t_UCU.priority_access_level AS priority_access_level_user
, t_UCU.is_super_user AS is_super_user
FROM tmp_User_Calc_User t_UCU
, v_priority_access_level AS priority_access_level_required
, t_USER.is_super_user AS is_super_user
, t_USER.priority_access_level AS priority_access_level_user
FROM tmp_User_Calc_User t_USER
;
# SET v_has_filter_user = EXISTS ( SELECT * FROM tmp_User_Calc_User LIMIT 1 );
END IF;
DELETE FROM tmp_Split_Calc_User;
-- Calculated fields
UPDATE tmp_Calc_User t_CU
UPDATE tmp_Calc_User t_CALC_USER
SET
t_CU.has_access = (
(t_CU.is_super_user = 1)
OR (t_CU.priority_access_level_user <= t_CU.priority_access_level_required)
)
t_CALC_USER.can_view = t_CALC_USER.is_super_user = 1 OR (t_CALC_USER.priority_access_level_user <= v_priority_access_level_view AND t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required)
, t_CALC_USER.can_edit = t_CALC_USER.is_super_user = 1 OR (t_CALC_USER.priority_access_level_user <= v_priority_access_level_edit AND t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required)
, t_CALC_USER.can_admin = t_CALC_USER.is_super_user = 1 OR (t_CALC_USER.priority_access_level_user <= v_priority_access_level_admin AND t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required)
;
-- Export data to staging table
@@ -308,23 +432,46 @@ BEGIN
, id_user
, id_permission_required
, priority_access_level_required
, priority_access_level_user
, is_super_user
, has_access
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
)
SELECT
a_guid
, t_CU.id_user
, t_CU.id_permission_required
, t_CU.priority_access_level_required
, t_CU.priority_access_level_user
, t_CU.is_super_user
, t_CU.has_access
FROM tmp_Calc_User t_CU
, t_CALC_USER.id_user
, t_CALC_USER.id_permission_required
, t_CALC_USER.priority_access_level_required
, t_CALC_USER.is_super_user
, t_CALC_USER.priority_access_level_user
, CASE WHEN t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required THEN 1 ELSE 0 END AS has_access
, t_CALC_USER.can_view
, t_CALC_USER.can_edit
, t_CALC_USER.can_admin
FROM tmp_Calc_User t_CALC_USER
;
COMMIT;
END IF;
-- Errors
IF a_show_errors = 1 THEN
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error_Calc_User t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
END IF;
IF a_debug = 1 THEN
SELECT * FROM tmp_Msg_Error_Calc_User;
SELECT * FROM tmp_Calc_User;
@@ -334,9 +481,10 @@ BEGIN
END IF;
-- Clean up
DROP TABLE IF EXISTS tmp_Calc_User;
DROP TABLE IF EXISTS tmp_Split_Calc_User;
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User;
DROP TABLE IF EXISTS tmp_User_Calc_User;
DELETE FROM tmp_Split_Calc_User;
DROP TABLE IF EXISTS tmp_Calc_User;
IF a_debug = 1 THEN
CALL parts.p_debug_timing_reporting( v_time_start );
@@ -348,29 +496,45 @@ DELIMITER ;
CALL parts.p_dog_calc_user (
'chips ' -- a_guid
, 1 -- a_ids_user
, 0 -- a_get_inactive_user
, '2' -- a_ids_permission
, '1' -- a_ids_access_level
, 0 -- a_debug
, 1 -- a_ids_user
, 0 -- a_get_inactive_user
, '2' -- a_ids_permission
, '1' -- a_ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
CALL parts.p_dog_calc_user (
'chips ' -- a_guid
, 1 -- a_ids_user
, 0 -- a_get_inactive_user
, '2' -- a_ids_permission
, '1' -- a_ids_access_level
, 0 -- a_debug
, 1 -- a_ids_user
, 0 -- a_get_inactive_user
, '2' -- a_ids_permission
, '1' -- a_ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = 'chips ';
DELETE FROM parts.DOG_Calc_User_Temp WHERE GUID = 'chips ';
DELETE FROM demo.DOG_Calc_User_Temp;
CALL demo.p_dog_calc_user (
'chips ' -- a_guid
, 1 -- a_ids_user
, 0 -- a_get_inactive_user
, '7' -- a_ids_permission
, 0 -- a_debug
);
SELECT * FROM demo.DOG_Calc_User_Temp;
*/
-- SELECT * FROM parts.DOG_Calc_User_Temp;
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = 'chips ';
CALL parts.p_dog_clear_calc_user ( 'chips ', 0 );
-- SELECT * FROM parts.DOG_Calc_User_Temp;
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User;
CALL parts.p_dog_calc_user(
'chips '-- a_guid
, '1' -- a_ids_user
, 0 -- a_get_inactive_user
, '8' -- a_ids_permission
, '1' -- a_ids_access_level
, 1 -- a_show_errors
, 0 -- a_debug
);
SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = 'chips ';
CALL parts.p_dog_clear_calc_user ( 'chips ', 0 );
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User;

View File

@@ -39,5 +39,5 @@ CALL p_dog_get_many_unit_measurement (
);
select *
from dog_unit_measurement
from parts.dog_unit_measurement
*/

View File

@@ -11,6 +11,10 @@ CREATE PROCEDURE parts.p_dog_calc_dog (
, IN a_get_inactive_dog BIT
, IN a_ids_dog TEXT
, IN a_names_dog TEXT
, IN a_require_all_id_search_filters_met BIT
, IN a_require_any_id_search_filters_met BIT
, IN a_require_all_non_id_search_filters_met BIT
, IN a_require_any_non_id_search_filters_met BIT
, IN a_show_errors BIT
, IN a_debug BIT
)
@@ -20,6 +24,7 @@ BEGIN
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_has_filter_dog_id BIT;
DECLARE v_has_filter_dog_name BIT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT;
@@ -40,7 +45,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error_Calc_Dog (
@@ -79,7 +84,7 @@ BEGIN
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
CALL parts.p_core_validate_guid ( a_guid );
@@ -88,6 +93,10 @@ BEGIN
SET a_get_inactive_dog := IFNULL(a_get_inactive_dog, 0);
SET a_ids_dog := TRIM(IFNULL(a_ids_dog, ''));
SET a_names_dog := TRIM(IFNULL(a_names_dog, ''));
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
SET a_show_errors := IFNULL(a_show_errors, 0);
SET a_debug := IFNULL(a_debug, 0);
@@ -99,6 +108,10 @@ BEGIN
, a_get_inactive_dog
, a_ids_dog
, a_names_dog
, a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met
, a_show_errors
, a_debug
;
@@ -118,13 +131,15 @@ BEGIN
CREATE TEMPORARY TABLE tmp_Dog_Calc_Dog (
id_dog INT NOT NULL
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Dog (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Dog (
@@ -146,13 +161,30 @@ BEGIN
IF v_has_filter_dog_id = 1 THEN
CALL parts.p_core_split(a_guid, a_ids_dog, ',', a_debug);
SET sql_mode = '';
IF a_debug = 1 THEN
SELECT *
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
SELECT COUNT(*) AS count_split_ids
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
END IF;
INSERT INTO tmp_Split_Id_Calc_Dog (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
@@ -165,13 +197,30 @@ BEGIN
IF v_has_filter_dog_name = 1 THEN
CALL parts.p_core_split(a_guid, a_names_dog, ',', a_debug);
SET sql_mode = '';
IF a_debug = 1 THEN
SELECT *
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
SELECT COUNT(*) AS count_split_names
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
END IF;
INSERT INTO tmp_Split_Name_Calc_Dog (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
@@ -181,6 +230,15 @@ BEGIN
CALL parts.p_core_clear_split( a_guid );
END IF;
IF a_debug = 1 THEN
SELECT *
FROM tmp_Split_Id_Calc_Dog
;
SELECT *
FROM tmp_Split_Name_Calc_Dog
;
END IF;
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Dog t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF EXISTS (
SELECT *
@@ -214,78 +272,70 @@ BEGIN
)
;
/* Don't error on names not found
ELSEIF EXISTS (
SELECT *
FROM tmp_Split t_SPLIT
LEFT JOIN parts.DOG_Dog DOG ON t_SPLIT.as_int = DOG.id_dog
WHERE
ISNULL(t_SPLIT.as_int)
OR ISNULL(DOG.id_dog)
OR (
DOG.active = 0
AND a_get_inactive_dog = 0
)
) THEN
INSERT INTO tmp_Msg_Error_Calc_Dog (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive Dog IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_SPLIT
LEFT JOIN parts.DOG_Dog DOG ON t_SPLIT.as_int = DOG.id_dog
WHERE
ISNULL(t_SPLIT.as_int)
OR ISNULL(DOG.id_dog)
OR (
DOG.active = 0
AND a_get_inactive_dog = 0
)
;
ELSEIF EXISTS ()
*/
ELSE
INSERT INTO tmp_Dog_Calc_Dog (
id_dog
, does_meet_id_filters
, does_meet_non_id_filters
)
WITH
Dog_Id_Filter AS (
SELECT DOG.id_dog
FROM tmp_Split_Id_Calc_Dog t_SPLIT_ID
RIGHT JOIN parts.DOG_Dog DOG ON t_SPLIT_ID.as_int = DOG.id_dog
WHERE t_SPLIT_ID.as_int IS NOT NULL
INNER JOIN parts.DOG_Dog DOG ON t_SPLIT_ID.as_int = DOG.id_dog
)
, Dog_Name_Filter AS (
SELECT DOG.id_dog
FROM tmp_Split_Name_Calc_Dog t_SPLIT_NAME
RIGHT JOIN parts.DOG_Dog DOG ON DOG.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE
t_SPLIT_NAME.substring IS NOT NULL
AND t_SPLIT_NAME.substring <> ''
INNER JOIN parts.DOG_Dog DOG ON DOG.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE IFNULL(t_SPLIT_NAME.substring, '') <> ''
)
, Dog_Filters AS (
SELECT DISTINCT DOG_COMBINED.id_dog
SELECT
DOG_COMBINED.id_dog
, MAX(DOG_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(DOG_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM (
SELECT DOG_ID_FILTER.id_dog FROM Dog_Id_Filter DOG_ID_FILTER
SELECT
DOG_ID_FILTER.id_dog
, 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter
FROM Dog_Id_Filter DOG_ID_FILTER
UNION
SELECT DOG_NAME_FILTER.id_dog FROM Dog_Name_Filter DOG_NAME_FILTER
SELECT
DOG_NAME_FILTER.id_dog
, 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter
FROM Dog_Name_Filter DOG_NAME_FILTER
) DOG_COMBINED
GROUP BY DOG_COMBINED.id_dog
)
SELECT
DOG.id_dog
, CASE WHEN
v_has_filter_dog_id = 0
OR IFNULL(DOG_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_dog_name = 0
)
OR IFNULL(DOG_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM parts.DOG_Dog DOG
LEFT JOIN Dog_Filters DOG_FILTERS ON DOG.id_dog = DOG_FILTERS.id_dog
WHERE
(
a_get_all_dog = 1
OR (
v_has_filter_dog_id = 1
AND DOG_FILTERS.does_meet_id_filter = 1
)
OR (
(
v_has_filter_dog_id = 1
OR v_has_filter_dog_name = 1
)
AND DOG_FILTERS.id_dog IS NOT NULL
v_has_filter_dog_name = 1
AND DOG_FILTERS.does_meet_name_filter = 1
)
)
AND (
@@ -299,23 +349,50 @@ BEGIN
DELETE FROM tmp_Split_Id_Calc_Dog;
DELETE FROM tmp_Split_Name_Calc_Dog;
-- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Dog t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
DELETE t_DOG
FROM tmp_Dog_Calc_Dog t_DOG
WHERE
(
a_require_all_id_search_filters_met = 1
AND t_DOG.does_meet_id_filters = 0
)
OR (
a_require_all_non_id_search_filters_met = 1
AND t_DOG.does_meet_non_id_filters = 0
)
OR (
a_require_any_id_search_filters_met = 1
AND t_DOG.does_meet_id_filters = 0
)
OR (
a_require_any_non_id_search_filters_met = 1
AND t_DOG.does_meet_non_id_filters = 0
)
;
END IF;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid
, a_id_user
a_guid -- a_guid
, a_id_user -- a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, v_id_permission_dog_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL parts.p_dog_calc_user(
a_guid
, a_id_user
a_guid -- a_guid
, a_id_user -- a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, v_id_permission_dog_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -345,7 +422,7 @@ BEGIN
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Commands.'
, 'You do not have permission to view Dog.'
)
;
END IF;
@@ -364,7 +441,7 @@ BEGIN
END IF;
-- Outputs
-- Commands
-- Dogs
INSERT INTO parts.DOG_Dog_Temp (
guid
, id_dog
@@ -373,6 +450,9 @@ BEGIN
, mass_kg
, notes
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
a_guid
@@ -382,24 +462,29 @@ BEGIN
, DOG.mass_kg
, DOG.notes
, DOG.active
, t_DOG.does_meet_id_filters
, t_DOG.does_meet_non_id_filters
FROM parts.DOG_Dog DOG
INNER JOIN tmp_Dog_Calc_Dog t_DOG ON DOG.id_dog = t_DOG.id_dog
;
-- Errors
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error_Calc_Dog t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
IF a_show_errors = 1 THEN
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error_Calc_Dog t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
END IF;
IF a_debug = 1 AND v_can_view = 1 THEN
SELECT * FROM tmp_Dog_Calc_Dog;
@@ -427,10 +512,30 @@ CALL parts.p_dog_calc_dog (
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, '' -- a_names_dog
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_show_errors
, 1 -- a_debug
);
CALL parts.p_dog_calc_dog (
'slips ' -- a_guid
, 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_dog
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, 'pat' -- a_names_dog
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT *
FROM parts.DOG_Dog_Temp
;

View File

@@ -10,6 +10,10 @@ CREATE PROCEDURE parts.p_dog_get_many_dog (
, IN a_get_inactive_dog BIT
, IN a_ids_dog TEXT
, IN a_names_dog TEXT
, IN a_require_all_id_search_filters_met BIT
, IN a_require_any_id_search_filters_met BIT
, IN a_require_all_non_id_search_filters_met BIT
, IN a_require_any_non_id_search_filters_met BIT
, IN a_debug BIT
)
BEGIN
@@ -17,8 +21,7 @@ BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_guid BINARY(36);
DECLARE v_has_filter_dog_id BIT;
DECLARE v_has_filter_dog_name BIT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT;
@@ -39,7 +42,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -79,12 +82,19 @@ BEGIN
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
/*
SET a_get_all_dog := IFNULL(a_get_all_dog, 0);
SET a_get_inactive_dog := IFNULL(a_get_inactive_dog, 0);
SET a_ids_dog := TRIM(IFNULL(a_ids_dog, ''));
SET a_names_dog := TRIM(IFNULL(a_names_dog, ''));
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
*/
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
@@ -94,6 +104,10 @@ BEGIN
, a_get_inactive_dog
, a_ids_dog
, a_names_dog
, a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met
, a_debug
;
@@ -116,32 +130,39 @@ BEGIN
, mass_kg DECIMAL(7, 3)
, notes TEXT
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
-- Permissions
IF a_debug = 1 THEN
SELECT
v_guid
, a_id_user
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, 0 -- a_debug
, v_id_permission_dog_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, a_debug -- a_debug
;
END IF;
CALL parts.p_dog_calc_user(
v_guid
, a_id_user
v_guid-- guid
, a_id_user -- ids_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, 0 -- a_debug
, v_id_permission_dog_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, a_debug -- a_debug
);
SELECT
@@ -193,6 +214,10 @@ BEGIN
, a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
;
@@ -205,6 +230,10 @@ BEGIN
, a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -216,6 +245,9 @@ BEGIN
, mass_kg
, notes
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
DOG_T.id_dog
@@ -224,6 +256,9 @@ BEGIN
, DOG_T.mass_kg
, DOG_T.notes
, DOG_T.active
, DOG_T.does_meet_id_filters
, DOG_T.does_meet_non_id_filters
FROM parts.DOG_Dog_Temp DOG_T
WHERE DOG_T.GUID = v_guid
;
@@ -251,6 +286,9 @@ BEGIN
, DOG_T.mass_kg
, DOG_T.notes
, DOG_T.active
, DOG_T.does_meet_id_filters
, DOG_T.does_meet_non_id_filters
FROM parts.DOG_Dog_Temp DOG_T
;
@@ -296,6 +334,23 @@ CALL parts.p_dog_get_many_dog (
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, '' -- a_names_dog
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_debug
);
CALL demo.p_dog_get_many_dog (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_dog
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, 'pat' -- a_names_dog
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_debug
);

View File

@@ -11,14 +11,16 @@ CREATE PROCEDURE parts.p_dog_save_command (
IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_permission_dog_admin INT;
DECLARE v_id_permission_dog_new INT;
DECLARE v_id_change_set INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_can_admin BIT;
DECLARE v_can_create BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_access_level_admin INT;
DECLARE v_id_access_level_create INT;
DECLARE v_id_change_set INT;
DECLARE v_id_permission_dog_admin INT;
DECLARE v_id_permission_dog_new INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
BEGIN
@@ -34,7 +36,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100)
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -72,6 +74,7 @@ BEGIN
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_dog_admin := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_ADMIN' LIMIT 1);
SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
SET v_id_access_level_admin := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
CALL parts.p_core_validate_guid ( a_guid );
@@ -95,7 +98,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100)
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
@@ -219,11 +222,14 @@ BEGIN
;
END IF;
-- Can Admin
CALL parts.p_dog_calc_user(
a_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_admin
, v_id_permission_dog_admin-- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -241,11 +247,14 @@ BEGIN
, 0 -- a_debug
);
-- Can Create
CALL parts.p_dog_calc_user(
a_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_new
, v_id_permission_dog_new-- ids_permission
, v_id_access_level_create -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);

File diff suppressed because it is too large Load Diff

View File

@@ -17,6 +17,11 @@ BEGIN
START TRANSACTION;
DELETE COMMAND_CATEGORY_T
FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T
WHERE COMMAND_CATEGORY_T.GUID = a_guid
;
DELETE COMMAND_T
FROM parts.DOG_Command_Temp COMMAND_T
WHERE COMMAND_T.GUID = a_guid

View File

@@ -14,6 +14,12 @@ CREATE PROCEDURE parts.p_dog_get_many_command (
, IN a_get_inactive_command BIT
, IN a_ids_command TEXT
, IN a_names_command TEXT
, IN a_hand_signal_default_descriptions_command TEXT
, IN a_notes_command TEXT
, IN a_require_all_id_search_filters_met BIT
, IN a_require_any_id_search_filters_met BIT
, IN a_require_all_non_id_search_filters_met BIT
, IN a_require_any_non_id_search_filters_met BIT
, IN a_output_command_categories BIT
, IN a_output_commands BIT
, IN a_debug BIT
@@ -23,10 +29,7 @@ BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_guid BINARY(36);
DECLARE v_has_filter_command_id BIT;
DECLARE v_has_filter_command_name BIT;
DECLARE v_has_filter_command_category_id BIT;
DECLARE v_has_filter_command_category_name BIT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT;
@@ -47,7 +50,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -87,6 +90,7 @@ BEGIN
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
/*
@@ -98,6 +102,12 @@ BEGIN
SET a_get_inactive_command := IFNULL(a_get_inactive_command, 0);
SET a_ids_command := TRIM(IFNULL(a_ids_command, ''));
SET a_names_command := TRIM(IFNULL(a_names_command, ''));
SET a_hand_signal_default_descriptions_command := TRIM(IFNULL(a_hand_signal_default_descriptions_command, ''));
SET a_notes_command := TRIM(IFNULL(a_notes_command, ''));
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
*/
SET a_output_command_categories := IFNULL(a_output_command_categories, 0);
SET a_output_commands := IFNULL(a_output_commands, 0);
@@ -114,6 +124,12 @@ BEGIN
, a_get_inactive_command
, a_ids_command
, a_names_command
, a_hand_signal_default_descriptions_command
, a_notes_command
, a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met
, a_output_command_categories
, a_output_commands
, a_debug
@@ -137,6 +153,9 @@ BEGIN
, code VARCHAR(100)
, name VARCHAR(250)
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Command (
@@ -147,13 +166,16 @@ BEGIN
, can_have_button BIT
, notes TEXT
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
-- Permissions
@@ -162,7 +184,9 @@ BEGIN
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, v_id_permission_dog_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
@@ -171,7 +195,9 @@ BEGIN
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, v_id_permission_dog_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -209,7 +235,7 @@ BEGIN
END IF;
CALL parts.p_dog_clear_calc_user(
v_guid
v_guid
, 0 -- a_debug
);
@@ -218,7 +244,7 @@ BEGIN
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- a_guid
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_command_category
, a_get_inactive_command_category
@@ -228,13 +254,19 @@ BEGIN
, a_get_inactive_command -- a_get_inactive_command
, a_ids_command -- a_ids_command
, a_names_command -- a_names_command
, a_hand_signal_default_descriptions_command -- a_hand_signal_default_descriptions_command
, a_notes_command -- a_notes_command
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL parts.p_dog_calc_command (
v_guid -- a_guid
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_command_category
, a_get_inactive_command_category
@@ -244,21 +276,40 @@ BEGIN
, a_get_inactive_command -- a_get_inactive_command
, a_ids_command -- a_ids_command
, a_names_command -- a_names_command
, a_hand_signal_default_descriptions_command -- a_hand_signal_default_descriptions_command
, a_notes_command -- a_notes_command
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT COUNT(*) FROM parts.DOG_Command_Category_Temp;
SELECT * FROM parts.DOG_Command_Category_Temp;
SELECT COUNT(*) FROM parts.DOG_Command_Temp;
SELECT * FROM parts.DOG_Command_Temp;
END IF;
INSERT INTO tmp_Command_Category (
id_command_category
, code
, name
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
COMMAND_CATEGORY_T.id_command_category
, COMMAND_CATEGORY_T.code
, COMMAND_CATEGORY_T.name
, COMMAND_CATEGORY_T.active
, COMMAND_CATEGORY_T.does_meet_id_filters
, COMMAND_CATEGORY_T.does_meet_non_id_filters
FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T
WHERE COMMAND_CATEGORY_T.GUID = v_guid
;
@@ -271,6 +322,9 @@ BEGIN
, can_have_button
, notes
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
COMMAND_T.id_command
@@ -280,12 +334,17 @@ BEGIN
, COMMAND_T.can_have_button
, COMMAND_T.notes
, COMMAND_T.active
, COMMAND_T.does_meet_id_filters
, COMMAND_T.does_meet_non_id_filters
FROM parts.DOG_Command_Temp COMMAND_T
WHERE COMMAND_T.GUID = v_guid
;
IF a_debug = 1 THEN
SELECT COUNT(*) FROM tmp_Command_Category;
SELECT * FROM tmp_Command_Category;
SELECT COUNT(*) FROM tmp_Command;
SELECT * FROM tmp_Command;
END IF;
END IF;
@@ -310,6 +369,9 @@ BEGIN
, t_COMMAND_CATEGORY.code
, t_COMMAND_CATEGORY.name
, t_COMMAND_CATEGORY.active
, t_COMMAND_CATEGORY.does_meet_id_filters
, t_COMMAND_CATEGORY.does_meet_non_id_filters
FROM tmp_Command_Category t_COMMAND_CATEGORY
;
END IF;
@@ -324,6 +386,9 @@ BEGIN
, t_COMMAND.can_have_button
, t_COMMAND.notes
, t_COMMAND.active
, t_COMMAND.does_meet_id_filters
, t_COMMAND.does_meet_non_id_filters
FROM tmp_Command t_COMMAND
;
END IF;
@@ -347,7 +412,7 @@ BEGIN
SELECT * FROM tmp_Command;
END IF;
CALL parts.p_dog_clear_calc_dog(
CALL parts.p_dog_clear_calc_command(
v_guid -- a_guid
, 0 -- a_debug
);
@@ -375,6 +440,34 @@ CALL parts.p_dog_get_many_command (
, 0 -- a_get_inactive_command
, '' -- a_ids_command
, '' -- a_names_command
, '' -- a_hand_signal_default_descriptions_command
, '' -- a_notes_command
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_output_command_categories
, 1 -- a_output_commands
, 1 -- a_debug
);
CALL demo.p_dog_get_many_command (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_command_category
, 0 -- a_get_inactive_command_category
, '' -- a_ids_command_category
, 'pat,point' -- a_names_command_category
, 1 -- a_get_all_command
, 0 -- a_get_inactive_command
, '' -- a_ids_command
, 'pat,point' -- a_names_command
, 'pat,point' -- a_hand_signal_default_descriptions_command
, 'pat,point' -- a_notes_command
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_output_command_categories
, 1 -- a_output_commands
, 1 -- a_debug

View File

@@ -7,6 +7,9 @@ DROP PROCEDURE IF EXISTS parts.p_dog_get_many_dog_command_link;
DELIMITER //
CREATE PROCEDURE parts.p_dog_get_many_dog_command_link (
IN a_id_user INT
, IN a_get_all_link BIT
, IN a_get_inactive_link BIT
, IN a_ids_link TEXT
, IN a_get_all_dog BIT
, IN a_get_inactive_dog BIT
, IN a_ids_dog TEXT
@@ -19,12 +22,30 @@ CREATE PROCEDURE parts.p_dog_get_many_dog_command_link (
, IN a_get_inactive_command BIT
, IN a_ids_command TEXT
, IN a_names_command TEXT
, IN a_hand_signal_descriptions_link TEXT
, IN a_notes_command TEXT
, IN a_notes_link TEXT
, IN a_require_all_id_search_filters_met BIT
, IN a_require_any_id_search_filters_met BIT
, IN a_require_all_non_id_search_filters_met BIT
, IN a_require_any_non_id_search_filters_met BIT
, IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_code_type_error_warning VARCHAR(100);
DECLARE v_has_filter_command_category_id BIT;
DECLARE v_has_filter_command_category_name BIT;
DECLARE v_has_filter_command_id BIT;
DECLARE v_has_filter_command_name BIT;
DECLARE v_has_filter_command_notes BIT;
DECLARE v_has_filter_dog_id BIT;
DECLARE v_has_filter_dog_name BIT;
DECLARE v_has_filter_link_hand_signal_description BIT;
DECLARE v_has_filter_link_id BIT;
DECLARE v_has_filter_link_notes BIT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT;
DECLARE v_id_type_error_warning INT;
@@ -49,7 +70,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -91,8 +112,12 @@ BEGIN
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_type_error_warning := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_warning LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
SET a_get_all_link := IFNULL(a_get_all_link, 0);
SET a_get_inactive_link := IFNULL(a_get_inactive_link, 0);
SET a_ids_link := TRIM(IFNULL(a_ids_link, ''));
-- SET a_get_all_dog := IFNULL(a_get_all_dog, 0);
-- SET a_get_inactive_dog := IFNULL(a_get_inactive_dog, 0);
-- SET a_ids_dog := TRIM(IFNULL(a_ids_dog, ''));
@@ -102,11 +127,33 @@ BEGIN
-- SET a_get_all_command := IFNULL(a_get_all_command, 0);
-- SET a_get_inactive_command := IFNULL(a_get_inactive_command, 0);
-- SET a_ids_command := TRIM(IFNULL(a_ids_command, ''));
-- SET a_names_command := TRIM(IFNULL(a_names_command, ''));
-- SET a_notes_command := TRIM(IFNULL(a_notes_command, ''));
SET a_hand_signal_descriptions_link := TRIM(IFNULL(a_hand_signal_descriptions_link, ''));
SET a_notes_link := TRIM(IFNULL(a_notes_link, ''));
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
SET a_debug := IFNULL(a_debug, 0);
SET v_has_filter_dog_id = CASE WHEN a_ids_dog = '' THEN 0 ELSE 1 END;
SET v_has_filter_dog_name = CASE WHEN a_names_dog = '' THEN 0 ELSE 1 END;
SET v_has_filter_command_category_id = CASE WHEN a_ids_command_category = '' THEN 0 ELSE 1 END;
SET v_has_filter_command_category_name = CASE WHEN a_names_command_category = '' THEN 0 ELSE 1 END;
SET v_has_filter_command_id = CASE WHEN a_ids_command = '' THEN 0 ELSE 1 END;
SET v_has_filter_command_name = CASE WHEN a_names_command = '' THEN 0 ELSE 1 END;
SET v_has_filter_link_hand_signal_description = CASE WHEN a_hand_signal_descriptions_link = '' THEN 0 ELSE 1 END;
SET v_has_filter_command_notes = CASE WHEN a_notes_command = '' THEN 0 ELSE 1 END;
SET v_has_filter_link_id = CASE WHEN a_ids_link = '' THEN 0 ELSE 1 END;
SET v_has_filter_link_notes = CASE WHEN a_notes_link = '' THEN 0 ELSE 1 END;
IF a_debug = 1 THEN
SELECT
a_id_user
, a_get_all_link
, a_get_inactive_link
, a_ids_link
, a_get_all_dog
, a_get_inactive_dog
, a_ids_dog
@@ -119,6 +166,12 @@ BEGIN
, a_get_inactive_command
, a_ids_command
, a_names_command
, a_hand_signal_descriptions_link
, a_notes_link
, a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met
, a_debug
;
@@ -130,13 +183,42 @@ BEGIN
, v_id_permission_dog_view
, v_time_start
;
SELECT
v_has_filter_dog_id
, v_has_filter_dog_name
, v_has_filter_command_category_id
, v_has_filter_command_category_name
, v_has_filter_command_id
, v_has_filter_command_name
, v_has_filter_link_hand_signal_description
, v_has_filter_command_notes
, v_has_filter_link_id
, v_has_filter_link_notes
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Dog_Command_Link;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Hand_Signal_Description_Calc_Dog_Command_Link;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Dog_Command_Link;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Command;
DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Command_Link;
CREATE TEMPORARY TABLE tmp_Dog_Command_Link (
id_link INT NOT NULL
, id_dog INT NOT NULL
, id_command INT NOT NULL
, hand_signal_description TEXT
, notes TEXT
, active BIT
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
-- , has_button
);
CREATE TEMPORARY TABLE tmp_Dog (
id_dog INT NOT NULL
@@ -145,6 +227,9 @@ BEGIN
, mass_kg DECIMAL(7, 3)
, notes TEXT
, active BIT
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
);
CREATE TEMPORARY TABLE tmp_Command_Category (
@@ -152,6 +237,9 @@ BEGIN
, code VARCHAR(100)
, name VARCHAR(250)
, active BIT
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
);
CREATE TEMPORARY TABLE tmp_Command (
@@ -162,15 +250,36 @@ BEGIN
, can_have_button BIT
, notes TEXT
, active BIT
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Dog_Command_Link (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Id_Calc_Dog_Command_Link;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Hand_Signal_Description_Calc_Dog_Command_Link (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Hand_Signal_Description_Calc_Dog_Command_Link;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Notes_Calc_Dog_Command_Link (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Notes_Calc_Dog_Command_Link;
-- Permissions
IF a_debug = 1 THEN
@@ -178,7 +287,9 @@ BEGIN
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view
, v_id_permission_dog_view -- A_ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
@@ -188,6 +299,8 @@ BEGIN
, a_id_user -- a_ids_user
, FALSE -- a_get_inactive_user
, v_id_permission_dog_view -- a_ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -223,32 +336,41 @@ BEGIN
END IF;
CALL parts.p_dog_clear_calc_user(
v_guid
v_guid
, 0 -- a_debug
);
-- Call Dog Calc
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- a_guid
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_dog -- a_get_all_dog
, a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL parts.p_dog_calc_dog(
v_guid -- a_guid
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_dog -- a_get_all_dog
, a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -260,6 +382,9 @@ BEGIN
, mass_kg
, notes
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
DOG_T.id_dog
@@ -268,6 +393,9 @@ BEGIN
, DOG_T.mass_kg
, DOG_T.notes
, DOG_T.active
, DOG_T.does_meet_id_filters
, DOG_T.does_meet_non_id_filters
FROM parts.DOG_Dog_Temp DOG_T
WHERE DOG_T.GUID = v_guid
;
@@ -291,6 +419,12 @@ BEGIN
, a_get_inactive_command -- a_get_inactive_command
, a_ids_command -- a_ids_command
, a_names_command -- a_names_command
, '' -- a_hand_signal_descriptions_link
, a_notes_command -- a_notes_command
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
;
@@ -307,6 +441,12 @@ BEGIN
, a_get_inactive_command -- a_get_inactive_command
, a_ids_command -- a_ids_command
, a_names_command -- a_names_command
, '' -- a_hand_signal_descriptions_link
, a_notes_command -- a_notes_command
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -316,12 +456,18 @@ BEGIN
, code
, name
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
COMMAND_CATEGORY_T.id_command_category
, COMMAND_CATEGORY_T.code
, COMMAND_CATEGORY_T.name
, COMMAND_CATEGORY_T.active
, COMMAND_CATEGORY_T.does_meet_id_filters
, COMMAND_CATEGORY_T.does_meet_non_id_filters
FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T
WHERE COMMAND_CATEGORY_T.GUID = v_guid
;
@@ -334,6 +480,9 @@ BEGIN
, can_have_button
, notes
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
COMMAND_T.id_command
@@ -343,6 +492,9 @@ BEGIN
, COMMAND_T.can_have_button
, COMMAND_T.notes
, COMMAND_T.active
, COMMAND_T.does_meet_id_filters
, COMMAND_T.does_meet_non_id_filters
FROM parts.DOG_Command_Temp COMMAND_T
WHERE COMMAND_T.GUID = v_guid
;
@@ -353,6 +505,256 @@ BEGIN
END IF;
END IF;
-- Dog Command Links
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF v_has_filter_link_id = 1 THEN
CALL parts.p_core_split(v_guid, a_ids_link, ',', a_debug);
SET sql_mode = '';
INSERT INTO tmp_Split_Id_Calc_Dog_Command_Link (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL parts.p_core_clear_split( v_guid );
END IF;
IF v_has_filter_link_hand_signal_description = 1 THEN
CALL parts.p_core_split(v_guid, a_hand_signal_descriptions_link, ',', a_debug);
SET sql_mode = '';
INSERT INTO tmp_Split_Hand_Signal_Description_Calc_Dog_Command_Link (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL parts.p_core_clear_split( v_guid );
END IF;
IF v_has_filter_link_notes = 1 THEN
CALL parts.p_core_split(v_guid, a_notes_link, ',', a_debug);
SET sql_mode = '';
INSERT INTO tmp_Split_Notes_Calc_Dog_Command_Link (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL parts.p_core_clear_split( v_guid );
END IF;
INSERT INTO tmp_Dog_Command_Link (
id_link
, id_dog
, id_command
, hand_signal_description
, notes
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
WITH
Link_Id_Filter AS (
SELECT DOG_COMMAND_LINK.id_link
FROM tmp_Split_Id_Calc_Dog_Command_Link t_SPLIT_ID
INNER JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON t_SPLIT_ID.as_int = DOG_COMMAND_LINK.id_link
)
, Links_With_Hand_Signal_Descriptions AS (
SELECT
DOG_COMMAND_LINK.id_link
, COALESCE(DOG_COMMAND_LINK.hand_signal_description, COMMAND.hand_signal_default_description) AS hand_signal_description
FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK
INNER JOIN parts.DOG_Command COMMAND ON DOG_COMMAND_LINK.id_command = COMMAND.id_command
)
, Link_Hand_Signal_Description_Filter AS (
SELECT
LINK_HAND_SIGNAL_DESCRIPTIONS.id_link
, 1 AS does_meet_hand_signal_description_filter
FROM tmp_Split_Hand_Signal_Description_Calc_Dog_Command_Link t_SPLIT_HSD
INNER JOIN Links_With_Hand_Signal_Descriptions LINK_HAND_SIGNAL_DESCRIPTIONS
ON LINK_HAND_SIGNAL_DESCRIPTIONS.hand_signal_description LIKE CONCAT('%', t_SPLIT_HSD.substring, '%')
WHERE
t_SPLIT_HSD.substring IS NOT NULL
AND t_SPLIT_HSD.substring <> ''
)
, Link_Notes_Filter AS (
SELECT
DOG_COMMAND_LINK.id_link
, 1 AS does_meet_notes_filter
FROM tmp_Split_Notes_Calc_Dog_Command_Link t_SPLIT_NOTES
INNER JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON DOG_COMMAND_LINK.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%')
WHERE
t_SPLIT_NOTES.substring IS NOT NULL
AND t_SPLIT_NOTES.substring <> ''
)
, Link_Filters AS (
SELECT
LINK_COMBINED.id_link
, MAX(LINK_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(LINK_COMBINED.does_meet_hand_signal_description_filter) AS does_meet_hand_signal_description_filter
, MAX(LINK_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter
FROM (
SELECT
LINK_ID_FILTER.id_link
, 1 AS does_meet_id_filter
, 0 AS does_meet_hand_signal_description_filter
, 0 AS does_meet_notes_filter
FROM Link_Id_Filter LINK_ID_FILTER
UNION
SELECT
LINK_HSD_FILTER.id_link
, 0 AS does_meet_id_filter
, 1 AS does_meet_hand_signal_description_filter
, 0 AS does_meet_notes_filter
FROM Link_Hand_Signal_Description_Filter LINK_HSD_FILTER
UNION
SELECT
LINK_NOTES_FILTER.id_link
, 0 AS does_meet_id_filter
, 0 AS does_meet_hand_signal_description_filter
, 1 AS does_meet_notes_filter
FROM Link_Notes_Filter LINK_NOTES_FILTER
) LINK_COMBINED
GROUP BY LINK_COMBINED.id_link
)
SELECT
DOG_COMMAND_LINK.id_link AS id_dog_command_link
, t_DOG.id_dog
, t_COMMAND.id_command
, LINK_HAND_SIGNAL_DESCRIPTIONS.hand_signal_description AS hand_signal_description_command
, DOG_COMMAND_LINK.notes
, DOG_COMMAND_LINK.active
, CASE WHEN
v_has_filter_link_id = 0
OR IFNULL(LINK_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_link_hand_signal_description = 0
AND v_has_filter_link_notes = 0
)
OR IFNULL(LINK_FILTERS.does_meet_hand_signal_description_filter, 0) = 1
OR IFNULL(LINK_FILTERS.does_meet_notes_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK
INNER JOIN tmp_Dog t_DOG ON DOG_COMMAND_LINK.id_dog = t_DOG.id_dog
INNER JOIN tmp_Command t_COMMAND ON DOG_COMMAND_LINK.id_command = t_COMMAND.id_command
INNER JOIN tmp_Command_Category t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
LEFT JOIN Link_Filters LINK_FILTERS ON DOG_COMMAND_LINK.id_link = LINK_FILTERS.id_link
INNER JOIN Links_With_Hand_Signal_Descriptions LINK_HAND_SIGNAL_DESCRIPTIONS ON DOG_COMMAND_LINK.id_link = LINK_HAND_SIGNAL_DESCRIPTIONS.id_link
WHERE
(
a_get_all_link = 1
OR (
v_has_filter_link_id = 1
AND LINK_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_link_hand_signal_description = 1
AND LINK_FILTERS.does_meet_hand_signal_description_filter = 1
)
OR (
v_has_filter_link_notes = 1
AND LINK_FILTERS.does_meet_notes_filter = 1
)
)
AND (
a_get_inactive_link = 1
OR DOG_COMMAND_LINK.active = 1
)
;
END IF;
DELETE FROM tmp_Split_Id_Calc_Dog_Command_Link;
DELETE FROM tmp_Split_Hand_Signal_Description_Calc_Dog_Command_Link;
DELETE FROM tmp_Split_Notes_Calc_Dog_Command_Link;
IF a_debug = 1 THEN
SELECT 'After get Links';
SELECT * FROM tmp_Dog;
SELECT * FROM tmp_Command_Category;
SELECT * FROM tmp_Command;
SELECT * FROM tmp_Dog_Command_Link;
END IF;
-- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
DELETE t_DOG_COMMAND_LINK
FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
LEFT JOIN tmp_Dog t_DOG ON t_DOG_COMMAND_LINK.id_dog = t_DOG.id_dog
LEFT JOIN tmp_Command t_COMMAND ON t_DOG_COMMAND_LINK.id_command = t_COMMAND.id_command
LEFT JOIN tmp_Command_Category t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
WHERE
(
a_require_all_id_search_filters_met = 1
AND (
IFNULL(t_DOG_COMMAND_LINK.does_meet_id_filters, 0) = 0
OR IFNULL(t_DOG.does_meet_id_filters, 0) = 0
OR IFNULL(t_COMMAND.does_meet_id_filters, 0) = 0
OR IFNULL(t_COMMAND_CATEGORY.does_meet_id_filters, 0) = 0
)
)
OR (
a_require_all_non_id_search_filters_met = 1
AND (
IFNULL(t_DOG_COMMAND_LINK.does_meet_non_id_filters, 0) = 0
OR IFNULL(t_DOG.does_meet_non_id_filters, 0) = 0
OR IFNULL(t_COMMAND.does_meet_non_id_filters, 0) = 0
OR IFNULL(t_COMMAND_CATEGORY.does_meet_non_id_filters, 0) = 0
)
)
OR (
a_require_any_id_search_filters_met = 1
AND IFNULL(t_DOG_COMMAND_LINK.does_meet_id_filters, 0) = 0
AND IFNULL(t_DOG.does_meet_id_filters, 0) = 0
AND IFNULL(t_COMMAND.does_meet_id_filters, 0) = 0
AND IFNULL(t_COMMAND_CATEGORY.does_meet_id_filters, 0) = 0
)
OR (
a_require_any_non_id_search_filters_met = 1
AND IFNULL(t_DOG_COMMAND_LINK.does_meet_non_id_filters, 0) = 0
AND IFNULL(t_DOG.does_meet_non_id_filters, 0) = 0
AND IFNULL(t_COMMAND.does_meet_non_id_filters, 0) = 0
AND IFNULL(t_COMMAND_CATEGORY.does_meet_non_id_filters, 0) = 0
)
;
END IF;
IF a_debug = 1 THEN
SELECT 'After filter Links';
SELECT * FROM tmp_Dog;
SELECT * FROM tmp_Command_Category;
SELECT * FROM tmp_Command;
SELECT * FROM tmp_Dog_Command_Link;
END IF;
-- Filter outputs
IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
@@ -360,32 +762,42 @@ BEGIN
SELECT * FROM tmp_Dog;
SELECT * FROM tmp_Command;
SELECT * FROM tmp_Command_Category;
SELECT * FROM tmp_Dog_Command_Link;
END IF;
DELETE FROM tmp_Dog;
DELETE FROM tmp_Command;
DELETE FROM tmp_Command_Category;
DELETE FROM tmp_Dog_Command_Link;
END IF;
-- Outputs
-- Commands
-- Dog Command Links
SELECT
DOG_COMMAND_LINK.id_link AS id_dog_command_link
, t_DOG.id_dog
t_DOG_COMMAND_LINK.id_link AS id_dog_command_link
, t_DOG_COMMAND_LINK.id_dog
, t_DOG.name AS name_dog
, t_COMMAND.id_command_category
, t_COMMAND_CATEGORY.id_command_category
, t_COMMAND_CATEGORY.name AS name_command_category
, t_COMMAND.id_command
, t_DOG_COMMAND_LINK.id_command
, t_COMMAND.name AS name_command
-- , t_COMMAND.has_button AS command_has_button
, COALESCE(DOG_COMMAND_LINK.hand_signal_description, t_COMMAND.hand_signal_default_description) AS hand_signal_description_command
, t_DOG_COMMAND_LINK.hand_signal_description AS hand_signal_description
, t_COMMAND.can_have_button AS can_have_button_command
, DOG_COMMAND_LINK.notes
, DOG_COMMAND_LINK.active
, t_DOG_COMMAND_LINK.notes
, t_DOG_COMMAND_LINK.active
, t_DOG_COMMAND_LINK.does_meet_id_filters
, t_DOG_COMMAND_LINK.does_meet_non_id_filters
, t_DOG.does_meet_id_filters AS does_meet_dog_id_search_filters
, t_DOG.does_meet_non_id_filters AS does_meet_dog_non_id_search_filters
, t_COMMAND_CATEGORY.does_meet_id_filters AS does_meet_command_category_id_search_filters
, t_COMMAND_CATEGORY.does_meet_non_id_filters AS does_meet_command_category_non_id_search_filters
, t_COMMAND.does_meet_id_filters AS does_meet_command_id_search_filters
, t_COMMAND.does_meet_non_id_filters AS does_meet_command_non_id_search_filters
FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK
INNER JOIN tmp_Dog t_DOG ON DOG_COMMAND_LINK.id_dog = t_DOG.id_dog
INNER JOIN tmp_Command t_COMMAND ON DOG_COMMAND_LINK.id_command = t_COMMAND.id_command
INNER JOIN tmp_Command_Category t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
INNER JOIN tmp_Dog_Command_Link t_DOG_COMMAND_LINK ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK.id_link
LEFT JOIN tmp_Dog t_DOG ON DOG_COMMAND_LINK.id_dog = t_DOG.id_dog
LEFT JOIN tmp_Command t_COMMAND ON DOG_COMMAND_LINK.id_command = t_COMMAND.id_command
LEFT JOIN tmp_Command_Category t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
;
-- Errors
@@ -409,11 +821,14 @@ BEGIN
SELECT * FROM tmp_Command_Category;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Dog_Command_Link;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Hand_Signal_Description_Calc_Dog_Command_Link;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Dog_Command_Link;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Command;
DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Command_Link;
IF a_debug = 1 THEN
CALL parts.p_core_debug_timing_reporting ( v_time_start );
@@ -426,20 +841,9 @@ DELIMITER ;
CALL parts.p_dog_get_many_dog_command_link (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_dog
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, 1 -- a_get_all_command_category
, 0 -- a_get_inactive_command_category
, '' -- a_ids_command_category
, 1 -- a_get_all_command
, 0 -- a_get_inactive_command
, '' -- a_ids_command
, 1 -- a_debug
);
CALL parts.p_dog_get_many_dog_command_link (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_link
, 0 -- a_get_inactive_link
, '' -- a_ids_link
, 1 -- a_get_all_dog
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
@@ -452,7 +856,41 @@ CALL parts.p_dog_get_many_dog_command_link (
, 0 -- a_get_inactive_command
, '2' -- a_ids_command
, '2' -- a_names_command
, 'pat' -- a_hand_signal_descriptions_link
, 'pat' -- a_notes_command
, 'pat' -- a_notes_link
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_debug
);
CALL parts.p_dog_get_many_dog_command_link (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_link
, 0 -- a_get_inactive_link
, '' -- a_ids_link
, 1 -- a_get_all_dog
, 0 -- a_get_inactive_dog
, '' -- a_ids_dog
, 'pat,point' -- a_names_dog
, 1 -- a_get_all_command_category
, 0 -- a_get_inactive_command_category
, '' -- a_ids_command_category
, 'pat,point' -- a_names_command_category
, 1 -- a_get_all_command
, 0 -- a_get_inactive_command
, '' -- a_ids_command
, 'pat,point' -- a_names_command
, 'pat,point' -- a_hand_signal_descriptions_link
, 'pat,point' -- a_notes_command
, 'pat,point' -- a_notes_link
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 0 -- a_debug
);
*/

View File

@@ -9,18 +9,18 @@ DROP TRIGGER IF EXISTS before_update_DOG_Unit_Measurement;
DELIMITER //
CREATE TRIGGER before_insert_DOG_Unit_Measurement
BEFORE INSERT ON DOG_Unit_Measurement
BEFORE INSERT ON parts.DOG_Unit_Measurement
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM DOG_User WHERE firstname = CURRENT_USER()), -1));
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT U.id_user FROM parts.DOG_User U WHERE U.firstname = CURRENT_USER()), -1));
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER before_update_DOG_Unit_Measurement
BEFORE UPDATE ON DOG_Unit_Measurement
BEFORE UPDATE ON parts.DOG_Unit_Measurement
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
@@ -28,12 +28,12 @@ BEGIN
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO DOG_Unit_Measurement_Audit (
id_unit_measurement,
name_field,
value_prev,
value_new,
id_change_set
INSERT INTO parts.DOG_Unit_Measurement_Audit (
id_unit_measurement
, name_field
, value_prev
, value_new
, id_change_set
)
# Changed name_singular
SELECT NEW.id_unit_measurement, 'name_singular', OLD.name_singular, NEW.name_singular, NEW.id_change_set

View File

@@ -9,18 +9,18 @@ DROP TRIGGER IF EXISTS before_update_DOG_Unit_Measurement_Conversion;
DELIMITER //
CREATE TRIGGER before_insert_DOG_Unit_Measurement_Conversion
BEFORE INSERT ON DOG_Unit_Measurement_Conversion
BEFORE INSERT ON parts.DOG_Unit_Measurement_Conversion
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM DOG_User WHERE firstname = CURRENT_USER()), -1));
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT U.id_user FROM parts.DOG_User U WHERE U.firstname = CURRENT_USER()), -1));
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER before_update_DOG_Unit_Measurement_Conversion
BEFORE UPDATE ON DOG_Unit_Measurement_Conversion
BEFORE UPDATE ON parts.DOG_Unit_Measurement_Conversion
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
@@ -28,12 +28,12 @@ BEGIN
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO DOG_Unit_Measurement_Conversion_Audit (
id_conversion,
name_field,
value_prev,
value_new,
id_change_set
INSERT INTO parts.DOG_Unit_Measurement_Conversion_Audit (
id_conversion
, name_field
, value_prev
, value_new
, id_change_set
)
# Changed id_unit_derived
SELECT NEW.id_conversion, 'id_unit_derived', OLD.id_unit_derived, NEW.id_unit_derived, NEW.id_change_set

View File

@@ -13,17 +13,18 @@ CREATE PROCEDURE parts.p_dog_get_many_command (
, IN a_debug BIT
)
BEGIN
DECLARE v_can_view BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT;
DECLARE v_guid BINARY(36);
DECLARE v_has_filter_command_id BIT;
DECLARE v_has_filter_command_name BIT;
DECLARE v_guid BINARY(36);
DECLARE v_id_permission_command_view INT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_command_view INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_can_view BIT;
DECLARE exit handler for SQLEXCEPTION
BEGIN
@@ -39,7 +40,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -79,6 +80,7 @@ BEGIN
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
SET a_get_all_command := IFNULL(a_get_all_command, 0);
@@ -120,7 +122,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id (
@@ -150,7 +152,7 @@ BEGIN
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
@@ -169,7 +171,7 @@ BEGIN
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
@@ -252,7 +254,9 @@ BEGIN
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_command_view
, v_id_permission_command_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
@@ -261,7 +265,9 @@ BEGIN
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_command_view
, v_id_permission_command_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);

View File

@@ -16,6 +16,7 @@ CREATE PROCEDURE parts.p_dog_get_many_understanding_level (
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_id_access_level_view INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT;
DECLARE v_has_filter_understanding_level_id BIT;
@@ -41,7 +42,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -81,6 +82,7 @@ BEGIN
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_understanding_level_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
SET a_get_all_understanding_level := IFNULL(a_get_all_understanding_level, 0);
@@ -126,7 +128,7 @@ BEGIN
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
, msg TEXT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id (
@@ -163,7 +165,7 @@ BEGIN
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
@@ -182,7 +184,7 @@ BEGIN
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
@@ -201,7 +203,7 @@ BEGIN
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
@@ -289,7 +291,9 @@ BEGIN
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_understanding_level_view
, v_id_permission_understanding_level_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
@@ -298,7 +302,9 @@ BEGIN
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_understanding_level_view
, v_id_permission_understanding_level_view -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);

View File

@@ -117,17 +117,51 @@ header {
}
#formFilters .container-input input {
max-width: 5vh;
width: 10vh;
max-width: 10vh;
}
#formFilters .container-input input {
height: 1.7vh;
}
#formFilters .container-input select {
height: 2vh;
}
#formFilters .container-input.filter.active {
#formFilters .container-input.filter.active_only {
width: 8vh;
}
#formFilters .container-input.filter.active_only input {
display: none;
}
#formFilters .container-input.filter.active_only svg.active_only {
height: 2vh;
fill: var(--colour-text-background);
background-color: var(--colour-accent);
border: 1px solid var(--colour-accent);
width: 2vh;
border-radius: 0.5vh;
}
#formFilters .container-input.filter.active_only svg.active_only.is_checked {
fill: var(--colour-primary);
/*
background-color: var(--colour-accent);
border: 1px solid var(--colour-accent);
*/
}
#formFilters .container-input.filter.is_not_empty {
width: 12vh;
}
button.collapsed {
#formFilters button {
padding: 0.5vh 0.75vh;
background-color: var(--colour-accent);
color: var(--colour-primary);
font-weight: bold;
border-radius: 0.75vh;
border: 2px solid var(--colour-primary);
}
#formFilters button.collapsed {
display: block;
opacity: 0;
}

View File

@@ -203,10 +203,6 @@ img.header-logo {
margin-top: 0;
}
.container-input:not(:nth-child(3)) > label {
margin-top: 1vh;
}
.container-input > input, .container-input > textarea {
border: 2px solid var(--colour-primary);
padding: 1vh;

View File

@@ -39,12 +39,22 @@
}
*/
td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea {
td > input
, td > select
, td > textarea
, .container-input > input
, .container-input > select
, .container-input > textarea
{
border: 2px solid var(--colour-primary);
border-radius: 0.5vh;
}
#tableMain tbody tr td table thead tr th.id_variation_type, #tableMain tbody tr td table tbody tr td.id_variation_type, #tableMain tbody tr td table thead tr th.id_variation, #tableMain tbody tr td table tbody tr td.id_variation {
#tableMain tbody tr td table thead tr th.id_variation_type
, #tableMain tbody tr td table tbody tr td.id_variation_type
, #tableMain tbody tr td table thead tr th.id_variation
, #tableMain tbody tr td table tbody tr td.id_variation
{
width: 47.5%;
}

View File

@@ -19,10 +19,11 @@ export default class DOM {
}
static setElementValueCurrent(element, data) {
DOM.setElementAttributeValueCurrent(element, data);
let tagName = element.tagName.toUpperCase();
if (element.type === "checkbox") {
element.checked = data;
}
else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {
else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {
element.value = data;
}
else {
@@ -109,6 +110,7 @@ export default class DOM {
if (!Validation.isEmpty(element)) {
let tagName = element.tagName.toUpperCase();
if (element.type === "checkbox") {
returnVal = element.checked;
}
@@ -117,15 +119,18 @@ export default class DOM {
returnVal = getDatePickerDate(element, adjust4DayLightSavings);
}
*/
else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {
else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {
returnVal = element.value;
}
else if (element.tagName === 'BUTTON' && element.classList.contains(flagActive)) {
else if (tagName === 'BUTTON' && element.classList.contains(flagActive)) {
returnVal = element.classList.contains(flagDelete);
}
else if (element.tagName === 'TD') {
else if (tagName === 'TD') {
returnVal = DOM.getElementAttributeValueCurrent(element);
}
else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {
returnVal = (element.classList.contains(flagIsChecked))
}
else {
returnVal = element.textContent;
}

View File

@@ -61,9 +61,35 @@ export default class TableBasePage extends BasePage {
}
sharedHookupFilters() {
this.hookupButtonApplyFilters();
this.hookupSearchTextFilter();
}
hookupFilterActive() {
this.hookupFilter(flagActive);
let filterSelector = idFormFilters + ' #' + flagActiveOnly;
let filterActiveOld = document.querySelector(filterSelector);
filterActiveOld.removeAttribute('id');
let parentDiv = filterActiveOld.parentElement;
let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == "True");
let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);
filterActiveNew.setAttribute('id', flagActiveOnly);
if (isChecked) filterActiveNew.classList.add(flagIsChecked);
this.hookupEventHandler("click", filterSelector, (event, filterActive) => {
console.log({ filterActive });
console.log({ [filterActive.tagName]: filterActive.tagName });
let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;
let wasChecked = svgElement.classList.contains(flagIsChecked);
if (wasChecked) {
svgElement.classList.remove(flagIsChecked);
}
else {
svgElement.classList.add(flagIsChecked);
}
return TableBasePage.isDirtyFilter(svgElement);
});
let filter = document.querySelector(filterSelector);
let filterValuePrevious = DOM.getElementValueCurrent(filter);
filter.setAttribute(attrValueCurrent, filterValuePrevious);
filter.setAttribute(attrValuePrevious, filterValuePrevious);
}
hookupFilter(filterFlag, handler = (event, filter) => { return TableBasePage.isDirtyFilter(filter); }) {
let filterSelector = idFormFilters + ' #' + filterFlag;
@@ -91,6 +117,9 @@ export default class TableBasePage extends BasePage {
this.callFilterTableContent();
});
}
hookupSearchTextFilter() {
this.hookupFilter(flagSearch);
}
/*
getAndLoadFilteredTableContent = () => {
this.callFilterTableContent()
@@ -225,12 +254,13 @@ export default class TableBasePage extends BasePage {
this.initialiseRowNew(tbody, row);
tbody.appendChild(row);
this.hookupTableMain();
this.postInitialiseRowNewCallback(tbody);
}
initialiseRowNew(tbody, row) {
if (this.constructor === TableBasePage) {
throw new Error("Subclass of TableBasePage must implement method initialiseRowNew().");
}
row.classList.remove(flagRowNew);
// row.classList.remove(flagRowNew);
}
hookupTableMain() {
if (this.constructor === TableBasePage) {
@@ -253,6 +283,11 @@ export default class TableBasePage extends BasePage {
});
_rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);
}
postInitialiseRowNewCallback(tbody) {
if (this.constructor === TableBasePage) {
throw new Error("Subclass of TableBasePage must implement method postInitialiseRowNewCallback(tbody).");
}
}
initialiseSliderDisplayOrderRowNew(tbody, row) {
// let tdSelector = ':scope > tr > td.' + flagDisplayOrder;
// let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');
@@ -518,8 +553,100 @@ export default class TableBasePage extends BasePage {
this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagCollapsed);
}
hookupFieldsCommandCategory() {
this.hookupTableCellDdlPreviews(
idTableMain + ' td.' + flagCommandCategory
, Utils.getListFromDict(filterCommandCategories)
, (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }
);
}
hookupCommandCategoryDdls(ddlSelector) {
this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });
}
handleChangeCommandCategoryDdl(event, ddlCategory) {
let idCommandCategoryOld = DOM.getElementAttributeValueCurrent(ddlCategory);
this.handleChangeNestedElementCellTable(event, ddlCategory);
let idCommandCategoryNew = DOM.getElementAttributeValueCurrent(ddlCategory);
if (idCommandCategoryOld == idCommandCategoryNew) return;
let row = DOM.getRowFromElement(ddlCategory);
let tdCommand = row.querySelector('td.' + flagCommand);
tdCommand.dispatchEvent(new Event('click'));
let ddlCommand = row.querySelector('td.' + flagCommand + ' select');
ddlCommand.innerHTML = '';
ddlCommand.appendChild(DOM.createOption(null));
let optionJson, option;
Utils.getListFromDict(filterCommands).forEach((command) => {
if (idCommandCategoryNew != '0' && command[attrIdCommandCategory] != idCommandCategoryNew) return;
optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);
option = DOM.createOption(optionJson);
ddlCommand.appendChild(option);
});
this.handleChangeNestedElementCellTable(event, ddlCommand);
}
hookupFieldsCommand() {
this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCommand, Utils.getListFromDict(filterCommands));
let cellSelector = idTableMain + ' td.' + flagCommand;
this.hookupEventHandler("click", cellSelector, (event, td) => {
let parentTr = td.parentElement;
let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);
let idCommandCategoryRow = DOM.getElementAttributeValueCurrent(tdCommandCategory);
let idCommandCategoryFilter = this.getIdCommandCategoryFilter();
let filterCommandList = Utils.getListFromDict(filterCommands);
let commandsInCategory = filterCommandList.filter(command =>
(
command[attrIdCommandCategory] == idCommandCategoryRow
)
&& (
command[attrIdCommandCategory] == idCommandCategoryFilter
|| idCommandCategoryFilter == 0
)
);
console.log({ tdCommandCategory, idCommandCategoryRow, filterCommandList, commandsInCategory });
console.log(filterCommandList);
this.handleClickTableCellDdlPreview(
event
, td
, commandsInCategory
, cellSelector
, (cellSelector) => { this.hookupTableCellDdls(
cellSelector
, (event, element) => { this.handleChangeNestedElementCellTable(event, element); }
); }
);
});
this.hookupTableCellDdls(cellSelector + ' select');
}
getIdCommandCategoryFilter() {
let formFilters = this.getFormFilters();
let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);
let commandFilter = formFilters.querySelector('#' + attrIdCommand);
let idCommandCategory = 0;
let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);
console.log({ valueCurrentCommandCategoryFilter });
if (valueCurrentCommandCategoryFilter == "") {
let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);
if (valueCurrentCommandFilter != "") {
let command = filterCommands[valueCurrentCommandFilter];
idCommandCategory = command[attrIdCommandCategory];
}
} else {
idCommandCategory = Number(valueCurrentCommandCategoryFilter);
}
return idCommandCategory;
}
getHasCommandCategoryFilter() {
let idCommandCategoryFilter = this.getIdCommandCategoryFilter();
return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);
}
getIdCommandFilter() {
let formFilters = this.getFormFilters();
let commandFilter = formFilters.querySelector('#' + attrIdCommand);
let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);
let idCommand = Number(valueCurrentCommandFilter);
return idCommand;
}
getHasCommandFilter() {
let idCommandFilter = this.getIdCommandFilter();
return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);
}
hookupFieldsDog() {
this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagDog, Utils.getListFromDict(filterDogs));

View File

@@ -25,17 +25,21 @@ export default class PageDogDogCommandLinks extends TableBasePage {
hookupFilters() {
this.sharedHookupFilters();
this.hookupFilterDog();
this.hookupFilterCommandCategory();
this.hookupFilterCommand();
this.hookupFilterActive();
}
hookupFilterDog() {
this.hookupFilter(attrIdDog);
/*, (event, filterDog) => {
}
hookupFilterCommandCategory() {
this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {
// loadDogCommandLinks();
// let wasDirtyFilter = filterDog.classList.contains(flagDirty);
PageDogDogCommandLinks.isDirtyFilter(filterDog);
let isDirtyFilter = filterDog.classList.contains(flagDirty);
let idDog = DOM.getElementValueCurrent(filterDog);
let commands = dogs[idDog];
// let wasDirtyFilter = filterCommandCategory.classList.contains(flagDirty);
PageDogDogCommandLinks.isDirtyFilter(filterCommandCategory);
let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);
let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);
let commands = filterCommands.filter(command => command[attrIdCommandCategory] == idCommandCategory);
let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);
let idCommandPrevious = filterCommand.getAttribute(attrValuePrevious);
filterCommand.innerHTML = '';
@@ -48,8 +52,8 @@ export default class PageDogDogCommandLinks extends TableBasePage {
filterCommand.appendChild(option);
});
filterCommand.dispatchEvent(new Event('change'));
return isDirtyFilter;
});
*/
}
hookupFilterCommand() {
this.hookupFilter(attrIdCommand);
@@ -119,7 +123,7 @@ export default class PageDogDogCommandLinks extends TableBasePage {
let tdCommand = row.querySelector('td.' + flagCommand);
let inputHandSignalDescription = row.querySelector('td.' + flagHandSignalDescription + ' textarea');
let inputNotes = row.querySelector('td.' + flagNotes + ' textarea');
let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
let jsonRow = {};
jsonRow[attrIdDogCommandLink] = row.getAttribute(attrIdDogCommandLink);
@@ -131,40 +135,69 @@ export default class PageDogDogCommandLinks extends TableBasePage {
return jsonRow;
}
initialiseRowNew(tbody, row) {
this.initialiseRowNewDdlsDogAndCommand(row);
/*
this.initialiseRowNewDdlsDog(row);
this.initialiseRowNewDdlsCommandCategory(row);
this.initialiseRowNewDdlsCommand(row);
this.initialiseRowNewDdlsDogAndCommand(row);
let checkboxIsSubscription = row.querySelector('td.' + flagIsSubscription + ' input');
let checkboxDoesExpireFasterOnceUnsealed = row.querySelector('td.' + flagDoesExpireFasterOnceUnsealed + ' input');
this.handleChangeCheckboxDoesExpireFasterOnceUnsealed(null, checkboxDoesExpireFasterOnceUnsealed);
this.handleChangeCheckboxIsSubscription(null, checkboxIsSubscription);
*/
}
initialiseRowNewDdlsDogAndCommand(row) {
initialiseRowNewDdlsDog(row) {
let ddlDogFilter = document.querySelector(idFormFilters + ' #' + attrIdDog);
let idDogFilter = DOM.getElementValueCurrent(ddlDogFilter);
let hasDogFilter = !(Validation.isEmpty(idDogFilter) || idDogFilter == '0');
let ddlCommandFilter = document.querySelector(idFormFilters + ' #' + attrIdCommand);
let idCommandFilter = DOM.getElementValueCurrent(ddlCommandFilter);
let hasCommandFilter = !(Validation.isEmpty(idCommandFilter) || idCommandFilter == '0');
if (_verbose) {
console.log("initialiseRowNew: ", row);
console.log({ ddlDogFilter, idDogFilter, hasDogFilter });
}
if (!hasDogFilter) return;
let ddlDog = row.querySelector('td.' + flagDog + ' select');
DOM.setElementValuesCurrentAndPrevious(ddlDog, idDogFilter);
this.handleChangeDogDdl(null, ddlDog);
}
initialiseRowNewDdlsCommandCategory(row) {
let idCommandCategoryFilter = this.getIdCommandCategoryFilter();
let hasCommandCategoryFilter = this.getHasCommandCategoryFilter();
if (_verbose) {
console.log("initialiseRowNew: ", row);
console.log({ddlDogFilter, idDogFilter, hasDogFilter, idCommandCategoryFilter, hasCommandCategoryFilter});
}
if (!hasCommandCategoryFilter) return;
let ddlCommandCategory = row.querySelector('td.' + flagCommandCategory + ' select');
DOM.setElementValuesCurrentAndPrevious(ddlCommandCategory, idCommandCategoryFilter);
}
initialiseRowNewDdlsCommand(row) {
let idCommandFilter = this.getIdCommandFilter();
let hasCommandFilter = this.getHasCommandFilter();
if (_verbose) {
console.log("initialiseRowNew: ", row);
console.log({ddlDogFilter, idDogFilter, hasDogFilter, ddlCommandFilter, idCommandFilter, hasCommandFilter});
}
if (!hasDogFilter && !hasCommandFilter) return;
if (hasDogFilter) {
let ddlDog = row.querySelector('td.' + flagDog + ' select');
DOM.setElementValuesCurrentAndPrevious(ddlDog, idDogFilter);
this.handleChangeDogDdl(null, ddlDog);
}
if (hasCommandFilter) {
let ddlCommand = row.querySelector('td.' + flagCommand + ' select');
DOM.setElementValuesCurrentAndPrevious(ddlCommand, idCommandFilter);
}
if (!hasCommandFilter) return;
let ddlCommand = row.querySelector('td.' + flagCommand + ' select');
DOM.setElementValuesCurrentAndPrevious(ddlCommand, idCommandFilter);
}
postInitialiseRowNewCallback(tbody) {
let newRows = tbody.querySelectorAll('tr.' + flagRowNew);
let newestRow = newRows[newRows.length - 1];
let clickableElementsSelector = [
'td.' + flagDog + ' div.' + flagDog
, ',td.' + flagCommandCategory + ' div.' + flagCommandCategory
, ',td.' + flagCommand + ' div.' + flagCommand
].join('');
newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {
clickableElement.click();
});
}
hookupTableMain() {
super.hookupTableMain();
this.hookupFieldsDog();
this.hookupFieldsCommandCategory();
this.hookupFieldsCommand();
this.hookupTextareasHandSignalDescription();
this.hookupTextareasNotes();

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"
fill="{{ colour }}"
class="{{ model.FLAG_ICON }} {{ model.FLAG_CHECKBOX }} {{ class_name }}"
>
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
<path d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"/>
</svg>

After

Width:  |  Height:  |  Size: 604 B

View File

@@ -1,15 +1,2 @@
{% if not is_blank_row %}
<div
class="{{ model.FLAG_COMMAND }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ command.id_command }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ command.id_command }}"
>{{ command.name }}</div>
{% else %}
<select class="{{ model.FLAG_COMMAND }}" {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0">
{% include 'components/common/inputs/_option_blank.html' %}
{% for command in model.filter_commands %}
<option value="{{ command.id_command }}">{{ command.name }}</option>
{% endfor %}
</select>
{% endif %}
<div class="{{ model.FLAG_COMMAND }}" >{% if not is_blank_row %}{{ command.name }}{% endif %}</div>

View File

@@ -0,0 +1,2 @@
<div class="{{ model.FLAG_COMMAND_CATEGORY }}" >{% if not is_blank_row %}{{ command_category.name }}{% endif %}</div>

View File

@@ -1,15 +1,2 @@
{% if not is_blank_row %}
<div
class="{{ model.FLAG_DOG }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ dog.id_dog }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ dog.id_dog }}"
>{{ dog.name }}</div>
{% else %}
<select class="{{ model.FLAG_DOG }}" {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0">
{% include 'components/common/inputs/_option_blank.html' %}
{% for dog in model.filter_dogs %}
<option value="{{ dog.id_dog }}">{{ dog.name }}</option>
{% endfor %}
</select>
{% endif %}
<div class="{{ model.FLAG_DOG }}" >{% if not is_blank_row %}{{ dog.name }}{% endif %}</div>

View File

@@ -4,6 +4,9 @@
<td class="{{ model.FLAG_DOG }}" {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0">
{% include 'components/dog/_preview_DDL_dog.html' %}
</td>
<td class="{{ model.FLAG_COMMAND_CATEGORY }}" {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0">
{% include 'components/dog/_preview_DDL_command_category.html' %}
</td>
<td class="{{ model.FLAG_COMMAND }}" {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0">
{% include 'components/dog/_preview_DDL_command.html' %}
</td>
@@ -19,11 +22,15 @@
{% else %}
<tr class="{{ model.FLAG_DOG_COMMAND_LINK }}" {{ model.ATTR_ID_DOG_COMMAND_LINK }}="{{ link.id_link }}">
{% set dog = link.dog %}
<td class="{{ model.FLAG_DOG }}" {{ model.ATTR_VALUE_CURRENT }}="{{ link.id_dog }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ link.id_dog }}">
<td class="{{ model.FLAG_DOG }}" {{ model.ATTR_VALUE_CURRENT }}="{{ dog.id_dog }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ dog.id_dog }}">
{% include 'components/dog/_preview_DDL_dog.html' %}
</td>
{% set command_category = link.command.command_category %}
<td class="{{ model.FLAG_COMMAND_CATEGORY }}" {{ model.ATTR_VALUE_CURRENT }}="{{ command_category.id_command_category }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ command_category.id_command_category }}">
{% include 'components/dog/_preview_DDL_command_category.html' %}
</td>
{% set command = link.command %}
<td class="{{ model.FLAG_COMMAND }}" {{ model.ATTR_VALUE_CURRENT }}="{{ link.id_command }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ link.id_command }}">
<td class="{{ model.FLAG_COMMAND }}" {{ model.ATTR_VALUE_CURRENT }}="{{ command.id_command }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ command.id_command }}">
{% include 'components/dog/_preview_DDL_command.html' %}
</td>
<td class="{{ model.FLAG_HAND_SIGNAL_DESCRIPTION}}" {{ model.ATTR_VALUE_CURRENT }}="{{ link.hand_signal_description }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ link.hand_signal_description }}">

View File

@@ -0,0 +1,21 @@
<div class="{{ model.FLAG_COMMAND }}" >{% if not is_blank_row %}{{ command.name }}{% endif %}</div>
{#
{ % if not is_blank_row % }
<div
class="{{ model.FLAG_COMMAND }}"
{#
{{ model.ATTR_VALUE_CURRENT }}="{ { command.id_command } }"
{{ model.ATTR_VALUE_PREVIOUS }}="{ { command.id_command } }"
#}
>{ { command.name } }</div>
{ % else % }
<select class="{{ model.FLAG_COMMAND }}"> {# {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0" #}
{ % include 'components/common/inputs/_option_blank.html' % }
{ % for command in model.filter_commands % }
<option value="{ { command.id_command } }">{ { command.name } }</option>
{ % endfor % }
</select>
{ % endif % }
#}

View File

@@ -0,0 +1,21 @@
<div class="{{ model.FLAG_COMMAND_CATEGORY }}" >{% if not is_blank_row %}{{ command_category.name }}{% endif %}</div>
{#
{ % if not is_blank_row % }
<div
class="{{ model.FLAG_COMMAND_CATEGORY }}"
{#
{{ model.ATTR_VALUE_CURRENT }}="{ { command_category.id_command_category } }"
{{ model.ATTR_VALUE_PREVIOUS }}="{ { command_category.id_command_category } }"
#}
>{ { command_category.name } }</div>
{ % else % }
<select class="{{ model.FLAG_COMMAND_CATEGORY }}"> {# {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0" #}
{ % include 'components/common/inputs/_option_blank.html' % }
{ % for command_category in model.filter_command_categorys % }
<option value="{ { command_category.id_command_category } }">{ { command_category.name } }</option>
{ % endfor % }
</select>
{ % endif % }
#}

View File

@@ -0,0 +1,21 @@
<div class="{{ model.FLAG_DOG }}" >{% if not is_blank_row %}{{ dog.name }}{% endif %}</div>
{#
{ % if not is_blank_row % }
<div
class="{{ model.FLAG_DOG }}"
{#
{{ model.ATTR_VALUE_CURRENT }}="{ { dog.id_dog } }"
{{ model.ATTR_VALUE_PREVIOUS }}="{ { dog.id_dog } }"
#}
>{ { dog.name } }</div>
{ % else % }
<select class="{{ model.FLAG_DOG }}"> {# {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0" #}
{ % include 'components/common/inputs/_option_blank.html' % }
{ % for dog in model.filter_dogs % }
<option value="{ { dog.id_dog } }">{ { dog.name } }</option>
{ % endfor % }
</select>
{ % endif % }
#}

View File

@@ -39,6 +39,7 @@
var attrIdAccessLevel = "{{ model.ATTR_ID_ACCESS_LEVEL }}";
var attrIdCurrency = "{{ model.ATTR_ID_CURRENCY }}";
var attrIdCommand = "{{ model.ATTR_ID_COMMAND }}";
var attrIdCommandCategory = "{{ model.ATTR_ID_COMMAND_CATEGORY }}";
var attrIdDog = "{{ model.ATTR_ID_DOG }}";
var attrIdDogCommandLink = "{{ model.ATTR_ID_DOG_COMMAND_LINK }}";
var attrTextCollapsed = "{{ model.ATTR_TEXT_COLLAPSED }}";
@@ -65,6 +66,7 @@
var flagAccessLevel = "{{ model.FLAG_ACCESS_LEVEL }}";
var flagAccessLevelRequired = "{{ model.FLAG_ACCESS_LEVEL_REQUIRED }}";
var flagActive = "{{ model.FLAG_ACTIVE }}";
var flagActiveOnly = "{{ model.FLAG_ACTIVE_ONLY }}";
var flagAdd = "{{ model.FLAG_ADD }}";
var flagAddress = "{{ model.FLAG_ADDRESS }}";
var flagAddressLine1 = "{{ model.FLAG_ADDRESS_LINE_1 }}";
@@ -74,16 +76,18 @@
var flagCallback = "{{ model.FLAG_CALLBACK }}";
var flagCancel = "{{ model.FLAG_CANCEL }}";
var flagCard = "{{ model.FLAG_CARD }}";
var flagCheckbox = "{{ model.FLAG_CHECKBOX }}";
var flagCity = "{{ model.FLAG_CITY }}";
var flagCloseTemporaryElement = "{{ model.FLAG_CLOSE_TEMPORARY_ELEMENT }}";
var flagCode = "{{ model.FLAG_CODE }}";
var flagCollapsed = "{{ model.FLAG_COLLAPSED }}";
var flagCollapsible = "{{ model.FLAG_COLLAPSIBLE }}";
var flagColumn = "{{ model.FLAG_COLUMN }}";
var flagCommand = "{{ model.FLAG_COMMAND }}";
var flagCommandCategory = "{{ model.FLAG_COMMAND_CATEGORY }}";
var flagComment = "{{ model.FLAG_COMMENT }}";
// var flagContactUs = "{{ model.FLAG_CONTACT_US }}";
var flagContainer = "{{ model.FLAG_CONTAINER }}";
var flagContainerCheckbox = "{{ model.FLAG_CONTAINER_CHECKBOX }}";
var flagContainerInput = "{{ model.FLAG_CONTAINER_INPUT }}";
var flagCounty = "{{ model.FLAG_COUNTY }}";
var flagCsrfToken = "{{ model.FLAG_CSRF_TOKEN }}";
@@ -94,6 +98,7 @@
var flagDialog = "{{ model.FLAG_DIALOG }}";
var flagDirty = "{{ model.FLAG_DIRTY }}";
var flagDisplayOrder = "{{ model.FLAG_DISPLAY_ORDER }}";
var flagDog = "{{ model.FLAG_DOG }}";
var flagDragging = "dragging";
var flagDragOver = "drag-over";
var flagEdit = "{{ model.FLAG_EDIT }}";
@@ -107,6 +112,7 @@
var flagFormFilters = "{{ model.FLAG_FORM_FILTERS }}";
var flagImageLogo = "{{ model.FLAG_IMAGE_LOGO }}";
var flagInitialised = "{{ model.FLAG_INITIALISED }}";
var flagIsChecked = "{{ model.FLAG_IS_CHECKED }}";
// var flagItems = "{{ model.FLAG_ITEMS }}";
// var flagKeyPrimary = "{{ model.FLAG_KEY_PRIMARY }}";
var flagLeftHandStub = "{{ model.FLAG_LEFT_HAND_STUB }}";
@@ -143,6 +149,7 @@
var flagRows = "{{ model.FLAG_ROWS }}";
var flagSave = "{{ model.FLAG_SAVE }}";
var flagScrollable = "{{ model.FLAG_SCROLLABLE }}";
var flagSearch = "{{ model.FLAG_SEARCH }}";
var flagSlider = "{{ model.FLAG_SLIDER }}";
var flagStatus = "{{ model.FLAG_STATUS }}";
var flagSubmit = "{{ model.FLAG_SUBMIT }}";

View File

@@ -7,6 +7,13 @@
{{ model.form_filters.hidden_tag() }}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.FLAG_SEARCH }}">
{{ model.form_filters.search.label }}
{{ model.form_filters.search() }}
{% for error in model.form_filters.search.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
</div>
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.ATTR_ID_DOG }}">
{{ model.form_filters.id_dog.label }}
{{ model.form_filters.id_dog() }}
@@ -14,6 +21,13 @@
<p class="error">{{ error }}</p>
{% endfor %}
</div>
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.ATTR_ID_COMMAND_CATEGORY }}">
{{ model.form_filters.id_command_category.label }}
{{ model.form_filters.id_command_category() }}
{% for error in model.form_filters.id_command_category.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
</div>
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.ATTR_ID_COMMAND }}">
{{ model.form_filters.id_command.label }}
{{ model.form_filters.id_command() }}
@@ -21,12 +35,14 @@
<p class="error">{{ error }}</p>
{% endfor %}
</div>
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.FLAG_ACTIVE }}">
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.FLAG_ACTIVE_ONLY }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ model.form_filters.active_only.data }}">
{{ model.form_filters.active_only.label }}
{{ model.form_filters.active_only() }}
{% for error in model.form_filters.active_only.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
{% set class_name = model.FLAG_FILTER + ' ' + model.FLAG_ACTIVE_ONLY + ' ' + model.FLAG_CHECKBOX %}
{% include 'components/common/buttons/_icon_checkbox.html' %}
</div>
</div>
</div>
@@ -38,6 +54,7 @@
<thead>
<tr class="{{ model.FLAG_DOG_COMMAND_LINK }}">
<th class="{{ model.FLAG_DOG }}">Dog</th>
<th class="{{ model.FLAG_COMMAND_CATEGORY }}">Command Category</th>
<th class="{{ model.FLAG_COMMAND }}">Command</th>
<th class="{{ model.FLAG_HAND_SIGNAL_DESCRIPTION }}">Hand Signal</th>
<th class="{{ model.FLAG_NOTES }}">Notes</th>
@@ -64,6 +81,7 @@
<script src="{{ url_for('routes_dog.scripts_section_dog') }}"></script>
<script>
var filterCommandCategories = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_command_categories) | tojson | safe }};
var filterCommands = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_commands) | tojson | safe }};
var filterDogCommandLinks = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_dog_command_links) | tojson | safe }};
var filterDogs = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_dogs) | tojson | safe }};

View File

@@ -1,5 +1,7 @@
Command list random generator for assessment - and any other variables e.g. location, handler
Dog Command Link
Last tested
Print page option on Dog Command Links Page, Assessment-single Page for test sessions, giving the dog to another handler temporarily - give view only access