diff --git a/app.py b/app.py index 5296396..df38459 100644 --- a/app.py +++ b/app.py @@ -17,7 +17,9 @@ Initializes the Flask application, sets the configuration based on the environme # IMPORTS # internal from config import app_config, Config +from controllers.dog.button_icon import routes_dog_button_icon from controllers.dog.command import routes_dog_command +from controllers.dog.command_button_link import routes_dog_command_button_link from controllers.dog.command_category import routes_dog_command_category from controllers.dog.dog import routes_dog from controllers.dog.dog_command_link import routes_dog_dog_command_link @@ -118,8 +120,11 @@ app.register_blueprint(routes_core_home) app.register_blueprint(routes_dog) app.register_blueprint(routes_dog_command) app.register_blueprint(routes_dog_command_category) -app.register_blueprint(routes_dog_home) app.register_blueprint(routes_dog_dog_command_link) +app.register_blueprint(routes_dog_home) +app.register_blueprint(routes_dog_location) +app.register_blueprint(routes_dog_button_icon) +app.register_blueprint(routes_dog_command_button_link) app.register_blueprint(routes_legal) app.register_blueprint(routes_user) diff --git a/business_objects/base.py b/business_objects/base.py index aa43991..3371469 100644 --- a/business_objects/base.py +++ b/business_objects/base.py @@ -58,6 +58,7 @@ class Base(): FLAG_NAME_SINGULAR: ClassVar[str] = 'name_singular' FLAG_NAME_PLURAL: ClassVar[str] = 'name_plural' FLAG_NOTES: ClassVar[str] = "notes" + FLAG_PATH: ClassVar[str] = 'path' FLAG_PHONE_NUMBER: ClassVar[str] = 'phone_number' FLAG_POSTCODE: ClassVar[str] = 'postcode' FLAG_PRIORITY: ClassVar[str] = 'priority' diff --git a/business_objects/dog/button_icon.py b/business_objects/dog/button_icon.py new file mode 100644 index 0000000..af31c8e --- /dev/null +++ b/business_objects/dog/button_icon.py @@ -0,0 +1,258 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Business Objects +Feature: Button_Icon Business Object +""" + +# internal +from business_objects.base import Base +from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base +from business_objects.dog.image import Image +import lib.argument_validation as av +from extensions import db +from forms.dog.button_icon import Filters_Button_Icon +from helpers.helper_app import Helper_App +# external +from dataclasses import dataclass +from typing import ClassVar + + +class Button_Icon(SQLAlchemy_ABC, Base): + ATTR_ID_BUTTON_ICON: ClassVar[str] = 'id_button_icon' + FLAG_BUTTON_ICON: ClassVar[str] = 'button_icon' + NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_BUTTON_ICON + NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME + + __tablename__ = 'DOG_Button_Icon' + __table_args__ = { 'extend_existing': True } + + id_button_icon = db.Column(db.Integer, primary_key=True) + id_image = db.Column(db.Integer) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + notes = db.Column(db.Text) + active = db.Column(db.Boolean) + created_on = db.Column(db.DateTime) + + def __init__(self): + self.id_button_icon = 0 + self.image = None + self.is_new = False + super().__init__() + + @classmethod + def from_db_button_icon(cls, query_row): + _m = f'{cls.__qualname__}.from_db_button_icon' + button_icon = cls() + button_icon.id_button_icon = query_row[0] + button_icon.id_image = query_row[1] + button_icon.code = query_row[4] + button_icon.name = query_row[5] + button_icon.notes = query_row[6] + button_icon.active = av.input_bool(query_row[7], 'active', _m) + # button_icon.created_on = query_row[7] + button_icon.image = Image.from_db_button_icon(query_row) + return button_icon + + @classmethod + def from_db_command_button_link(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command_button_link' + button_icon = cls() + button_icon.id_button_icon = query_row[0] + button_icon.name = query_row[4] + button_icon.active = True + button_icon.image = Image.from_db_command_button_link(query_row) + return button_icon + + @classmethod + def from_json(cls, json): + _m = f'{cls.__qualname__}.from_json' + button_icon = cls() + if json is None: return button_icon + # Helper_App.console_log(f'{_m}\njson: {json}') + button_icon.id_button_icon = json.get(Button_Icon.ATTR_ID_BUTTON_ICON, -1) + button_icon.id_image = json[Image.FLAG_IMAGE] + button_icon.name = json[cls.FLAG_NAME] + button_icon.code = json.get(cls.FLAG_CODE, button_icon.name.upper().replace(" ", "_")) + button_icon.notes = json[cls.FLAG_NOTES] + button_icon.active = json[cls.FLAG_ACTIVE] + button_icon.created_on = json.get(cls.FLAG_CREATED_ON, None) + # Helper_App.console_log(f'Button_Icon: {button_icon}') + return button_icon + + def to_json(self): + as_json = { + **self.get_shared_json_attributes(self) + , self.ATTR_ID_BUTTON_ICON: self.id_button_icon + , Image.FLAG_IMAGE: self.id_image + , self.FLAG_CODE: self.code + , self.FLAG_NAME: self.name + , self.FLAG_NOTES: self.notes + , self.FLAG_ACTIVE: self.active + , self.FLAG_CREATED_ON: self.created_on + } + # Helper_App.console_log(f'as_json: {as_json}') + return as_json + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {self.FLAG_BUTTON_ICON}: {self.id_button_icon} + {Image.FLAG_IMAGE}: {self.id_image} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_NOTES}: {self.notes} + {self.FLAG_ACTIVE}: {self.active} + {self.FLAG_CREATED_ON}: {self.created_on} +) + ''' + +class Button_Icon_Temp(db.Model, Base): + __tablename__ = 'DOG_Button_Icon_Temp' + __table_args__ = { 'extend_existing': True } + id_temp = db.Column(db.Integer, primary_key=True) + id_button_icon = db.Column(db.Integer) + id_image = db.Column(db.Integer) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + notes = db.Column(db.Text) + active = db.Column(db.Boolean) + # created_on = db.Column(db.DateTime) + guid: str = db.Column(db.String(36)) + + def __init__(self): + super().__init__() + + @classmethod + def from_button_icon(cls, button_icon): + _m = 'Button_Icon_Temp.from_button_icon' + temp = cls() + temp.id_button_icon = button_icon.id_button_icon + temp.id_image = button_icon.id_image + temp.code = button_icon.code + temp.name = button_icon.name + temp.notes = button_icon.notes + temp.active = button_icon.active + # temp.created_on = button_icon.created_on + return temp + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {Button_Icon.FLAG_BUTTON_ICON}: {self.id_button_icon} + {Image.FLAG_IMAGE}: {self.id_image} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_NOTES}: {self.notes} + {self.FLAG_ACTIVE}: {self.active} +) + ''' + +class Parameters_Button_Icon(Get_Many_Parameters_Base): + get_all_file_type: bool + get_inactive_file_type: bool + ids_file_type: str + names_file_type: str + get_all_image: bool + get_inactive_image: bool + ids_image: str + names_image: str + get_all_button_icon: bool + get_inactive_button_icon: bool + ids_button_icon: str + names_button_icon: str + notes_button_icon: 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_file_type = True + , get_inactive_file_type = False + , ids_file_type = '' + , names_file_type = '' + , get_all_image = True + , get_inactive_image = False + , ids_image = '' + , names_image = '' + , get_all_button_icon = True + , get_inactive_button_icon = False + , ids_button_icon = '' + , names_button_icon = '' + , notes_button_icon = '' + , 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_file_type = json.get('a_get_all_file_type', False) + , get_inactive_file_type = json.get('a_get_inactive_file_type', False) + , ids_file_type = json.get('a_ids_file_type', '') + , names_file_type = json.get('a_names_file_type', '') + , get_all_image = json.get('a_get_all_image', False) + , get_inactive_image = json.get('a_get_inactive_image', False) + , ids_image = json.get('a_ids_image', '') + , names_image = json.get('a_names_image', '') + , get_all_button_icon = json.get('a_get_all_button_icon', False) + , get_inactive_button_icon = json.get('a_get_inactive_button_icon', False) + , ids_button_icon = json.get('a_ids_button_icon', '') + , names_button_icon = json.get('a_names_button_icon', '') + , notes_button_icon = json.get('a_notes_button_icon', '') + , 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_button_icon(cls, form): + av.val_instance(form, 'form', 'Parameters_Button_Icon.from_form_filters_button_icon', Filters_Button_Icon) + has_filter_search_text = not (form.search.data == '' or form.search.data is None) + active_only = av.input_bool(form.active_only.data, "active", "Parameters_Button_Icon.from_form_filters_button_icon") + filters = cls.get_default() + filters.get_all_file_type = True + filters.get_inactive_file_type = not active_only + filters.ids_file_type = '' + filters.names_file_type = form.search.data if has_filter_search_text else '' + filters.get_all_image = True + filters.get_inactive_image = not active_only + filters.ids_image = '' + filters.names_image = form.search.data if has_filter_search_text else '' + filters.get_all_button_icon = True + filters.get_inactive_button_icon = not active_only + filters.ids_button_icon = '' + filters.names_button_icon = form.search.data if has_filter_search_text else '' + filters.notes_button_icon = form.search.data if has_filter_search_text else '' + return filters + + def to_json(self): + return { + 'a_get_all_file_type': self.get_all_file_type + , 'a_get_inactive_file_type': self.get_inactive_file_type + , 'a_ids_file_type': self.ids_file_type + , 'a_names_file_type': self.names_file_type + , 'a_get_all_image': self.get_all_image + , 'a_get_inactive_image': self.get_inactive_image + , 'a_ids_image': self.ids_image + , 'a_names_image': self.names_image + , 'a_get_all_button_icon': self.get_all_button_icon + , 'a_get_inactive_button_icon': self.get_inactive_button_icon + , 'a_ids_button_icon': self.ids_button_icon + , 'a_names_button_icon': self.names_button_icon + , 'a_notes_button_icon': self.notes_button_icon + , '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 + } + diff --git a/business_objects/dog/button_shape.py b/business_objects/dog/button_shape.py new file mode 100644 index 0000000..f1e370d --- /dev/null +++ b/business_objects/dog/button_shape.py @@ -0,0 +1,207 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Business Objects +Feature: Button Shape Business Object +""" + +# internal +from business_objects.base import Base +from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base +from business_objects.dog.image import Image +import lib.argument_validation as av +from extensions import db +# from forms.dog.button_shape import Filters_Button_Shape +from helpers.helper_app import Helper_App +# external +from dataclasses import dataclass +from typing import ClassVar + + +class Button_Shape(SQLAlchemy_ABC, Base): + ATTR_ID_BUTTON_SHAPE: ClassVar[str] = 'id_button_shape' + FLAG_BUTTON_SHAPE: ClassVar[str] = 'button_shape' + NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_BUTTON_SHAPE + NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME + + __tablename__ = 'DOG_Button_Shape' + __table_args__ = { 'extend_existing': True } + + id_button_shape = db.Column(db.Integer, primary_key=True) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + notes = db.Column(db.Text) + active = db.Column(db.Boolean) + created_on = db.Column(db.DateTime) + + def __init__(self): + self.id_button_shape = 0 + self.is_new = False + super().__init__() + + @classmethod + def from_db_button_shape(cls, query_row): + _m = f'{cls.__qualname__}.from_db_button_shape' + button_shape = cls() + button_shape.id_button_shape = query_row[0] + button_shape.code = query_row[1] + button_shape.name = query_row[2] + button_shape.notes = query_row[3] + button_shape.active = av.input_bool(query_row[4], 'active', _m) + return button_shape + + @classmethod + def from_db_command_button_link(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command_button_link' + button_shape = cls() + button_shape.id_button_shape = query_row[5] + button_shape.name = query_row[6] + button_shape.active = True + return button_shape + + @classmethod + def from_json(cls, json): + _m = f'{cls.__qualname__}.from_json' + button_shape = cls() + if json is None: return button_shape + # Helper_App.console_log(f'{_m}\njson: {json}') + button_shape.id_button_shape = json.get(Button_Shape.ATTR_ID_BUTTON_SHAPE, -1) + button_shape.name = json[cls.FLAG_NAME] + button_shape.code = json.get(cls.FLAG_CODE, button_shape.name.upper().replace(" ", "_")) + button_shape.notes = json[cls.FLAG_NOTES] + button_shape.active = json[cls.FLAG_ACTIVE] + button_shape.created_on = json.get(cls.FLAG_CREATED_ON, None) + # Helper_App.console_log(f'Button_Shape: {button_shape}') + return button_shape + + def to_json(self): + as_json = { + **self.get_shared_json_attributes(self) + , self.ATTR_ID_BUTTON_SHAPE: self.id_button_shape + , self.FLAG_CODE: self.code + , self.FLAG_NAME: self.name + , self.FLAG_NOTES: self.notes + , self.FLAG_ACTIVE: self.active + , self.FLAG_CREATED_ON: self.created_on + } + # Helper_App.console_log(f'as_json: {as_json}') + return as_json + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {self.FLAG_BUTTON_SHAPE}: {self.id_button_shape} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_NOTES}: {self.notes} + {self.FLAG_ACTIVE}: {self.active} + {self.FLAG_CREATED_ON}: {self.created_on} +) + ''' + +class Button_Shape_Temp(db.Model, Base): + __tablename__ = 'DOG_Button_Shape_Temp' + __table_args__ = { 'extend_existing': True } + id_temp = db.Column(db.Integer, primary_key=True) + id_button_shape = db.Column(db.Integer) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + notes = db.Column(db.Text) + active = db.Column(db.Boolean) + # created_on = db.Column(db.DateTime) + guid: str = db.Column(db.String(36)) + + def __init__(self): + super().__init__() + + @classmethod + def from_button_shape(cls, button_shape): + _m = 'Button_Shape_Temp.from_button_shape' + temp = cls() + temp.id_button_shape = button_shape.id_button_shape + temp.code = button_shape.code + temp.name = button_shape.name + temp.notes = button_shape.notes + temp.active = button_shape.active + # temp.created_on = button_shape.created_on + return temp + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {Button_Shape.FLAG_BUTTON_SHAPE}: {self.id_button_shape} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_NOTES}: {self.notes} + {self.FLAG_ACTIVE}: {self.active} +) + ''' + +class Parameters_Button_Shape(Get_Many_Parameters_Base): + get_all_button_shape: bool + get_inactive_button_shape: bool + ids_button_shape: str + names_button_shape: str + notes_button_shape: 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_button_shape = True + , get_inactive_button_shape = False + , ids_button_shape = '' + , names_button_shape = '' + , notes_button_shape = '' + , 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_button_shape = json.get('a_get_all_button_shape', False) + , get_inactive_button_shape = json.get('a_get_inactive_button_shape', False) + , ids_button_shape = json.get('a_ids_button_shape', '') + , names_button_shape = json.get('a_names_button_shape', '') + , notes_button_shape = json.get('a_notes_button_shape', '') + , 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_button_shape(cls, form): + av.val_instance(form, 'form', 'Parameters_Button_Shape.from_form_filters_button_shape', Filters_Button_Shape) + has_filter_search_text = not (form.search.data == '' or form.search.data is None) + active_only = av.input_bool(form.active_only.data, "active", "Parameters_Button_Shape.from_form_filters_button_shape") + filters = cls.get_default() + filters.get_all_button_shape = True + filters.get_inactive_button_shape = not active_only + filters.ids_button_shape = '' + filters.names_button_shape = form.search.data if has_filter_search_text else '' + filters.notes_button_shape = form.search.data if has_filter_search_text else '' + return filters + """ + + def to_json(self): + return { + 'a_get_all_button_shape': self.get_all_button_shape + , 'a_get_inactive_button_shape': self.get_inactive_button_shape + , 'a_ids_button_shape': self.ids_button_shape + , 'a_names_button_shape': self.names_button_shape + , 'a_notes_button_shape': self.notes_button_shape + , '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 + } diff --git a/business_objects/dog/colour.py b/business_objects/dog/colour.py new file mode 100644 index 0000000..986b59b --- /dev/null +++ b/business_objects/dog/colour.py @@ -0,0 +1,193 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Business Objects +Feature: Colour Business Object +""" + +# internal +from business_objects.base import Base +from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base +from business_objects.dog.image import Image +import lib.argument_validation as av +from extensions import db +# from forms.dog.colour import Filters_Colour +from helpers.helper_app import Helper_App +# external +from dataclasses import dataclass +from typing import ClassVar + + +class Colour(SQLAlchemy_ABC, Base): + ATTR_ID_COLOUR: ClassVar[str] = 'id_colour' + FLAG_COLOUR: ClassVar[str] = 'colour' + NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_COLOUR + NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME + + __tablename__ = 'DOG_Colour' + __table_args__ = { 'extend_existing': True } + + id_colour = db.Column(db.Integer, primary_key=True) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + active = db.Column(db.Boolean) + created_on = db.Column(db.DateTime) + + def __init__(self): + self.id_colour = 0 + self.is_new = False + super().__init__() + + @classmethod + def from_db_colour(cls, query_row): + _m = f'{cls.__qualname__}.from_db_colour' + colour = cls() + colour.id_colour = query_row[0] + colour.code = query_row[1] + colour.name = query_row[2] + colour.active = av.input_bool(query_row[3], 'active', _m) + return colour + + @classmethod + def from_db_command_button_link(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command_button_link' + colour = cls() + colour.id_colour = query_row[7] + colour.name = query_row[8] + colour.active = True + return colour + + @classmethod + def from_json(cls, json): + _m = f'{cls.__qualname__}.from_json' + colour = cls() + if json is None: return colour + # Helper_App.console_log(f'{_m}\njson: {json}') + colour.id_colour = json.get(Colour.ATTR_ID_COLOUR, -1) + colour.name = json[cls.FLAG_NAME] + colour.code = json.get(cls.FLAG_CODE, colour.name.upper().replace(" ", "_")) + colour.active = json[cls.FLAG_ACTIVE] + colour.created_on = json.get(cls.FLAG_CREATED_ON, None) + # Helper_App.console_log(f'Colour: {colour}') + return colour + + def to_json(self): + as_json = { + **self.get_shared_json_attributes(self) + , self.ATTR_ID_COLOUR: self.id_colour + , self.FLAG_CODE: self.code + , self.FLAG_NAME: self.name + , self.FLAG_ACTIVE: self.active + , self.FLAG_CREATED_ON: self.created_on + } + # Helper_App.console_log(f'as_json: {as_json}') + return as_json + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {self.FLAG_COLOUR}: {self.id_colour} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_ACTIVE}: {self.active} + {self.FLAG_CREATED_ON}: {self.created_on} +) + ''' + +class Colour_Temp(db.Model, Base): + __tablename__ = 'DOG_Colour_Temp' + __table_args__ = { 'extend_existing': True } + id_temp = db.Column(db.Integer, primary_key=True) + id_colour = db.Column(db.Integer) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + active = db.Column(db.Boolean) + # created_on = db.Column(db.DateTime) + guid: str = db.Column(db.String(36)) + + def __init__(self): + super().__init__() + + @classmethod + def from_colour(cls, colour): + _m = 'Colour_Temp.from_colour' + temp = cls() + temp.id_colour = colour.id_colour + temp.code = colour.code + temp.name = colour.name + temp.active = colour.active + # temp.created_on = colour.created_on + return temp + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {Colour.FLAG_COLOUR}: {self.id_colour} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_ACTIVE}: {self.active} +) + ''' + +class Parameters_Colour(Get_Many_Parameters_Base): + get_all_colour: bool + get_inactive_colour: bool + ids_colour: str + names_colour: 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_colour = True + , get_inactive_colour = False + , ids_colour = '' + , names_colour = '' + , 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_colour = json.get('a_get_all_colour', False) + , get_inactive_colour = json.get('a_get_inactive_colour', False) + , ids_colour = json.get('a_ids_colour', '') + , names_colour = json.get('a_names_colour', '') + , 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_colour(cls, form): + av.val_instance(form, 'form', 'Parameters_Colour.from_form_filters_colour', Filters_Colour) + has_filter_search_text = not (form.search.data == '' or form.search.data is None) + active_only = av.input_bool(form.active_only.data, "active", "Parameters_Colour.from_form_filters_colour") + filters = cls.get_default() + filters.get_all_colour = True + filters.get_inactive_colour = not active_only + filters.ids_colour = '' + filters.names_colour = form.search.data if has_filter_search_text else '' + return filters + """ + + def to_json(self): + return { + 'a_get_all_colour': self.get_all_colour + , 'a_get_inactive_colour': self.get_inactive_colour + , 'a_ids_colour': self.ids_colour + , 'a_names_colour': self.names_colour + , '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 + } diff --git a/business_objects/dog/command.py b/business_objects/dog/command.py index 50c9c5a..bd48857 100644 --- a/business_objects/dog/command.py +++ b/business_objects/dog/command.py @@ -79,6 +79,16 @@ class Command(SQLAlchemy_ABC, Base): # command.created_on = query_row[7] command.command_category = Command_Category.from_db_dog_command_link(query_row) # this is done in datastore get many method using category dictionary return command + + @classmethod + def from_db_command_button_link(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command_button_link' + command = cls() + command.id_command = query_row[3] + command.name = query_row[4] + command.active = True + command.command_category = Command_Category.from_db_command_button_link(query_row) + return command @classmethod def from_json(cls, json): @@ -86,7 +96,7 @@ class Command(SQLAlchemy_ABC, Base): command = cls() if json is None: return command # Helper_App.console_log(f'{_m}\njson: {json}') - command.id_command = -1 + command.id_command = json.get(Command.ATTR_ID_COMMAND, -1) command.id_command_category = json[Command_Category.ATTR_ID_COMMAND_CATEGORY] command.name = json[cls.FLAG_NAME] command.hand_signal_default_description = json[cls.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION] diff --git a/business_objects/dog/command_button_link.py b/business_objects/dog/command_button_link.py new file mode 100644 index 0000000..08f144d --- /dev/null +++ b/business_objects/dog/command_button_link.py @@ -0,0 +1,412 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Business Objects +Feature: Dog Command Link Business Object +""" + +# internal +from business_objects.base import Base +from business_objects.dog.button_icon import Button_Icon +from business_objects.dog.button_shape import Button_Shape +from business_objects.dog.colour import Colour +from business_objects.dog.command import Command +# from business_objects.dog.command_category import Command_Category +from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base +from business_objects.dog.dog import Dog +from business_objects.dog.location import Location +from business_objects.dog.obedience_level import Obedience_Level +from extensions import db +from forms.dog.command_button_link import Filters_Command_Button_Link +from helpers.helper_app import Helper_App +import lib.argument_validation as av +# external +from dataclasses import dataclass +from typing import ClassVar + + +class Command_Button_Link(SQLAlchemy_ABC, Base): + ATTR_ID_COMMAND_BUTTON_LINK: ClassVar[str] = 'id_link' + FLAG_COMMAND_BUTTON_LINK: ClassVar[str] = 'command_button_link' + NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_COMMAND_BUTTON_LINK + NAME_ATTR_OPTION_TEXT: ClassVar[str] = ATTR_ID_COMMAND_BUTTON_LINK + + __tablename__ = 'DOG_Command_Button_Link' + __table_args__ = { 'extend_existing': True } + + id_link = db.Column(db.Integer, primary_key=True) + id_command = db.Column(db.Integer) + id_button_shape = db.Column(db.Integer) + id_button_colour = db.Column(db.Integer) + id_button_icon = db.Column(db.Integer) + id_location = db.Column(db.Integer) + active = db.Column(db.Boolean) + created_on = db.Column(db.DateTime) + + def __init__(self): + self.id_link = 0 + self.is_new = False + self.command = None + self.button_shape = None + self.colour = None + self.button_icon = None + self.location = None + super().__init__() + + @classmethod + def from_db_command_button_link(cls, query_row): + _m = 'Command_Button_Link.from_db_command_button_link' + command_button_link = cls() + command_button_link.id_link = query_row[0] + command_button_link.id_command = query_row[3] + command_button_link.id_button_shape = query_row[5] + command_button_link.id_button_colour = query_row[7] + command_button_link.id_button_icon = query_row[9] + command_button_link.id_location = query_row[14] + command_button_link.active = av.input_bool(query_row[16], 'active', _m) + # command_button_link.created_on = query_row[7] + command_button_link.command = Command.from_db_command_button_link(query_row) + command_button_link.button_shape = Button_Shape.from_db_command_button_link(query_row) + command_button_link.colour = Colour.from_db_command_button_link(query_row) + command_button_link.button_icon = Button_Icon.from_db_command_button_link(query_row) + command_button_link.location = Location.from_db_command_button_link(query_row) + return command_button_link + + @classmethod + def from_json(cls, json): + _m = 'Command_Button_Link.from_json' + command_button_link = cls() + if json is None: return command_button_link + # Helper_App.console_log(f'{_m}\njson: {json}') + command_button_link.id_link = json.get(Command_Button_Link.ATTR_ID_COMMAND_BUTTON_LINK, -1) + command_button_link.id_command = json[Command.FLAG_COMMAND] + command_button_link.id_button_shape = json[Button_Shape.FLAG_BUTTON_SHAPE] + command_button_link.id_button_colour = json[Colour.FLAG_COLOUR] + command_button_link.id_button_icon = json[Button_Icon.FLAG_BUTTON_ICON] + command_button_link.id_location = json[Location.FLAG_LOCATION] + command_button_link.active = json[cls.FLAG_ACTIVE] + command_button_link.created_on = json.get(cls.FLAG_CREATED_ON, None) + # command_button_link.id_command_category = json[Command_Category.FLAG_COMMAND_CATEGORY] + # Helper_App.console_log(f'Dog Command Link: {command_button_link}') + return command_button_link + + def to_json(self): + as_json = { + **self.get_shared_json_attributes(self) + , self.ATTR_ID_COMMAND_BUTTON_LINK: self.id_link + , Command.FLAG_COMMAND: self.id_command + , Button_Shape.FLAG_BUTTON_SHAPE: self.id_button_shape + , Colour.FLAG_COLOUR: self.id_button_colour + , Button_Icon.FLAG_BUTTON_ICON: self.id_button_icon + , Location.FLAG_LOCATION: self.id_location + , self.FLAG_ACTIVE: self.active + , self.FLAG_CREATED_ON: self.created_on + } + # , Command_Category.FLAG_COMMAND_CATEGORY: self.id_command_category + # Helper_App.console_log(f'as_json: {as_json}') + return as_json + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {self.FLAG_COMMAND_BUTTON_LINK}: {self.id_link} + {Command.FLAG_COMMAND}: {self.command} + {Button_Shape.FLAG_BUTTON_SHAPE}: {self.button_shape} + {Colour.FLAG_COLOUR}: {self.colour} + {Button_Icon.FLAG_BUTTON_ICON}: {self.button_icon} + {Location.FLAG_LOCATION}: {self.location} + {self.FLAG_ACTIVE}: {self.active} + {self.FLAG_CREATED_ON}: {self.created_on} +) + ''' +# {Command_Category.FLAG_COMMAND_CATEGORY}: {self.id_command_category} + +class Command_Button_Link_Temp(db.Model, Base): + __tablename__ = 'DOG_Command_Button_Link_Temp' + __table_args__ = { 'extend_existing': True } + id_temp = db.Column(db.Integer, primary_key=True) + id_link = db.Column(db.Integer) + id_command = db.Column(db.Integer) + id_button_shape = db.Column(db.Integer) + id_button_colour = db.Column(db.Integer) + id_button_icon = db.Column(db.Integer) + id_location = db.Column(db.Integer) + active = db.Column(db.Boolean) + # created_on = db.Column(db.DateTime) + guid: str = db.Column(db.String(36)) + + def __init__(self): + super().__init__() + + @classmethod + def from_command_button_link(cls, command_button_link): + _m = 'Command_Button_Link_Temp.from_command_button_link' + temp = cls() + temp.id_link = command_button_link.id_link + temp.id_command = command_button_link.id_command + temp.id_button_shape = command_button_link.id_button_shape + temp.id_button_colour = command_button_link.id_button_colour + temp.id_button_icon = command_button_link.id_button_icon + temp.id_location = command_button_link.id_location + temp.active = command_button_link.active + # temp.created_on = command_button_link.created_on + return temp + + +class Parameters_Command_Button_Link(Get_Many_Parameters_Base): + get_all_link: bool + get_inactive_link: bool + ids_link: 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_default_descriptions_command: str + notes_command: str + get_all_button_shape: bool + get_inactive_button_shape: bool + ids_button_shape: str + names_button_shape: str + notes_button_shape: str + get_all_colour: bool + get_inactive_colour: bool + ids_colour: str + names_colour: str + get_all_file_type: bool + get_inactive_file_type: bool + ids_file_type: str + names_file_type: str + get_all_image: bool + get_inactive_image: bool + ids_image: str + names_image: str + get_all_button_icon: bool + get_inactive_button_icon: bool + ids_button_icon: str + names_button_icon: str + notes_button_icon: str + get_all_location: bool + get_inactive_location: bool + ids_location: str + names_location: 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_link = True + , get_inactive_link = False + , ids_link = '' + , 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 = '' + , get_all_button_shape = True + , get_inactive_button_shape = False + , ids_button_shape = '' + , names_button_shape = '' + , notes_button_shape = '' + , get_all_colour = True + , get_inactive_colour = False + , ids_colour = '' + , names_colour = '' + , get_all_file_type = True + , get_inactive_file_type = False + , ids_file_type = '' + , names_file_type = '' + , get_all_image = True + , get_inactive_image = False + , ids_image = '' + , names_image = '' + , get_all_button_icon = True + , get_inactive_button_icon = False + , ids_button_icon = '' + , names_button_icon = '' + , notes_button_icon = '' + , get_all_location = True + , get_inactive_location = False + , ids_location = '' + , names_location = '' + , 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_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_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', '') + , get_all_button_shape = json.get('a_get_all_button_shape', False) + , get_inactive_button_shape = json.get('a_get_inactive_button_shape', False) + , ids_button_shape = json.get('a_ids_button_shape', '') + , names_button_shape = json.get('a_names_button_shape', '') + , notes_button_shape = json.get('a_notes_button_shape', '') + , get_all_colour = json.get('a_get_all_colour', False) + , get_inactive_colour = json.get('a_get_inactive_colour', False) + , ids_colour = json.get('a_ids_colour', '') + , names_colour = json.get('a_names_colour', '') + , get_all_file_type = json.get('a_get_all_file_type', False) + , get_inactive_file_type = json.get('a_get_inactive_file_type', False) + , ids_file_type = json.get('a_ids_file_type', '') + , names_file_type = json.get('a_names_file_type', '') + , get_all_image = json.get('a_get_all_image', False) + , get_inactive_image = json.get('a_get_inactive_image', False) + , ids_image = json.get('a_ids_image', '') + , names_image = json.get('a_names_image', '') + , get_all_button_icon = json.get('a_get_all_button_icon', False) + , get_inactive_button_icon = json.get('a_get_inactive_button_icon', False) + , ids_button_icon = json.get('a_ids_button_icon', '') + , names_button_icon = json.get('a_names_button_icon', '') + , notes_button_icon = json.get('a_notes_button_icon', '') + , get_all_location = json.get('a_get_all_location', False) + , get_inactive_location = json.get('a_get_inactive_location', False) + , ids_location = json.get('a_ids_location', '') + , names_location = json.get('a_names_location', '') + , 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_command_button_link(cls, form): + _m = f'{cls.__qualname__}.from_form_filters_command_button_link' + Helper_App.console_log(_m) + Helper_App.console_log(f'Filters: {form}') + av.val_instance(form, 'form', _m, Filters_Command_Button_Link) + has_filter_search_text = not (form.search.data == '' or form.search.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) + has_filter_button_shape = not (form.id_button_shape.data == '0' or form.id_button_shape.data == '' or form.id_button_shape.data is None) + has_filter_colour = not (form.id_colour.data == '0' or form.id_colour.data == '' or form.id_colour.data is None) + has_filter_button_icon = not (form.id_button_icon.data == '0' or form.id_button_icon.data == '' or form.id_button_icon.data is None) + has_filter_location = not (form.id_location.data == '0' or form.id_location.data == '' or form.id_location.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_command_category: {has_filter_command_category} +has_filter_command: {has_filter_command} +has_filter_button_shape: {has_filter_button_shape} +has_filter_colour: {has_filter_colour} +has_filter_button_icon: {has_filter_button_icon} +has_filter_location: {has_filter_location} +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_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_default_descriptions_command = form.search.data if has_filter_search_text else '' + filters.notes_command = form.search.data if has_filter_search_text else '' + filters.get_all_button_shape = not has_filter_button_shape + filters.get_inactive_button_shape = not active_only + filters.ids_button_shape = form.id_button_shape.data if has_filter_button_shape else '' + filters.names_button_shape = form.search.data if has_filter_search_text else '' + filters.notes_button_shape = form.search.data if has_filter_search_text else '' + filters.get_all_colour = not has_filter_colour + filters.get_inactive_colour = not active_only + filters.ids_colour = form.id_colour.data if has_filter_colour else '' + filters.names_colour = form.search.data if has_filter_search_text else '' + filters.get_all_file_type = True + filters.get_inactive_file_type = False + filters.ids_file_type = '' + filters.names_file_type = '' + filters.get_all_image = True + filters.get_inactive_image = False + filters.ids_image = '' + filters.names_image = '' + filters.get_all_button_icon = not has_filter_button_icon + filters.get_inactive_button_icon = not active_only + filters.ids_button_icon = form.id_button_icon.data if has_filter_button_icon else '' + filters.names_button_icon = form.search.data if has_filter_search_text else '' + filters.notes_button_icon = form.search.data if has_filter_search_text else '' + filters.get_all_location = not has_filter_location + filters.get_inactive_location = not active_only + filters.ids_location = form.id_location.data if has_filter_location else '' + filters.names_location = form.search.data if has_filter_search_text else '' + return filters + + def to_json(self): + return { + '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_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_get_all_button_shape': self.get_all_button_shape + , 'a_get_inactive_button_shape': self.get_inactive_button_shape + , 'a_ids_button_shape': self.ids_button_shape + , 'a_names_button_shape': self.names_button_shape + , 'a_notes_button_shape': self.notes_button_shape + , 'a_get_all_colour': self.get_all_colour + , 'a_get_inactive_colour': self.get_inactive_colour + , 'a_ids_colour': self.ids_colour + , 'a_names_colour': self.names_colour + , 'a_get_all_file_type': self.get_all_file_type + , 'a_get_inactive_file_type': self.get_inactive_file_type + , 'a_ids_file_type': self.ids_file_type + , 'a_names_file_type': self.names_file_type + , 'a_get_all_image': self.get_all_image + , 'a_get_inactive_image': self.get_inactive_image + , 'a_ids_image': self.ids_image + , 'a_names_image': self.names_image + , 'a_get_all_button_icon': self.get_all_button_icon + , 'a_get_inactive_button_icon': self.get_inactive_button_icon + , 'a_ids_button_icon': self.ids_button_icon + , 'a_names_button_icon': self.names_button_icon + , 'a_notes_button_icon': self.notes_button_icon + , 'a_get_all_location': self.get_all_location + , 'a_get_inactive_location': self.get_inactive_location + , 'a_ids_location': self.ids_location + , 'a_names_location': self.names_location + , '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 + } + + diff --git a/business_objects/dog/command_category.py b/business_objects/dog/command_category.py index c3c412b..53ace3a 100644 --- a/business_objects/dog/command_category.py +++ b/business_objects/dog/command_category.py @@ -28,7 +28,7 @@ class Command_Category(SQLAlchemy_ABC, Base): __table_args__ = { 'extend_existing': True } id_command_category = db.Column(db.Integer, primary_key=True) - code = db.Column(db.String(100)) + code = db.Column(db.String(250)) name = db.Column(db.String(250)) active = db.Column(db.Boolean) @@ -57,6 +57,15 @@ class Command_Category(SQLAlchemy_ABC, Base): level.name = query_row[4] level.active = True return level + + @classmethod + def from_db_command_button_link(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command_button_link' + level = cls() + level.id_command_category = query_row[1] + level.name = query_row[2] + level.active = True + return level @classmethod def from_json(cls, json): @@ -65,8 +74,8 @@ class Command_Category(SQLAlchemy_ABC, Base): if json is None: return Command_Category # Helper_App.console_log(f'{_m}\njson: {json}') command_category.id_command_category = json.get(cls.ATTR_ID_COMMAND_CATEGORY, -1) - command_category.code = json[cls.FLAG_CODE] command_category.name = json[cls.FLAG_NAME] + command_category.code = json.get(cls.FLAG_CODE, command_category.name.upper().replace(" ", "_")) command_category.active = json[cls.FLAG_ACTIVE] # Helper_App.console_log(f'Command_Category: {command_category}') return command_category @@ -99,7 +108,7 @@ class Command_Category_Temp(db.Model, Base): __table_args__ = { 'extend_existing': True } id_temp = db.Column(db.Integer, primary_key=True) id_command_category = db.Column(db.Integer) - # code = db.Column(db.String(100)) + # code = db.Column(db.String(250)) name = db.Column(db.String(250)) active = db.Column(db.Boolean) guid: str = db.Column(db.String(36)) diff --git a/business_objects/dog/DEPRECATED - access_level.py b/business_objects/dog/deprecated/DEPRECATED - access_level.py similarity index 100% rename from business_objects/dog/DEPRECATED - access_level.py rename to business_objects/dog/deprecated/DEPRECATED - access_level.py diff --git a/business_objects/dog/DEPRECATED - dog_command_link_container.py b/business_objects/dog/deprecated/DEPRECATED - dog_command_link_container.py similarity index 100% rename from business_objects/dog/DEPRECATED - dog_command_link_container.py rename to business_objects/dog/deprecated/DEPRECATED - dog_command_link_container.py diff --git a/business_objects/dog/DEPRECATED - understanding_level.py b/business_objects/dog/deprecated/DEPRECATED - understanding_level.py similarity index 97% rename from business_objects/dog/DEPRECATED - understanding_level.py rename to business_objects/dog/deprecated/DEPRECATED - understanding_level.py index 1499112..c7d907c 100644 --- a/business_objects/dog/DEPRECATED - understanding_level.py +++ b/business_objects/dog/deprecated/DEPRECATED - understanding_level.py @@ -27,7 +27,7 @@ class Understanding_Level(SQLAlchemy_ABC, Base): __table_args__ = { 'extend_existing': True } id_understanding_level = db.Column(db.Integer, primary_key=True) - code = db.Column(db.String(100)) + code = db.Column(db.String(250)) name = db.Column(db.String(250)) active = db.Column(db.Boolean) @@ -85,7 +85,7 @@ class Understanding_Level_Temp(db.Model, Base): __table_args__ = { 'extend_existing': True } id_temp = db.Column(db.Integer, primary_key=True) id_understanding_level = db.Column(db.Integer) - code = db.Column(db.String(100)) + code = db.Column(db.String(250)) name = db.Column(db.String(250)) active = db.Column(db.Boolean) guid: str = db.Column(db.String(36)) diff --git a/business_objects/dog/dog.py b/business_objects/dog/dog.py index e0bce93..83c049e 100644 --- a/business_objects/dog/dog.py +++ b/business_objects/dog/dog.py @@ -74,7 +74,7 @@ class Dog(SQLAlchemy_ABC, Base): dog = cls() if json is None: return Dog # Helper_App.console_log(f'{_m}\njson: {json}') - dog.id_dog = -1 + dog.id_dog = json.get(Dog.ATTR_ID_DOG, -1) dog.name = json[cls.FLAG_NAME] dog.appearance = json[cls.FLAG_APPEARANCE] dog.mass_kg = json[cls.FLAG_MASS_KG] diff --git a/business_objects/dog/dog_command_link.py b/business_objects/dog/dog_command_link.py index 8737516..0db8844 100644 --- a/business_objects/dog/dog_command_link.py +++ b/business_objects/dog/dog_command_link.py @@ -70,7 +70,7 @@ class Dog_Command_Link(SQLAlchemy_ABC, Base): dog_command_link = cls() if json is None: return dog_command_link # Helper_App.console_log(f'{_m}\njson: {json}') - dog_command_link.id_link = -1 + dog_command_link.id_link = json.get(Dog_Command_Link.ATTR_ID_DOG_COMMAND_LINK, -1) dog_command_link.id_dog = json[Dog.ATTR_ID_DOG] dog_command_link.id_command = json[Command.ATTR_ID_COMMAND] dog_command_link.hand_signal_description = json[cls.FLAG_HAND_SIGNAL_DESCRIPTION] diff --git a/business_objects/dog/image.py b/business_objects/dog/image.py new file mode 100644 index 0000000..c08a0d3 --- /dev/null +++ b/business_objects/dog/image.py @@ -0,0 +1,240 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Business Objects +Feature: Image Business Object +""" + +# internal +from business_objects.base import Base +from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base +from business_objects.file_type import File_Type +from business_objects.dog.dog import Dog +import lib.argument_validation as av +from extensions import db +# from forms.dog.image import Filters_Image +from helpers.helper_app import Helper_App +# external +from dataclasses import dataclass +from typing import ClassVar + + +class Image(SQLAlchemy_ABC, Base): + ATTR_ID_IMAGE: ClassVar[str] = 'id_image' + FLAG_IMAGE: ClassVar[str] = 'image' + NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_IMAGE + NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME + + __tablename__ = 'DOG_Image' + __table_args__ = { 'extend_existing': True } + + id_image = db.Column(db.Integer, primary_key=True) + id_file_type = db.Column(db.Integer) + id_dog = db.Column(db.Integer) + path = db.Column(db.String(1024)) + name = db.Column(db.String(1024)) + active = db.Column(db.Boolean) + created_on = db.Column(db.DateTime) + + def __init__(self): + self.id_image = 0 + self.is_new = False + super().__init__() + + """ + @classmethod + def from_db_image(cls, query_row): + _m = f'{cls.__qualname__}.from_db_image' + image = cls() + image.id_image = query_row[0] + image.code = query_row[3] + image.name = query_row[4] + image.active = av.input_bool(query_row[5], 'active', _m) + # image.created_on = query_row[7] + return image + """ + @classmethod + def from_db_button_icon(cls, query_row): + _m = f'{cls.__qualname__}.from_db_button_icon' + image = cls() + image.id_image = query_row[1] + image.path = query_row[2] + image.name = query_row[3] + image.active = True + return image + @classmethod + def from_db_command_button_link(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command_button_link' + image = cls() + image.id_image = query_row[11] + image.path = query_row[12] + image.name = query_row[13] + image.active = True + return image + + @classmethod + def from_json(cls, json): + _m = f'{cls.__qualname__}.from_json' + image = cls() + if json is None: return image + # Helper_App.console_log(f'{_m}\njson: {json}') + image.id_image = json.get(Image.ATTR_ID_IMAGE, -1) + image.id_file_type = json[File_Type.FLAG_FILE_TYPE] + image.id_dog = json[Dog.FLAG_DOG] + image.path = json[cls.FLAG_PATH] + image.name = json[cls.FLAG_NAME] + image.active = json[cls.FLAG_ACTIVE] + image.created_on = json.get(cls.FLAG_CREATED_ON, None) + # Helper_App.console_log(f'Image: {image}') + return image + + def to_json(self): + as_json = { + **self.get_shared_json_attributes(self) + , self.ATTR_ID_IMAGE: self.id_image + , self.FLAG_CODE: self.code + , self.FLAG_NAME: self.name + , self.FLAG_ACTIVE: self.active + , self.FLAG_CREATED_ON: self.created_on + } + # Helper_App.console_log(f'as_json: {as_json}') + return as_json + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {self.FLAG_IMAGE}: {self.id_image} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_ACTIVE}: {self.active} + {self.FLAG_CREATED_ON}: {self.created_on} +) + ''' + +class Image_Temp(db.Model, Base): + __tablename__ = 'DOG_Image_Temp' + __table_args__ = { 'extend_existing': True } + id_temp = db.Column(db.Integer, primary_key=True) + id_image = db.Column(db.Integer) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + active = db.Column(db.Boolean) + # created_on = db.Column(db.DateTime) + guid: str = db.Column(db.String(36)) + + def __init__(self): + super().__init__() + + @classmethod + def from_image(cls, image): + _m = 'Image_Temp.from_image' + temp = cls() + temp.id_image = image.id_image + temp.id_image = image.id_image + temp.code = image.code + temp.name = image.name + temp.active = image.active + # temp.created_on = image.created_on + return temp + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {Image.FLAG_IMAGE}: {self.id_image} + {Image.FLAG_IMAGE}: {self.id_image} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_ACTIVE}: {self.active} +) + ''' + +class Parameters_Image(Get_Many_Parameters_Base): + get_all_file_type: bool + get_inactive_file_type: bool + ids_file_type: str + names_file_type: str + get_all_dog: bool + get_inactive_dog: bool + ids_dog: str + names_dog: str + get_all_image: bool + get_inactive_image: bool + ids_image: str + names_image: 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_file_type = True + , get_inactive_file_type = False + , ids_file_type = '' + , names_file_type = '' + , get_all_dog = True + , get_inactive_dog = False + , ids_dog = '' + , names_dog = '' + , get_all_image = True + , get_inactive_image = False + , ids_image = '' + , names_image = '' + , 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_file_type = json.get('a_get_all_file_type', False) + , get_inactive_file_type = json.get('a_get_inactive_file_type', False) + , ids_file_type = json.get('a_ids_file_type', '') + , names_file_type = json.get('a_names_file_type', '') + , 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_image = json.get('a_get_all_image', False) + , get_inactive_image = json.get('a_get_inactive_image', False) + , ids_image = json.get('a_ids_image', '') + , names_image = json.get('a_names_image', '') + , 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_image(cls, form): + av.val_instance(form, 'form', 'Parameters_Image.from_form_filters_image', Filters_Image) + has_filter_search_text = not (form.search.data == '' or form.search.data is None) + active_only = av.input_bool(form.active_only.data, "active", "Parameters_Image.from_form_filters_image") + filters = cls.get_default() + filters.get_all_image = True + filters.get_inactive_image = not active_only + filters.ids_image = '' + filters.names_image = form.search.data if has_filter_search_text else '' + return filters + """ + + def to_json(self): + return { + 'a_get_all_image': self.get_all_image + , 'a_get_inactive_image': self.get_inactive_image + , 'a_ids_image': self.ids_image + , 'a_names_image': self.names_image + , '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_images': self.output_images + } + + diff --git a/business_objects/dog/location.py b/business_objects/dog/location.py index 0a3a836..67cd389 100644 --- a/business_objects/dog/location.py +++ b/business_objects/dog/location.py @@ -9,12 +9,10 @@ Feature: Location Business Object # internal from business_objects.base import Base -from business_objects.dog.location_category import Location_Category from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base import lib.argument_validation as av from extensions import db from forms.dog.location import Filters_Location -from forms.dog.location_category import Filters_Location_Category from helpers.helper_app import Helper_App # external from dataclasses import dataclass @@ -32,19 +30,16 @@ class Location(SQLAlchemy_ABC, Base): __table_args__ = { 'extend_existing': True } id_location = db.Column(db.Integer, primary_key=True) - id_location_category = db.Column(db.Integer) + id_location_parent = db.Column(db.Integer) + code = db.Column(db.String(250)) name = db.Column(db.String(250)) - hand_signal_default_description = db.Column(db.Text) - can_have_button = db.Column(db.Boolean) - notes = db.Column(db.Text) active = db.Column(db.Boolean) created_on = db.Column(db.DateTime) def __init__(self): self.id_location = 0 - self.location_category = None + self.location_parent = None self.is_new = False - self.has_button = False super().__init__() @classmethod @@ -52,31 +47,23 @@ class Location(SQLAlchemy_ABC, Base): _m = f'{cls.__qualname__}.from_db_location' location = cls() location.id_location = query_row[0] - location.id_location_category = query_row[1] - location.name = query_row[2] - location.hand_signal_default_description = query_row[3] - location.can_have_button = av.input_bool(query_row[4], 'can_have_button', _m) - # location.has_button = av.input_bool(query_row[7], 'has_button', _m) - location.notes = query_row[5] - location.active = av.input_bool(query_row[6], 'active', _m) + location.id_location_parent = query_row[1] + location.code = query_row[3] + location.name = query_row[4] + location.active = av.input_bool(query_row[5], 'active', _m) # location.created_on = query_row[7] - # location.location_category = Location_Category.from_db_location(query_row) + location.location_parent = cls() + location.location_parent.id_location = location.id_location_parent + location.location_parent.name = query_row[2] return location @classmethod - def from_db_dog_location_link(cls, query_row): - _m = f'{cls.__qualname__}.from_db_dog_location_link' + def from_db_command_button_link(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command_button_link' location = cls() - location.id_location = query_row[5] - location.id_location_category = query_row[3] - location.name = query_row[6] - # location.hand_signal_default_description = query_row[2] - location.can_have_button = av.input_bool(query_row[8], 'can_have_button', _m) - # location.has_button = av.input_bool(query_row[7], 'has_button', _m) - # location.notes = query_row[4] - location.active = True # av.input_bool(True, 'active', _m) - # location.created_on = query_row[7] - location.location_category = Location_Category.from_db_dog_location_link(query_row) # this is done in datastore get many method using category dictionary + location.id_location = query_row[14] + location.name = query_row[15] + location.active = True return location @classmethod @@ -85,12 +72,10 @@ class Location(SQLAlchemy_ABC, Base): location = cls() if json is None: return location # Helper_App.console_log(f'{_m}\njson: {json}') - location.id_location = -1 - location.id_location_category = json[Location_Category.ATTR_ID_LOCATION_CATEGORY] + location.id_location = json.get(Location.ATTR_ID_LOCATION, -1) + location.id_location_parent = json[Location.FLAG_LOCATION_PARENT] location.name = json[cls.FLAG_NAME] - location.hand_signal_default_description = json[cls.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION] - location.can_have_button = json[cls.FLAG_CAN_HAVE_BUTTON] - location.notes = json[cls.FLAG_NOTES] + location.code = json.get(cls.FLAG_CODE, location.name.upper().replace(" ", "_")) location.active = json[cls.FLAG_ACTIVE] location.created_on = json.get(cls.FLAG_CREATED_ON, None) # Helper_App.console_log(f'Location: {location}') @@ -100,11 +85,9 @@ class Location(SQLAlchemy_ABC, Base): as_json = { **self.get_shared_json_attributes(self) , self.ATTR_ID_LOCATION: self.id_location - , Location_Category.ATTR_ID_LOCATION_CATEGORY: self.id_location_category + , Location.FLAG_LOCATION_PARENT: self.id_location_parent + , self.FLAG_CODE: self.code , 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 - , self.FLAG_NOTES: self.notes , self.FLAG_ACTIVE: self.active , self.FLAG_CREATED_ON: self.created_on } @@ -115,11 +98,9 @@ class Location(SQLAlchemy_ABC, Base): return f''' {self.__class__.__name__}( {self.FLAG_LOCATION}: {self.id_location} - {Location_Category.FLAG_LOCATION_CATEGORY}: {self.id_location_category} + {Location.FLAG_LOCATION_PARENT}: {self.id_location_parent} + {self.FLAG_CODE}: {self.code} {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} - {self.FLAG_NOTES}: {self.notes} {self.FLAG_ACTIVE}: {self.active} {self.FLAG_CREATED_ON}: {self.created_on} ) @@ -130,13 +111,11 @@ class Location_Temp(db.Model, Base): __table_args__ = { 'extend_existing': True } id_temp = db.Column(db.Integer, primary_key=True) id_location = db.Column(db.Integer) - id_location_category = db.Column(db.Integer) + id_location_parent = db.Column(db.Integer) + code = db.Column(db.String(250)) name = db.Column(db.String(250)) - hand_signal_default_description = db.Column(db.Text) - can_have_button = db.Column(db.Boolean) - notes = db.Column(db.Text) active = db.Column(db.Boolean) - created_on = db.Column(db.DateTime) + # created_on = db.Column(db.DateTime) guid: str = db.Column(db.String(36)) def __init__(self): @@ -147,68 +126,56 @@ class Location_Temp(db.Model, Base): _m = 'Location_Temp.from_location' temp = cls() temp.id_location = location.id_location - temp.id_location_category = location.id_location_category + temp.id_location_parent = location.id_location_parent + temp.code = location.code temp.name = location.name - temp.hand_signal_default_description = location.hand_signal_default_description - temp.can_have_button = location.can_have_button - temp.notes = location.notes temp.active = location.active - temp.created_on = location.created_on + # temp.created_on = location.created_on return temp + def __repr__(self): + return f''' +{self.__class__.__name__}( + {Location.FLAG_LOCATION}: {self.id_location} + {Location.FLAG_LOCATION_PARENT}: {self.id_location_parent} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_ACTIVE}: {self.active} +) + ''' class Parameters_Location(Get_Many_Parameters_Base): - get_all_location_category: bool - get_inactive_location_category: bool - ids_location_category: str - names_location_category: str get_all_location: bool get_inactive_location: bool ids_location: str names_location: str - hand_signal_default_descriptions_location: str - notes_location: 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_location_categories: bool output_locations: bool @classmethod def get_default(cls): return cls( - get_all_location_category = True - , get_inactive_location_category = False - , ids_location_category = '' - , names_location_category = '' - , get_all_location = True + get_all_location = True , get_inactive_location = False , ids_location = '' , names_location = '' - , hand_signal_default_descriptions_location = '' - , notes_location = '' , 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_location_categories = True , output_locations = True ) @classmethod def from_json(cls, json): return cls( - get_all_location_category = json.get('a_get_all_location_category', False) - , get_inactive_location_category = json.get('a_get_inactive_location_category', False) - , ids_location_category = json.get('a_ids_location_category', '') - , names_location_category = json.get('a_names_location_category', '') - , get_all_location = json.get('a_get_all_location', False) + get_all_location = json.get('a_get_all_location', False) , get_inactive_location = json.get('a_get_inactive_location', False) , ids_location = json.get('a_ids_location', '') , names_location = json.get('a_names_location', '') - , hand_signal_default_descriptions_location = json.get('a_hand_signal_default_descriptions_location', '') - , notes_location = json.get('a_notes_location', '') , 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) @@ -221,54 +188,24 @@ class Parameters_Location(Get_Many_Parameters_Base): def from_form_filters_location(cls, form): av.val_instance(form, 'form', 'Parameters_Location.from_form_filters_location', Filters_Location) has_filter_search_text = not (form.search.data == '' or form.search.data is None) - has_filter_location_category = not (has_filter_search_text or form.id_location_category.data == '0' or form.id_location_category.data == '' or form.id_location_category.data is None) active_only = av.input_bool(form.active_only.data, "active", "Parameters_Location.from_form_filters_location") filters = cls.get_default() - filters.get_all_location_category = not has_filter_location_category - filters.get_inactive_location_category = not active_only - filters.ids_location_category = form.id_location_category.data if has_filter_location_category else '' - filters.names_location_category = form.search.data if has_filter_search_text else '' filters.get_all_location = True filters.get_inactive_location = not active_only filters.ids_location = '' filters.names_location = form.search.data if has_filter_search_text else '' return filters - @classmethod - def from_form_filters_location_category(cls, form): - av.val_instance(form, 'form', 'Parameters_Location.from_form_filters_location_category', Filters_Location_Category) - has_filter_search_text = not (form.search.data == '' or form.search.data is None) - active_only = av.input_bool(form.active_only.data, "active", "Parameters_Location.from_form_filters_location") - filters = cls.get_default() - filters.get_all_location_category = True - filters.get_inactive_location_category = not active_only - filters.ids_location_category = '' - filters.names_location_category = form.search.data if has_filter_search_text else '' - filters.get_all_location = False - filters.get_inactive_location = False - filters.ids_location = '' - filters.names_location = '' - filters.require_all_id_search_filters_met = False - filters.output_locations = False - return filters - def to_json(self): return { - 'a_get_all_location_category': self.get_all_location_category - , 'a_get_inactive_location_category': self.get_inactive_location_category - , 'a_ids_location_category': self.ids_location_category - , 'a_names_location_category': self.names_location_category - , 'a_get_all_location': self.get_all_location + 'a_get_all_location': self.get_all_location , 'a_get_inactive_location': self.get_inactive_location , 'a_ids_location': self.ids_location , 'a_names_location': self.names_location - , 'a_hand_signal_default_descriptions_location': self.hand_signal_default_descriptions_location - , 'a_notes_location': self.notes_location , '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_location_categories': self.output_location_categories , 'a_output_locations': self.output_locations } diff --git a/business_objects/dog/obedience_level.py b/business_objects/dog/obedience_level.py index bf2b938..5e70ae9 100644 --- a/business_objects/dog/obedience_level.py +++ b/business_objects/dog/obedience_level.py @@ -28,7 +28,7 @@ class Obedience_Level(SQLAlchemy_ABC, Base): __table_args__ = { 'extend_existing': True } id_obedience_level = db.Column(db.Integer, primary_key=True) - code = db.Column(db.String(100)) + code = db.Column(db.String(250)) name = db.Column(db.String(250)) active = db.Column(db.Boolean) @@ -53,7 +53,7 @@ class Obedience_Level(SQLAlchemy_ABC, Base): obedience_level = cls() if json is None: return Obedience_Level Helper_App.console_log(f'{_m}\njson: {json}') - obedience_level.id_obedience_level = -1 + obedience_level.id_obedience_level = json.get(Obedience_Level.ATTR_ID_OBEDIENCE_LEVEL, -1) obedience_level.code = json[cls.FLAG_CODE] obedience_level.name = json[cls.FLAG_NAME] obedience_level.active = json[cls.FLAG_ACTIVE] @@ -88,7 +88,7 @@ class Obedience_Level_Temp(db.Model, Base): __table_args__ = { 'extend_existing': True } id_temp = db.Column(db.Integer, primary_key=True) id_obedience_level = db.Column(db.Integer) - code = db.Column(db.String(100)) + code = db.Column(db.String(250)) name = db.Column(db.String(250)) active = db.Column(db.Boolean) guid: str = db.Column(db.String(36)) diff --git a/business_objects/file_type.py b/business_objects/file_type.py new file mode 100644 index 0000000..49082f4 --- /dev/null +++ b/business_objects/file_type.py @@ -0,0 +1,116 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Business Objects +Feature: Command Category Business Object +""" + +# internal +from business_objects.base import Base +from business_objects.db_base import SQLAlchemy_ABC +import lib.argument_validation as av +from extensions import db +from helpers.helper_app import Helper_App +# external +from dataclasses import dataclass +from typing import ClassVar + + +class File_Type(SQLAlchemy_ABC, Base): + ATTR_ID_FILE_TYPE: ClassVar[str] = 'id_file_type' + FLAG_FILE_TYPE: ClassVar[str] = 'command-category' + FLAG_IS_IMAGE: ClassVar[str] = 'is_image' + NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_FILE_TYPE + NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME + + __tablename__ = 'CORE_File_Type' + __table_args__ = { 'extend_existing': True } + + id_file_type = db.Column(db.Integer, primary_key=True) + code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + is_image = db.Column(db.Boolean) + active = db.Column(db.Boolean) + + def __init__(self): + self.id_file_type = 0 + self.is_new = False + super().__init__() + + @classmethod + def from_db_file_type(cls, query_row): + _m = f'{cls.__qualname__}.from_db_command' + category = cls() + category.id_file_type = query_row[0] + category.code = query_row[1] + category.name = query_row[2] + category.is_image = av.input_bool(query_row[3], 'is_image', _m) + category.active = av.input_bool(query_row[4], 'active', _m) + # command.created_on = query_row[7] + return category + + @classmethod + def from_json(cls, json): + _m = 'File_Type.from_json' + file_type = cls() + if json is None: return File_Type + # Helper_App.console_log(f'{_m}\njson: {json}') + file_type.id_file_type = json.get(cls.ATTR_ID_FILE_TYPE, -1) + file_type.name = json[cls.FLAG_NAME] + file_type.code = json.get(cls.FLAG_CODE, file_type.name.upper().replace(" ", "_")) + file_type.is_image = json[cls.FLAG_IS_IMAGE] + file_type.active = json[cls.FLAG_ACTIVE] + # Helper_App.console_log(f'File_Type: {file_type}') + return file_type + + + def to_json(self): + as_json = { + **self.get_shared_json_attributes(self) + , self.ATTR_ID_FILE_TYPE: self.id_file_type + , self.FLAG_CODE: self.code + , self.FLAG_NAME: self.name + , self.FLAG_IS_IMAGE: self.is_image + , self.FLAG_ACTIVE: self.active + } + # Helper_App.console_log(f'as_json: {as_json}') + return as_json + + def __repr__(self): + return f''' +{self.__class__.__name__}( + {self.FLAG_FILE_TYPE}: {self.id_file_type} + {self.FLAG_CODE}: {self.code} + {self.FLAG_NAME}: {self.name} + {self.FLAG_IS_IMAGE}: {self.is_image} + {self.FLAG_ACTIVE}: {self.active} +) + ''' + + +class File_Type_Temp(db.Model, Base): + __tablename__ = 'CORE_File_Type_Temp' + __table_args__ = { 'extend_existing': True } + id_temp = db.Column(db.Integer, primary_key=True) + id_file_type = db.Column(db.Integer) + # code = db.Column(db.String(250)) + name = db.Column(db.String(250)) + is_image = db.Column(db.Boolean) + active = db.Column(db.Boolean) + guid: str = db.Column(db.String(36)) + + def __init__(self): + super().__init__() + + @classmethod + def from_file_type(cls, file_type): + _m = 'File_Type_Temp.from_File_Type' + temp = cls() + temp.id_file_type = file_type.id_file_type + # temp.code = file_type.code + temp.name = file_type.name + temp.is_image = file_type.is_image + temp.active = file_type.active + return temp \ No newline at end of file diff --git a/controllers/dog/button_icon.py b/controllers/dog/button_icon.py new file mode 100644 index 0000000..c7b2796 --- /dev/null +++ b/controllers/dog/button_icon.py @@ -0,0 +1,97 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: App Routing +Feature: Dog - Button Icon Routes + +Description: +Contact Page Controller. +""" + +# IMPORTS +# internal +from business_objects.api import API +from business_objects.dog.button_icon import Button_Icon +from datastores.datastore_dog import DataStore_Dog +from forms.dog.button_icon import Filters_Button_Icon +from helpers.helper_app import Helper_App +from models.model_view_dog_button_icon import Model_View_Dog_Button_Icon +from models.model_view_home import Model_View_Home +import lib.argument_validation as av +# external +from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app, flash +from flask_mail import Mail, Message +from extensions import db, oauth, mail +from urllib.parse import quote_plus, urlencode +from authlib.integrations.flask_client import OAuth +from authlib.integrations.base_client import OAuthError +from urllib.parse import quote, urlparse, parse_qs +import json +import base64 +import hmac +import hashlib +import datetime +from altcha import ChallengeOptions, create_challenge, verify_solution + + +routes_dog_button_icon = Blueprint('routes_dog_button_icon', __name__) + + +@routes_dog_button_icon.route(Model_View_Dog_Button_Icon.HASH_PAGE_DOG_BUTTON_ICONS, methods=['GET']) +def button_icons(): + Helper_App.console_log('button_icons') + Helper_App.console_log(f'request_args: {request.args}') + try: + form_filters = Filters_Button_Icon.from_json(request.args) + except Exception as e: + Helper_App.console_log(f'Error: {e}') + form_filters = Filters_Button_Icon() + Helper_App.console_log(f'form_filters={form_filters}') + model = Model_View_Dog_Button_Icon(form_filters_old = form_filters) + if not model.is_user_logged_in: + return redirect(url_for('routes_core_home.home')) + Helper_App.console_log(f'form_filters={form_filters}') + return render_template('pages/dog/_button_icons.html', model = model) + +@routes_dog_button_icon.route(Model_View_Dog_Button_Icon.HASH_SAVE_DOG_BUTTON_ICON, methods=['POST']) +def save_button_icon(): + data = Helper_App.get_request_data(request) + try: + form_filters = Filters_Button_Icon.from_json(data[Model_View_Dog_Button_Icon.FLAG_FORM_FILTERS]) + if not form_filters.validate_on_submit(): + return jsonify({ + Model_View_Dog_Button_Icon.FLAG_STATUS: Model_View_Dog_Button_Icon.FLAG_FAILURE, + Model_View_Dog_Button_Icon.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' + }) + model_return = Model_View_Dog_Button_Icon(form_filters_old=form_filters) + if not model_return.is_user_logged_in: + raise Exception('User not logged in') + + button_icons = data[Model_View_Dog_Button_Icon.FLAG_BUTTON_ICON] + if len(button_icons) == 0: + return jsonify({ + Model_View_Dog_Button_Icon.FLAG_STATUS: Model_View_Dog_Button_Icon.FLAG_FAILURE, + Model_View_Dog_Button_Icon.FLAG_MESSAGE: f'No button icons.' + }) + objs_button_icon = [] + for button_icon in button_icons: + objs_button_icon.append(Button_Icon.from_json(button_icon)) + Helper_App.console_log(f'objs_button_icon={objs_button_icon}') + errors = DataStore_Dog.save_button_icons(data.get('comment', 'No comment'), objs_button_icon) + + if (len(errors) > 0): + return jsonify({ + Model_View_Dog_Button_Icon.FLAG_STATUS: Model_View_Dog_Button_Icon.FLAG_FAILURE, + Model_View_Dog_Button_Icon.FLAG_MESSAGE: f'Error saving button icons.\n{model_return.convert_list_objects_to_json(errors)}' + }) + return jsonify({ + Model_View_Dog_Button_Icon.FLAG_STATUS: Model_View_Dog_Button_Icon.FLAG_SUCCESS, + Model_View_Dog_Button_Icon.FLAG_DATA: Model_View_Dog_Button_Icon.convert_list_objects_to_json(model_return.button_icons) + }) + except Exception as e: + return jsonify({ + Model_View_Dog_Button_Icon.FLAG_STATUS: Model_View_Dog_Button_Icon.FLAG_FAILURE, + Model_View_Dog_Button_Icon.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' + }) \ No newline at end of file diff --git a/controllers/dog/command_button_link.py b/controllers/dog/command_button_link.py new file mode 100644 index 0000000..3334583 --- /dev/null +++ b/controllers/dog/command_button_link.py @@ -0,0 +1,98 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: App Routing +Feature: Dog - Dog Command Link Routes + +Description: +Contact Page Controller. +""" + +# IMPORTS +# internal +from business_objects.api import API +from business_objects.dog.command import Command +from business_objects.dog.command_button_link import Command_Button_Link +from datastores.datastore_dog import DataStore_Dog +from forms.dog.command_button_link import Filters_Command_Button_Link +from helpers.helper_app import Helper_App +from models.model_view_dog_command_button_link import Model_View_Dog_Command_Button_Link +from models.model_view_home import Model_View_Home +import lib.argument_validation as av +# external +from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app, flash +from flask_mail import Mail, Message +from extensions import db, oauth, mail +from urllib.parse import quote_plus, urlencode +from authlib.integrations.flask_client import OAuth +from authlib.integrations.base_client import OAuthError +from urllib.parse import quote, urlparse, parse_qs +import json +import base64 +import hmac +import hashlib +import datetime +from altcha import ChallengeOptions, create_challenge, verify_solution + + +routes_dog_command_button_link = Blueprint('routes_dog_command_button_link', __name__) + + +@routes_dog_command_button_link.route(Model_View_Dog_Command_Button_Link.HASH_PAGE_DOG_COMMAND_BUTTON_LINKS, methods=['GET']) +def command_button_links(): + Helper_App.console_log('command_button_links') + Helper_App.console_log(f'request_args: {request.args}') + try: + form_filters = Filters_Command_Button_Link.from_json(request.args) + except Exception as e: + Helper_App.console_log(f'Error: {e}') + form_filters = Filters_Command_Button_Link() + Helper_App.console_log(f'form_filters={form_filters}') + model = Model_View_Dog_Command_Button_Link(form_filters_old = form_filters) + if not model.is_user_logged_in: + return redirect(url_for('routes_core_home.home')) + Helper_App.console_log(f'form_filters={form_filters}') + return render_template('pages/dog/_command_button_links.html', model = model) + +@routes_dog_command_button_link.route(Model_View_Dog_Command_Button_Link.HASH_SAVE_DOG_COMMAND_BUTTON_LINK, methods=['POST']) +def save_command_button_link(): + data = Helper_App.get_request_data(request) + try: + form_filters = Filters_Command_Button_Link.from_json(data[Model_View_Dog_Command_Button_Link.FLAG_FORM_FILTERS]) + if not form_filters.validate_on_submit(): + return jsonify({ + Model_View_Dog_Command_Button_Link.FLAG_STATUS: Model_View_Dog_Command_Button_Link.FLAG_FAILURE, + Model_View_Dog_Command_Button_Link.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' + }) + model_return = Model_View_Dog_Command_Button_Link(form_filters_old=form_filters) + if not model_return.is_user_logged_in: + raise Exception('User not logged in') + + command_button_links = data[Model_View_Dog_Command_Button_Link.FLAG_COMMAND_BUTTON_LINK] + if len(command_button_links) == 0: + return jsonify({ + Model_View_Dog_Command_Button_Link.FLAG_STATUS: Model_View_Dog_Command_Button_Link.FLAG_FAILURE, + Model_View_Dog_Command_Button_Link.FLAG_MESSAGE: f'No dog command links.' + }) + objs_command_button_link = [] + for command_button_link in command_button_links: + objs_command_button_link.append(Command_Button_Link.from_json(command_button_link)) + Helper_App.console_log(f'objs_command_button_link={objs_command_button_link}') + errors = DataStore_Dog.save_command_button_links(data.get('comment', 'No comment'), objs_command_button_link) + + if (len(errors) > 0): + return jsonify({ + Model_View_Dog_Command_Button_Link.FLAG_STATUS: Model_View_Dog_Command_Button_Link.FLAG_FAILURE, + Model_View_Dog_Command_Button_Link.FLAG_MESSAGE: f'Error saving dog command links.\n{model_return.convert_list_objects_to_json(errors)}' + }) + return jsonify({ + Model_View_Dog_Command_Button_Link.FLAG_STATUS: Model_View_Dog_Command_Button_Link.FLAG_SUCCESS, + Model_View_Dog_Command_Button_Link.FLAG_DATA: Model_View_Dog_Command_Button_Link.convert_list_objects_to_json(model_return.command_button_links) + }) + except Exception as e: + return jsonify({ + Model_View_Dog_Command_Button_Link.FLAG_STATUS: Model_View_Dog_Command_Button_Link.FLAG_FAILURE, + Model_View_Dog_Command_Button_Link.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' + }) \ No newline at end of file diff --git a/controllers/dog/location.py b/controllers/dog/location.py index 4e77f2d..97d9d6d 100644 --- a/controllers/dog/location.py +++ b/controllers/dog/location.py @@ -4,7 +4,7 @@ Author: Edward Middleton-Smith Precision And Research Technology Systems Limited Technology: App Routing -Feature: Dog - Command Routes +Feature: Dog - Location Routes Description: Contact Page Controller. @@ -13,12 +13,11 @@ Contact Page Controller. # IMPORTS # internal from business_objects.api import API -from business_objects.dog.command import Command -from business_objects.dog.dog_command_link import Dog_Command_Link +from business_objects.dog.location import Location from datastores.datastore_dog import DataStore_Dog -from forms.dog.command import Filters_Command +from forms.dog.location import Filters_Location from helpers.helper_app import Helper_App -from models.model_view_dog_command import Model_View_Dog_Command +from models.model_view_dog_location import Model_View_Dog_Location from models.model_view_home import Model_View_Home import lib.argument_validation as av # external @@ -37,62 +36,62 @@ import datetime from altcha import ChallengeOptions, create_challenge, verify_solution -routes_dog_command = Blueprint('routes_dog_command', __name__) +routes_dog_location = Blueprint('routes_dog_location', __name__) -@routes_dog_command.route(Model_View_Dog_Command.HASH_PAGE_DOG_COMMANDS, methods=['GET']) -def commands(): - Helper_App.console_log('commands') +@routes_dog_location.route(Model_View_Dog_Location.HASH_PAGE_DOG_LOCATIONS, methods=['GET']) +def locations(): + Helper_App.console_log('locations') Helper_App.console_log(f'request_args: {request.args}') try: - form_filters = Filters_Command.from_json(request.args) + form_filters = Filters_Location.from_json(request.args) except Exception as e: Helper_App.console_log(f'Error: {e}') - form_filters = Filters_Command() + form_filters = Filters_Location() Helper_App.console_log(f'form_filters={form_filters}') - model = Model_View_Dog_Command(form_filters_old = form_filters) + model = Model_View_Dog_Location(form_filters_old = form_filters) if not model.is_user_logged_in: return redirect(url_for('routes_core_home.home')) Helper_App.console_log(f'form_filters={form_filters}') - return render_template('pages/dog/_commands.html', model = model) + return render_template('pages/dog/_locations.html', model = model) -@routes_dog_command.route(Model_View_Dog_Command.HASH_SAVE_DOG_COMMAND, methods=['POST']) -def save_command(): +@routes_dog_location.route(Model_View_Dog_Location.HASH_SAVE_DOG_LOCATION, methods=['POST']) +def save_location(): data = Helper_App.get_request_data(request) try: - form_filters = Filters_Command.from_json(data[Model_View_Dog_Command.FLAG_FORM_FILTERS]) + form_filters = Filters_Location.from_json(data[Model_View_Dog_Location.FLAG_FORM_FILTERS]) if not form_filters.validate_on_submit(): return jsonify({ - Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE, - Model_View_Dog_Command.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' + Model_View_Dog_Location.FLAG_STATUS: Model_View_Dog_Location.FLAG_FAILURE, + Model_View_Dog_Location.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' }) - model_return = Model_View_Dog_Command(form_filters_old=form_filters) + model_return = Model_View_Dog_Location(form_filters_old=form_filters) if not model_return.is_user_logged_in: raise Exception('User not logged in') - commands = data[Model_View_Dog_Command.FLAG_COMMAND] - if len(commands) == 0: + locations = data[Model_View_Dog_Location.FLAG_LOCATION] + if len(locations) == 0: return jsonify({ - Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE, - Model_View_Dog_Command.FLAG_MESSAGE: f'No commands.' + Model_View_Dog_Location.FLAG_STATUS: Model_View_Dog_Location.FLAG_FAILURE, + Model_View_Dog_Location.FLAG_MESSAGE: f'No locations.' }) - objs_command = [] - for command in commands: - objs_command.append(Command.from_json(command)) - Helper_App.console_log(f'objs_command={objs_command}') - errors = DataStore_Dog.save_commands(data.get('comment', 'No comment'), objs_command) + objs_location = [] + for location in locations: + objs_location.append(Location.from_json(location)) + Helper_App.console_log(f'objs_location={objs_location}') + errors = DataStore_Dog.save_locations(data.get('comment', 'No comment'), objs_location) if (len(errors) > 0): return jsonify({ - Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE, - Model_View_Dog_Command.FLAG_MESSAGE: f'Error saving commands.\n{model_return.convert_list_objects_to_json(errors)}' + Model_View_Dog_Location.FLAG_STATUS: Model_View_Dog_Location.FLAG_FAILURE, + Model_View_Dog_Location.FLAG_MESSAGE: f'Error saving locations.\n{model_return.convert_list_objects_to_json(errors)}' }) return jsonify({ - Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_SUCCESS, - Model_View_Dog_Command.FLAG_DATA: Model_View_Dog_Command.convert_list_objects_to_json(model_return.commands) + Model_View_Dog_Location.FLAG_STATUS: Model_View_Dog_Location.FLAG_SUCCESS, + Model_View_Dog_Location.FLAG_DATA: Model_View_Dog_Location.convert_list_objects_to_json(model_return.locations) }) except Exception as e: return jsonify({ - Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE, - Model_View_Dog_Command.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' + Model_View_Dog_Location.FLAG_STATUS: Model_View_Dog_Location.FLAG_FAILURE, + Model_View_Dog_Location.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' }) \ No newline at end of file diff --git a/datastores/datastore_dog.py b/datastores/datastore_dog.py index b8146c3..ac6df48 100644 --- a/datastores/datastore_dog.py +++ b/datastores/datastore_dog.py @@ -13,11 +13,16 @@ Datastore for Users # internal # from routes import bp_home import lib.argument_validation as av +from business_objects.dog.button_icon import Button_Icon, Button_Icon_Temp +from business_objects.dog.button_shape import Button_Shape, Button_Shape_Temp +from business_objects.dog.colour import Colour, Colour_Temp from business_objects.dog.command import Command, Command_Temp +from business_objects.dog.command_button_link import Command_Button_Link, Command_Button_Link_Temp from business_objects.dog.command_category import Command_Category, Command_Category_Temp from business_objects.dog.dog import Dog from business_objects.dog.dog_command_link import Dog_Command_Link, Dog_Command_Link_Temp -from business_objects.dog.location import Location +from business_objects.dog.command_button_link import Command_Button_Link, Command_Button_Link_Temp +from business_objects.dog.location import Location, Location_Temp from business_objects.sql_error import SQL_Error from datastores.datastore_base import DataStore_Base from helpers.helper_app import Helper_App @@ -298,6 +303,82 @@ class DataStore_Dog(DataStore_Base): return errors + @classmethod + def get_many_button_shape(cls, filters_button_shape): + _m = f'{cls.__qualname__}.get_many_button_shape' + user = cls.get_user_session() + argument_dict = { + 'a_id_user': user.id_user + , **filters_button_shape.to_json() + , 'a_debug': 0 + } + Helper_App.console_log(f'argument_dict: {argument_dict}') + result = cls.db_procedure_execute('p_dog_get_many_button_shape', argument_dict) + cursor = result.cursor + + # Button_Shapes + result_set_1 = cursor.fetchall() + Helper_App.console_log(f'raw button_shapes: {result_set_1}') + button_shapes = [] + button_shape_indexes = {} + for row in result_set_1: + new_button_shape = Button_Shape.from_db_button_shape(row) + button_shape_indexes[new_button_shape.id_button_shape] = len(button_shapes) + button_shapes.append(new_button_shape) + + # Errors + cursor.nextset() + result_set_e = cursor.fetchall() + Helper_App.console_log(f'raw errors: {result_set_e}') + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_db_record(row) for row in result_set_e] + for error in errors: + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") + + cls.db_cursor_clear(cursor) + + return button_shapes, errors + + + @classmethod + def get_many_colour(cls, filters_colour): + _m = f'{cls.__qualname__}.get_many_colour' + user = cls.get_user_session() + argument_dict = { + 'a_id_user': user.id_user + , **filters_colour.to_json() + , 'a_debug': 0 + } + Helper_App.console_log(f'argument_dict: {argument_dict}') + result = cls.db_procedure_execute('p_dog_get_many_colour', argument_dict) + cursor = result.cursor + + # Colours + result_set_1 = cursor.fetchall() + Helper_App.console_log(f'raw colours: {result_set_1}') + colours = [] + colour_indexes = {} + for row in result_set_1: + new_colour = Colour.from_db_colour(row) + colour_indexes[new_colour.id_colour] = len(colours) + colours.append(new_colour) + + # Errors + cursor.nextset() + result_set_e = cursor.fetchall() + Helper_App.console_log(f'raw errors: {result_set_e}') + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_db_record(row) for row in result_set_e] + for error in errors: + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") + + cls.db_cursor_clear(cursor) + + return colours, errors + + @classmethod def get_many_location(cls, filters_location): _m = f'{cls.__qualname__}.get_many_location' @@ -334,3 +415,220 @@ class DataStore_Dog(DataStore_Base): cls.db_cursor_clear(cursor) return locations, errors + + @classmethod + def save_locations(cls, comment, locations): + _m = f'{cls}.save_locations' + av.val_str(comment, 'comment', _m) + + guid = Helper_DB_MySQL.create_guid_str() + now = datetime.now() + user = cls.get_user_session() + + Helper_App.console_log(f'saving locations: {locations}') + + rows = [] + for link in locations: + row = Location_Temp.from_location(link) + row.guid = guid + rows.append(row) + + Helper_App.console_log(f'rows: {rows}') + + cls.upload_bulk(Location_Temp.__tablename__, rows, 1000) + + Helper_App.console_log('locations uploaded') + + argument_dict_list = { + 'a_comment': comment, + 'a_guid': guid, + 'a_id_user': user.id_user, + 'a_debug': 0 + } + result = cls.db_procedure_execute('p_dog_save_location', argument_dict_list) + + Helper_App.console_log('Locations saved') + + # Errors + cursor = result.cursor + cursor.nextset() + result_set_e = cursor.fetchall() + Helper_App.console_log(f"Raw errors: {result_set_e}") + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_db_record(row) for row in result_set_e] + for error in errors: + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") + + cls.db_cursor_clear(cursor) + + return [] # errors + + + @classmethod + def get_many_button_icon(cls, filters_button_icon): + _m = f'{cls.__qualname__}.get_many_button_icon' + user = cls.get_user_session() + argument_dict = { + 'a_id_user': user.id_user + , **filters_button_icon.to_json() + , 'a_debug': 0 + } + Helper_App.console_log(f'argument_dict: {argument_dict}') + result = cls.db_procedure_execute('p_dog_get_many_button_icon', argument_dict) + cursor = result.cursor + + # Button_Icons + result_set_1 = cursor.fetchall() + Helper_App.console_log(f'raw button_icons: {result_set_1}') + button_icons = [] + button_icon_indexes = {} + for row in result_set_1: + new_button_icon = Button_Icon.from_db_button_icon(row) + button_icon_indexes[new_button_icon.id_button_icon] = len(button_icons) + button_icons.append(new_button_icon) + + # Errors + cursor.nextset() + result_set_e = cursor.fetchall() + Helper_App.console_log(f'raw errors: {result_set_e}') + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_db_record(row) for row in result_set_e] + for error in errors: + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") + + cls.db_cursor_clear(cursor) + + return button_icons, errors + + @classmethod + def save_button_icons(cls, comment, button_icons): + _m = f'{cls}.save_button_icons' + av.val_str(comment, 'comment', _m) + + guid = Helper_DB_MySQL.create_guid_str() + now = datetime.now() + user = cls.get_user_session() + + Helper_App.console_log(f'saving button_icons: {button_icons}') + + rows = [] + for link in button_icons: + row = Button_Icon_Temp.from_button_icon(link) + row.guid = guid + rows.append(row) + + Helper_App.console_log(f'rows: {rows}') + + cls.upload_bulk(Button_Icon_Temp.__tablename__, rows, 1000) + + Helper_App.console_log('button_icons uploaded') + + argument_dict_list = { + 'a_comment': comment, + 'a_guid': guid, + 'a_id_user': user.id_user, + 'a_debug': 0 + } + result = cls.db_procedure_execute('p_dog_save_button_icon', argument_dict_list) + + Helper_App.console_log('Button_Icons saved') + + # Errors + cursor = result.cursor + cursor.nextset() + result_set_e = cursor.fetchall() + Helper_App.console_log(f"Raw errors: {result_set_e}") + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_db_record(row) for row in result_set_e] + for error in errors: + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") + + cls.db_cursor_clear(cursor) + + return errors + + + @classmethod + def get_many_command_button_link(cls, filters_command_button_link): + _m = f'{cls.__qualname__}.get_many_command_button_link' + user = cls.get_user_session() + argument_dict = { + 'a_id_user': user.id_user + , **filters_command_button_link.to_json() + , 'a_debug': 0 + } + Helper_App.console_log(f'argument_dict: {argument_dict}') + result = cls.db_procedure_execute('p_dog_get_many_command_button_link', argument_dict) + cursor = result.cursor + + # Command Button Links + result_set_1 = cursor.fetchall() + Helper_App.console_log(f'raw command button links: {result_set_1}') + command_button_links = [] + command_button_link_indexes = {} + for row in result_set_1: + # Helper_App.console_log(f'Raw dog command link: {row}') + new_command_button_link = Command_Button_Link.from_db_command_button_link(row) + command_button_link_indexes[new_command_button_link.id_link] = len(command_button_links) + command_button_links.append(new_command_button_link) + + # Errors + cursor.nextset() + result_set_e = cursor.fetchall() + Helper_App.console_log(f'raw errors: {result_set_e}') + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_db_record(row) for row in result_set_e] + for error in errors: + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") + + cls.db_cursor_clear(cursor) + + return command_button_links, errors + + @classmethod + def save_command_button_links(cls, comment, links): + _m = f'{cls}.save_command_button_links' + av.val_str(comment, 'comment', _m) + + guid = Helper_DB_MySQL.create_guid_str() + now = datetime.now() + user = cls.get_user_session() + + Helper_App.console_log(f'saving links: {links}') + + rows = [] + for link in links: + row = Command_Button_Link_Temp.from_command_button_link(link) + row.guid = guid + rows.append(row) + + cls.upload_bulk(Command_Button_Link_Temp.__tablename__, rows, 1000) + + Helper_App.console_log('Links uploaded') + + argument_dict_list = { + 'a_comment': comment, + 'a_guid': guid, + 'a_id_user': user.id_user, + 'a_debug': 0 + } + result = cls.db_procedure_execute('p_dog_save_command_button_link', argument_dict_list) + + Helper_App.console_log('Command Button Links saved') + + # Errors + cursor = result.cursor + cursor.nextset() + result_set_e = cursor.fetchall() + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_db_record(row) for row in result_set_e] + for error in errors: + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") + + cls.db_cursor_clear(cursor) + return errors diff --git a/forms/dog/button_icon.py b/forms/dog/button_icon.py new file mode 100644 index 0000000..f2260bd --- /dev/null +++ b/forms/dog/button_icon.py @@ -0,0 +1,54 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Backend +Feature: Button_Icon Form + +Description: +Defines Flask-WTF form for handling user input on Button_Icons page. +""" + +# IMPORTS +# internal +from business_objects.base import Base +# from business_objects.dog.button_icon import Button_Icon # Circular +from helpers.helper_app import Helper_App +# from models.model_view_store import Model_View_Store # circular +# from models.model_view_base import Model_View_Base +from forms.base import Form_Base +import lib.argument_validation as av +# external +from flask import Flask, render_template, request, flash, redirect, url_for, current_app +from flask_wtf import FlaskForm +from wtforms import SelectField, BooleanField, StringField, SubmitField +from wtforms.validators import DataRequired, Email, ValidationError +import markupsafe +from flask_wtf.recaptcha import RecaptchaField +from abc import ABCMeta, abstractmethod +import json + +class Filters_Button_Icon(Form_Base): + search = StringField( + 'Search' + ) + active_only = BooleanField( + 'Active' + , default = True + ) + + @classmethod + def from_json(cls, json): + _m = f'{cls.__qualname__}.from_json' + Helper_App.console_log(f'{_m}\njson: {json}') + filters = cls() + filters.search.data = json[Base.FLAG_SEARCH] + filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json') + return filters + + def to_json(self): + return { + Base.FLAG_SEARCH: self.search.data + , Base.FLAG_ACTIVE_ONLY: self.active_only.data + } diff --git a/forms/dog/command_button_link.py b/forms/dog/command_button_link.py new file mode 100644 index 0000000..d43a270 --- /dev/null +++ b/forms/dog/command_button_link.py @@ -0,0 +1,103 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Backend +Feature: Dog Command Link Form + +Description: +Defines Flask-WTF form for handling user input on Dog Command Links page. +""" + +# IMPORTS +# internal +from business_objects.base import Base +from business_objects.dog.button_icon import Button_Icon +from business_objects.dog.button_shape import Button_Shape +from business_objects.dog.colour import Colour +from business_objects.dog.command_category import Command_Category +from business_objects.dog.command import Command +from business_objects.dog.dog import Dog +from business_objects.dog.location import Location +from business_objects.dog.obedience_level import Obedience_Level +from helpers.helper_app import Helper_App +# from models.model_view_store import Model_View_Store # circular +# from models.model_view_base import Model_View_Base +from forms.base import Form_Base +import lib.argument_validation as av +# external +from flask import Flask, render_template, request, flash, redirect, url_for, current_app +from flask_wtf import FlaskForm +from wtforms import SelectField, BooleanField, StringField, SubmitField +from wtforms.validators import DataRequired, Email, ValidationError +import markupsafe +from flask_wtf.recaptcha import RecaptchaField +from abc import ABCMeta, abstractmethod +import json + +class Filters_Command_Button_Link(Form_Base): + search = StringField( + 'Search' + ) + id_command_category = SelectField( + 'Command Category' + , choices = [Form_Base.get_select_option_all()] + , default = Form_Base.get_select_option_default_value() + ) + id_command = SelectField( + 'Command' + , choices = [Form_Base.get_select_option_all()] + , default = Form_Base.get_select_option_default_value() + ) + id_button_shape = SelectField( + 'Shape' + , choices = [Form_Base.get_select_option_all()] + , default = Form_Base.get_select_option_default_value() + ) + id_colour = SelectField( + 'Colour' + , choices = [Form_Base.get_select_option_all()] + , default = Form_Base.get_select_option_default_value() + ) + id_button_icon = SelectField( + 'Icon' + , choices = [Form_Base.get_select_option_all()] + , default = Form_Base.get_select_option_default_value() + ) + id_location = SelectField( + 'Location' + , choices = [Form_Base.get_select_option_all()] + , default = Form_Base.get_select_option_default_value() + ) + active_only = BooleanField( + 'Active' + , default = True + ) + + @classmethod + def from_json(cls, json): + _m = f'{cls.__qualname__}.from_json' + Helper_App.console_log(f'{_m}\njson: {json}') + filters = cls() + filters.search.data = json[Base.FLAG_SEARCH] + filters.id_command_category.data = json[Command_Category.ATTR_ID_COMMAND_CATEGORY] + filters.id_command.data = json[Command.ATTR_ID_COMMAND] + filters.id_button_shape.data = json[Button_Shape.ATTR_ID_BUTTON_SHAPE] + filters.id_colour.data = json[Colour.ATTR_ID_COLOUR] + filters.id_button_icon.data = json[Button_Icon.ATTR_ID_BUTTON_ICON] + filters.id_location.data = json[Location.ATTR_ID_LOCATION] + filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json') + return filters + + def to_json(self): + return { + Base.FLAG_SEARCH: self.search.data + , Command_Category.ATTR_ID_COMMAND_CATEGORY: self.id_command_category.data + , Command.ATTR_ID_COMMAND: self.id_command.data + , Button_Shape.ATTR_ID_BUTTON_SHAPE: self.id_button_shape.data + , Colour.ATTR_ID_COLOUR: self.id_colour.data + , Button_Icon.ATTR_ID_BUTTON_ICON: self.id_button_icon.data + , Location.ATTR_ID_LOCATION: self.id_location.data + , Base.FLAG_ACTIVE_ONLY: self.active_only.data + } diff --git a/models/model_view_base.py b/models/model_view_base.py index 069feac..bbb4767 100644 --- a/models/model_view_base.py +++ b/models/model_view_base.py @@ -18,12 +18,18 @@ Base data model for views # internal # from routes import bp_home from business_objects.base import Base -from business_objects.dog.user import User +from business_objects.file_type import File_Type +from business_objects.dog.button_icon import Button_Icon +from business_objects.dog.button_shape import Button_Shape +from business_objects.dog.colour import Colour from business_objects.dog.command import Command +from business_objects.dog.command_button_link import Command_Button_Link from business_objects.dog.command_category import Command_Category from business_objects.dog.dog import Dog from business_objects.dog.dog_command_link import Dog_Command_Link +from business_objects.dog.image import Image from business_objects.dog.location import Location +from business_objects.dog.user import User from datastores.datastore_base import DataStore_Base from datastores.datastore_dog import DataStore_Dog from datastores.datastore_user import DataStore_User @@ -38,10 +44,16 @@ from typing import ClassVar class Model_View_Base(BaseModel, ABC): + ATTR_ID_BUTTON_ICON: ClassVar[str] = Button_Icon.ATTR_ID_BUTTON_ICON + ATTR_ID_BUTTON_SHAPE: ClassVar[str] = Button_Shape.ATTR_ID_BUTTON_SHAPE + ATTR_ID_COLOUR: ClassVar[str] = Colour.ATTR_ID_COLOUR ATTR_ID_COMMAND: ClassVar[str] = Command.ATTR_ID_COMMAND + ATTR_ID_COMMAND_BUTTON_LINK: ClassVar[str] = Command_Button_Link.ATTR_ID_COMMAND_BUTTON_LINK 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_ID_FILE_TYPE: ClassVar[str] = File_Type.ATTR_ID_FILE_TYPE + ATTR_ID_IMAGE: ClassVar[str] = Image.ATTR_ID_IMAGE ATTR_ID_LOCATION: ClassVar[str] = Location.ATTR_ID_LOCATION ATTR_TEXT_COLLAPSED: ClassVar[str] = 'textCollapsed' ATTR_TEXT_EXPANDED: ClassVar[str] = 'textExpanded' @@ -78,8 +90,10 @@ class Model_View_Base(BaseModel, ABC): FLAG_BOOL_FALSE: ClassVar[str] = 'false' FLAG_BOOL_TRUE: ClassVar[str] = 'true' FLAG_BUTTON: ClassVar[str] = 'button' + FLAG_BUTTON_ICON: ClassVar[str] = Button_Icon.FLAG_BUTTON_ICON FLAG_BUTTON_LIGHT: ClassVar[str] = 'button-light' FLAG_BUTTON_PRIMARY: ClassVar[str] = 'button-primary' + FLAG_BUTTON_SHAPE: ClassVar[str] = Button_Shape.FLAG_BUTTON_SHAPE FLAG_CANCEL: ClassVar[str] = 'button-cancel' FLAG_CALLBACK: ClassVar[str] = 'callback' FLAG_CAPTCHA: ClassVar[str] = 'captcha' @@ -88,7 +102,9 @@ class Model_View_Base(BaseModel, ABC): FLAG_CLOSE_TEMPORARY_ELEMENT: ClassVar[str] = 'button-temporary-element-close' FLAG_CODE: ClassVar[str] = Base.FLAG_CODE FLAG_COLLAPSIBLE: ClassVar[str] = 'collapsible' + FLAG_COLOUR: ClassVar[str] = Colour.FLAG_COLOUR FLAG_COMMAND: ClassVar[str] = Command.FLAG_COMMAND + FLAG_COMMAND_BUTTON_LINK: ClassVar[str] = Command_Button_Link.FLAG_COMMAND_BUTTON_LINK FLAG_COMMAND_CATEGORY: ClassVar[str] = Command_Category.FLAG_COMMAND_CATEGORY FLAG_COLUMN: ClassVar[str] = 'column' FLAG_COMMENT: ClassVar[str] = 'comment' @@ -135,11 +151,15 @@ class Model_View_Base(BaseModel, ABC): # FLAG_NAME_SINGULAR: ClassVar[str] = Base.FLAG_NAME_SINGULAR FLAG_NAV_ADMIN_HOME: ClassVar[str] = 'navAdminHome' FLAG_NAV_CONTACT: ClassVar[str] = 'navContact' + FLAG_NAV_DOG_BUTTON_ICONS: ClassVar[str] = 'navDogButtonIcons' + FLAG_NAV_DOG_COLOURS: ClassVar[str] = 'navDogColours' + FLAG_NAV_DOG_COMMAND_BUTTON_LINKS: ClassVar[str] = 'navDogCommandButtonLinks' FLAG_NAV_DOG_COMMAND_CATEGORIES: ClassVar[str] = 'navDogCommandCategories' FLAG_NAV_DOG_COMMANDS: ClassVar[str] = 'navDogCommands' FLAG_NAV_DOG_DOGS: ClassVar[str] = 'navDogDogs' FLAG_NAV_DOG_DOG_COMMAND_LINKS: ClassVar[str] = 'navDogDogCommandLinks' FLAG_NAV_DOG_HOME: ClassVar[str] = 'navDogHome' + FLAG_NAV_DOG_LOCATIONS: ClassVar[str] = 'navDogLocations' FLAG_NAV_HOME: ClassVar[str] = 'navHome' FLAG_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount' FLAG_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin' @@ -170,6 +190,8 @@ class Model_View_Base(BaseModel, ABC): HASH_PAGE_CONTACT: ClassVar[str] = '/contact' HASH_PAGE_CONTACT_SUCCESS: ClassVar[str] = '/contact-success' HASH_PAGE_DATA_RETENTION_SCHEDULE: ClassVar[str] = '/retention-schedule' + HASH_PAGE_DOG_BUTTON_ICONS: ClassVar[str] = '/dog/button-icons' + HASH_PAGE_DOG_COMMAND_BUTTON_LINKS: ClassVar[str] = '/dog/command-button-links' HASH_PAGE_DOG_COMMAND_CATEGORIES: ClassVar[str] = '/dog/command-categories' HASH_PAGE_DOG_COMMANDS: ClassVar[str] = '/dog/commands' HASH_PAGE_DOG_DOG_COMMAND_LINKS: ClassVar[str] = '/dog/dog-command-links' @@ -183,7 +205,10 @@ class Model_View_Base(BaseModel, ABC): HASH_PAGE_USER_ACCOUNT: ClassVar[str] = '/user' HASH_PAGE_USER_LOGIN: ClassVar[str] = '/login' HASH_PAGE_USER_LOGOUT: ClassVar[str] = '/logout' + HASH_SAVE_DOG_BUTTON_ICON: ClassVar[str] = '/dog/save-button-icon' + HASH_SAVE_DOG_COLOUR: ClassVar[str] = '/dog/save-colour' HASH_SAVE_DOG_COMMAND: ClassVar[str] = '/dog/save-command' + HASH_SAVE_DOG_COMMAND_BUTTON_LINK: ClassVar[str] = '/dog/save-command-button-link' HASH_SAVE_DOG_COMMAND_CATEGORY: ClassVar[str] = '/dog/save-command-category' HASH_SAVE_DOG_DOG_COMMAND_LINK: ClassVar[str] = '/dog/save-dog-command-link' HASH_SAVE_DOG_LOCATION: ClassVar[str] = '/dog/save-location' diff --git a/models/model_view_dog_button_icon.py b/models/model_view_dog_button_icon.py new file mode 100644 index 0000000..1c897cc --- /dev/null +++ b/models/model_view_dog_button_icon.py @@ -0,0 +1,53 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: View Models +Feature: Dog Button_Icons View Model + +Description: +Data model for dog button_icons view +""" + +# internal +from business_objects.dog.button_icon import Button_Icon, Parameters_Button_Icon +from datastores.datastore_dog import DataStore_Dog +from models.model_view_dog_base import Model_View_Dog_Base +from forms.dog.button_icon import Filters_Button_Icon +# from routes import bp_home +from helpers.helper_app import Helper_App +import lib.argument_validation as av + +# external +from pydantic import BaseModel +from typing import ClassVar + +class Model_View_Dog_Button_Icon(Model_View_Dog_Base): + button_icons: list = None + form_filters: Filters_Button_Icon = None + form_filters_old: Filters_Button_Icon + + @property + def title(self): + return 'Button Icon' + + def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_BUTTON_ICONS): + _m = 'Model_View_Dog_Button_Icon.__init__' + Helper_App.console_log(f'{_m}\nstarting...') + super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old) + self.form_filters = form_filters_old + datastore = DataStore_Dog() + + Helper_App.console_log(f'Form filters: {self.form_filters}') + parameters_filter_button_icon = Parameters_Button_Icon.from_form_filters_button_icon(self.form_filters) + Helper_App.console_log(f'Query args: {parameters_filter_button_icon}') + self.button_icons, errors = datastore.get_many_button_icon(parameters_filter_button_icon) + + + """ + @classmethod + def save_categories(cls, comment, list_categories): + _m = f'{cls.__name__}.save_categories' + return DataStore_Store_Product_Category().save_categories(comment, list_categories) + """ \ No newline at end of file diff --git a/models/model_view_dog_command_button_link.py b/models/model_view_dog_command_button_link.py new file mode 100644 index 0000000..8b9f25b --- /dev/null +++ b/models/model_view_dog_command_button_link.py @@ -0,0 +1,90 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: View Models +Feature: Dog Dog Command Link View Model + +Description: +Data model for dog dog command links view +""" + +# internal +from business_objects.dog.button_icon import Button_Icon, Parameters_Button_Icon +from business_objects.dog.button_shape import Button_Shape, Parameters_Button_Shape +from business_objects.dog.colour import Colour, Parameters_Colour +from business_objects.dog.command import Command, Parameters_Command +from business_objects.dog.dog import Dog, Parameters_Dog +from business_objects.dog.command_button_link import Command_Button_Link, Parameters_Command_Button_Link +from business_objects.dog.location import Location, Parameters_Location +from business_objects.dog.obedience_level import Obedience_Level +from datastores.datastore_dog import DataStore_Dog +from models.model_view_dog_base import Model_View_Dog_Base +from forms.dog.command_button_link import Filters_Command_Button_Link +# from routes import bp_home +from helpers.helper_app import Helper_App +import lib.argument_validation as av + +# external +from pydantic import BaseModel +from typing import ClassVar +from operator import attrgetter + +class Model_View_Dog_Command_Button_Link(Model_View_Dog_Base): + filter_command_categories: list = None + filter_commands: list = None + filter_button_shapes: list = None + filter_colours: list = None + filter_button_icons: list = None + filter_locations: list = None + command_button_links: list = None + form_filters: Filters_Command_Button_Link = None + form_filters_old: Filters_Command_Button_Link + + @property + def title(self): + return 'Command Button Link' + + def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_COMMAND_BUTTON_LINKS): + _m = 'Model_View_Dog_Command_Button_Link.__init__' + Helper_App.console_log(f'{_m}\nstarting...') + super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old) + self.form_filters = form_filters_old + datastore = DataStore_Dog() + + parameters_filter_command = Parameters_Command.get_default() + self.filter_command_categories, self.filter_commands, errors = datastore.get_many_command(parameters_filter_command) + if len(self.filter_command_categories) > 0: + self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories] + if len(self.filter_commands) > 0: + Helper_App.console_log(f'filter commands: {self.filter_commands}') + sorted_filter_commands = self.filter_commands + sorted_filter_commands.sort(key = attrgetter('name')) + Helper_App.console_log(f'sorted filter commands: {sorted_filter_commands}') + self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in sorted_filter_commands] # .sort(key = lambda command: command[1]) + + parameters_filter_button_shape = Parameters_Button_Shape.get_default() + self.filter_button_shapes, errors = datastore.get_many_button_shape(parameters_filter_button_shape) + if len(self.filter_button_shapes) > 0: + self.form_filters.id_button_shape.choices += [(str(button_shape.id_button_shape), button_shape.name) for button_shape in self.filter_button_shapes] + + parameters_filter_colour = Parameters_Colour.get_default() + self.filter_colours, errors = datastore.get_many_colour(parameters_filter_colour) + if len(self.filter_colours) > 0: + self.form_filters.id_colour.choices += [(str(colour.id_colour), colour.name) for colour in self.filter_colours] + + parameters_filter_button_icon = Parameters_Button_Icon.get_default() + self.filter_button_icons, errors = datastore.get_many_button_icon(parameters_filter_button_icon) + if len(self.filter_button_icons) > 0: + self.form_filters.id_button_icon.choices += [(str(button_icon.id_button_icon), button_icon.name) for button_icon in self.filter_button_icons] + + parameters_filter_location = Parameters_Location.get_default() + self.filter_locations, errors = datastore.get_many_location(parameters_filter_location) + if len(self.filter_locations) > 0: + self.form_filters.id_location.choices += [(str(location.id_location), location.name) for location in self.filter_locations] + + Helper_App.console_log(f'Form filters: {self.form_filters}') + parameters_command_button_link = Parameters_Command_Button_Link.from_form_filters_command_button_link(self.form_filters) + Helper_App.console_log(f'Query args: {parameters_command_button_link}') + self.command_button_links, errors = datastore.get_many_command_button_link(parameters_command_button_link) \ No newline at end of file diff --git a/models/model_view_dog_location.py b/models/model_view_dog_location.py index 31328cf..da81f4b 100644 --- a/models/model_view_dog_location.py +++ b/models/model_view_dog_location.py @@ -24,9 +24,6 @@ from pydantic import BaseModel from typing import ClassVar class Model_View_Dog_Location(Model_View_Dog_Base): - FLAG_CAN_HAVE_BUTTON: ClassVar[str] = Location.FLAG_CAN_HAVE_BUTTON - FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION: ClassVar[str] = Location.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION - filter_location_categories: list = None locations: list = None form_filters: Filters_Location = None form_filters_old: Filters_Location @@ -42,14 +39,10 @@ class Model_View_Dog_Location(Model_View_Dog_Base): self.form_filters = form_filters_old datastore = DataStore_Dog() - parameters_filter_location = Parameters_Location.get_default() - self.filter_location_categories, filter_locations, errors = datastore.get_many_location(parameters_filter_location) - self.form_filters.id_location_category.choices += [(str(location_category.id_location_category), location_category.name) for location_category in self.filter_location_categories] - Helper_App.console_log(f'Form filters: {self.form_filters}') parameters_filter_location = Parameters_Location.from_form_filters_location(self.form_filters) Helper_App.console_log(f'Query args: {parameters_filter_location}') - location_categories, self.locations, errors = datastore.get_many_location(parameters_filter_location) + self.locations, errors = datastore.get_many_location(parameters_filter_location) """ diff --git a/static/MySQL/00000_combined.sql b/static/MySQL/00000_combined.sql index 88a46d6..058ccf5 100644 --- a/static/MySQL/00000_combined.sql +++ b/static/MySQL/00000_combined.sql @@ -1,21 +1,28 @@ USE demo; -DROP PROCEDURE IF EXISTS demo.p_dog_get_many_location; +DROP PROCEDURE IF EXISTS demo.p_dog_get_many_button_icon; DELIMITER // -CREATE PROCEDURE demo.p_dog_get_many_location ( +CREATE PROCEDURE demo.p_dog_get_many_button_icon ( IN a_id_user INT - , IN a_get_all_location BIT - , IN a_get_inactive_location BIT - , IN a_ids_location TEXT - , IN a_names_location TEXT + , IN a_get_all_file_type BIT + , IN a_get_inactive_file_type BIT + , IN a_ids_file_type TEXT + , IN a_names_file_type TEXT + , IN a_get_all_image BIT + , IN a_get_inactive_image BIT + , IN a_ids_image TEXT + , IN a_names_image TEXT + , IN a_get_all_button_icon BIT + , IN a_get_inactive_button_icon BIT + , IN a_ids_button_icon TEXT + , IN a_names_button_icon TEXT + , IN a_notes_button_icon 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_LOCATIONS BIT - , IN a_output_LOCATION_links BIT , IN a_debug BIT ) BEGIN @@ -43,7 +50,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -88,34 +95,46 @@ BEGIN SET a_id_user := IFNULL(a_id_user, 0); /* - SET a_get_all_location := IFNULL(a_get_all_location, 0); - SET a_get_inactive_location := IFNULL(a_get_inactive_location, 0); - SET a_ids_location := TRIM(IFNULL(a_ids_location, '')); - SET a_names_location := TRIM(IFNULL(a_names_location, '')); - SET a_hand_signal_default_descriptions_location := TRIM(IFNULL(a_hand_signal_default_descriptions_location, '')); - SET a_notes_location := TRIM(IFNULL(a_notes_location, '')); + SET a_get_all_file_type := IFNULL(a_get_all_file_type, 0); + SET a_get_inactive_file_type := IFNULL(a_get_inactive_file_type, 0); + SET a_ids_file_type := TRIM(IFNULL(a_ids_file_type, '')); + SET a_names_file_type := TRIM(IFNULL(a_names_file_type, '')); + SET a_get_all_image := IFNULL(a_get_all_image, 0); + SET a_get_inactive_image := IFNULL(a_get_inactive_image, 0); + SET a_ids_image := TRIM(IFNULL(a_ids_image, '')); + SET a_names_image := TRIM(IFNULL(a_names_image, '')); + SET a_get_all_button_icon := IFNULL(a_get_all_button_icon, 0); + SET a_get_inactive_button_icon := IFNULL(a_get_inactive_button_icon, 0); + SET a_ids_button_icon := TRIM(IFNULL(a_ids_button_icon, '')); + SET a_names_button_icon := TRIM(IFNULL(a_names_button_icon, '')); + SET a_notes_button_icon := TRIM(IFNULL(a_notes_button_icon, '')); 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_LOCATIONS := IFNULL(a_output_LOCATIONS, 0); - SET a_output_LOCATION_links := IFNULL(a_output_LOCATION_links, 0); SET a_debug := IFNULL(a_debug, 0); IF a_debug = 1 THEN SELECT a_id_user - , a_get_all_location - , a_get_inactive_location - , a_ids_location - , a_names_location + , a_get_all_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , a_get_all_button_icon + , a_get_inactive_button_icon + , a_ids_button_icon + , a_names_button_icon + , a_notes_button_icon , 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_LOCATIONS - , a_output_LOCATION_links , a_debug ; @@ -129,23 +148,14 @@ BEGIN END IF; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; - DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link; - DROP TEMPORARY TABLE IF EXISTS tmp_Location; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; - CREATE TEMPORARY TABLE tmp_Location ( - id_location INT NOT NULL - , code VARCHAR(100) + CREATE TEMPORARY TABLE tmp_Button_Icon ( + id_button_icon INT NOT NULL + , id_image INT + , code VARCHAR(250) , name VARCHAR(250) - , active BIT - - , does_meet_id_filters BIT - , does_meet_non_id_filters BIT - ); - - CREATE TEMPORARY TABLE tmp_Location_Link ( - id_link INT NOT NULL - , id_location_parent INT - , id_location_child INT + , notes TEXT , active BIT , does_meet_id_filters BIT @@ -155,7 +165,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -226,7 +236,7 @@ BEGIN VALUES ( v_id_type_error_no_permission , v_code_type_error_no_permission - , 'You do not have permission to view Locations.' + , 'You do not have permission to view Button_Icons.' ) ; END IF; @@ -237,16 +247,25 @@ BEGIN ); - -- Call Location Calc + -- Call Button_Icon 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_location -- a_get_all_location - , a_get_inactive_location -- a_get_inactive_location - , a_ids_location -- a_ids_location - , a_names_location -- a_names_location + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , a_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , a_get_all_button_icon -- a_get_all_button_icon + , a_get_inactive_button_icon -- a_get_inactive_button_icon + , a_ids_button_icon -- a_ids_button_icon + , a_names_button_icon -- a_names_button_icon + , a_notes_button_icon -- a_notes_button_icon , 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 @@ -256,13 +275,22 @@ BEGIN ; END IF; - CALL demo.p_dog_calc_location ( + CALL demo.p_dog_calc_button_icon ( v_guid -- a_guid , a_id_user -- a_id_user - , a_get_all_location -- a_get_all_location - , a_get_inactive_location -- a_get_inactive_location - , a_ids_location -- a_ids_location - , a_names_location -- a_names_location + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , a_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , a_get_all_button_icon -- a_get_all_button_icon + , a_get_inactive_button_icon -- a_get_inactive_button_icon + , a_ids_button_icon -- a_ids_button_icon + , a_names_button_icon -- a_names_button_icon + , a_notes_button_icon -- a_notes_button_icon , 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 @@ -272,105 +300,69 @@ BEGIN ); IF a_debug = 1 THEN - SELECT COUNT(*) FROM demo.DOG_Location_Temp; - SELECT * FROM demo.DOG_Location_Temp; - SELECT COUNT(*) FROM demo.DOG_Location_Link_Temp; - SELECT * FROM demo.DOG_Location_Link_Temp; + SELECT COUNT(*) FROM demo.DOG_Button_Icon_Temp; + SELECT * FROM demo.DOG_Button_Icon_Temp; END IF; - INSERT INTO tmp_Location ( - id_location + INSERT INTO tmp_Button_Icon ( + id_button_icon + , id_image , code , name + , notes , active , does_meet_id_filters , does_meet_non_id_filters ) SELECT - LOCATION_T.id_location - , LOCATION_T.code - , LOCATION_T.name - , LOCATION_T.active + BUTTON_ICON_T.id_button_icon + , BUTTON_ICON_T.id_image + , BUTTON_ICON_T.code + , BUTTON_ICON_T.name + , BUTTON_ICON_T.notes + , BUTTON_ICON_T.active - , LOCATION_T.does_meet_id_filters - , LOCATION_T.does_meet_non_id_filters - FROM demo.DOG_Location_Temp LOCATION_T - WHERE LOCATION_T.GUID = v_guid - ; - - INSERT INTO tmp_Location_Link ( - id_link - , id_location_parent - , id_location_child - , active - - , does_meet_id_filters - , does_meet_non_id_filters - ) - SELECT - LOCATION_LINK_T.id_link - , LOCATION_LINK_T.id_location_parent - , LOCATION_LINK_T.id_location_child - , LOCATION_LINK_T.active - - , NULL AS does_meet_id_filters - , NULL AS does_meet_non_id_filters - FROM demo.DOG_Location_Link_Temp LOCATION_LINK_T - WHERE LOCATION_LINK_T.GUID = v_guid + , BUTTON_ICON_T.does_meet_id_filters + , BUTTON_ICON_T.does_meet_non_id_filters + FROM demo.DOG_Button_Icon_Temp BUTTON_ICON_T + WHERE BUTTON_ICON_T.GUID = v_guid ; IF a_debug = 1 THEN - SELECT COUNT(*) FROM tmp_Location; - SELECT * FROM tmp_Location; - SELECT COUNT(*) FROM tmp_Location_Link; - SELECT * FROM tmp_Location_Link; + SELECT COUNT(*) FROM tmp_Button_Icon; + SELECT * FROM tmp_Button_Icon; END IF; 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_Location; - SELECT * FROM tmp_Location_Link; + SELECT * FROM tmp_Button_Icon; END IF; - DELETE FROM tmp_Location_Link; - DELETE FROM tmp_Location; + DELETE FROM tmp_Button_Icon; END IF; -- Outputs - -- Locations - IF a_output_LOCATIONS = 1 THEN - SELECT - t_LOCATIONS.id_location - , t_LOCATIONS.code - , t_LOCATIONS.name - , t_LOCATIONS.active + -- Button_Icons + SELECT + t_BUTTON_ICONS.id_button_icon + , t_BUTTON_ICONS.id_image + , IMAGES.path AS path_image + , IMAGES.name AS name_image + , t_BUTTON_ICONS.code + , t_BUTTON_ICONS.name + , t_BUTTON_ICONS.notes + , t_BUTTON_ICONS.active - , t_LOCATIONS.does_meet_id_filters - , t_LOCATIONS.does_meet_non_id_filters - FROM tmp_Location t_LOCATIONS - ORDER BY t_LOCATIONS.name - ; - END IF; - - -- Location Links - IF a_output_LOCATION_links = 1 THEN - SELECT - t_LOCATION_LINK.id_link - , t_LOCATION_LINK.id_location_parent - , t_LOCATION_LINK.id_location_child - , t_LOCATION_LINK.active - - , t_LOCATION_LINK.does_meet_id_filters - , t_LOCATION_LINK.does_meet_non_id_filters - FROM tmp_Location_Link t_LOCATION_LINK - INNER JOIN tmp_Location t_LOCATIONS ON t_LOCATION_LINK.id_location_child = t_LOCATIONS.id_location - ORDER BY t_LOCATIONS.name - ; - END IF; + , t_BUTTON_ICONS.does_meet_id_filters + , t_BUTTON_ICONS.does_meet_non_id_filters + FROM tmp_Button_Icon t_BUTTON_ICONS + LEFT JOIN demo.DOG_Image IMAGES ON t_BUTTON_ICONS.id_image = IMAGES.id_image + ORDER BY t_BUTTON_ICONS.name + ; -- Errors SELECT @@ -388,17 +380,16 @@ BEGIN ; IF a_debug = 1 AND v_can_view = 1 THEN - SELECT * FROM tmp_Location; + SELECT * FROM tmp_Button_Icon; END IF; - CALL demo.p_dog_clear_calc_location( + CALL demo.p_dog_clear_calc_button_icon( v_guid -- a_guid , 0 -- a_debug ); DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; - DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link; - DROP TEMPORARY TABLE IF EXISTS tmp_Location; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; IF a_debug = 1 THEN CALL demo.p_core_debug_timing_reporting ( v_time_start ); @@ -408,35 +399,49 @@ DELIMITER ; -CALL demo.p_dog_get_many_location ( +CALL demo.p_dog_get_many_button_icon ( 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user - , 1 -- a_get_all_location - , 0 -- a_get_inactive_location - , '' -- a_ids_location - , '' -- a_names_location + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , '' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , '' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , '' -- a_names_button_icon + , '' -- a_notes_button_icon , 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_LOCATIONS - , 1 -- a_output_LOCATION_links - , 0 -- a_debug + , 1 -- a_debug ); -/* -CALL demo.p_dog_get_many_location ( +/* +CALL demo.p_dog_get_many_button_icon ( 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user - , 1 -- a_get_all_location - , 0 -- a_get_inactive_location - , '' -- a_ids_location - , 'pat,point' -- a_names_location + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , 'pat,point' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , 'pat,point' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , 'pat,point' -- a_names_button_icon + , 'pat,point' -- a_notes_button_icon , 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_LOCATIONS - , 1 -- a_output_LOCATION_links , 1 -- a_debug ); diff --git a/static/MySQL/10000_tbl_CORE_Msg_Error_Type.sql b/static/MySQL/10000_tbl_CORE_Msg_Error_Type.sql index f5cb3d8..337815c 100644 --- a/static/MySQL/10000_tbl_CORE_Msg_Error_Type.sql +++ b/static/MySQL/10000_tbl_CORE_Msg_Error_Type.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.CORE_Msg_Error_Type ( id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(500) NOT NULL , description VARCHAR(1000) , is_breaking_error BIT NOT NULL diff --git a/static/MySQL/10004_tbl_CORE_File_Type.sql b/static/MySQL/10004_tbl_CORE_File_Type.sql index 8b97b95..8d0aa29 100644 --- a/static/MySQL/10004_tbl_CORE_File_Type.sql +++ b/static/MySQL/10004_tbl_CORE_File_Type.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.CORE_File_Type ( id_file_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , is_image BIT NOT NULL DEFAULT 0 , active BIT NOT NULL DEFAULT 1 diff --git a/static/MySQL/10504_tbl_DOG_Access_Level.sql b/static/MySQL/10504_tbl_DOG_Access_Level.sql index a36a6a1..0eb8caf 100644 --- a/static/MySQL/10504_tbl_DOG_Access_Level.sql +++ b/static/MySQL/10504_tbl_DOG_Access_Level.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Access_Level ( id_access_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , priority INT NOT NULL , display_order INT NOT NULL diff --git a/static/MySQL/10508_tbl_DOG_Permission_Group.sql b/static/MySQL/10508_tbl_DOG_Permission_Group.sql index 506031d..2583523 100644 --- a/static/MySQL/10508_tbl_DOG_Permission_Group.sql +++ b/static/MySQL/10508_tbl_DOG_Permission_Group.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Permission_Group ( id_group INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , display_order INT NOT NULL , active BIT NOT NULL DEFAULT 1 diff --git a/static/MySQL/10512_tbl_DOG_Permission.sql b/static/MySQL/10512_tbl_DOG_Permission.sql index 8dba507..d4d6be1 100644 --- a/static/MySQL/10512_tbl_DOG_Permission.sql +++ b/static/MySQL/10512_tbl_DOG_Permission.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Permission ( id_permission INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , id_permission_group INT NOT NULL , CONSTRAINT FK_DOG_Permission_id_permission_group diff --git a/static/MySQL/10520_tbl_DOG_Role.sql b/static/MySQL/10520_tbl_DOG_Role.sql index 70be93d..c7c9be8 100644 --- a/static/MySQL/10520_tbl_DOG_Role.sql +++ b/static/MySQL/10520_tbl_DOG_Role.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Role ( id_role INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , display_order INT NOT NULL , active BIT NOT NULL DEFAULT 1 diff --git a/static/MySQL/11005_tbl_DOG_Breed.sql b/static/MySQL/11005_tbl_DOG_Breed.sql index 298c693..bffced7 100644 --- a/static/MySQL/11005_tbl_DOG_Breed.sql +++ b/static/MySQL/11005_tbl_DOG_Breed.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Breed ( id_breed INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11007_tbl_DOG_Breed_Temp.sql b/static/MySQL/11007_tbl_DOG_Breed_Temp.sql index e60db87..132a33c 100644 --- a/static/MySQL/11007_tbl_DOG_Breed_Temp.sql +++ b/static/MySQL/11007_tbl_DOG_Breed_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Breed_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_breed INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11030_tbl_DOG_Drive.sql b/static/MySQL/11030_tbl_DOG_Drive.sql index f344727..02ee26e 100644 --- a/static/MySQL/11030_tbl_DOG_Drive.sql +++ b/static/MySQL/11030_tbl_DOG_Drive.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Drive ( id_drive INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11032_tbl_DOG_Drive_Temp.sql b/static/MySQL/11032_tbl_DOG_Drive_Temp.sql index e5b274e..374f3af 100644 --- a/static/MySQL/11032_tbl_DOG_Drive_Temp.sql +++ b/static/MySQL/11032_tbl_DOG_Drive_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Drive_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_drive INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11100_tbl_DOG_Command_Category.sql b/static/MySQL/11100_tbl_DOG_Command_Category.sql index 8c029f9..ff68689 100644 --- a/static/MySQL/11100_tbl_DOG_Command_Category.sql +++ b/static/MySQL/11100_tbl_DOG_Command_Category.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Command_Category ( id_command_category INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11102_tbl_DOG_Command_Category_Temp.sql b/static/MySQL/11102_tbl_DOG_Command_Category_Temp.sql index cc6fc0c..0c4c3d4 100644 --- a/static/MySQL/11102_tbl_DOG_Command_Category_Temp.sql +++ b/static/MySQL/11102_tbl_DOG_Command_Category_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Command_Category_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_command_category INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11111_tbl_DOG_Command_Modality.sql b/static/MySQL/11111_tbl_DOG_Command_Modality.sql index 7b34cd5..1e2d595 100644 --- a/static/MySQL/11111_tbl_DOG_Command_Modality.sql +++ b/static/MySQL/11111_tbl_DOG_Command_Modality.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Command_Modality ( id_command_modality INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql b/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql index df6c2c7..2a6c2c9 100644 --- a/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql +++ b/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Command_Modality_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_command_modality INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11200_tbl_DOG_Location.sql b/static/MySQL/11200_tbl_DOG_Location.sql index f2db331..9d7d72d 100644 --- a/static/MySQL/11200_tbl_DOG_Location.sql +++ b/static/MySQL/11200_tbl_DOG_Location.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Location ( id_location INT NOT NULL AUTO_INCREMENT PRIMARY KEY , id_locaiton_parent INT - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11202_tbl_DOG_Location_Temp.sql b/static/MySQL/11202_tbl_DOG_Location_Temp.sql index e3b39c5..4ef8b2d 100644 --- a/static/MySQL/11202_tbl_DOG_Location_Temp.sql +++ b/static/MySQL/11202_tbl_DOG_Location_Temp.sql @@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Location_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_location INT , id_location_parent INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT diff --git a/static/MySQL/11220_tbl_DOG_Button_Shape.sql b/static/MySQL/11220_tbl_DOG_Button_Shape.sql index cebceaa..531f82d 100644 --- a/static/MySQL/11220_tbl_DOG_Button_Shape.sql +++ b/static/MySQL/11220_tbl_DOG_Button_Shape.sql @@ -10,9 +10,9 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Button_Shape ( id_button_shape INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL - , description TEXT + , notes TEXT , active BIT NOT NULL DEFAULT 1 , created_on DATETIME , id_user_created_by INT diff --git a/static/MySQL/11222_tbl_DOG_Button_Shape_Temp.sql b/static/MySQL/11222_tbl_DOG_Button_Shape_Temp.sql index 2c1b783..46ee805 100644 --- a/static/MySQL/11222_tbl_DOG_Button_Shape_Temp.sql +++ b/static/MySQL/11222_tbl_DOG_Button_Shape_Temp.sql @@ -11,9 +11,13 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Button_Shape_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_button_shape INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) - , description TEXT + , notes TEXT , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11224_tbl_DOG_Colour.sql b/static/MySQL/11224_tbl_DOG_Colour.sql index c246452..d6274f5 100644 --- a/static/MySQL/11224_tbl_DOG_Colour.sql +++ b/static/MySQL/11224_tbl_DOG_Colour.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Colour ( id_colour INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11226_tbl_DOG_Colour_Temp.sql b/static/MySQL/11226_tbl_DOG_Colour_Temp.sql index 4153b41..865b8be 100644 --- a/static/MySQL/11226_tbl_DOG_Colour_Temp.sql +++ b/static/MySQL/11226_tbl_DOG_Colour_Temp.sql @@ -11,8 +11,12 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Colour_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_colour INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11228_tbl_DOG_Image.sql b/static/MySQL/11228_tbl_DOG_Image.sql index 3e36b47..34c0434 100644 --- a/static/MySQL/11228_tbl_DOG_Image.sql +++ b/static/MySQL/11228_tbl_DOG_Image.sql @@ -19,6 +19,7 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Image ( FOREIGN KEY (id_dog) REFERENCES parts.DOG_Dog(id_dog) , path VARCHAR(1024) NOT NULL + , name VARCHAR(1024) NOT NULL , display_order INT , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11230_tbl_DOG_Image_Temp.sql b/static/MySQL/11230_tbl_DOG_Image_Temp.sql index edfddf4..4711052 100644 --- a/static/MySQL/11230_tbl_DOG_Image_Temp.sql +++ b/static/MySQL/11230_tbl_DOG_Image_Temp.sql @@ -14,7 +14,12 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Image_Temp ( , id_file_type INT NOT NULL , id_dog INT , path VARCHAR(1024) NOT NULL + , name VARCHAR(1024) NOT NULL , display_order INT , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11232_tbl_DOG_Button_Icon.sql b/static/MySQL/11232_tbl_DOG_Button_Icon.sql index 668fa8d..56660c2 100644 --- a/static/MySQL/11232_tbl_DOG_Button_Icon.sql +++ b/static/MySQL/11232_tbl_DOG_Button_Icon.sql @@ -14,9 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Button_Icon ( , CONSTRAINT FK_DOG_Button_Icon_id_image FOREIGN KEY (id_image) REFERENCES parts.DOG_Image(id_image) - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL - , description TEXT + , notes TEXT , active BIT NOT NULL DEFAULT 1 , created_on DATETIME , id_user_created_by INT diff --git a/static/MySQL/11234_tbl_DOG_Button_Icon_Temp.sql b/static/MySQL/11234_tbl_DOG_Button_Icon_Temp.sql index e07bc2d..caf6001 100644 --- a/static/MySQL/11234_tbl_DOG_Button_Icon_Temp.sql +++ b/static/MySQL/11234_tbl_DOG_Button_Icon_Temp.sql @@ -12,9 +12,13 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Button_Icon_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_button_icon INT , id_image INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) - , description TEXT + , notes TEXT , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11238_tbl_DOG_Command_Button_Link_Temp.sql b/static/MySQL/11238_tbl_DOG_Command_Button_Link_Temp.sql index cdf410a..016d35e 100644 --- a/static/MySQL/11238_tbl_DOG_Command_Button_Link_Temp.sql +++ b/static/MySQL/11238_tbl_DOG_Command_Button_Link_Temp.sql @@ -18,5 +18,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Command_Button_Link_Temp ( , id_location INT , has_button BIT , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11300_tbl_DOG_Weather.sql b/static/MySQL/11300_tbl_DOG_Weather.sql index a2f4746..157a0d3 100644 --- a/static/MySQL/11300_tbl_DOG_Weather.sql +++ b/static/MySQL/11300_tbl_DOG_Weather.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Weather ( id_weather INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11302_tbl_DOG_Weather_Temp.sql b/static/MySQL/11302_tbl_DOG_Weather_Temp.sql index 884efc5..e38ff88 100644 --- a/static/MySQL/11302_tbl_DOG_Weather_Temp.sql +++ b/static/MySQL/11302_tbl_DOG_Weather_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Weather_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_weather INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11304_tbl_DOG_Lighting_Level.sql b/static/MySQL/11304_tbl_DOG_Lighting_Level.sql index 61e3bac..2e2168e 100644 --- a/static/MySQL/11304_tbl_DOG_Lighting_Level.sql +++ b/static/MySQL/11304_tbl_DOG_Lighting_Level.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Lighting_Level ( id_lighting_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql b/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql index c27b4cc..574dc98 100644 --- a/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql +++ b/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Lighting_Level_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_lighting_level INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11312_tbl_DOG_Distraction_Type.sql b/static/MySQL/11312_tbl_DOG_Distraction_Type.sql index 127b09d..2b6c5eb 100644 --- a/static/MySQL/11312_tbl_DOG_Distraction_Type.sql +++ b/static/MySQL/11312_tbl_DOG_Distraction_Type.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Type ( id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql b/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql index dee6859..359b077 100644 --- a/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql +++ b/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Type_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_type INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11316_tbl_DOG_Distraction_Intensity_Level.sql b/static/MySQL/11316_tbl_DOG_Distraction_Intensity_Level.sql index 544beb8..ecfb2a0 100644 --- a/static/MySQL/11316_tbl_DOG_Distraction_Intensity_Level.sql +++ b/static/MySQL/11316_tbl_DOG_Distraction_Intensity_Level.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Intensity_Level ( id_intensity_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql b/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql index a489805..ea77607 100644 --- a/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql +++ b/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Intensity_Level_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_intensity_level INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11324_tbl_DOG_Bribe.sql b/static/MySQL/11324_tbl_DOG_Bribe.sql index 1d57568..fe54a6d 100644 --- a/static/MySQL/11324_tbl_DOG_Bribe.sql +++ b/static/MySQL/11324_tbl_DOG_Bribe.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Bribe ( id_bribe INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql b/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql index 14e83e2..b026f08 100644 --- a/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql +++ b/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Bribe_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_bribe INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/11332_tbl_DOG_Response_Quality_Metric.sql b/static/MySQL/11332_tbl_DOG_Response_Quality_Metric.sql index 669c2ae..8e1e478 100644 --- a/static/MySQL/11332_tbl_DOG_Response_Quality_Metric.sql +++ b/static/MySQL/11332_tbl_DOG_Response_Quality_Metric.sql @@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Response_Quality_Metric ( , CONSTRAINT FK_DOG_Response_Quality_Metric_id_unit_measurement FOREIGN KEY (id_unit_measurement) REFERENCES parts.DOG_Unit_Measurement(id_unit_measurement) - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , value_min DOUBLE , value_max DOUBLE diff --git a/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql b/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql index 18ce3e6..3df8254 100644 --- a/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql +++ b/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql @@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Response_Quality_Metric_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_metric INT , id_unit_measurement INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , value_min DOUBLE , value_max DOUBLE diff --git a/static/MySQL/11336_tbl_DOG_Obedience_Level.sql b/static/MySQL/11336_tbl_DOG_Obedience_Level.sql index 08b531c..1455153 100644 --- a/static/MySQL/11336_tbl_DOG_Obedience_Level.sql +++ b/static/MySQL/11336_tbl_DOG_Obedience_Level.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Obedience_Level ( id_obedience_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql b/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql index fc9aab4..9825b9b 100644 --- a/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql +++ b/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Obedience_Level_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_obedience_level INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/31228_tri_DOG_Image.sql b/static/MySQL/31228_tri_DOG_Image.sql index 83fa7c4..dab724a 100644 --- a/static/MySQL/31228_tri_DOG_Image.sql +++ b/static/MySQL/31228_tri_DOG_Image.sql @@ -42,6 +42,10 @@ BEGIN SELECT NEW.id_image, 'path', OLD.path, NEW.path, NEW.id_change_set WHERE NOT (OLD.path <=> NEW.path) UNION + -- Changed name + SELECT NEW.id_image, 'name', OLD.name, NEW.name, NEW.id_change_set + WHERE NOT (OLD.name <=> NEW.name) + UNION -- Changed display_order SELECT NEW.id_image, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set WHERE NOT (OLD.display_order <=> NEW.display_order) diff --git a/static/MySQL/31232_tri_DOG_Button_Icon.sql b/static/MySQL/31232_tri_DOG_Button_Icon.sql index ff1fa62..49a301c 100644 --- a/static/MySQL/31232_tri_DOG_Button_Icon.sql +++ b/static/MySQL/31232_tri_DOG_Button_Icon.sql @@ -42,9 +42,9 @@ BEGIN SELECT NEW.id_button_icon, 'name', OLD.name, NEW.name, NEW.id_change_set WHERE NOT (OLD.name <=> NEW.name) UNION - -- Changed description - SELECT NEW.id_button_icon, 'description', OLD.description, NEW.description, NEW.id_change_set - WHERE NOT (OLD.description <=> NEW.description) + -- Changed notes + SELECT NEW.id_button_icon, 'notes', OLD.notes, NEW.notes, NEW.id_change_set + WHERE NOT (OLD.notes <=> NEW.notes) UNION -- Changed active SELECT NEW.id_button_icon, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set diff --git a/static/MySQL/70516_p_dog_create_new_user_auth0.sql b/static/MySQL/70516_p_dog_create_new_user_auth0.sql index 80da5c4..139c6e3 100644 --- a/static/MySQL/70516_p_dog_create_new_user_auth0.sql +++ b/static/MySQL/70516_p_dog_create_new_user_auth0.sql @@ -45,7 +45,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -122,7 +122,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/70516_p_dog_get_many_user.sql b/static/MySQL/70516_p_dog_get_many_user.sql index aa254e2..125e131 100644 --- a/static/MySQL/70516_p_dog_get_many_user.sql +++ b/static/MySQL/70516_p_dog_get_many_user.sql @@ -53,7 +53,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -164,7 +164,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/70518_p_dog_save_user.sql b/static/MySQL/70518_p_dog_save_user.sql index 96488a2..aee02d0 100644 --- a/static/MySQL/70518_p_dog_save_user.sql +++ b/static/MySQL/70518_p_dog_save_user.sql @@ -33,7 +33,7 @@ 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(100) NOT NULL + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); INSERT INTO tmp_Msg_Error ( @@ -81,7 +81,7 @@ BEGIN CREATE TABLE tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, id_type INT NOT NULL, - code VARCHAR(100) NOT NULL, + code VARCHAR(250) NOT NULL, msg TEXT NOT NULL ); diff --git a/static/MySQL/70530_p_dog_calc_user.sql b/static/MySQL/70530_p_dog_calc_user.sql index d5328c9..9f4ceca 100644 --- a/static/MySQL/70530_p_dog_calc_user.sql +++ b/static/MySQL/70530_p_dog_calc_user.sql @@ -54,7 +54,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -170,7 +170,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/71001_p_dog_calc_dog.sql b/static/MySQL/71001_p_dog_calc_dog.sql index aff66d1..626866f 100644 --- a/static/MySQL/71001_p_dog_calc_dog.sql +++ b/static/MySQL/71001_p_dog_calc_dog.sql @@ -44,7 +44,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -138,7 +138,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/71001_p_dog_get_many_dog.sql b/static/MySQL/71001_p_dog_get_many_dog.sql index 34b17fc..ba8daa4 100644 --- a/static/MySQL/71001_p_dog_get_many_dog.sql +++ b/static/MySQL/71001_p_dog_get_many_dog.sql @@ -41,7 +41,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -138,7 +138,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/71003_p_dog_save_command.sql b/static/MySQL/71003_p_dog_save_command.sql index 8e8bac4..7c51fd2 100644 --- a/static/MySQL/71003_p_dog_save_command.sql +++ b/static/MySQL/71003_p_dog_save_command.sql @@ -35,7 +35,7 @@ BEGIN 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) + , code VARCHAR(250) , msg TEXT NOT NULL ); @@ -115,7 +115,7 @@ BEGIN 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) + , code VARCHAR(250) , msg TEXT NOT NULL ); diff --git a/static/MySQL/71102_p_dog_save_command_category.sql b/static/MySQL/71102_p_dog_save_command_category.sql index ffeab17..48703d3 100644 --- a/static/MySQL/71102_p_dog_save_command_category.sql +++ b/static/MySQL/71102_p_dog_save_command_category.sql @@ -33,7 +33,7 @@ BEGIN 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) + , code VARCHAR(250) , msg TEXT NOT NULL ); @@ -83,7 +83,7 @@ BEGIN CREATE TEMPORARY TABLE tmp_Command_Category ( id_temp INT , id_command_category INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , is_new BIT @@ -93,7 +93,7 @@ BEGIN CREATE TEMPORARY TABLE tmp_Command_Category_Copy ( id_temp INT , id_command_category INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , is_new BIT @@ -103,7 +103,7 @@ BEGIN 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) + , code VARCHAR(250) , msg TEXT NOT NULL ); diff --git a/static/MySQL/71104_p_dog_calc_command.sql b/static/MySQL/71104_p_dog_calc_command.sql index 4ef69dc..bb6f444 100644 --- a/static/MySQL/71104_p_dog_calc_command.sql +++ b/static/MySQL/71104_p_dog_calc_command.sql @@ -54,7 +54,7 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Command ( id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_type INT NULL - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -172,7 +172,7 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Command ( id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_type INT NULL - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/71104_p_dog_get_many_command.sql b/static/MySQL/71104_p_dog_get_many_command.sql index 2f35ce9..3fa4716 100644 --- a/static/MySQL/71104_p_dog_get_many_command.sql +++ b/static/MySQL/71104_p_dog_get_many_command.sql @@ -49,7 +49,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -150,7 +150,7 @@ BEGIN CREATE TEMPORARY TABLE tmp_Command_Category ( id_command_category INT NOT NULL - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT @@ -174,7 +174,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/71108_p_dog_get_many_dog_command_link.sql b/static/MySQL/71108_p_dog_get_many_dog_command_link.sql index 0eca26b..5e3480e 100644 --- a/static/MySQL/71108_p_dog_get_many_dog_command_link.sql +++ b/static/MySQL/71108_p_dog_get_many_dog_command_link.sql @@ -69,7 +69,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -234,7 +234,7 @@ BEGIN CREATE TEMPORARY TABLE tmp_Command_Category ( id_command_category INT NOT NULL - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT @@ -258,7 +258,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -368,9 +368,9 @@ BEGIN , 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 + , 0 -- 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_require_any_non_id_search_filters_met , 0 -- a_show_errors , 0 -- a_debug ; @@ -732,7 +732,7 @@ BEGIN ( a_require_all_id_search_filters_met = 1 AND ( - IFNULL(t_DOG_COMMAND_LINK.does_meet_id_filters, 0) = 0 + t_DOG_COMMAND_LINK.does_meet_id_filters = 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 @@ -741,7 +741,7 @@ BEGIN OR ( a_require_all_non_id_search_filters_met = 1 AND ( - IFNULL(t_DOG_COMMAND_LINK.does_meet_non_id_filters, 0) = 0 + t_DOG_COMMAND_LINK.does_meet_non_id_filters = 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 @@ -749,14 +749,14 @@ BEGIN ) OR ( a_require_any_id_search_filters_met = 1 - AND IFNULL(t_DOG_COMMAND_LINK.does_meet_id_filters, 0) = 0 + AND t_DOG_COMMAND_LINK.does_meet_id_filters = 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 t_DOG_COMMAND_LINK.does_meet_non_id_filters = 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 @@ -840,6 +840,9 @@ BEGIN SELECT * FROM tmp_Command; SELECT * FROM tmp_Command_Category; END IF; + + CALL parts.p_dog_clear_calc_dog ( v_guid, 0 ); + CALL parts.p_dog_clear_calc_command ( v_guid, 0 ); 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; diff --git a/static/MySQL/71110_p_dog_save_dog_command_link.sql b/static/MySQL/71110_p_dog_save_dog_command_link.sql index 6d34f67..32ef969 100644 --- a/static/MySQL/71110_p_dog_save_dog_command_link.sql +++ b/static/MySQL/71110_p_dog_save_dog_command_link.sql @@ -33,7 +33,7 @@ BEGIN 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) + , code VARCHAR(250) , msg TEXT NOT NULL ); @@ -107,7 +107,7 @@ BEGIN 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) + , code VARCHAR(250) , msg TEXT NOT NULL ); diff --git a/static/MySQL/71200_p_dog_calc_location.sql b/static/MySQL/71200_p_dog_calc_location.sql index 94c7840..b4ce12c 100644 --- a/static/MySQL/71200_p_dog_calc_location.sql +++ b/static/MySQL/71200_p_dog_calc_location.sql @@ -44,7 +44,7 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Location ( id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_type INT NULL - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -133,6 +133,7 @@ BEGIN CREATE TEMPORARY TABLE tmp_Location_Calc_Location ( id_location INT NOT NULL + , id_location_parent INT , does_meet_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL , csv_id_locations_parent TEXT @@ -151,7 +152,7 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Location ( id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_type INT NULL - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -317,6 +318,7 @@ BEGIN END IF; INSERT INTO tmp_Location_Calc_Location ( id_location + , id_location_parent , does_meet_id_filters , does_meet_non_id_filters ) @@ -356,6 +358,7 @@ BEGIN ) SELECT LOCATIONS.id_location + , LOCATIONS.id_location_parent , CASE WHEN v_has_filter_location_id = 0 OR IFNULL(LOCATIONS_FILTERS.does_meet_id_filter, 0) = 1 @@ -555,6 +558,7 @@ BEGIN INSERT INTO parts.DOG_Location_Temp ( guid , id_location + , id_location_parent , code , name , active @@ -567,6 +571,7 @@ BEGIN SELECT a_guid , t_LOCATIONS.id_location + , t_LOCATIONS.id_location_parent , LOCATIONS.code , LOCATIONS.name , LOCATIONS.active @@ -619,7 +624,7 @@ DELIMITER ; CALL parts.p_dog_calc_location ( - 'slops ' -- a_guid + 'grops ' -- a_guid , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user , 1 -- a_get_all_location , 0 -- a_get_inactive_location @@ -634,7 +639,7 @@ CALL parts.p_dog_calc_location ( ); CALL parts.p_dog_calc_location ( - 'slops ' -- a_guid + 'grops ' -- a_guid , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user , 1 -- a_get_all_location , 0 -- a_get_inactive_location @@ -659,7 +664,7 @@ WHERE ; */ CALL parts.p_dog_clear_calc_location ( - 'slips ' -- a_guid + 'grops ' -- a_guid , 1 -- debug ); diff --git a/static/MySQL/71200_p_dog_get_many_location.sql b/static/MySQL/71200_p_dog_get_many_location.sql index 3e19826..960ef81 100644 --- a/static/MySQL/71200_p_dog_get_many_location.sql +++ b/static/MySQL/71200_p_dog_get_many_location.sql @@ -42,7 +42,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -130,7 +130,8 @@ BEGIN CREATE TEMPORARY TABLE tmp_Location ( id_location INT NOT NULL - , code VARCHAR(100) + , id_location_parent INT + , code VARCHAR(250) , name VARCHAR(250) , active BIT @@ -141,7 +142,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -264,6 +265,7 @@ BEGIN INSERT INTO tmp_Location ( id_location + , id_location_parent , code , name , active @@ -273,6 +275,7 @@ BEGIN ) SELECT LOCATION_T.id_location + , LOCATION_T.id_location_parent , LOCATION_T.code , LOCATION_T.name , LOCATION_T.active @@ -304,6 +307,8 @@ BEGIN IF a_output_LOCATIONS = 1 THEN SELECT t_LOCATIONS.id_location + , t_LOCATIONS.id_location_parent + , LOCATION_PARENT.name AS name_location_parent , t_LOCATIONS.code , t_LOCATIONS.name , t_LOCATIONS.active @@ -311,7 +316,10 @@ BEGIN , t_LOCATIONS.does_meet_id_filters , t_LOCATIONS.does_meet_non_id_filters FROM tmp_Location t_LOCATIONS - ORDER BY t_LOCATIONS.name + LEFT JOIN parts.DOG_Location LOCATION_PARENT ON t_LOCATIONS.id_location_parent = LOCATION_PARENT.id_location + ORDER BY + LOCATION_PARENT.name + , t_LOCATIONS.name ; END IF; diff --git a/static/MySQL/71202_p_dog_save_location.sql b/static/MySQL/71202_p_dog_save_location.sql new file mode 100644 index 0000000..105c4a6 --- /dev/null +++ b/static/MySQL/71202_p_dog_save_location.sql @@ -0,0 +1,594 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_save_location; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_save_location ( + IN a_comment VARCHAR(500), + IN a_guid BINARY(36), + IN a_id_user INT, + IN a_debug BIT +) +BEGIN + DECLARE v_can_admin BIT; + DECLARE v_can_create BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_id_access_level_edit INT; + DECLARE v_id_change_set 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 + 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(250) + , 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 SESSION group_concat_max_len=15000; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + 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_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1); + SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1); + + CALL parts.p_core_validate_guid ( a_guid ); + + DROP TABLE IF EXISTS tmp_Location_Copy; + DROP TABLE IF EXISTS tmp_Location; + + CREATE TEMPORARY TABLE tmp_Location ( + id_temp INT + , id_location INT + , id_location_parent INT + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , is_new BIT + , name_error VARCHAR(250) + ); + + CREATE TEMPORARY TABLE tmp_Location_Copy ( + id_temp INT + , id_location INT + , id_location_parent INT + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , is_new BIT + , name_error VARCHAR(250) + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) + , msg TEXT NOT NULL + ); + + + -- Get data from Temp table + INSERT INTO tmp_Location ( + id_temp + , id_location + , id_location_parent + , code + , name + , active + , is_new + ) + SELECT + LOCATIONS_T.id_temp + , COALESCE( + LOCATIONS.id_location + , LOCATIONS_T.id_location + ) AS id_location + , CASE WHEN IFNULL(LOCATIONS_T.id_location_parent, 0) < 1 THEN NULL ELSE LOCATIONS_T.id_location_parent END AS id_location_parent + , COALESCE( + LOCATIONS_T.code + , LOCATIONS.code + ) AS code + , COALESCE( + LOCATIONS_T.name + , LOCATIONS.name + ) AS name + , COALESCE(LOCATIONS_T.active, 1) AS active + , CASE WHEN COALESCE(LOCATIONS.id_location, LOCATIONS_T.id_location, 0) < 1 THEN 1 ELSE 0 END AS is_new + FROM parts.DOG_Location_Temp LOCATIONS_T + LEFT JOIN parts.DOG_Location LOCATIONS + ON LOCATIONS_T.id_location = LOCATIONS.id_location + OR ( + LOCATIONS_T.id_location_parent = LOCATIONS.id_location_parent + AND LOCATIONS_T.name = LOCATIONS.name + ) + WHERE LOCATIONS_T.guid = a_guid + ; + + IF a_debug = 1 THEN + SELECT 'Location_Temp records'; + SELECT * FROM tmp_Location; + SELECT COUNT(*) FROM tmp_Location; + END IF; + + -- Error names + UPDATE tmp_Location t_LOCATIONS + LEFT JOIN parts.DOG_Location LOCATIONS_PARENT ON t_LOCATIONS.id_location_parent = LOCATIONS_PARENT.id_location + SET t_LOCATIONS.name_error = CONCAT( + COALESCE(LOCATIONS_PARENT.name, t_LOCATIONS.id_location_parent, '(No Parent Location)') + , ' - ' + , COALESCE(t_LOCATIONS.name, t_LOCATIONS.code, t_LOCATIONS.id_location, '(No Location)') + ) + ; + + IF a_debug = 1 THEN + SELECT 'After set name_error'; + SELECT * FROM tmp_Location; + SELECT COUNT(*) FROM tmp_Location; + END IF; + + -- Validation + -- Missing mandatory fields + -- code + IF EXISTS ( SELECT * FROM tmp_Location t_LOCATIONS WHERE t_LOCATIONS.code IS NULL ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('The following Location(s) do not have a valid Code: ', GROUP_CONCAT(t_LOCATIONS.name_error SEPARATOR ', ')) AS msg + FROM tmp_Location t_LOCATIONS + WHERE t_LOCATIONS.code IS NULL + ; + END IF; + -- name + IF EXISTS ( SELECT * FROM tmp_Location t_LOCATIONS WHERE t_LOCATIONS.name IS NULL ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , name + , msg + ) + SELECT + v_id_type_error_bad_data + , v_name_type_error_bad_data + , CONCAT('The following Location(s) do not have a valid Name: ', GROUP_CONCAT(t_LOCATIONS.name_error SEPARATOR ', ')) AS msg + FROM tmp_Location t_LOCATIONS + WHERE t_LOCATIONS.name IS NULL + ; + END IF; + + -- Duplicates + -- Duplicate names + INSERT INTO tmp_Location_Copy ( + id_temp + , id_location + , id_location_parent + , code + , name + , active + , is_new + , name_error + ) + SELECT + t_LOCATIONS.id_temp + , t_LOCATIONS.id_location + , t_LOCATIONS.id_location_parent + , t_LOCATIONS.code + , t_LOCATIONS.name + , t_LOCATIONS.active + , t_LOCATIONS.is_new + , t_LOCATIONS.name_error + FROM tmp_Location t_LOCATIONS + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) AS Count_Temp_Location FROM tmp_Location; + SELECT COUNT(*) AS Count_Temp_Location_Copy FROM tmp_Location_Copy; + + WITH + Combined_Locations AS ( + SELECT + LOCATIONS.id_location + , LOCATIONS.id_location_parent + , LOCATIONS.code + , LOCATIONS.name + , CONCAT( + COALESCE(LOCATIONS_PARENT.name, t_LOCATIONS_COPY.id_location_parent, '(No Parent Location)') + , ' - ' + , COALESCE(t_LOCATIONS_COPY.name, t_LOCATIONS_COPY.code, t_LOCATIONS_COPY.id_location, '(No Location)') + ) AS name_error + FROM parts.DOG_Location LOCATIONS + LEFT JOIN tmp_Location_Copy t_LOCATIONS_COPY ON LOCATIONS.name = t_LOCATIONS_COPY.name + LEFT JOIN parts.DOG_Location LOCATIONS_PARENT ON LOCATIONS.id_location = LOCATIONS_PARENT.id_location_parent + WHERE t_LOCATIONS_COPY.is_new = 1 + UNION + SELECT + t_LOCATIONS.id_location + , t_LOCATIONS.id_location_parent + , t_LOCATIONS.code + , t_LOCATIONS.name + , t_LOCATIONS.name_error + FROM tmp_Location t_LOCATIONS + ) + , Duplicate_Location_Name_Row_Numbers AS ( + SELECT + COMBINED_LOCATIONS.id_location + , COMBINED_LOCATIONS.id_location_parent + , COMBINED_LOCATIONS.code + , COMBINED_LOCATIONS.name + , COMBINED_LOCATIONS.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LOCATIONS.name ORDER BY COMBINED_LOCATIONS.name_error ASC) AS index_location_name_as_duplicate + FROM Combined_Locations COMBINED_LOCATIONS + ) + SELECT * + FROM Duplicate_Location_Name_Row_Numbers + ; + END IF; + + IF EXISTS ( + WITH + Combined_Locations AS ( + SELECT + LOCATIONS.id_location + , LOCATIONS.id_location_parent + , LOCATIONS.code + , LOCATIONS.name + , CONCAT( + COALESCE(LOCATIONS_PARENT.name, t_LOCATIONS_COPY.id_location_parent, '(No Parent Location)') + , ' - ' + , COALESCE(t_LOCATIONS_COPY.name, t_LOCATIONS_COPY.code, t_LOCATIONS_COPY.id_location, '(No Location)') + ) AS name_error + FROM parts.DOG_Location LOCATIONS + LEFT JOIN tmp_Location_Copy t_LOCATIONS_COPY ON LOCATIONS.name = t_LOCATIONS_COPY.name + LEFT JOIN parts.DOG_Location LOCATIONS_PARENT ON LOCATIONS.id_location = LOCATIONS_PARENT.id_location_parent + WHERE t_LOCATIONS_COPY.is_new = 1 + UNION + SELECT + t_LOCATIONS.id_location + , t_LOCATIONS.id_location_parent + , t_LOCATIONS.code + , t_LOCATIONS.name + , t_LOCATIONS.name_error + FROM tmp_Location t_LOCATIONS + ) + , Duplicate_Location_Name_Row_Numbers AS ( + SELECT + COMBINED_LOCATIONS.id_location + , COMBINED_LOCATIONS.id_location_parent + , COMBINED_LOCATIONS.code + , COMBINED_LOCATIONS.name + , COMBINED_LOCATIONS.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LOCATIONS.name ORDER BY COMBINED_LOCATIONS.name_error ASC) AS index_location_name_as_duplicate + FROM Combined_Locations COMBINED_LOCATIONS + ) + SELECT * + FROM Duplicate_Location_Name_Row_Numbers DUPLICATE_LOCATIONS + WHERE DUPLICATE_LOCATIONS.index_location_name_as_duplicate > 1 + GROUP BY DUPLICATE_LOCATIONS.name + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + WITH + Combined_Locations AS ( + SELECT + LOCATIONS.id_location + , LOCATIONS.id_location_parent + , LOCATIONS.code + , LOCATIONS.name + , CONCAT( + COALESCE(LOCATIONS_PARENT.name, t_LOCATIONS_COPY.id_location_parent, '(No Parent Location)') + , ' - ' + , COALESCE(t_LOCATIONS_COPY.name, t_LOCATIONS_COPY.code, t_LOCATIONS_COPY.id_location, '(No Location)') + ) AS name_error + FROM parts.DOG_Location LOCATIONS + LEFT JOIN tmp_Location_Copy t_LOCATIONS_COPY ON LOCATIONS.name = t_LOCATIONS_COPY.name + LEFT JOIN parts.DOG_Location LOCATIONS_PARENT ON LOCATIONS.id_location = LOCATIONS_PARENT.id_location_parent + WHERE t_LOCATIONS_COPY.is_new = 1 + UNION + SELECT + t_LOCATIONS.id_location + , t_LOCATIONS.id_location_parent + , t_LOCATIONS.code + , t_LOCATIONS.name + , t_LOCATIONS.name_error + FROM tmp_Location t_LOCATIONS + ) + , Duplicate_Location_Name_Row_Numbers AS ( + SELECT + COMBINED_LOCATIONS.id_location + , COMBINED_LOCATIONS.id_location_parent + , COMBINED_LOCATIONS.code + , COMBINED_LOCATIONS.name + , COMBINED_LOCATIONS.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LOCATIONS.name ORDER BY COMBINED_LOCATIONS.name_error ASC) AS index_location_name_as_duplicate + FROM Combined_Locations COMBINED_LOCATIONS + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Attempt to create duplicate or overwrite existing Locations on: ', GROUP_CONCAT(DUPLICATE_LOCATIONS.name_error SEPARATOR ', ')) AS msg + FROM Duplicate_Location_Name_Row_Numbers DUPLICATE_LOCATIONS + WHERE DUPLICATE_LOCATIONS.index_location_as_duplicate > 1 + GROUP BY DUPLICATE_LOCATIONS.name + ; + END IF; + + -- Permissions + -- Can Create + CALL parts.p_dog_calc_user( + a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_new -- ids_permission + , v_id_access_level_edit -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CU_T.has_access, 0) + INTO + v_can_create + FROM parts.DOG_Calc_User_Temp CU_T + WHERE CU_T.GUID = a_guid + LIMIT 1 + ; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF v_can_create = 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 edit Locations.' + ) + ; + 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_Location; + END IF; + + DELETE FROM tmp_Location; + END IF; + + 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 + START TRANSACTION; + + INSERT INTO parts.DOG_Dog_Change_Set ( + comment + , id_user_updated_last_by + , updated_last_on + ) + VALUES ( + a_comment + , a_id_user + , v_time_start + ) + ; + + SET v_id_change_set := LAST_INSERT_ID(); + + UPDATE parts.DOG_Location LOCATIONS + INNER JOIN tmp_Location t_LOCATIONS + ON LOCATIONS.id_location = t_LOCATIONS.id_location + AND t_LOCATIONS.is_new = 0 + SET + LOCATIONS.id_location_parent = t_LOCATIONS.id_location_parent + , LOCATIONS.code = t_LOCATIONS.code + , LOCATIONS.name = t_LOCATIONS.name + , LOCATIONS.active = t_LOCATIONS.active + , LOCATIONS.id_change_set = v_id_change_set + ; + + INSERT INTO parts.DOG_Location ( + id_location_parent + , code + , name + , active + , id_user_created_by + , created_on + ) + SELECT + t_LOCATIONS.id_location_parent AS id_location_parent + , t_LOCATIONS.code AS code + , t_LOCATIONS.name AS name + , t_LOCATIONS.active AS active + , a_id_user AS created_by + , v_time_start AS created_on + FROM tmp_Location t_LOCATIONS + WHERE + t_LOCATIONS.is_new = 1 + AND t_LOCATIONS.active = 1 + ; + + COMMIT; + END IF; + + START TRANSACTION; + + DELETE FROM parts.DOG_Location_Temp + WHERE GUID = a_guid + ; + + COMMIT; + + -- 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_Location; + END IF; + + DROP TEMPORARY TABLE tmp_Location; + DROP TEMPORARY TABLE tmp_Msg_Error; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + + +/* + +'ripplesipplenippletippledipplekippsy' +DELETE FROM parts.DOG_Location WHERE id_location > 740; +* / +delete +from parts.DOG_Location_Audit +where id_location > 768 +; +delete +from parts.DOG_Location +where id_location > 768 +; +delete +from parts.DOG_Location_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Location_Temp +; +select COUNT(*) +from parts.DOG_Location_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Location +; +select COUNT(*) +from parts.DOG_Location +; + +INSERT INTO parts.DOG_Location_Temp ( + id_location + , id_location_parent + , code + , name + , active + , guid +) +VALUES ( + -1 -- id_location + , 1 -- id_location_parent + , 'HOME' -- code + , 'Home' -- name + , 1 -- active + , 'ripplesipplenippletippledipplekippsy' +); + +CALL parts.p_dog_save_location ( + 'nipples' + , 'ripplesipplenippletippledipplekippsy' + , 1 + , 1 +); + + +select + * + -- COUNT(*) +-- delete +from parts.DOG_Location_Temp +; +select COUNT(*) +from parts.DOG_Location_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Location +; +select COUNT(*) +from parts.DOG_Location +; + +*/ \ No newline at end of file diff --git a/static/MySQL/71220_p_dog_calc_button_shape.sql b/static/MySQL/71220_p_dog_calc_button_shape.sql new file mode 100644 index 0000000..cffebbc --- /dev/null +++ b/static/MySQL/71220_p_dog_calc_button_shape.sql @@ -0,0 +1,605 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_button_shape; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_button_shape ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_button_shape BIT + , IN a_get_inactive_button_shape BIT + , IN a_ids_button_shape TEXT + , IN a_names_button_shape TEXT + , IN a_notes_button_shape 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 +) +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_has_filter_button_shape_id BIT; + DECLARE v_has_filter_button_shape_name BIT; + DECLARE v_has_filter_button_shape_notes 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; + DECLARE v_id_type_error_no_permission 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_Button_Shape ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Button_Shape ( + 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_Button_Shape 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_Button_Shape; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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 ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_button_shape := IFNULL(a_get_all_button_shape, 0); + SET a_get_inactive_button_shape := IFNULL(a_get_inactive_button_shape, 0); + SET a_ids_button_shape := TRIM(IFNULL(a_ids_button_shape, '')); + SET a_names_button_shape := TRIM(IFNULL(a_names_button_shape, '')); + SET a_notes_button_shape := TRIM(IFNULL(a_notes_button_shape, '')); + 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); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_button_shape + , a_get_inactive_button_shape + , a_ids_button_shape + , a_names_button_shape + , a_notes_button_shape + , 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 + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape_Calc_Button_Shape; + + CREATE TEMPORARY TABLE tmp_Button_Shape_Calc_Button_Shape ( + id_button_shape 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_Button_Shape ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Button_Shape ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Button_Shape; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Button_Shape ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Button_Shape; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Notes_Calc_Button_Shape ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Notes_Calc_Button_Shape; + + SET v_has_filter_button_shape_id = CASE WHEN a_ids_button_shape <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_shape_name = CASE WHEN a_names_button_shape <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_shape_notes = CASE WHEN a_notes_button_shape <> '' THEN 1 ELSE 0 END; + + -- Button_Shapes + IF v_has_filter_button_shape_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_button_shape, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Button_Shape ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_button_shape_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_button_shape, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Button_Shape ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_button_shape_notes = 1 THEN + CALL parts.p_core_split(a_guid, a_notes_button_shape, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Notes_Calc_Button_Shape ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Button_Shape 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 * + FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPES ON t_SPLIT_ID.as_int = BUTTON_SHAPES.id_button_shape + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(BUTTON_SHAPES.id_button_shape) + OR ( + BUTTON_SHAPES.active = 0 + AND a_get_inactive_button_shape = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Button_Shape ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Button_Shape IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPES ON t_SPLIT_ID.as_int = BUTTON_SHAPES.id_button_shape + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(BUTTON_SHAPES.id_button_shape) + OR ( + BUTTON_SHAPES.active = 0 + AND a_get_inactive_button_shape = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Button_Shape_Calc_Button_Shape ( + id_button_shape + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Button_Shape_Id_Filter AS ( + SELECT BUTTON_SHAPES.id_button_shape + FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID + INNER JOIN parts.DOG_Button_Shape BUTTON_SHAPES ON t_SPLIT_ID.as_int = BUTTON_SHAPES.id_button_shape + ) + , Button_Shape_Name_Filter AS ( + SELECT BUTTON_SHAPES.id_button_shape + FROM tmp_Split_Name_Calc_Button_Shape t_SPLIT_NAME + INNER JOIN parts.DOG_Button_Shape BUTTON_SHAPES ON BUTTON_SHAPES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Button_Shape_Notes_Filter AS ( + SELECT BUTTON_SHAPES.id_button_shape + FROM tmp_Split_Notes_Calc_Button_Shape t_SPLIT_NOTES + INNER JOIN parts.DOG_Button_Shape BUTTON_SHAPES ON BUTTON_SHAPES.name LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') + WHERE NULLIF(t_SPLIT_NOTES.substring, '') IS NOT NULL + ) + , Button_Shape_Filters AS ( + SELECT + BUTTON_SHAPES_COMBINED.id_button_shape + , MAX(BUTTON_SHAPES_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(BUTTON_SHAPES_COMBINED.does_meet_name_filter) AS does_meet_name_filter + , MAX(BUTTON_SHAPES_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter + FROM ( + SELECT + BUTTON_SHAPES_ID_FILTER.id_button_shape + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + , 0 AS does_meet_notes_filter + FROM Button_Shape_Id_Filter BUTTON_SHAPES_ID_FILTER + UNION + SELECT + BUTTON_SHAPES_NAME_FILTER.id_button_shape + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + , 0 AS does_meet_notes_filter + FROM Button_Shape_Name_Filter BUTTON_SHAPES_NAME_FILTER + UNION + SELECT + BUTTON_SHAPES_NOTES_FILTER.id_button_shape + , 0 AS does_meet_id_filter + , 0 AS does_meet_name_filter + , 1 AS does_meet_notes_filter + FROM Button_Shape_Notes_Filter BUTTON_SHAPES_NOTES_FILTER + ) BUTTON_SHAPES_COMBINED + GROUP BY BUTTON_SHAPES_COMBINED.id_button_shape + ) + SELECT + BUTTON_SHAPES.id_button_shape + , CASE WHEN + v_has_filter_button_shape_id = 0 + OR IFNULL(BUTTON_SHAPES_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_button_shape_name = 0 + AND v_has_filter_button_shape_notes = 0 + ) + OR IFNULL(BUTTON_SHAPES_FILTERS.does_meet_name_filter, 0) = 1 + OR IFNULL(BUTTON_SHAPES_FILTERS.does_meet_notes_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Button_Shape BUTTON_SHAPES + LEFT JOIN Button_Shape_Filters BUTTON_SHAPES_FILTERS ON BUTTON_SHAPES.id_button_shape = BUTTON_SHAPES_FILTERS.id_button_shape + WHERE + ( + a_get_all_button_shape = 1 + OR ( + v_has_filter_button_shape_id = 1 + AND BUTTON_SHAPES_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_button_shape_name = 1 + AND BUTTON_SHAPES_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_button_shape = 1 + OR BUTTON_SHAPES.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Button_Shape; + DELETE FROM tmp_Split_Name_Calc_Button_Shape; + DELETE FROM tmp_Split_Notes_Calc_Button_Shape; + + IF a_debug = 1 THEN + SELECT 'After get Button_Shapes '; + SELECT * FROM tmp_Button_Shape_Calc_Button_Shape; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Button_Shape 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_BUTTON_SHAPES + FROM tmp_Button_Shape_Calc_Button_Shape t_BUTTON_SHAPES + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_BUTTON_SHAPES.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_BUTTON_SHAPES.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_BUTTON_SHAPES.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_BUTTON_SHAPES.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Button_Shapes'; + SELECT * FROM tmp_Button_Shape_Calc_Button_Shape; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_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_Calc_Button_Shape t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Button_Shape ( + 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 Button_Shapes.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Button_Shape_Calc_Button_Shape; + SELECT * FROM tmp_Msg_Error_Calc_Button_Shape; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Button_Shape 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_Button_Shape_Calc_Button_Shape; + END IF; + + DELETE FROM tmp_Button_Shape_Calc_Button_Shape; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Button_Shapes + INSERT INTO parts.DOG_Button_Shape_Temp ( + guid + , id_button_shape + , code + , name + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_BUTTON_SHAPES.id_button_shape + , BUTTON_SHAPES.code + , BUTTON_SHAPES.name + , BUTTON_SHAPES.notes + , BUTTON_SHAPES.active + + , t_BUTTON_SHAPES.does_meet_id_filters + , t_BUTTON_SHAPES.does_meet_non_id_filters + FROM parts.DOG_Button_Shape BUTTON_SHAPES + INNER JOIN tmp_Button_Shape_Calc_Button_Shape t_BUTTON_SHAPES ON BUTTON_SHAPES.id_button_shape = t_BUTTON_SHAPES.id_button_shape + ORDER BY BUTTON_SHAPES.name + ; + COMMIT; + + -- 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_Button_Shape 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_Button_Shape_Calc_Button_Shape; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape_Calc_Button_Shape; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_button_shape ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_button_shape + , 0 -- a_get_inactive_button_shape + , '' -- a_ids_button_shape + , '' -- a_names_button_shape + , '' -- a_notes_button_shape + , 0 -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Button_Shape_Temp +; +/* +SELECT * +FROM parts.DOG_Button_Shape_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_button_shape ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Button_Shape_Temp +; + +*/ diff --git a/static/MySQL/71220_p_dog_clear_calc_button_shape.sql b/static/MySQL/71220_p_dog_clear_calc_button_shape.sql new file mode 100644 index 0000000..ec5a742 --- /dev/null +++ b/static/MySQL/71220_p_dog_clear_calc_button_shape.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_button_shape; +DROP PROCEDURE IF EXISTS parts.p_button_shape_clear_calc_button_shape; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_button_shape ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE BUTTON_SHAPES_T + FROM parts.DOG_Button_Shape_Temp BUTTON_SHAPES_T + WHERE BUTTON_SHAPES_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_button_shape ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71220_p_dog_get_many_button_shape.sql b/static/MySQL/71220_p_dog_get_many_button_shape.sql new file mode 100644 index 0000000..68e1c69 --- /dev/null +++ b/static/MySQL/71220_p_dog_get_many_button_shape.sql @@ -0,0 +1,386 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_button_shape; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_button_shape ( + IN a_id_user INT + , IN a_get_all_button_shape BIT + , IN a_get_inactive_button_shape BIT + , IN a_ids_button_shape TEXT + , IN a_names_button_shape TEXT + , IN a_notes_button_shape 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_can_view BIT; + 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_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; + DECLARE v_id_type_error_no_permission 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(250) 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_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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_button_shape := IFNULL(a_get_all_button_shape, 0); + SET a_get_inactive_button_shape := IFNULL(a_get_inactive_button_shape, 0); + SET a_ids_button_shape := TRIM(IFNULL(a_ids_button_shape, '')); + SET a_names_button_shape := TRIM(IFNULL(a_names_button_shape, '')); + SET a_notes_button_shape := TRIM(IFNULL(a_notes_button_shape, '')); + 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_button_shape + , a_get_inactive_button_shape + , a_ids_button_shape + , a_names_button_shape + , a_notes_button_shape + , 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 + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape; + + CREATE TEMPORARY TABLE tmp_Button_Shape ( + id_button_shape INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , 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(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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( + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.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; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + 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 Button_Shapes.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Button_Shape 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 + , a_id_user -- a_id_user + , a_get_all_button_shape -- a_get_all_button_shape + , a_get_inactive_button_shape -- a_get_inactive_button_shape + , a_ids_button_shape -- a_ids_button_shape + , a_names_button_shape -- a_names_button_shape + , a_notes_button_shape -- a_notes_button_shape + , 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_button_shape ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_button_shape -- a_get_all_button_shape + , a_get_inactive_button_shape -- a_get_inactive_button_shape + , a_ids_button_shape -- a_ids_button_shape + , a_names_button_shape -- a_names_button_shape + , a_notes_button_shape -- a_notes_button_shape + , 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_Button_Shape_Temp; + SELECT * FROM parts.DOG_Button_Shape_Temp; + END IF; + + INSERT INTO tmp_Button_Shape ( + id_button_shape + , code + , name + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + BUTTON_SHAPE_T.id_button_shape + , BUTTON_SHAPE_T.code + , BUTTON_SHAPE_T.name + , BUTTON_SHAPE_T.notes + , BUTTON_SHAPE_T.active + + , BUTTON_SHAPE_T.does_meet_id_filters + , BUTTON_SHAPE_T.does_meet_non_id_filters + FROM parts.DOG_Button_Shape_Temp BUTTON_SHAPE_T + WHERE BUTTON_SHAPE_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Button_Shape; + SELECT * FROM tmp_Button_Shape; + END IF; + 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 + IF a_debug = 1 THEN + SELECT * FROM tmp_Button_Shape; + END IF; + + DELETE FROM tmp_Button_Shape; + END IF; + + + -- Outputs + -- Button_Shapes + SELECT + t_BUTTON_SHAPES.id_button_shape + , t_BUTTON_SHAPES.code + , t_BUTTON_SHAPES.name + , t_BUTTON_SHAPES.notes + , t_BUTTON_SHAPES.active + + , t_BUTTON_SHAPES.does_meet_id_filters + , t_BUTTON_SHAPES.does_meet_non_id_filters + FROM tmp_Button_Shape t_BUTTON_SHAPES + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPES ON t_BUTTON_SHAPES.id_button_shape = BUTTON_SHAPES.id_button_shape + ORDER BY t_BUTTON_SHAPES.name + ; + + -- 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 AND v_can_view = 1 THEN + SELECT * FROM tmp_Button_Shape; + END IF; + + CALL parts.p_dog_clear_calc_button_shape( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_button_shape ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_button_shape + , 0 -- a_get_inactive_button_shape + , '' -- a_ids_button_shape + , '' -- a_names_button_shape + , '' -- a_notes_button_shape + , 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_button_shape ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_button_shape + , 0 -- a_get_inactive_button_shape + , '' -- a_ids_button_shape + , 'pat,point' -- a_names_button_shape + , 'pat,point' -- a_notes_button_shape + , 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 +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71224_p_dog_calc_colour.sql b/static/MySQL/71224_p_dog_calc_colour.sql new file mode 100644 index 0000000..b6db4b5 --- /dev/null +++ b/static/MySQL/71224_p_dog_calc_colour.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_colour; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_colour ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_colour BIT + , IN a_get_inactive_colour BIT + , IN a_ids_colour TEXT + , IN a_names_colour 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 +) +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_has_filter_colour_id BIT; + DECLARE v_has_filter_colour_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; + DECLARE v_id_type_error_no_permission 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_Colour ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Colour ( + 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_Colour 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_Colour; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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 ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_colour := IFNULL(a_get_all_colour, 0); + SET a_get_inactive_colour := IFNULL(a_get_inactive_colour, 0); + SET a_ids_colour := TRIM(IFNULL(a_ids_colour, '')); + SET a_names_colour := TRIM(IFNULL(a_names_colour, '')); + 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); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_colour + , a_get_inactive_colour + , a_ids_colour + , a_names_colour + , 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 + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour_Calc_Colour; + + CREATE TEMPORARY TABLE tmp_Colour_Calc_Colour ( + id_colour 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_Colour ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Colour ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Colour; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Colour ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Colour; + + SET v_has_filter_colour_id = CASE WHEN a_ids_colour <> '' THEN 1 ELSE 0 END; + SET v_has_filter_colour_name = CASE WHEN a_names_colour <> '' THEN 1 ELSE 0 END; + + -- Colours + IF v_has_filter_colour_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_colour, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Colour ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_colour_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_colour, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Colour ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Colour 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 * + FROM tmp_Split_Id_Calc_Colour t_SPLIT_ID + LEFT JOIN parts.DOG_Colour COLOURS ON t_SPLIT_ID.as_int = COLOURS.id_colour + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(COLOURS.id_colour) + OR ( + COLOURS.active = 0 + AND a_get_inactive_colour = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Colour ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Colour IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Colour t_SPLIT_ID + LEFT JOIN parts.DOG_Colour COLOURS ON t_SPLIT_ID.as_int = COLOURS.id_colour + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(COLOURS.id_colour) + OR ( + COLOURS.active = 0 + AND a_get_inactive_colour = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Colour_Calc_Colour ( + id_colour + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Colour_Id_Filter AS ( + SELECT COLOURS.id_colour + FROM tmp_Split_Id_Calc_Colour t_SPLIT_ID + INNER JOIN parts.DOG_Colour COLOURS ON t_SPLIT_ID.as_int = COLOURS.id_colour + ) + , Colour_Name_Filter AS ( + SELECT COLOURS.id_colour + FROM tmp_Split_Name_Calc_Colour t_SPLIT_NAME + INNER JOIN parts.DOG_Colour COLOURS ON COLOURS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Colour_Filters AS ( + SELECT + COLOURS_COMBINED.id_colour + , MAX(COLOURS_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(COLOURS_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + COLOURS_ID_FILTER.id_colour + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Colour_Id_Filter COLOURS_ID_FILTER + UNION + SELECT + COLOURS_NAME_FILTER.id_colour + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Colour_Name_Filter COLOURS_NAME_FILTER + ) COLOURS_COMBINED + GROUP BY COLOURS_COMBINED.id_colour + ) + SELECT + COLOURS.id_colour + , CASE WHEN + v_has_filter_colour_id = 0 + OR IFNULL(COLOURS_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_colour_name = 0 + ) + OR IFNULL(COLOURS_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Colour COLOURS + LEFT JOIN Colour_Filters COLOURS_FILTERS ON COLOURS.id_colour = COLOURS_FILTERS.id_colour + WHERE + ( + a_get_all_colour = 1 + OR ( + v_has_filter_colour_id = 1 + AND COLOURS_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_colour_name = 1 + AND COLOURS_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_colour = 1 + OR COLOURS.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Colour; + DELETE FROM tmp_Split_Name_Calc_Colour; + + IF a_debug = 1 THEN + SELECT 'After get Colours '; + SELECT * FROM tmp_Colour_Calc_Colour; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Colour 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_COLOURS + FROM tmp_Colour_Calc_Colour t_COLOURS + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_COLOURS.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_COLOURS.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_COLOURS.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_COLOURS.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Colours'; + SELECT * FROM tmp_Colour_Calc_Colour; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_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_Calc_Colour t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Colour ( + 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 Colours.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Colour_Calc_Colour; + SELECT * FROM tmp_Msg_Error_Calc_Colour; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Colour 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_Colour_Calc_Colour; + END IF; + + DELETE FROM tmp_Colour_Calc_Colour; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Colours + INSERT INTO parts.DOG_Colour_Temp ( + guid + , id_colour + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_COLOURS.id_colour + , COLOURS.code + , COLOURS.name + , COLOURS.active + + , t_COLOURS.does_meet_id_filters + , t_COLOURS.does_meet_non_id_filters + FROM parts.DOG_Colour COLOURS + INNER JOIN tmp_Colour_Calc_Colour t_COLOURS ON COLOURS.id_colour = t_COLOURS.id_colour + ORDER BY COLOURS.name + ; + COMMIT; + + -- 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_Colour 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_Colour_Calc_Colour; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour_Calc_Colour; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_colour ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , '' -- a_names_colour + , 0 -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Colour_Temp +; +/* +SELECT * +FROM parts.DOG_Colour_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_colour ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Colour_Temp +; + +*/ diff --git a/static/MySQL/71224_p_dog_clear_calc_colour.sql b/static/MySQL/71224_p_dog_clear_calc_colour.sql new file mode 100644 index 0000000..1306eda --- /dev/null +++ b/static/MySQL/71224_p_dog_clear_calc_colour.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_colour; +DROP PROCEDURE IF EXISTS parts.p_colour_clear_calc_colour; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_colour ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE COLOURS_T + FROM parts.DOG_Colour_Temp COLOURS_T + WHERE COLOURS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_colour ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71224_p_dog_get_many_colour.sql b/static/MySQL/71224_p_dog_get_many_colour.sql new file mode 100644 index 0000000..bca9209 --- /dev/null +++ b/static/MySQL/71224_p_dog_get_many_colour.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_colour; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_colour ( + IN a_id_user INT + , IN a_get_all_colour BIT + , IN a_get_inactive_colour BIT + , IN a_ids_colour TEXT + , IN a_names_colour 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_can_view BIT; + 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_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; + DECLARE v_id_type_error_no_permission 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(250) 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_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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_colour := IFNULL(a_get_all_colour, 0); + SET a_get_inactive_colour := IFNULL(a_get_inactive_colour, 0); + SET a_ids_colour := TRIM(IFNULL(a_ids_colour, '')); + SET a_names_colour := TRIM(IFNULL(a_names_colour, '')); + 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_colour + , a_get_inactive_colour + , a_ids_colour + , a_names_colour + , 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 + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + + CREATE TEMPORARY TABLE tmp_Colour ( + id_colour INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , 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(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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( + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.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; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + 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 Colours.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Colour 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 + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , 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_colour ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , 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_Colour_Temp; + SELECT * FROM parts.DOG_Colour_Temp; + END IF; + + INSERT INTO tmp_Colour ( + id_colour + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COLOUR_T.id_colour + , COLOUR_T.code + , COLOUR_T.name + , COLOUR_T.active + + , COLOUR_T.does_meet_id_filters + , COLOUR_T.does_meet_non_id_filters + FROM parts.DOG_Colour_Temp COLOUR_T + WHERE COLOUR_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Colour; + SELECT * FROM tmp_Colour; + END IF; + 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 + IF a_debug = 1 THEN + SELECT * FROM tmp_Colour; + END IF; + + DELETE FROM tmp_Colour; + END IF; + + + -- Outputs + -- Colours + SELECT + t_COLOURS.id_colour + , t_COLOURS.code + , t_COLOURS.name + , t_COLOURS.active + + , t_COLOURS.does_meet_id_filters + , t_COLOURS.does_meet_non_id_filters + FROM tmp_Colour t_COLOURS + LEFT JOIN parts.DOG_Colour COLOURS ON t_COLOURS.id_colour = COLOURS.id_colour + ORDER BY t_COLOURS.name + ; + + -- 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 AND v_can_view = 1 THEN + SELECT * FROM tmp_Colour; + END IF; + + CALL parts.p_dog_clear_calc_colour( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_colour ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , '' -- a_names_colour + , 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_colour ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , 'pat,point' -- a_names_colour + , 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 +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71228_p_dog_calc_image.sql b/static/MySQL/71228_p_dog_calc_image.sql new file mode 100644 index 0000000..71e689a --- /dev/null +++ b/static/MySQL/71228_p_dog_calc_image.sql @@ -0,0 +1,908 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_image; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_image ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_file_type BIT + , IN a_get_inactive_file_type BIT + , IN a_ids_file_type TEXT + , IN a_names_file_type TEXT + , 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_image BIT + , IN a_get_inactive_image BIT + , IN a_ids_image TEXT + , IN a_names_image 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 +) +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_has_filter_file_type_id BIT; + DECLARE v_has_filter_file_type_name BIT; + DECLARE v_has_filter_image_id BIT; + DECLARE v_has_filter_image_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; + DECLARE v_id_type_error_no_permission 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_Image ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Image ( + 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_Image 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_Image; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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 ); + + 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_get_all_file_type := IFNULL(a_get_all_file_type, 0); + SET a_get_inactive_file_type := IFNULL(a_get_inactive_file_type, 0); + SET a_ids_file_type := TRIM(IFNULL(a_ids_file_type, '')); + SET a_names_file_type := TRIM(IFNULL(a_names_file_type, '')); + SET a_get_all_image := IFNULL(a_get_all_image, 0); + SET a_get_inactive_image := IFNULL(a_get_inactive_image, 0); + SET a_ids_image := TRIM(IFNULL(a_ids_image, '')); + SET a_names_image := TRIM(IFNULL(a_names_image, '')); + 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); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_dog + , a_get_inactive_dog + , a_ids_dog + , a_names_dog + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , 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 + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_File_Type_Calc_Image; + + CREATE TEMPORARY TABLE tmp_File_Type_Calc_Image ( + id_file_type INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Dog_Calc_Image ( + id_dog INT NOT NULL + , name VARCHAR(250) + , appearance VARCHAR(1000) + , 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_Image_Calc_Image ( + id_image INT NOT NULL + , id_file_type 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_Image ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Image ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Image; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Image ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Image; + + SET v_has_filter_file_type_id = CASE WHEN a_ids_file_type <> '' THEN 1 ELSE 0 END; + SET v_has_filter_file_type_name = CASE WHEN a_names_file_type <> '' THEN 1 ELSE 0 END; + SET v_has_filter_image_id = CASE WHEN a_ids_image <> '' THEN 1 ELSE 0 END; + SET v_has_filter_image_name = CASE WHEN a_names_image <> '' THEN 1 ELSE 0 END; + + -- File Types + IF v_has_filter_file_type_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_file_type, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Image ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_file_type_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_file_type, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Image ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Image 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 * + FROM tmp_Split_Id_Calc_Image t_SPLIT_ID + LEFT JOIN parts.CORE_File_Type FILE_TYPES ON t_SPLIT_ID.as_int = FILE_TYPES.id_file_type + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(FILE_TYPES.id_file_type) + OR ( + FILE_TYPES.active = 0 + AND a_get_inactive_file_type = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Image ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive File_Type IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Image t_SPLIT_ID + LEFT JOIN parts.CORE_File_Type FILE_TYPES ON t_SPLIT_ID.as_int = FILE_TYPES.id_file_type + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(FILE_TYPES.id_file_type) + OR ( + FILE_TYPES.active = 0 + AND a_get_inactive_file_type = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + IF a_debug = 1 THEN + SELECT 'File_Type Filters'; + WITH + File_Type_Id_Filter AS ( + SELECT FILE_TYPES.id_file_type + FROM tmp_Split_Id_Calc_Image t_SPLIT_ID + INNER JOIN parts.CORE_File_Type FILE_TYPES ON t_SPLIT_ID.as_int = FILE_TYPES.id_file_type + ) + , File_Type_Name_Filter AS ( + SELECT FILE_TYPES.id_file_type + FROM tmp_Split_Name_Calc_Image t_SPLIT_NAME + INNER JOIN parts.CORE_File_Type FILE_TYPES ON FILE_TYPES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , File_Type_Filters AS ( + SELECT + FILE_TYPES_COMBINED.id_file_type + , MAX(FILE_TYPES_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(FILE_TYPES_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + FILE_TYPES_ID_FILTER.id_file_type + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM File_Type_Id_Filter FILE_TYPES_ID_FILTER + UNION + SELECT + FILE_TYPES_NAME_FILTER.id_file_type + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM File_Type_Name_Filter FILE_TYPES_NAME_FILTER + ) FILE_TYPES_COMBINED + GROUP BY FILE_TYPES_COMBINED.id_file_type + ) + SELECT + FILE_TYPES.id_file_type + , CASE WHEN + v_has_filter_file_type_id = 0 + OR FILE_TYPES_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + , CASE WHEN + ( + v_has_filter_file_type_name = 0 + ) + OR FILE_TYPES_FILTERS.does_meet_name_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + FROM parts.CORE_File_Type FILE_TYPES + LEFT JOIN File_Type_Filters FILE_TYPES_FILTERS ON FILE_TYPES.id_file_type = FILE_TYPES_FILTERS.id_file_type + WHERE + ( + a_get_all_file_type = 1 + OR ( + v_has_filter_file_type_id = 1 + AND FILE_TYPES_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_file_type_name = 1 + AND FILE_TYPES_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_file_type = 1 + OR FILE_TYPES.active = 1 + ) + ; + END IF; + INSERT INTO tmp_File_Type_Calc_Image ( + id_file_type + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + File_Type_Id_Filter AS ( + SELECT FILE_TYPES.id_file_type + FROM tmp_Split_Id_Calc_Image t_SPLIT_ID + INNER JOIN parts.CORE_File_Type FILE_TYPES ON t_SPLIT_ID.as_int = FILE_TYPES.id_file_type + ) + , File_Type_Name_Filter AS ( + SELECT FILE_TYPES.id_file_type + FROM tmp_Split_Name_Calc_Image t_SPLIT_NAME + INNER JOIN parts.CORE_File_Type FILE_TYPES ON FILE_TYPES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE + t_SPLIT_NAME.substring IS NOT NULL + AND t_SPLIT_NAME.substring <> '' + ) + , File_Type_Filters AS ( + SELECT + FILE_TYPES_COMBINED.id_file_type + , MAX(FILE_TYPES_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(FILE_TYPES_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + FILE_TYPES_ID_FILTER.id_file_type + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM File_Type_Id_Filter FILE_TYPES_ID_FILTER + UNION + SELECT + FILE_TYPES_NAME_FILTER.id_file_type + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM File_Type_Name_Filter FILE_TYPES_NAME_FILTER + ) FILE_TYPES_COMBINED + GROUP BY FILE_TYPES_COMBINED.id_file_type + ) + SELECT + FILE_TYPES.id_file_type + , CASE WHEN + v_has_filter_file_type_id = 0 + OR IFNULL(FILE_TYPES_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_file_type_name = 0 + ) + OR IFNULL(FILE_TYPES_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.CORE_File_Type FILE_TYPES + LEFT JOIN File_Type_Filters FILE_TYPES_FILTERS ON FILE_TYPES.id_file_type = FILE_TYPES_FILTERS.id_file_type + WHERE + ( + a_get_all_file_type = 1 + OR ( + v_has_filter_file_type_id = 1 + AND FILE_TYPES_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_file_type_name = 1 + AND FILE_TYPES_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_file_type = 1 + OR FILE_TYPES.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Image; + DELETE FROM tmp_Split_Name_Calc_Image; + + + -- Call Dog Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Image 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 + a_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_dog( + a_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 + ); + + INSERT INTO tmp_Dog_Calc_Image ( + id_dog + , name + , appearance + , mass_kg + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + DOG_T.id_dog + , DOG_T.name + , DOG_T.appearance + , 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 = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Dog_Calc_Image; + END IF; + END IF; + + + -- Images + IF v_has_filter_image_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_image, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Image ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_image_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_image, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Image ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Image 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 * + FROM tmp_Split_Id_Calc_Image t_SPLIT_ID + LEFT JOIN parts.DOG_Image IMAGES ON t_SPLIT_ID.as_int = IMAGES.id_image + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(IMAGES.id_image) + OR ( + IMAGES.active = 0 + AND a_get_inactive_image = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Image ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Image IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Image t_SPLIT_ID + LEFT JOIN parts.DOG_Image IMAGES ON t_SPLIT_ID.as_int = IMAGES.id_image + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(IMAGES.id_image) + OR ( + IMAGES.active = 0 + AND a_get_inactive_image = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Image_Calc_Image ( + id_image + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Image_Id_Filter AS ( + SELECT IMAGES.id_image + FROM tmp_Split_Id_Calc_Image t_SPLIT_ID + INNER JOIN parts.DOG_Image IMAGES ON t_SPLIT_ID.as_int = IMAGES.id_image + ) + , Image_Name_Filter AS ( + SELECT IMAGES.id_image + FROM tmp_Split_Name_Calc_Image t_SPLIT_NAME + INNER JOIN parts.DOG_Image IMAGES ON IMAGES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE + t_SPLIT_NAME.substring IS NOT NULL + AND t_SPLIT_NAME.substring <> '' + ) + , Image_Filters AS ( + SELECT + IMAGES_COMBINED.id_image + , MAX(IMAGES_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(IMAGES_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + IMAGES_ID_FILTER.id_image + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Image_Id_Filter IMAGES_ID_FILTER + UNION + SELECT + IMAGES_NAME_FILTER.id_image + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Image_Name_Filter IMAGES_NAME_FILTER + ) IMAGES_COMBINED + GROUP BY IMAGES_COMBINED.id_image + ) + SELECT + IMAGES.id_image + , CASE WHEN + v_has_filter_image_id = 0 + OR IFNULL(IMAGES_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_image_name = 0 + ) + OR IFNULL(IMAGES_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Image IMAGES + INNER JOIN tmp_File_Type_Calc_Image t_FILE_TYPE ON IMAGES.id_file_type = t_FILE_TYPE.id_file_type + LEFT JOIN tmp_Dog_Calc_Image t_DOG ON IMAGES.id_dog = t_DOG.id_dog + LEFT JOIN Image_Filters IMAGES_FILTERS ON IMAGES.id_image = IMAGES_FILTERS.id_image + WHERE + ( + a_get_all_image = 1 + OR ( + v_has_filter_image_id = 1 + AND IMAGES_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_image_name = 1 + AND IMAGES_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_image = 1 + OR IMAGES.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Image; + DELETE FROM tmp_Split_Name_Calc_Image; + + IF a_debug = 1 THEN + SELECT 'After get Images '; + SELECT * FROM tmp_Image_Calc_Image; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Image 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_IMAGES + FROM tmp_Image_Calc_Image t_IMAGES + LEFT JOIN tmp_File_Type_Calc_Image t_FILE_TYPE ON t_IMAGES.id_file_type = t_FILE_TYPE.id_file_type + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_IMAGES.does_meet_id_filters = 0 + OR IFNULL(t_FILE_TYPE.does_meet_id_filters, 0) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_IMAGES.does_meet_non_id_filters = 0 + OR IFNULL(t_FILE_TYPE.does_meet_non_id_filters, 0) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_IMAGES.does_meet_id_filters = 0 + AND IFNULL(t_FILE_TYPE.does_meet_id_filters, 0) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_IMAGES.does_meet_non_id_filters = 0 + AND IFNULL(t_FILE_TYPE.does_meet_non_id_filters, 0) = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Images'; + SELECT * FROM tmp_Image_Calc_Image; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_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_Calc_Image t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Image ( + 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 Images.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Image_Calc_Image; + SELECT * FROM tmp_Msg_Error_Calc_Image; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Image 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_Image_Calc_Image; + END IF; + + DELETE FROM tmp_Image_Calc_Image; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Images + INSERT INTO parts.DOG_Image_Temp ( + guid + , id_image + , id_file_type + , id_dog + , path + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_IMAGES.id_image + , IMAGES.id_file_type + , IMAGES.id_dog + , IMAGES.path + , IMAGES.name + , IMAGES.active + + , t_IMAGES.does_meet_id_filters + , t_IMAGES.does_meet_non_id_filters + FROM parts.DOG_Image IMAGES + INNER JOIN tmp_Image_Calc_Image t_IMAGES ON IMAGES.id_image = t_IMAGES.id_image + ORDER BY IMAGES.name + ; + COMMIT; + + -- 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_Image 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_Image_Calc_Image; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Image; + DROP TEMPORARY TABLE IF EXISTS tmp_File_Type_Calc_Image; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_image ( + 'grope ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , '' -- a_names_file_type + , 1 -- a_get_all_dog + , 0 -- a_get_inactive_dog + , '' -- a_ids_dog + , '' -- a_names_dog + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , '' -- a_names_image + , 0 -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Image_Temp +; +/* +SELECT * +FROM parts.DOG_Image_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_image ( + 'grope ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Image_Temp +; + +*/ diff --git a/static/MySQL/71228_p_dog_clear_calc_image.sql b/static/MySQL/71228_p_dog_clear_calc_image.sql new file mode 100644 index 0000000..95d9b8d --- /dev/null +++ b/static/MySQL/71228_p_dog_clear_calc_image.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_image; +DROP PROCEDURE IF EXISTS parts.p_image_clear_calc_image; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_image ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE IMAGES_T + FROM parts.DOG_Image_Temp IMAGES_T + WHERE IMAGES_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_image ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71228_p_dog_get_many_image.sql b/static/MySQL/71228_p_dog_get_many_image.sql new file mode 100644 index 0000000..1e0880a --- /dev/null +++ b/static/MySQL/71228_p_dog_get_many_image.sql @@ -0,0 +1,450 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_image; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_image ( + IN a_id_user INT + , IN a_get_all_file_type BIT + , IN a_get_inactive_file_type BIT + , IN a_ids_file_type TEXT + , IN a_names_file_type TEXT + , 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_image BIT + , IN a_get_inactive_image BIT + , IN a_ids_image TEXT + , IN a_names_image 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_images BIT + , 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_guid BINARY(36); + 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; + DECLARE v_id_type_error_no_permission 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(250) 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_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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_file_type := IFNULL(a_get_all_file_type, 0); + SET a_get_inactive_file_type := IFNULL(a_get_inactive_file_type, 0); + SET a_ids_file_type := TRIM(IFNULL(a_ids_file_type, '')); + SET a_names_file_type := TRIM(IFNULL(a_names_file_type, '')); + -- 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_get_all_image := IFNULL(a_get_all_image, 0); + SET a_get_inactive_image := IFNULL(a_get_inactive_image, 0); + SET a_ids_image := TRIM(IFNULL(a_ids_image, '')); + SET a_names_image := TRIM(IFNULL(a_names_image, '')); + 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_images := IFNULL(a_output_images, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_dog + , a_get_inactive_dog + , a_ids_dog + , a_names_dog + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , 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_images + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Image; + + CREATE TEMPORARY TABLE tmp_Image ( + id_image INT NOT NULL + , id_file_type INT + , id_dog INT + , path VARCHAR(1024) + , name VARCHAR(1024) + , 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(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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( + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.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; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + 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 Images.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Image 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 + , a_id_user -- a_id_user + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , 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_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , 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_image ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , 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_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , 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_Image_Temp; + SELECT * FROM parts.DOG_Image_Temp; + END IF; + + INSERT INTO tmp_Image ( + id_image + , id_file_type + , id_dog + , path + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + IMAGE_T.id_image + , IMAGE_T.id_file_type + , IMAGE_T.id_dog + , IMAGE_T.path + , IMAGE_T.name + , IMAGE_T.active + + , IMAGE_T.does_meet_id_filters + , IMAGE_T.does_meet_non_id_filters + FROM parts.DOG_Image_Temp IMAGE_T + WHERE IMAGE_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Image; + SELECT * FROM tmp_Image; + END IF; + 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 + IF a_debug = 1 THEN + SELECT * FROM tmp_Image; + END IF; + + DELETE FROM tmp_Image; + END IF; + + + -- Outputs + -- Images + IF a_output_images = 1 THEN + SELECT + t_IMAGES.id_image + , t_IMAGES.id_file_type + , FILE_TYPE.name AS name_file_type + , t_IMAGES.id_dog + , DOG.name AS name_dog + , t_IMAGES.path + , t_IMAGES.name + , t_IMAGES.active + + , t_IMAGES.does_meet_id_filters + , t_IMAGES.does_meet_non_id_filters + FROM tmp_Image t_IMAGES + LEFT JOIN parts.DOG_Image IMAGES ON t_IMAGES.id_image = IMAGES.id_image + LEFT JOIN parts.CORE_File_Type FILE_TYPE ON IMAGES.id_file_type = FILE_TYPE.id_file_type + LEFT JOIN parts.DOG_Dog DOG ON IMAGES.id_dog = DOG.id_dog + ORDER BY t_IMAGES.name + ; + END IF; + + -- 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 AND v_can_view = 1 THEN + SELECT * FROM tmp_Image; + END IF; + + CALL parts.p_dog_clear_calc_image( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Image; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_image ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , '' -- a_names_file_type + , 1 -- a_get_all_dog + , 0 -- a_get_inactive_dog + , '' -- a_ids_dog + , '' -- a_names_dog + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , '' -- a_names_image + , 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_images + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_image ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , 'pat,point' -- a_names_file_type + , 1 -- a_get_all_dog + , 0 -- a_get_inactive_dog + , '' -- a_ids_dog + , 'pat,point' -- a_names_dog + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , 'pat,point' -- a_names_image + , 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_images + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71232_p_dog_calc_button_icon.sql b/static/MySQL/71232_p_dog_calc_button_icon.sql new file mode 100644 index 0000000..4c8b4ca --- /dev/null +++ b/static/MySQL/71232_p_dog_calc_button_icon.sql @@ -0,0 +1,975 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_button_icon; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_button_icon ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_file_type BIT + , IN a_get_inactive_file_type BIT + , IN a_ids_file_type TEXT + , IN a_names_file_type TEXT + , IN a_get_all_image BIT + , IN a_get_inactive_image BIT + , IN a_ids_image TEXT + , IN a_names_image TEXT + , IN a_get_all_button_icon BIT + , IN a_get_inactive_button_icon BIT + , IN a_ids_button_icon TEXT + , IN a_names_button_icon TEXT + , IN a_notes_button_icon 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 +) +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_has_filter_image_id BIT; + DECLARE v_has_filter_image_name BIT; + DECLARE v_has_filter_button_icon_id BIT; + DECLARE v_has_filter_button_icon_name BIT; + DECLARE v_has_filter_button_icon_notes 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; + DECLARE v_id_type_error_no_permission 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_Button_Icon ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Button_Icon ( + 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_Button_Icon 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_Button_Icon; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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 ); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_file_type := IFNULL(a_get_all_file_type, 0); + SET a_get_inactive_file_type := IFNULL(a_get_inactive_file_type, 0); + SET a_ids_file_type := TRIM(IFNULL(a_ids_file_type, '')); + SET a_names_file_type := TRIM(IFNULL(a_names_file_type, '')); + SET a_get_all_image := IFNULL(a_get_all_image, 0); + SET a_get_inactive_image := IFNULL(a_get_inactive_image, 0); + SET a_ids_image := TRIM(IFNULL(a_ids_image, '')); + SET a_names_image := TRIM(IFNULL(a_names_image, '')); + */ + SET a_get_all_button_icon := IFNULL(a_get_all_button_icon, 0); + SET a_get_inactive_button_icon := IFNULL(a_get_inactive_button_icon, 0); + SET a_ids_button_icon := TRIM(IFNULL(a_ids_button_icon, '')); + SET a_names_button_icon := TRIM(IFNULL(a_names_button_icon, '')); + SET a_notes_button_icon := TRIM(IFNULL(a_notes_button_icon, '')); + 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); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , a_get_all_button_icon + , a_get_inactive_button_icon + , a_ids_button_icon + , a_names_button_icon + , a_notes_button_icon + , 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 + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Button_Icon; + + CREATE TEMPORARY TABLE tmp_Image_Calc_Button_Icon ( + id_image INT NOT NULL + , id_file_type INT + , id_dog INT + , path VARCHAR(1024) + , name VARCHAR(1024) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Button_Icon_Calc_Button_Icon ( + id_button_icon INT NOT NULL + , id_image INT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + , does_image_already_exist_in_temp_table BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Button_Icon ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Button_Icon ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Button_Icon; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Button_Icon ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Button_Icon; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Notes_Calc_Button_Icon ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Notes_Calc_Button_Icon; + + SET v_has_filter_button_icon_id = CASE WHEN a_ids_button_icon <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_icon_name = CASE WHEN a_names_button_icon <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_icon_notes = CASE WHEN a_notes_button_icon <> '' THEN 1 ELSE 0 END; + + -- Call Calc Images + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Button_Icon 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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , 1 -- a_get_all_dog + , 0 -- a_get_inactive_dog + , '' -- a_ids_dog + , '' -- a_names_dog + , a_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_image ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , 1 -- a_get_all_dog + , 0 -- a_get_inactive_dog + , '' -- a_ids_dog + , '' -- a_names_dog + , a_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , 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 + ); + + INSERT INTO tmp_Image_Calc_Button_Icon ( + id_image + , id_file_type + , id_dog + , path + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + IMAGES_T.id_image + , IMAGES_T.id_file_type + , IMAGES_T.id_dog + , IMAGES_T.path + , IMAGES_T.name + , IMAGES_T.active + + , IMAGES_T.does_meet_id_filters + , IMAGES_T.does_meet_non_id_filters + FROM parts.DOG_Image_Temp IMAGES_T + WHERE IMAGES_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Image_Calc_Button_Icon; + END IF; + END IF; + + -- Button_Icons + IF v_has_filter_button_icon_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_button_icon, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Button_Icon ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_button_icon_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_button_icon, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Button_Icon ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_button_icon_notes = 1 THEN + CALL parts.p_core_split(a_guid, a_notes_button_icon, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Notes_Calc_Button_Icon ( + 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 = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Button_Icon 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 * + FROM tmp_Split_Id_Calc_Button_Icon t_SPLIT_ID + LEFT JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_SPLIT_ID.as_int = BUTTON_ICON.id_button_icon + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(BUTTON_ICON.id_button_icon) + OR ( + BUTTON_ICON.active = 0 + AND a_get_inactive_button_icon = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Button_Icon ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Button_Icon IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Button_Icon t_SPLIT_ID + LEFT JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_SPLIT_ID.as_int = BUTTON_ICON.id_button_icon + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(BUTTON_ICON.id_button_icon) + OR ( + BUTTON_ICON.active = 0 + AND a_get_inactive_button_icon = 0 + ) + ; + /* Don't error on names, or notes not found + ELSEIF EXISTS () + */ + ELSE + IF a_debug = 1 THEN + SELECT 'Button_Icon Filters'; + WITH + Button_Icon_Id_Filter AS ( + SELECT BUTTON_ICON.id_button_icon + FROM tmp_Split_Id_Calc_Button_Icon t_SPLIT_ID + INNER JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_SPLIT_ID.as_int = BUTTON_ICON.id_button_icon + ) + , Button_Icon_Name_Filter AS ( + SELECT BUTTON_ICON.id_button_icon + FROM tmp_Split_Name_Calc_Button_Icon t_SPLIT_NAME + INNER JOIN parts.DOG_Button_Icon BUTTON_ICON ON BUTTON_ICON.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE + t_SPLIT_NAME.substring IS NOT NULL + AND t_SPLIT_NAME.substring <> '' + ) + , Button_Icon_Notes_Filter AS ( + SELECT BUTTON_ICON.id_button_icon + FROM tmp_Split_Notes_Calc_Button_Icon t_SPLIT_NOTES + INNER JOIN parts.DOG_Button_Icon BUTTON_ICON ON BUTTON_ICON.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') + WHERE + t_SPLIT_NOTES.substring IS NOT NULL + AND t_SPLIT_NOTES.substring <> '' + ) + , Button_Icon_Filters AS ( + SELECT + BUTTON_ICON_COMBINED.id_button_icon + , MAX(BUTTON_ICON_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(BUTTON_ICON_COMBINED.does_meet_name_filter) AS does_meet_name_filter + , MAX(BUTTON_ICON_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter + FROM ( + SELECT + BUTTON_ICON_ID_FILTER.id_button_icon + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + , 0 AS does_meet_notes_filter + FROM Button_Icon_Id_Filter BUTTON_ICON_ID_FILTER + UNION + SELECT + BUTTON_ICON_NAME_FILTER.id_button_icon + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + , 0 AS does_meet_notes_filter + FROM Button_Icon_Name_Filter BUTTON_ICON_NAME_FILTER + UNION + SELECT + BUTTON_ICON_NOTES_FILTER.id_button_icon + , 0 AS does_meet_id_filter + , 0 AS does_meet_name_filter + , 1 AS does_meet_notes_filter + FROM Button_Icon_Notes_Filter BUTTON_ICON_NOTES_FILTER + ) BUTTON_ICON_COMBINED + GROUP BY BUTTON_ICON_COMBINED.id_button_icon + ) + SELECT + BUTTON_ICON.id_button_icon + , BUTTON_ICON.id_image + , BUTTON_ICON.code + , BUTTON_ICON.name + , BUTTON_ICON.notes + , CASE WHEN + v_has_filter_button_icon_id = 0 + OR BUTTON_ICON_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + , CASE WHEN + ( + v_has_filter_button_icon_name = 0 + AND v_has_filter_button_icon_notes = 0 + ) + OR BUTTON_ICON_FILTERS.does_meet_name_filter = 1 + OR BUTTON_ICON_FILTERS.does_meet_notes_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN t_IMAGE.id_image IS NOT NULL THEN 1 ELSE 0 END AS does_image_already_exist_in_temp_table + FROM parts.DOG_Button_Icon BUTTON_ICON + LEFT JOIN tmp_Image_Calc_Button_Icon t_IMAGE ON BUTTON_ICON.id_image = t_IMAGE.id_image + LEFT JOIN Button_Icon_Filters BUTTON_ICON_FILTERS ON BUTTON_ICON.id_button_icon = BUTTON_ICON_FILTERS.id_button_icon + WHERE + ( + a_get_all_button_icon = 1 + OR ( + v_has_filter_button_icon_id = 1 + AND BUTTON_ICON_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_button_icon_name = 1 + AND BUTTON_ICON_FILTERS.does_meet_name_filter = 1 + ) + OR ( + v_has_filter_button_icon_notes = 1 + AND BUTTON_ICON_FILTERS.does_meet_notes_filter = 1 + ) + ) + AND ( + a_get_inactive_button_icon = 1 + OR BUTTON_ICON.active = 1 + ) + ; + END IF; + INSERT INTO tmp_Button_Icon_Calc_Button_Icon ( + id_button_icon + , id_image + , does_meet_id_filters + , does_meet_non_id_filters + , does_image_already_exist_in_temp_table + ) + WITH + Button_Icon_Id_Filter AS ( + SELECT BUTTON_ICON.id_button_icon + FROM tmp_Split_Id_Calc_Button_Icon t_SPLIT_ID + INNER JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_SPLIT_ID.as_int = BUTTON_ICON.id_button_icon + ) + , Button_Icon_Name_Filter AS ( + SELECT BUTTON_ICON.id_button_icon + FROM tmp_Split_Name_Calc_Button_Icon t_SPLIT_NAME + INNER JOIN parts.DOG_Button_Icon BUTTON_ICON ON BUTTON_ICON.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE + t_SPLIT_NAME.substring IS NOT NULL + AND t_SPLIT_NAME.substring <> '' + ) + , Button_Icon_Notes_Filter AS ( + SELECT BUTTON_ICON.id_button_icon + FROM tmp_Split_Notes_Calc_Button_Icon t_SPLIT_NOTES + INNER JOIN demo.DOG_Button_Icon BUTTON_ICON ON BUTTON_ICON.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') + WHERE + t_SPLIT_NOTES.substring IS NOT NULL + AND t_SPLIT_NOTES.substring <> '' + ) + , Button_Icon_Filters AS ( + SELECT + BUTTON_ICON_COMBINED.id_button_icon + , MAX(BUTTON_ICON_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(BUTTON_ICON_COMBINED.does_meet_name_filter) AS does_meet_name_filter + , MAX(BUTTON_ICON_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter + FROM ( + SELECT + BUTTON_ICON_ID_FILTER.id_button_icon + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + , 0 AS does_meet_notes_filter + FROM Button_Icon_Id_Filter BUTTON_ICON_ID_FILTER + UNION + SELECT + BUTTON_ICON_NAME_FILTER.id_button_icon + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + , 0 AS does_meet_notes_filter + FROM Button_Icon_Name_Filter BUTTON_ICON_NAME_FILTER + UNION + SELECT + BUTTON_ICON_NOTES_FILTER.id_button_icon + , 0 AS does_meet_id_filter + , 0 AS does_meet_name_filter + , 1 AS does_meet_notes_filter + FROM Button_Icon_Notes_Filter BUTTON_ICON_NOTES_FILTER + ) BUTTON_ICON_COMBINED + GROUP BY BUTTON_ICON_COMBINED.id_button_icon + ) + SELECT + BUTTON_ICON.id_button_icon + , BUTTON_ICON.id_image + , CASE WHEN + v_has_filter_button_icon_id = 0 + OR IFNULL(BUTTON_ICON_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_button_icon_name = 0 + AND v_has_filter_button_icon_notes = 0 + ) + OR IFNULL(BUTTON_ICON_FILTERS.does_meet_name_filter, 0) = 1 + OR IFNULL(BUTTON_ICON_FILTERS.does_meet_notes_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + , CASE WHEN t_IMAGE.id_image IS NOT NULL THEN 1 ELSE 0 END AS does_image_already_exist_in_temp_table + FROM parts.DOG_Button_Icon BUTTON_ICON + LEFT JOIN tmp_Image_Calc_Button_Icon t_IMAGE ON BUTTON_ICON.id_image = t_IMAGE.id_image + LEFT JOIN Button_Icon_Filters BUTTON_ICON_FILTERS ON BUTTON_ICON.id_button_icon = BUTTON_ICON_FILTERS.id_button_icon + WHERE + ( + a_get_all_button_icon = 1 + OR ( + v_has_filter_button_icon_id = 1 + AND BUTTON_ICON_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_button_icon_name = 1 + AND BUTTON_ICON_FILTERS.does_meet_name_filter = 1 + ) + OR ( + v_has_filter_button_icon_notes = 1 + AND BUTTON_ICON_FILTERS.does_meet_notes_filter = 1 + ) + ) + AND ( + a_get_inactive_button_icon = 1 + OR BUTTON_ICON.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Button_Icon; + DELETE FROM tmp_Split_Name_Calc_Button_Icon; + DELETE FROM tmp_Split_Notes_Calc_Button_Icon; + + IF a_debug = 1 THEN + SELECT 'After get Button Icons and Images'; + SELECT * FROM tmp_Image_Calc_Button_Icon; + SELECT * FROM tmp_Button_Icon_Calc_Button_Icon; + END IF; + + -- Missing Images + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Button_Icon 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_require_all_id_search_filters_met = 0 + AND a_require_all_non_id_search_filters_met = 0 + THEN + INSERT INTO tmp_Image_Calc_Button_Icon ( + id_image + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT DISTINCT + IMAGE.id_image + , 0 AS does_meet_id_filters + , 0 AS does_meet_non_id_filters + FROM parts.DOG_Image IMAGE + INNER JOIN tmp_Button_Icon_Calc_Button_Icon t_BUTTON_ICON + ON IMAGE.id_image = t_BUTTON_ICON.id_image + AND t_BUTTON_ICON.does_image_already_exist_in_temp_table = 0 + ; + END IF; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Button_Icon 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_BUTTON_ICON + FROM tmp_Button_Icon_Calc_Button_Icon t_BUTTON_ICON + LEFT JOIN tmp_Image_Calc_Button_Icon t_IMAGE ON t_BUTTON_ICON.id_image = t_IMAGE.id_image + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_BUTTON_ICON.does_meet_id_filters = 0 + OR IFNULL(t_IMAGE.does_meet_id_filters, 1) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_BUTTON_ICON.does_meet_non_id_filters = 0 + OR IFNULL(t_IMAGE.does_meet_non_id_filters, 1) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_BUTTON_ICON.does_meet_id_filters = 0 + AND IFNULL(t_IMAGE.does_meet_id_filters, 1) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_BUTTON_ICON.does_meet_non_id_filters = 0 + AND IFNULL(t_IMAGE.does_meet_non_id_filters, 1) = 0 + ) + ; + + IF a_debug = 1 THEN + WITH + Image_And_Best_Button_Icon AS ( + SELECT + t_BUTTON_ICON.id_image + , MAX(IFNULL(t_BUTTON_ICON.does_meet_id_filters, 0)) AS does_meet_id_filters + , MAX(IFNULL(t_BUTTON_ICON.does_meet_non_id_filters, 0)) AS does_meet_non_id_filters + FROM tmp_Button_Icon_Calc_Button_Icon t_BUTTON_ICON + GROUP BY t_BUTTON_ICON.id_image + ) + SELECT * + FROM tmp_Image_Calc_Button_Icon t_IMAGE + LEFT JOIN Image_And_Best_Button_Icon IMAGE_BEST ON t_IMAGE.id_image = IMAGE_BEST.id_image + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + IMAGE_BEST.does_meet_id_filters = 0 + OR IFNULL(t_IMAGE.does_meet_id_filters, 1) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + IMAGE_BEST.does_meet_non_id_filters = 0 + OR IFNULL(t_IMAGE.does_meet_non_id_filters, 1) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND IMAGE_BEST.does_meet_id_filters = 0 + AND IFNULL(t_IMAGE.does_meet_id_filters, 1) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND IMAGE_BEST.does_meet_non_id_filters = 0 + AND IFNULL(t_IMAGE.does_meet_non_id_filters, 1) = 0 + ) + ; + END IF; + + WITH + Image_And_Best_Button_Icon AS ( + SELECT + t_BUTTON_ICON.id_image + , MAX(IFNULL(t_BUTTON_ICON.does_meet_id_filters, 0)) AS does_meet_id_filters + , MAX(IFNULL(t_BUTTON_ICON.does_meet_non_id_filters, 0)) AS does_meet_non_id_filters + FROM tmp_Button_Icon_Calc_Button_Icon t_BUTTON_ICON + GROUP BY t_BUTTON_ICON.id_image + ) + DELETE t_IMAGE + FROM tmp_Image_Calc_Button_Icon t_IMAGE + LEFT JOIN Image_And_Best_Button_Icon IMAGE_BEST ON t_IMAGE.id_image = IMAGE_BEST.id_image + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + IFNULL(IMAGE_BEST.does_meet_id_filters, 0) = 0 + OR IFNULL(t_IMAGE.does_meet_id_filters, 1) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + IFNULL(IMAGE_BEST.does_meet_non_id_filters, 0) = 0 + OR IFNULL(t_IMAGE.does_meet_non_id_filters, 1) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND IFNULL(IMAGE_BEST.does_meet_id_filters, 0) = 0 + AND IFNULL(t_IMAGE.does_meet_id_filters, 1) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND IFNULL(IMAGE_BEST.does_meet_non_id_filters, 0) = 0 + AND IFNULL(t_IMAGE.does_meet_non_id_filters, 1) = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Button_Icons'; + SELECT * FROM tmp_Image_Calc_Button_Icon; + SELECT * FROM tmp_Button_Icon_Calc_Button_Icon; + END IF; + + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_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_Calc_Button_Icon t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Button_Icon ( + 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 Button Icons.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Image_Calc_Button_Icon; + SELECT * FROM tmp_Button_Icon_Calc_Button_Icon; + SELECT * FROM tmp_Msg_Error_Calc_Button_Icon; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Button_Icon 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_Image_Calc_Button_Icon; + SELECT * FROM tmp_Button_Icon_Calc_Button_Icon; + END IF; + + DELETE FROM tmp_Button_Icon_Calc_Button_Icon; + DELETE FROM tmp_Image_Calc_Button_Icon; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Button_Icons + INSERT INTO parts.DOG_Button_Icon_Temp ( + guid + , id_button_icon + , id_image + , code + , name + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_BUTTON_ICON.id_button_icon + , t_BUTTON_ICON.id_image + , BUTTON_ICON.code + , BUTTON_ICON.name + , BUTTON_ICON.notes + , BUTTON_ICON.active + + , t_BUTTON_ICON.does_meet_id_filters + , t_BUTTON_ICON.does_meet_non_id_filters + FROM parts.DOG_Button_Icon BUTTON_ICON + INNER JOIN tmp_Button_Icon_Calc_Button_Icon t_BUTTON_ICON ON BUTTON_ICON.id_button_icon = t_BUTTON_ICON.id_button_icon + ; + COMMIT; + + -- 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_Button_Icon 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_Image_Calc_Button_Icon; + SELECT * FROM tmp_Button_Icon_Calc_Button_Icon; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon_Calc_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Button_Icon; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_button_icon ( + 'slips ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , '' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , '' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , '' -- a_names_button_icon + , '' -- a_notes_button_icon + , 0 -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug +); + +CALL parts.p_dog_calc_button_icon ( + 'slips ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , 'pat,point' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , 'pat,point' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , 'pat,point' -- a_names_button_icon + , 'pat,point' -- a_notes_button_icon + , 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 + , 0 -- a_debug +); +SELECT * +FROM parts.DOG_Button_Icon_Temp +; + +CALL parts.p_dog_clear_calc_button_icon ( + 'slips ' -- a_guid + , 1 -- debug +); + +DELETE +FROM parts.DOG_Button_Icon_Temp +; + +*/ diff --git a/static/MySQL/71232_p_dog_clear_calc_button_icon.sql b/static/MySQL/71232_p_dog_clear_calc_button_icon.sql new file mode 100644 index 0000000..d183874 --- /dev/null +++ b/static/MySQL/71232_p_dog_clear_calc_button_icon.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_button_icon; +DROP PROCEDURE IF EXISTS parts.p_button_icon_clear_calc_button_icon; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_button_icon ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE BUTTON_ICONS_T + FROM parts.DOG_Button_Icon_Temp BUTTON_ICONS_T + WHERE BUTTON_ICONS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_button_icon ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71232_p_dog_get_many_button_icon.sql b/static/MySQL/71232_p_dog_get_many_button_icon.sql new file mode 100644 index 0000000..480ad9a --- /dev/null +++ b/static/MySQL/71232_p_dog_get_many_button_icon.sql @@ -0,0 +1,448 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_button_icon; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_button_icon ( + IN a_id_user INT + , IN a_get_all_file_type BIT + , IN a_get_inactive_file_type BIT + , IN a_ids_file_type TEXT + , IN a_names_file_type TEXT + , IN a_get_all_image BIT + , IN a_get_inactive_image BIT + , IN a_ids_image TEXT + , IN a_names_image TEXT + , IN a_get_all_button_icon BIT + , IN a_get_inactive_button_icon BIT + , IN a_ids_button_icon TEXT + , IN a_names_button_icon TEXT + , IN a_notes_button_icon 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_can_view BIT; + 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_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; + DECLARE v_id_type_error_no_permission 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(250) 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_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + 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_file_type := IFNULL(a_get_all_file_type, 0); + SET a_get_inactive_file_type := IFNULL(a_get_inactive_file_type, 0); + SET a_ids_file_type := TRIM(IFNULL(a_ids_file_type, '')); + SET a_names_file_type := TRIM(IFNULL(a_names_file_type, '')); + SET a_get_all_image := IFNULL(a_get_all_image, 0); + SET a_get_inactive_image := IFNULL(a_get_inactive_image, 0); + SET a_ids_image := TRIM(IFNULL(a_ids_image, '')); + SET a_names_image := TRIM(IFNULL(a_names_image, '')); + SET a_get_all_button_icon := IFNULL(a_get_all_button_icon, 0); + SET a_get_inactive_button_icon := IFNULL(a_get_inactive_button_icon, 0); + SET a_ids_button_icon := TRIM(IFNULL(a_ids_button_icon, '')); + SET a_names_button_icon := TRIM(IFNULL(a_names_button_icon, '')); + SET a_notes_button_icon := TRIM(IFNULL(a_notes_button_icon, '')); + 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_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , a_get_all_button_icon + , a_get_inactive_button_icon + , a_ids_button_icon + , a_names_button_icon + , a_notes_button_icon + , 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 + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; + + CREATE TEMPORARY TABLE tmp_Button_Icon ( + id_button_icon INT NOT NULL + , id_image INT + , code VARCHAR(250) + , name VARCHAR(250) + , 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(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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( + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.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; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + 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 Button_Icons.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Button_Icon 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 + , a_id_user -- a_id_user + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , a_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , a_get_all_button_icon -- a_get_all_button_icon + , a_get_inactive_button_icon -- a_get_inactive_button_icon + , a_ids_button_icon -- a_ids_button_icon + , a_names_button_icon -- a_names_button_icon + , a_notes_button_icon -- a_notes_button_icon + , 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_button_icon ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_file_type -- a_get_all_file_type + , a_get_inactive_file_type -- a_get_inactive_file_type + , a_ids_file_type -- a_ids_file_type + , a_names_file_type -- a_names_file_type + , a_get_all_image -- a_get_all_image + , a_get_inactive_image -- a_get_inactive_image + , a_ids_image -- a_ids_image + , a_names_image -- a_names_image + , a_get_all_button_icon -- a_get_all_button_icon + , a_get_inactive_button_icon -- a_get_inactive_button_icon + , a_ids_button_icon -- a_ids_button_icon + , a_names_button_icon -- a_names_button_icon + , a_notes_button_icon -- a_notes_button_icon + , 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_Button_Icon_Temp; + SELECT * FROM parts.DOG_Button_Icon_Temp; + END IF; + + INSERT INTO tmp_Button_Icon ( + id_button_icon + , id_image + , code + , name + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + BUTTON_ICON_T.id_button_icon + , BUTTON_ICON_T.id_image + , BUTTON_ICON_T.code + , BUTTON_ICON_T.name + , BUTTON_ICON_T.notes + , BUTTON_ICON_T.active + + , BUTTON_ICON_T.does_meet_id_filters + , BUTTON_ICON_T.does_meet_non_id_filters + FROM parts.DOG_Button_Icon_Temp BUTTON_ICON_T + WHERE BUTTON_ICON_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Button_Icon; + SELECT * FROM tmp_Button_Icon; + END IF; + 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 + IF a_debug = 1 THEN + SELECT * FROM tmp_Button_Icon; + END IF; + + DELETE FROM tmp_Button_Icon; + END IF; + + + -- Outputs + -- Button_Icons + SELECT + t_BUTTON_ICONS.id_button_icon + , t_BUTTON_ICONS.id_image + , IMAGES.path AS path_image + , IMAGES.name AS name_image + , t_BUTTON_ICONS.code + , t_BUTTON_ICONS.name + , t_BUTTON_ICONS.notes + , t_BUTTON_ICONS.active + + , t_BUTTON_ICONS.does_meet_id_filters + , t_BUTTON_ICONS.does_meet_non_id_filters + FROM tmp_Button_Icon t_BUTTON_ICONS + LEFT JOIN parts.DOG_Image IMAGES ON t_BUTTON_ICONS.id_image = IMAGES.id_image + ORDER BY t_BUTTON_ICONS.name + ; + + -- 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 AND v_can_view = 1 THEN + SELECT * FROM tmp_Button_Icon; + END IF; + + CALL parts.p_dog_clear_calc_button_icon( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_button_icon ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , '' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , '' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , '' -- a_names_button_icon + , '' -- a_notes_button_icon + , 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_button_icon ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , 'pat,point' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , 'pat,point' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , 'pat,point' -- a_names_button_icon + , 'pat,point' -- a_notes_button_icon + , 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 +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71234_p_dog_save_button_icon.sql b/static/MySQL/71234_p_dog_save_button_icon.sql new file mode 100644 index 0000000..4b6de34 --- /dev/null +++ b/static/MySQL/71234_p_dog_save_button_icon.sql @@ -0,0 +1,555 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_save_button_icon; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_save_button_icon ( + IN a_comment VARCHAR(500), + IN a_guid BINARY(36), + IN a_id_user INT, + IN a_debug BIT +) +BEGIN + DECLARE v_can_admin BIT; + DECLARE v_can_create BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_id_access_level_edit INT; + DECLARE v_id_change_set 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 + 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(250) + , 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 SESSION group_concat_max_len=15000; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + 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_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1); + SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1); + + CALL parts.p_core_validate_guid ( a_guid ); + + DROP TABLE IF EXISTS tmp_Button_Icon_Copy; + DROP TABLE IF EXISTS tmp_Button_Icon; + + CREATE TEMPORARY TABLE tmp_Button_Icon ( + id_temp INT + , id_button_icon INT + , id_image INT + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , is_new BIT + , name_error VARCHAR(250) + ); + + CREATE TEMPORARY TABLE tmp_Button_Icon_Copy ( + id_temp INT + , id_button_icon INT + , id_image INT + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , is_new BIT + , name_error VARCHAR(250) + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) + , msg TEXT NOT NULL + ); + + + -- Get data from Temp table + INSERT INTO tmp_Button_Icon ( + id_temp + , id_button_icon + , id_image + , code + , name + , active + , is_new + ) + SELECT + BUTTON_ICONS_T.id_temp + , COALESCE( + BUTTON_ICONS.id_button_icon + , BUTTON_ICONS_T.id_button_icon + ) AS id_button_icon + , CASE WHEN IFNULL(BUTTON_ICONS_T.id_image, 0) < 1 THEN NULL ELSE BUTTON_ICONS_T.id_image END AS id_image + , COALESCE( + BUTTON_ICONS_T.code + , BUTTON_ICONS.code + ) AS code + , COALESCE( + BUTTON_ICONS_T.name + , BUTTON_ICONS.name + ) AS name + , COALESCE(BUTTON_ICONS_T.active, 1) AS active + , CASE WHEN COALESCE(BUTTON_ICONS.id_button_icon, BUTTON_ICONS_T.id_button_icon, 0) < 1 THEN 1 ELSE 0 END AS is_new + FROM parts.DOG_Button_Icon_Temp BUTTON_ICONS_T + LEFT JOIN parts.DOG_Button_Icon BUTTON_ICONS + ON BUTTON_ICONS_T.id_button_icon = BUTTON_ICONS.id_button_icon + OR ( + BUTTON_ICONS_T.name = BUTTON_ICONS.name + ) + WHERE BUTTON_ICONS_T.guid = a_guid + ; + + IF a_debug = 1 THEN + SELECT 'Button_Icon_Temp records'; + SELECT * FROM tmp_Button_Icon; + SELECT COUNT(*) FROM tmp_Button_Icon; + END IF; + + -- Error names + UPDATE tmp_Button_Icon t_BUTTON_ICONS + SET t_BUTTON_ICONS.name_error = COALESCE(t_BUTTON_ICONS.name, t_BUTTON_ICONS.code, t_BUTTON_ICONS.id_button_icon, '(No Button_Icon)') + ; + + IF a_debug = 1 THEN + SELECT 'After set name_error'; + SELECT * FROM tmp_Button_Icon; + SELECT COUNT(*) FROM tmp_Button_Icon; + END IF; + + -- Validation + -- Missing mandatory fields + -- code + IF EXISTS ( SELECT * FROM tmp_Button_Icon t_BUTTON_ICONS WHERE t_BUTTON_ICONS.code IS NULL ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('The following Button_Icon(s) do not have a valid Code: ', GROUP_CONCAT(t_BUTTON_ICONS.name_error SEPARATOR ', ')) AS msg + FROM tmp_Button_Icon t_BUTTON_ICONS + WHERE t_BUTTON_ICONS.code IS NULL + ; + END IF; + -- name + IF EXISTS ( SELECT * FROM tmp_Button_Icon t_BUTTON_ICONS WHERE t_BUTTON_ICONS.name IS NULL ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , name + , msg + ) + SELECT + v_id_type_error_bad_data + , v_name_type_error_bad_data + , CONCAT('The following Button_Icon(s) do not have a valid Name: ', GROUP_CONCAT(t_BUTTON_ICONS.name_error SEPARATOR ', ')) AS msg + FROM tmp_Button_Icon t_BUTTON_ICONS + WHERE t_BUTTON_ICONS.name IS NULL + ; + END IF; + + -- Duplicates + -- Duplicate names + INSERT INTO tmp_Button_Icon_Copy ( + id_temp + , id_button_icon + , id_image + , code + , name + , active + , is_new + , name_error + ) + SELECT + t_BUTTON_ICONS.id_temp + , t_BUTTON_ICONS.id_button_icon + , t_BUTTON_ICONS.id_image + , t_BUTTON_ICONS.code + , t_BUTTON_ICONS.name + , t_BUTTON_ICONS.active + , t_BUTTON_ICONS.is_new + , t_BUTTON_ICONS.name_error + FROM tmp_Button_Icon t_BUTTON_ICONS + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) AS Count_Temp_Button_Icon FROM tmp_Button_Icon; + SELECT COUNT(*) AS Count_Temp_Button_Icon_Copy FROM tmp_Button_Icon_Copy; + + WITH + Combined_Button_Icons AS ( + SELECT + BUTTON_ICONS.id_button_icon + , BUTTON_ICONS.name + , COALESCE(t_BUTTON_ICONS_COPY.name, t_BUTTON_ICONS_COPY.code, t_BUTTON_ICONS_COPY.id_button_icon, '(No Button_Icon)') AS name_error + FROM parts.DOG_Button_Icon BUTTON_ICONS + LEFT JOIN tmp_Button_Icon_Copy t_BUTTON_ICONS_COPY ON BUTTON_ICONS.name = t_BUTTON_ICONS_COPY.name + WHERE t_BUTTON_ICONS_COPY.is_new = 1 + UNION + SELECT + t_BUTTON_ICONS.id_button_icon + , t_BUTTON_ICONS.name + , t_BUTTON_ICONS.name_error + FROM tmp_Button_Icon t_BUTTON_ICONS + ) + , Duplicate_Button_Icon_Name_Row_Numbers AS ( + SELECT + COMBINED_BUTTON_ICONS.id_button_icon + , COMBINED_BUTTON_ICONS.name + , COMBINED_BUTTON_ICONS.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_BUTTON_ICONS.name ORDER BY COMBINED_BUTTON_ICONS.name_error ASC) AS index_button_icon_name_as_duplicate + FROM Combined_Button_Icons COMBINED_BUTTON_ICONS + ) + SELECT * + FROM Duplicate_Button_Icon_Name_Row_Numbers + ; + END IF; + + IF EXISTS ( + WITH + Combined_Button_Icons AS ( + SELECT + BUTTON_ICONS.id_button_icon + , BUTTON_ICONS.name + , COALESCE(t_BUTTON_ICONS_COPY.name, t_BUTTON_ICONS_COPY.code, t_BUTTON_ICONS_COPY.id_button_icon, '(No Button_Icon)') AS name_error + FROM parts.DOG_Button_Icon BUTTON_ICONS + LEFT JOIN tmp_Button_Icon_Copy t_BUTTON_ICONS_COPY ON BUTTON_ICONS.name = t_BUTTON_ICONS_COPY.name + WHERE t_BUTTON_ICONS_COPY.is_new = 1 + UNION + SELECT + t_BUTTON_ICONS.id_button_icon + , t_BUTTON_ICONS.name + , t_BUTTON_ICONS.name_error + FROM tmp_Button_Icon t_BUTTON_ICONS + ) + , Duplicate_Button_Icon_Name_Row_Numbers AS ( + SELECT + COMBINED_BUTTON_ICONS.id_button_icon + , COMBINED_BUTTON_ICONS.name + , COMBINED_BUTTON_ICONS.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_BUTTON_ICONS.name ORDER BY COMBINED_BUTTON_ICONS.name_error ASC) AS index_button_icon_name_as_duplicate + FROM Combined_Button_Icons COMBINED_BUTTON_ICONS + ) + SELECT * + FROM Duplicate_Button_Icon_Name_Row_Numbers DUPLICATE_BUTTON_ICONS + WHERE DUPLICATE_BUTTON_ICONS.index_button_icon_name_as_duplicate > 1 + GROUP BY DUPLICATE_BUTTON_ICONS.name + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + WITH + Combined_Button_Icons AS ( + SELECT + BUTTON_ICONS.id_button_icon + , BUTTON_ICONS.name + , COALESCE(t_BUTTON_ICONS_COPY.name, t_BUTTON_ICONS_COPY.code, t_BUTTON_ICONS_COPY.id_button_icon, '(No Button_Icon)') AS name_error + FROM parts.DOG_Button_Icon BUTTON_ICONS + LEFT JOIN tmp_Button_Icon_Copy t_BUTTON_ICONS_COPY ON BUTTON_ICONS.name = t_BUTTON_ICONS_COPY.name + WHERE t_BUTTON_ICONS_COPY.is_new = 1 + UNION + SELECT + t_BUTTON_ICONS.id_button_icon + , t_BUTTON_ICONS.name + , t_BUTTON_ICONS.name_error + FROM tmp_Button_Icon t_BUTTON_ICONS + ) + , Duplicate_Button_Icon_Name_Row_Numbers AS ( + SELECT + COMBINED_BUTTON_ICONS.id_button_icon + , COMBINED_BUTTON_ICONS.name + , COMBINED_BUTTON_ICONS.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_BUTTON_ICONS.name ORDER BY COMBINED_BUTTON_ICONS.name_error ASC) AS index_button_icon_name_as_duplicate + FROM Combined_Button_Icons COMBINED_BUTTON_ICONS + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Attempt to create duplicate or overwrite existing Button_Icons on: ', GROUP_CONCAT(DUPLICATE_BUTTON_ICONS.name_error SEPARATOR ', ')) AS msg + FROM Duplicate_Button_Icon_Name_Row_Numbers DUPLICATE_BUTTON_ICONS + WHERE DUPLICATE_BUTTON_ICONS.index_button_icon_as_duplicate > 1 + GROUP BY DUPLICATE_BUTTON_ICONS.name + ; + END IF; + + -- Permissions + -- Can Create + CALL parts.p_dog_calc_user( + a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_new -- ids_permission + , v_id_access_level_edit -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CU_T.has_access, 0) + INTO + v_can_create + FROM parts.DOG_Calc_User_Temp CU_T + WHERE CU_T.GUID = a_guid + LIMIT 1 + ; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF v_can_create = 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 edit Button_Icons.' + ) + ; + 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_Button_Icon; + END IF; + + DELETE FROM tmp_Button_Icon; + END IF; + + 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 + START TRANSACTION; + + INSERT INTO parts.DOG_Dog_Change_Set ( + comment + , id_user_updated_last_by + , updated_last_on + ) + VALUES ( + a_comment + , a_id_user + , v_time_start + ) + ; + + SET v_id_change_set := LAST_INSERT_ID(); + + UPDATE parts.DOG_Button_Icon BUTTON_ICONS + INNER JOIN tmp_Button_Icon t_BUTTON_ICONS + ON BUTTON_ICONS.id_button_icon = t_BUTTON_ICONS.id_button_icon + AND t_BUTTON_ICONS.is_new = 0 + SET + BUTTON_ICONS.id_image = t_BUTTON_ICONS.id_image + , BUTTON_ICONS.code = t_BUTTON_ICONS.code + , BUTTON_ICONS.name = t_BUTTON_ICONS.name + , BUTTON_ICONS.active = t_BUTTON_ICONS.active + , BUTTON_ICONS.id_change_set = v_id_change_set + ; + + INSERT INTO parts.DOG_Button_Icon ( + id_image + , code + , name + , active + , id_user_created_by + , created_on + ) + SELECT + t_BUTTON_ICONS.id_image AS id_image + , t_BUTTON_ICONS.code AS code + , t_BUTTON_ICONS.name AS name + , t_BUTTON_ICONS.active AS active + , a_id_user AS created_by + , v_time_start AS created_on + FROM tmp_Button_Icon t_BUTTON_ICONS + WHERE + t_BUTTON_ICONS.is_new = 1 + AND t_BUTTON_ICONS.active = 1 + ; + + COMMIT; + END IF; + + START TRANSACTION; + + DELETE FROM parts.DOG_Button_Icon_Temp + WHERE GUID = a_guid + ; + + COMMIT; + + -- 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_Button_Icon; + END IF; + + DROP TEMPORARY TABLE tmp_Button_Icon; + DROP TEMPORARY TABLE tmp_Msg_Error; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + + +/* + +'ripplesipplenippletippledippsykippsy' +DELETE FROM parts.DOG_Button_Icon WHERE id_button_icon > 740; +* / +delete +from parts.DOG_Button_Icon_Audit +where id_button_icon > 768 +; +delete +from parts.DOG_Button_Icon +where id_button_icon > 768 +; +delete +from parts.DOG_Button_Icon_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Button_Icon_Temp +; +select COUNT(*) +from parts.DOG_Button_Icon_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Button_Icon +; +select COUNT(*) +from parts.DOG_Button_Icon +; + +INSERT INTO parts.DOG_Button_Icon_Temp ( + id_button_icon + , id_image + , code + , name + , active + , guid +) +VALUES ( + -1 -- id_button_icon + , NULL -- id_image + , 'NONE' -- code + , 'None' -- name + , 1 -- active + , 'ripplesipplenippletippledippsykippsy' +); + +CALL parts.p_dog_save_button_icon ( + 'nipples' + , 'ripplesipplenippletippledippsykippsy' + , 1 + , 1 +); + + +select + * + -- COUNT(*) +-- delete +from parts.DOG_Button_Icon_Temp +; +select COUNT(*) +from parts.DOG_Button_Icon_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Button_Icon +; +select COUNT(*) +from parts.DOG_Button_Icon +; + +*/ \ No newline at end of file diff --git a/static/MySQL/71238_p_dog_get_many_command_button_link.sql b/static/MySQL/71238_p_dog_get_many_command_button_link.sql new file mode 100644 index 0000000..dc7361f --- /dev/null +++ b/static/MySQL/71238_p_dog_get_many_command_button_link.sql @@ -0,0 +1,1209 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_command_button_link; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_command_button_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_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 + , IN a_hand_signal_default_descriptions_command TEXT + , IN a_notes_command TEXT + , IN a_get_all_button_shape BIT + , IN a_get_inactive_button_shape BIT + , IN a_ids_button_shape TEXT + , IN a_names_button_shape TEXT + , IN a_notes_button_shape TEXT + , IN a_get_all_colour BIT + , IN a_get_inactive_colour BIT + , IN a_ids_colour TEXT + , IN a_names_colour TEXT + , IN a_get_all_file_type BIT + , IN a_get_inactive_file_type BIT + , IN a_ids_file_type TEXT + , IN a_names_file_type TEXT + , IN a_get_all_image BIT + , IN a_get_inactive_image BIT + , IN a_ids_image TEXT + , IN a_names_image TEXT + , IN a_get_all_button_icon BIT + , IN a_get_inactive_button_icon BIT + , IN a_ids_button_icon TEXT + , IN a_names_button_icon TEXT + , IN a_notes_button_icon TEXT + , IN a_get_all_location BIT + , IN a_get_inactive_location BIT + , IN a_ids_location TEXT + , IN a_names_location 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_button_icon_id BIT; + DECLARE v_has_filter_button_icon_name BIT; + DECLARE v_has_filter_button_icon_notes BIT; + DECLARE v_has_filter_button_shape_id BIT; + DECLARE v_has_filter_button_shape_name BIT; + DECLARE v_has_filter_button_shape_notes BIT; + DECLARE v_has_filter_colour_id BIT; + DECLARE v_has_filter_colour_name BIT; + 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_hand_signal_default_description BIT; + DECLARE v_has_filter_command_notes BIT; + DECLARE v_has_filter_file_type_id BIT; + DECLARE v_has_filter_file_type_name BIT; + DECLARE v_has_filter_image_id BIT; + DECLARE v_has_filter_image_name BIT; + */ + DECLARE v_has_filter_link_id BIT; + -- DECLARE v_has_filter_location_id BIT; + -- DECLARE v_has_filter_location_name 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; + DECLARE v_guid BINARY(36); + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_minimum INT; + DECLARE v_time_start TIMESTAMP(6); + DECLARE v_can_view 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(250) 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_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 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_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_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_command_category_id = CASE WHEN a_ids_command_category <> '' THEN 1 ELSE 0 END; + SET v_has_filter_command_category_name = CASE WHEN a_names_command_category <> '' THEN 1 ELSE 0 END; + SET v_has_filter_command_id = CASE WHEN a_ids_command <> '' THEN 1 ELSE 0 END; + SET v_has_filter_command_name = CASE WHEN a_names_command <> '' THEN 1 ELSE 0 END; + SET v_has_filter_command_hand_signal_default_description = CASE WHEN a_hand_signal_default_descriptions_command <> '' THEN 1 ELSE 0 END; + SET v_has_filter_command_notes = CASE WHEN a_notes_command <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_shape_id = CASE WHEN a_ids_button_shape <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_shape_name = CASE WHEN a_names_button_shape <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_shape_notes = CASE WHEN a_notes_button_shape <> '' THEN 1 ELSE 0 END; + SET v_has_filter_colour_id = CASE WHEN a_ids_colour <> '' THEN 1 ELSE 0 END; + SET v_has_filter_colour_name = CASE WHEN a_names_colour <> '' THEN 1 ELSE 0 END; + SET v_has_filter_file_type_id = CASE WHEN a_ids_file_type <> '' THEN 1 ELSE 0 END; + SET v_has_filter_file_type_name = CASE WHEN a_names_file_type <> '' THEN 1 ELSE 0 END; + SET v_has_filter_image_id = CASE WHEN a_ids_image <> '' THEN 1 ELSE 0 END; + SET v_has_filter_image_name = CASE WHEN a_names_image <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_icon_id = CASE WHEN a_ids_button_icon <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_icon_name = CASE WHEN a_names_button_icon <> '' THEN 1 ELSE 0 END; + SET v_has_filter_button_icon_notes = CASE WHEN a_notes_button_icon <> '' THEN 1 ELSE 0 END; + */ + SET v_has_filter_link_id = CASE WHEN a_ids_link <> '' THEN 1 ELSE 0 END; + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_link + , a_get_inactive_link + , a_ids_link + , 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_hand_signal_default_descriptions_command + , a_names_command + , a_get_all_button_shape + , a_get_inactive_button_shape + , a_ids_button_shape + , a_names_button_shape + , a_get_all_colour + , a_get_inactive_colour + , a_ids_colour + , a_names_colour + , a_get_all_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , a_get_all_button_icon + , a_get_inactive_button_icon + , a_ids_button_icon + , a_names_button_icon + , a_notes_button_icon + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , 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 + ; + + 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 + ; + + SELECT + v_has_filter_link_id + /* + , 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_command_hand_signal_default_description + , v_has_filter_command_notes + , v_has_filter_button_shape_id + , v_has_filter_button_shape_name + , v_has_filter_button_shape_notes + , v_has_filter_colour_id + , v_has_filter_colour_name + , v_has_filter_file_type_id + , v_has_filter_file_type_name + , v_has_filter_image_id + , v_has_filter_image_name + , v_has_filter_button_icon_id + , v_has_filter_button_icon_name + , v_has_filter_button_icon_notes + */ + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Command_Button_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Location; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Command; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Button_Link; + + CREATE TEMPORARY TABLE tmp_Command_Button_Link ( + id_link INT NOT NULL + , id_command INT NOT NULL + , id_button_shape INT NOT NULL + , id_button_colour INT NOT NULL + , id_button_icon INT + , id_location INT NOT NULL + , active BIT + + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + -- , has_button + ); + + CREATE TEMPORARY TABLE tmp_Command_Category ( + id_command_category INT NOT NULL + , code VARCHAR(250) + , 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 ( + 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 + + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Button_Shape ( + id_button_shape INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , notes TEXT + , active BIT + + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Colour ( + id_colour INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Button_Icon ( + id_button_icon INT NOT NULL + , id_image INT + , path_image VARCHAR(1024) + , name_image VARCHAR(1024) + , code VARCHAR(250) + , name VARCHAR(250) + , notes TEXT + , active BIT + + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Location ( + id_location INT NOT NULL + , id_location_parent INT + , code VARCHAR(250) + , name VARCHAR(250) + , 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(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Command_Button_Link ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Command_Button_Link; + + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , 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( + v_guid -- a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.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 parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Command 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 + , 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 + , '' -- 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 + ; + END IF; + + CALL parts.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 + , '' -- 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 + ); + + 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 + ; + + INSERT INTO tmp_Command ( + id_command + , id_command_category + , name + , hand_signal_default_description + , can_have_button + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + 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 + + , 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 * FROM tmp_Command_Category; + SELECT * FROM tmp_Command; + END IF; + END IF; + + -- Call Button_Shape 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 + , a_id_user -- a_id_user + , a_get_all_button_shape -- a_get_all_button_shape + , a_get_inactive_button_shape -- a_get_inactive_button_shape + , a_ids_button_shape -- a_ids_button_shape + , a_names_button_shape -- a_names_button_shape + , a_notes_button_shape -- a_notes_button_shape + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_button_shape( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_button_shape -- a_get_all_button_shape + , a_get_inactive_button_shape -- a_get_inactive_button_shape + , a_ids_button_shape -- a_ids_button_shape + , a_names_button_shape -- a_names_button_shape + , a_notes_button_shape -- a_notes_button_shape + , 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 + ); + + INSERT INTO tmp_Button_Shape ( + id_button_shape + , code + , name + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + BUTTON_SHAPE_T.id_button_shape + , BUTTON_SHAPE_T.code + , BUTTON_SHAPE_T.name + , BUTTON_SHAPE_T.notes + , BUTTON_SHAPE_T.active + + , BUTTON_SHAPE_T.does_meet_id_filters + , BUTTON_SHAPE_T.does_meet_non_id_filters + FROM parts.DOG_Button_Shape_Temp BUTTON_SHAPE_T + WHERE BUTTON_SHAPE_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Button_Shape; + END IF; + END IF; + + -- Call Colour 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 + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_colour( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , 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 + ); + + INSERT INTO tmp_Colour ( + id_colour + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COLOUR_T.id_colour + , COLOUR_T.code + , COLOUR_T.name + , COLOUR_T.active + + , COLOUR_T.does_meet_id_filters + , COLOUR_T.does_meet_non_id_filters + FROM parts.DOG_Colour_Temp COLOUR_T + WHERE COLOUR_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Colour; + END IF; + END IF; + + -- Call Button_Icon 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 + , a_id_user -- a_id_user + , a_get_all_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , a_get_all_button_icon -- a_get_all_button_icon + , a_get_inactive_button_icon -- a_get_inactive_button_icon + , a_ids_button_icon -- a_ids_button_icon + , a_names_button_icon -- a_names_button_icon + , a_notes_button_icon -- a_notes_button_icon + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_button_icon( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_file_type + , a_get_inactive_file_type + , a_ids_file_type + , a_names_file_type + , a_get_all_image + , a_get_inactive_image + , a_ids_image + , a_names_image + , a_get_all_button_icon -- a_get_all_button_icon + , a_get_inactive_button_icon -- a_get_inactive_button_icon + , a_ids_button_icon -- a_ids_button_icon + , a_names_button_icon -- a_names_button_icon + , a_notes_button_icon -- a_notes_button_icon + , 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 + ); + + INSERT INTO tmp_Button_Icon ( + id_button_icon + , id_image + , path_image + , name_image + , code + , name + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + BUTTON_ICON_T.id_button_icon + , BUTTON_ICON_T.id_image + , IMAGES.path AS path_image + , IMAGES.name AS name_image + , BUTTON_ICON_T.code + , BUTTON_ICON_T.name + , BUTTON_ICON_T.notes + , BUTTON_ICON_T.active + + , BUTTON_ICON_T.does_meet_id_filters + , BUTTON_ICON_T.does_meet_non_id_filters + FROM parts.DOG_Button_Icon_Temp BUTTON_ICON_T + LEFT JOIN parts.DOG_Image IMAGES ON BUTTON_ICON_T.id_image = IMAGES.id_image + WHERE BUTTON_ICON_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Button_Icon; + END IF; + END IF; + + -- Call Location 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 + , a_id_user -- a_id_user + , a_get_all_location -- a_get_all_location + , a_get_inactive_location -- a_get_inactive_location + , a_ids_location -- a_ids_location + , a_names_location -- a_names_location + , 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_location( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_location -- a_get_all_location + , a_get_inactive_location -- a_get_inactive_location + , a_ids_location -- a_ids_location + , a_names_location -- a_names_location + , 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 + ); + + INSERT INTO tmp_Location ( + id_location + , id_location_parent + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + LOCATION_T.id_location + , LOCATION_T.id_location_parent + , LOCATION_T.code + , LOCATION_T.name + , LOCATION_T.active + + , LOCATION_T.does_meet_id_filters + , LOCATION_T.does_meet_non_id_filters + FROM parts.DOG_Location_Temp LOCATION_T + WHERE LOCATION_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Location; + END IF; + END IF; + + -- Command Button 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_Command_Button_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_Command_Button_Link ( + id_link + , id_command + , id_button_shape + , id_button_colour + , id_button_icon + , id_location + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Link_Id_Filter AS ( + SELECT COMMAND_BUTTON_LINK.id_link + FROM tmp_Split_Id_Calc_Command_Button_Link t_SPLIT_ID + INNER JOIN parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK ON t_SPLIT_ID.as_int = COMMAND_BUTTON_LINK.id_link + ) + , Link_Filters AS ( + SELECT + LINK_COMBINED.id_link + , MAX(LINK_COMBINED.does_meet_id_filter) AS does_meet_id_filter + FROM ( + SELECT + LINK_ID_FILTER.id_link + , 1 AS does_meet_id_filter + FROM Link_Id_Filter LINK_ID_FILTER + ) LINK_COMBINED + GROUP BY LINK_COMBINED.id_link + ) + SELECT + COMMAND_BUTTON_LINK.id_link AS id_command_button_link + , t_COMMAND.id_command + , t_BUTTON_SHAPE.id_button_shape + , t_COLOUR.id_colour + , t_BUTTON_ICON.id_button_icon + , t_LOCATION.id_location + , COMMAND_BUTTON_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 + , 1 AS does_meet_non_id_filters + FROM parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK + INNER JOIN tmp_Command t_COMMAND ON COMMAND_BUTTON_LINK.id_command = t_COMMAND.id_command + INNER JOIN tmp_Button_Shape t_BUTTON_SHAPE ON COMMAND_BUTTON_LINK.id_button_shape = t_BUTTON_SHAPE.id_button_shape + INNER JOIN tmp_Colour t_COLOUR ON COMMAND_BUTTON_LINK.id_button_colour = t_COLOUR.id_colour + INNER JOIN tmp_Button_Icon t_BUTTON_ICON ON COMMAND_BUTTON_LINK.id_button_icon = t_BUTTON_ICON.id_button_icon + INNER JOIN tmp_Location t_LOCATION ON COMMAND_BUTTON_LINK.id_location = t_LOCATION.id_location + LEFT JOIN Link_Filters LINK_FILTERS ON COMMAND_BUTTON_LINK.id_link = LINK_FILTERS.id_link + WHERE + ( + a_get_all_link = 1 + OR ( + v_has_filter_link_id = 1 + AND LINK_FILTERS.does_meet_id_filter = 1 + ) + ) + AND ( + a_get_inactive_link = 1 + OR COMMAND_BUTTON_LINK.active = 1 + ) + ; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Command_Button_Link; + + IF a_debug = 1 THEN + SELECT 'After get Links'; + SELECT * FROM tmp_Command_Category; + SELECT * FROM tmp_Command; + SELECT * FROM tmp_Button_Shape; + SELECT * FROM tmp_Colour; + SELECT * FROM tmp_Button_Icon; + SELECT * FROM tmp_Location; + SELECT * FROM tmp_Command_Button_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_COMMAND_BUTTON_LINK + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN tmp_Command t_COMMAND ON t_COMMAND_BUTTON_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 + LEFT JOIN tmp_Button_Shape t_BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK.id_button_shape = t_BUTTON_SHAPE.id_button_shape + LEFT JOIN tmp_Colour t_COLOUR ON t_COMMAND_BUTTON_LINK.id_button_colour = t_COLOUR.id_colour + LEFT JOIN tmp_Button_Icon t_BUTTON_ICON ON t_COMMAND_BUTTON_LINK.id_button_icon = t_BUTTON_ICON.id_button_icon + LEFT JOIN tmp_Location t_LOCATIONS ON t_COMMAND_BUTTON_LINK.id_location = t_LOCATIONS.id_location + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + IFNULL(t_COMMAND_BUTTON_LINK.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 IFNULL(t_BUTTON_SHAPE.does_meet_id_filters, 0) = 0 + OR IFNULL(t_COLOUR.does_meet_id_filters, 0) = 0 + OR IFNULL(t_BUTTON_ICON.does_meet_id_filters, 0) = 0 + OR IFNULL(t_LOCATIONS.does_meet_id_filters, 0) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + IFNULL(t_COMMAND_BUTTON_LINK.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 IFNULL(t_BUTTON_SHAPE.does_meet_non_id_filters, 0) = 0 + OR IFNULL(t_COLOUR.does_meet_non_id_filters, 0) = 0 + OR IFNULL(t_BUTTON_ICON.does_meet_non_id_filters, 0) = 0 + OR IFNULL(t_LOCATIONS.does_meet_non_id_filters, 0) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND IFNULL(t_COMMAND_BUTTON_LINK.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 + AND IFNULL(t_BUTTON_SHAPE.does_meet_id_filters, 0) = 0 + AND IFNULL(t_COLOUR.does_meet_id_filters, 0) = 0 + AND IFNULL(t_BUTTON_ICON.does_meet_id_filters, 0) = 0 + AND IFNULL(t_LOCATIONS.does_meet_id_filters, 0) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND IFNULL(t_COMMAND_BUTTON_LINK.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 + AND IFNULL(t_BUTTON_SHAPE.does_meet_non_id_filters, 0) = 0 + AND IFNULL(t_COLOUR.does_meet_non_id_filters, 0) = 0 + AND IFNULL(t_BUTTON_ICON.does_meet_non_id_filters, 0) = 0 + AND IFNULL(t_LOCATIONS.does_meet_non_id_filters, 0) = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Links'; + SELECT * FROM tmp_Command_Category; + SELECT * FROM tmp_Command; + SELECT * FROM tmp_Button_Shape; + SELECT * FROM tmp_Colour; + SELECT * FROM tmp_Button_Icon; + SELECT * FROM tmp_Location; + SELECT * FROM tmp_Command_Button_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 + IF a_debug = 1 THEN + SELECT * FROM tmp_Command; + SELECT * FROM tmp_Command_Category; + SELECT * FROM tmp_Button_Shape; + SELECT * FROM tmp_Colour; + SELECT * FROM tmp_Button_Icon; + SELECT * FROM tmp_Location; + SELECT * FROM tmp_Command_Button_Link; + END IF; + + DELETE FROM tmp_Location; + DELETE FROM tmp_Button_Icon; + DELETE FROM tmp_Colour; + DELETE FROM tmp_Button_Shape; + DELETE FROM tmp_Command; + DELETE FROM tmp_Command_Category; + DELETE FROM tmp_Command_Button_Link; + END IF; + + -- Outputs + -- Dog Command Links + SELECT + t_COMMAND_BUTTON_LINK.id_link + , t_COMMAND_CATEGORY.id_command_category + , t_COMMAND_CATEGORY.name AS name_command_category + , t_COMMAND_BUTTON_LINK.id_command + , t_COMMAND.name AS name_command + , t_COMMAND_BUTTON_LINK.id_button_shape + , t_BUTTON_SHAPE.name AS name_button_shape + , t_COMMAND_BUTTON_LINK.id_button_colour + , t_COLOUR.name AS name_button_colour + , t_COMMAND_BUTTON_LINK.id_button_icon + , t_BUTTON_ICON.name AS name_button_icon + , t_BUTTON_ICON.id_image AS id_image_button_icon + , t_BUTTON_ICON.path_image AS path_image_button_icon + , t_BUTTON_ICON.name_image AS name_image_button_icon + , t_COMMAND_BUTTON_LINK.id_location + , t_LOCATIONS.name AS name_location + , t_COMMAND_BUTTON_LINK.active + , t_COMMAND_BUTTON_LINK.does_meet_id_filters + , t_COMMAND_BUTTON_LINK.does_meet_non_id_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 + , t_BUTTON_SHAPE.does_meet_id_filters AS does_meet_button_shape_id_search_filters + , t_BUTTON_SHAPE.does_meet_non_id_filters AS does_meet_button_shape_non_id_search_filters + , t_COLOUR.does_meet_id_filters AS does_meet_colour_id_search_filters + , t_COLOUR.does_meet_non_id_filters AS does_meet_colour_non_id_search_filters + , t_BUTTON_ICON.does_meet_id_filters AS does_meet_button_icon_id_search_filters + , t_BUTTON_ICON.does_meet_non_id_filters AS does_meet_button_icon_non_id_search_filters + , t_LOCATIONS.does_meet_id_filters AS does_meet_location_id_search_filters + , t_LOCATIONS.does_meet_non_id_filters AS does_meet_location_non_id_search_filters + FROM parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK + INNER JOIN tmp_Command_Button_Link t_COMMAND_BUTTON_LINK ON COMMAND_BUTTON_LINK.id_link = t_COMMAND_BUTTON_LINK.id_link + LEFT JOIN tmp_Command t_COMMAND ON t_COMMAND_BUTTON_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 + LEFT JOIN tmp_Button_Shape t_BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK.id_button_shape = t_BUTTON_SHAPE.id_button_shape + LEFT JOIN tmp_Colour t_COLOUR ON t_COMMAND_BUTTON_LINK.id_button_colour = t_COLOUR.id_colour + LEFT JOIN tmp_Button_Icon t_BUTTON_ICON ON t_COMMAND_BUTTON_LINK.id_button_icon = t_BUTTON_ICON.id_button_icon + LEFT JOIN tmp_Location t_LOCATIONS ON t_COMMAND_BUTTON_LINK.id_location = t_LOCATIONS.id_location + ORDER BY + t_COMMAND_CATEGORY.name + , t_COMMAND.name + , t_BUTTON_SHAPE.name + , t_COLOUR.name + , t_BUTTON_ICON.name + , t_LOCATIONS.name + ; + + -- 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 AND v_can_view = 1 THEN + SELECT * FROM tmp_Command; + SELECT * FROM tmp_Command_Category; + SELECT * FROM tmp_Button_Shape; + SELECT * FROM tmp_Colour; + SELECT * FROM tmp_Button_Icon; + SELECT * FROM tmp_Location; + SELECT * FROM tmp_Command_Button_Link; + END IF; + + CALL parts.p_dog_clear_calc_command ( v_guid, 0 ); + CALL parts.p_dog_clear_calc_button_shape ( v_guid, 0 ); + CALL parts.p_dog_clear_calc_colour ( v_guid, 0 ); + CALL parts.p_dog_clear_calc_button_icon ( v_guid, 0 ); + CALL parts.p_dog_clear_calc_location ( v_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Command_Button_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Location; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape; + DROP TEMPORARY TABLE IF EXISTS tmp_Command; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Button_Link; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_command_button_link ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_link + , 0 -- a_get_inactive_link + , '' -- a_ids_link + , 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 + , '' -- a_hand_signal_default_descriptions_command + , '' -- a_notes_command + , 1 -- a_get_all_button_shape + , 0 -- a_get_inactive_button_shape + , '' -- a_ids_button_shape + , '' -- a_names_button_shape + , '' -- a_notes_button_shape + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , '' -- a_names_colour + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , '' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , '' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , '' -- a_names_button_icon + , '' -- a_notes_button_icon + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 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 +); + +CALL parts.p_dog_get_many_command_button_link ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_link + , 0 -- a_get_inactive_link + , '' -- a_ids_link + , 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_get_all_button_shape + , 0 -- a_get_inactive_button_shape + , '' -- a_ids_button_shape + , 'pat,point' -- a_names_button_shape + , 'pat,point' -- a_notes_button_shape + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , 'pat,point' -- a_names_colour + , 1 -- a_get_all_file_type + , 0 -- a_get_inactive_file_type + , '' -- a_ids_file_type + , 'pat,point' -- a_names_file_type + , 1 -- a_get_all_image + , 0 -- a_get_inactive_image + , '' -- a_ids_image + , 'pat,point' -- a_names_image + , 1 -- a_get_all_button_icon + , 0 -- a_get_inactive_button_icon + , '' -- a_ids_button_icon + , 'pat,point' -- a_names_button_icon + , 'pat,point' -- a_notes_button_icon + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , 'pat,point' -- a_names_location + , 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 +); + + +*/ \ No newline at end of file diff --git a/static/MySQL/71240_p_dog_save_command_button_link.sql b/static/MySQL/71240_p_dog_save_command_button_link.sql new file mode 100644 index 0000000..101f601 --- /dev/null +++ b/static/MySQL/71240_p_dog_save_command_button_link.sql @@ -0,0 +1,787 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_save_command_button_link; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_save_command_button_link ( + IN a_comment VARCHAR(500), + IN a_guid BINARY(36), + IN a_id_user INT, + IN a_debug BIT +) +BEGIN + DECLARE v_can_admin BIT; + DECLARE v_can_create BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_id_access_level_edit INT; + DECLARE v_id_change_set 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 + 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(250) + , 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 SESSION group_concat_max_len=15000; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + 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_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1); + SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1); + + CALL parts.p_core_validate_guid ( a_guid ); + + DROP TABLE IF EXISTS tmp_Command_Button_Link_Copy; + DROP TABLE IF EXISTS tmp_Command_Button_Link; + + CREATE TEMPORARY TABLE tmp_Command_Button_Link ( + id_temp INT + , id_link INT + , id_command INT + , id_button_shape INT + , id_button_colour INT + , id_button_icon INT + , id_location INT + , active BIT + , is_new BIT + , name_error VARCHAR(250) + ); + + CREATE TEMPORARY TABLE tmp_Command_Button_Link_Copy ( + id_temp INT + , id_link INT + , id_command INT + , id_button_shape INT + , id_button_colour INT + , id_button_icon INT + , id_location INT + , active BIT + , is_new BIT + , name_error VARCHAR(250) + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) + , msg TEXT NOT NULL + ); + + + -- Get data from Temp table + INSERT INTO tmp_Command_Button_Link ( + id_temp + , id_link + , id_command + , id_button_shape + , id_button_colour + , id_button_icon + , id_location + , active + , is_new + ) + SELECT + COMMAND_BUTTON_LINK_T.id_temp + , COALESCE(COMMAND_BUTTON_LINK.id_link, COMMAND_BUTTON_LINK_T.id_link) + , COALESCE( + COMMAND_BUTTON_LINK_T.id_command + , COMMAND_BUTTON_LINK.id_command + ) AS id_command + , COALESCE( + COMMAND_BUTTON_LINK_T.id_button_shape + , COMMAND_BUTTON_LINK.id_button_shape + ) AS id_button_shape + , COALESCE( + COMMAND_BUTTON_LINK_T.id_button_icon + , COMMAND_BUTTON_LINK.id_button_icon + ) AS id_button_colour + , COMMAND_BUTTON_LINK_T.id_button_icon + , COALESCE( + COMMAND_BUTTON_LINK_T.id_location + , COMMAND_BUTTON_LINK.id_location + ) AS id_location + , COALESCE(COMMAND_BUTTON_LINK_T.active, 1) AS active + , CASE WHEN COALESCE(COMMAND_BUTTON_LINK.id_link, COMMAND_BUTTON_LINK_T.id_link, 0) < 1 THEN 1 ELSE 0 END AS is_new + FROM parts.DOG_Command_Button_Link_Temp COMMAND_BUTTON_LINK_T + LEFT JOIN parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK + ON COMMAND_BUTTON_LINK_T.id_link = COMMAND_BUTTON_LINK.id_link + OR ( + COMMAND_BUTTON_LINK_T.id_command = COMMAND_BUTTON_LINK.id_command + AND COMMAND_BUTTON_LINK_T.id_button_shape = COMMAND_BUTTON_LINK.id_button_shape + AND COMMAND_BUTTON_LINK_T.id_button_colour = COMMAND_BUTTON_LINK.id_button_colour + AND COMMAND_BUTTON_LINK_T.id_location = COMMAND_BUTTON_LINK.id_location + AND ( + COMMAND_BUTTON_LINK.id_button_icon IS NULL + OR COMMAND_BUTTON_LINK_T.id_button_icon <=> COMMAND_BUTTON_LINK.id_button_icon + ) + ) + WHERE COMMAND_BUTTON_LINK_T.guid = a_guid + ; + + IF a_debug = 1 THEN + SELECT 'Command_Button_Link_Temp records'; + SELECT * FROM tmp_Command_Button_Link; + SELECT COUNT(*) FROM tmp_Command_Button_Link; + END IF; + + -- Error names + UPDATE tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN parts.DOG_Command COMMAND ON t_COMMAND_BUTTON_LINK.id_command = COMMAND.id_command + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK.id_button_shape = BUTTON_SHAPE.id_button_shape + LEFT JOIN parts.DOG_Colour COLOUR ON t_COMMAND_BUTTON_LINK.id_button_colour = COLOUR.id_colour + LEFT JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_COMMAND_BUTTON_LINK.id_button_icon = BUTTON_ICON.id_button_icon + LEFT JOIN parts.DOG_Location LOCATIONS ON t_COMMAND_BUTTON_LINK.id_location = LOCATIONS.id_location + SET t_COMMAND_BUTTON_LINK.name_error = CONCAT( + COALESCE(COMMAND.name, t_COMMAND_BUTTON_LINK.id_command, '(No Command)') + , ' - ' + , COALESCE(BUTTON_SHAPE.name, t_COMMAND_BUTTON_LINK.id_button_shape, '(No Button Shape)') + , ' - ' + , COALESCE(COLOUR.name, t_COMMAND_BUTTON_LINK.id_button_colour, '(No Colour)') + , ' - ' + , COALESCE(BUTTON_ICON.name, t_COMMAND_BUTTON_LINK.id_button_icon, '(No Button Icon)') + , ' - ' + , COALESCE(LOCATIONS.name, t_COMMAND_BUTTON_LINK.id_location, '(No Location)') + ) + ; + + IF a_debug = 1 THEN + SELECT 'After set name_error'; + SELECT * FROM tmp_Command_Button_Link; + SELECT COUNT(*) FROM tmp_Command_Button_Link; + END IF; + + -- Validation + -- Missing mandatory fields + -- id_command + IF EXISTS ( + SELECT * + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN demo.DOG_Command COMMAND ON t_COMMAND_BUTTON_LINK.id_command = COMMAND.id_command + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_command) + OR ISNULL(COMMAND.id_command) + OR COMMAND.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('The following Dog Command Link(s) do not have a valid Command: ', GROUP_CONCAT(t_COMMAND_BUTTON_LINK.name_error SEPARATOR ', ')) AS msg + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN parts.DOG_Command COMMAND ON t_COMMAND_BUTTON_LINK.id_command = COMMAND.id_command + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_command) + OR ISNULL(COMMAND.id_command) + OR COMMAND.active = 0 + ; + END IF; + -- id_button_shape + IF EXISTS ( + SELECT * + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN demo.DOG_Button_Shape BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK.id_button_shape = BUTTON_SHAPE.id_button_shape + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_button_shape) + OR ISNULL(BUTTON_SHAPE.id_button_shape) + OR BUTTON_SHAPE.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('The following Dog Button_Shape Link(s) do not have a valid Button_Shape: ', GROUP_CONCAT(t_COMMAND_BUTTON_LINK.name_error SEPARATOR ', ')) AS msg + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK.id_button_shape = BUTTON_SHAPE.id_button_shape + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_button_shape) + OR ISNULL(BUTTON_SHAPE.id_button_shape) + OR BUTTON_SHAPE.active = 0 + ; + END IF; + -- id_colour + IF EXISTS ( + SELECT * + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN demo.DOG_Colour COLOUR ON t_COMMAND_BUTTON_LINK.id_button_colour = COLOUR.id_colour + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_button_colour) + OR ISNULL(COLOUR.id_colour) + OR COLOUR.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('The following Dog Colour Link(s) do not have a valid Colour: ', GROUP_CONCAT(t_COMMAND_BUTTON_LINK.name_error SEPARATOR ', ')) AS msg + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN parts.DOG_Colour COLOUR ON t_COMMAND_BUTTON_LINK.id_button_colour = COLOUR.id_colour + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_button_colour) + OR ISNULL(COLOUR.id_colour) + OR COLOUR.active = 0 + ; + END IF; + -- id_location + IF EXISTS ( + SELECT * + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN demo.DOG_Location LOCATIONS ON t_COMMAND_BUTTON_LINK.id_location = LOCATIONS.id_location + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_location) + OR ISNULL(LOCATIONS.id_location) + OR LOCATIONS.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('The following Dog Location Link(s) do not have a valid Location: ', GROUP_CONCAT(t_COMMAND_BUTTON_LINK.name_error SEPARATOR ', ')) AS msg + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + LEFT JOIN parts.DOG_Location LOCATIONS ON t_COMMAND_BUTTON_LINK.id_location = LOCATIONS.id_location + WHERE + ISNULL(t_COMMAND_BUTTON_LINK.id_location) + OR ISNULL(LOCATIONS.id_location) + OR LOCATIONS.active = 0 + ; + END IF; + + -- Duplicates + INSERT INTO tmp_Command_Button_Link_Copy ( + id_temp + , id_link + , id_command + , id_button_shape + , id_button_colour + , id_button_icon + , id_location + , active + , is_new + , name_error + ) + SELECT + t_COMMAND_BUTTON_LINK.id_temp + , t_COMMAND_BUTTON_LINK.id_link + , t_COMMAND_BUTTON_LINK.id_command + , t_COMMAND_BUTTON_LINK.id_button_shape + , t_COMMAND_BUTTON_LINK.id_button_colour + , t_COMMAND_BUTTON_LINK.id_button_icon + , t_COMMAND_BUTTON_LINK.id_location + , t_COMMAND_BUTTON_LINK.active + , t_COMMAND_BUTTON_LINK.is_new + , t_COMMAND_BUTTON_LINK.name_error + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Command_Button_Link; + SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Command_Button_Link_Copy; + + WITH + Combined_Links AS ( + SELECT + COMMAND_BUTTON_LINK.id_link + , COMMAND_BUTTON_LINK.id_command + , COMMAND_BUTTON_LINK.id_button_shape + , COMMAND_BUTTON_LINK.id_button_colour + , COMMAND_BUTTON_LINK.id_button_icon + , COMMAND_BUTTON_LINK.id_location + , IFNULL( + t_COMMAND_BUTTON_LINK_COPY.name_error + , CONCAT( + COALESCE(COMMAND.name, t_COMMAND_BUTTON_LINK_COPY.id_command, '(No Command)') + , ' - ' + , COALESCE(BUTTON_SHAPE.name, t_COMMAND_BUTTON_LINK_COPY.id_button_shape, '(No Button Shape)') + , ' - ' + , COALESCE(COLOUR.name, t_COMMAND_BUTTON_LINK_COPY.id_button_colour, '(No Colour)') + , ' - ' + , COALESCE(BUTTON_ICON.name, t_COMMAND_BUTTON_LINK_COPY.id_button_icon, '(No Button Icon)') + , ' - ' + , COALESCE(LOCATIONS.name, t_COMMAND_BUTTON_LINK_COPY.id_location, '(No Location)') + ) + ) AS name_error + FROM parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK + LEFT JOIN tmp_Command_Button_Link_Copy t_COMMAND_BUTTON_LINK_COPY + ON COMMAND_BUTTON_LINK.id_command = t_COMMAND_BUTTON_LINK_COPY.id_command + AND COMMAND_BUTTON_LINK.id_location = t_COMMAND_BUTTON_LINK_COPY.id_location + LEFT JOIN parts.DOG_Command COMMAND ON t_COMMAND_BUTTON_LINK_COPY.id_command = COMMAND.id_command + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK_COPY.id_button_shape = BUTTON_SHAPE.id_button_shape + LEFT JOIN parts.DOG_Colour COLOUR ON t_COMMAND_BUTTON_LINK_COPY.id_button_colour = COLOUR.id_colour + LEFT JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_COMMAND_BUTTON_LINK_COPY.id_button_icon = BUTTON_ICON.id_button_icon + LEFT JOIN parts.DOG_Location LOCATIONS ON t_COMMAND_BUTTON_LINK_COPY.id_location = LOCATIONS.id_location + WHERE t_COMMAND_BUTTON_LINK_COPY.is_new = 1 + UNION + SELECT + t_COMMAND_BUTTON_LINK.id_link + , t_COMMAND_BUTTON_LINK.id_command + , t_COMMAND_BUTTON_LINK.id_button_shape + , t_COMMAND_BUTTON_LINK.id_button_colour + , t_COMMAND_BUTTON_LINK.id_button_icon + , t_COMMAND_BUTTON_LINK.id_location + , t_COMMAND_BUTTON_LINK.name_error + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + ) + , Duplicate_Link_Row_Numbers AS ( + SELECT + COMBINED_LINK.id_link + , COMBINED_LINK.id_command + , COMBINED_LINK.id_button_shape + , COMBINED_LINK.id_button_colour + , COMBINED_LINK.id_button_icon + , COMBINED_LINK.id_location + , COMBINED_LINK.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_command, COMBINED_LINK.id_location ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate + FROM Combined_Links COMBINED_LINK + ) + SELECT * + FROM Duplicate_Link_Row_Numbers; + END IF; + + IF EXISTS ( + WITH + Combined_Links AS ( + SELECT + COMMAND_BUTTON_LINK.id_link + , COMMAND_BUTTON_LINK.id_command + , COMMAND_BUTTON_LINK.id_button_shape + , COMMAND_BUTTON_LINK.id_button_colour + , COMMAND_BUTTON_LINK.id_button_icon + , COMMAND_BUTTON_LINK.id_location + , IFNULL( + t_COMMAND_BUTTON_LINK_COPY.name_error + , CONCAT( + COALESCE(COMMAND.name, t_COMMAND_BUTTON_LINK_COPY.id_command, '(No Command)') + , ' - ' + , COALESCE(BUTTON_SHAPE.name, t_COMMAND_BUTTON_LINK_COPY.id_button_shape, '(No Button Shape)') + , ' - ' + , COALESCE(COLOUR.name, t_COMMAND_BUTTON_LINK_COPY.id_button_colour, '(No Colour)') + , ' - ' + , COALESCE(BUTTON_ICON.name, t_COMMAND_BUTTON_LINK_COPY.id_button_icon, '(No Button Icon)') + , ' - ' + , COALESCE(LOCATIONS.name, t_COMMAND_BUTTON_LINK_COPY.id_location, '(No Location)') + ) + ) AS name_error + FROM parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK + LEFT JOIN tmp_Command_Button_Link_Copy t_COMMAND_BUTTON_LINK_COPY + ON COMMAND_BUTTON_LINK.id_command = t_COMMAND_BUTTON_LINK_COPY.id_command + AND COMMAND_BUTTON_LINK.id_location = t_COMMAND_BUTTON_LINK_COPY.id_location + LEFT JOIN parts.DOG_Command COMMAND ON t_COMMAND_BUTTON_LINK_COPY.id_command = COMMAND.id_command + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK_COPY.id_button_shape = BUTTON_SHAPE.id_button_shape + LEFT JOIN parts.DOG_Colour COLOUR ON t_COMMAND_BUTTON_LINK_COPY.id_button_colour = COLOUR.id_colour + LEFT JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_COMMAND_BUTTON_LINK_COPY.id_button_icon = BUTTON_ICON.id_button_icon + LEFT JOIN parts.DOG_Location LOCATIONS ON t_COMMAND_BUTTON_LINK_COPY.id_location = LOCATIONS.id_location + WHERE t_COMMAND_BUTTON_LINK_COPY.is_new = 1 + UNION + SELECT + t_COMMAND_BUTTON_LINK.id_link + , t_COMMAND_BUTTON_LINK.id_command + , t_COMMAND_BUTTON_LINK.id_button_shape + , t_COMMAND_BUTTON_LINK.id_button_colour + , t_COMMAND_BUTTON_LINK.id_button_icon + , t_COMMAND_BUTTON_LINK.id_location + , t_COMMAND_BUTTON_LINK.name_error + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + ) + , Duplicate_Link_Row_Numbers AS ( + SELECT + COMBINED_LINK.id_link + , COMBINED_LINK.id_command + , COMBINED_LINK.id_button_shape + , COMBINED_LINK.id_button_colour + , COMBINED_LINK.id_button_icon + , COMBINED_LINK.id_location + , COMBINED_LINK.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_command, COMBINED_LINK.id_location ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate + FROM Combined_Links COMBINED_LINK + ) + SELECT * + FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK + WHERE DUPLICATE_LINK.index_link_as_duplicate > 1 + GROUP BY + DUPLICATE_LINK.id_command + , DUPLICATE_LINK.id_location + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + WITH + Combined_Links AS ( + SELECT + COMMAND_BUTTON_LINK.id_link + , COMMAND_BUTTON_LINK.id_command + , COMMAND_BUTTON_LINK.id_button_shape + , COMMAND_BUTTON_LINK.id_button_colour + , COMMAND_BUTTON_LINK.id_button_icon + , COMMAND_BUTTON_LINK.id_location + , IFNULL( + t_COMMAND_BUTTON_LINK_COPY.name_error + , CONCAT( + COALESCE(COMMAND.name, t_COMMAND_BUTTON_LINK_COPY.id_command, '(No Command)') + , ' - ' + , COALESCE(BUTTON_SHAPE.name, t_COMMAND_BUTTON_LINK_COPY.id_button_shape, '(No Button Shape)') + , ' - ' + , COALESCE(COLOUR.name, t_COMMAND_BUTTON_LINK_COPY.id_button_colour, '(No Colour)') + , ' - ' + , COALESCE(BUTTON_ICON.name, t_COMMAND_BUTTON_LINK_COPY.id_button_icon, '(No Button Icon)') + , ' - ' + , COALESCE(LOCATIONS.name, t_COMMAND_BUTTON_LINK_COPY.id_location, '(No Location)') + ) + ) AS name_error + FROM parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK + LEFT JOIN tmp_Command_Button_Link_Copy t_COMMAND_BUTTON_LINK_COPY + ON COMMAND_BUTTON_LINK.id_command = t_COMMAND_BUTTON_LINK_COPY.id_command + AND COMMAND_BUTTON_LINK.id_location = t_COMMAND_BUTTON_LINK_COPY.id_location + LEFT JOIN parts.DOG_Command COMMAND ON t_COMMAND_BUTTON_LINK_COPY.id_command = COMMAND.id_command + LEFT JOIN parts.DOG_Button_Shape BUTTON_SHAPE ON t_COMMAND_BUTTON_LINK_COPY.id_button_shape = BUTTON_SHAPE.id_button_shape + LEFT JOIN parts.DOG_Colour COLOUR ON t_COMMAND_BUTTON_LINK_COPY.id_button_colour = COLOUR.id_colour + LEFT JOIN parts.DOG_Button_Icon BUTTON_ICON ON t_COMMAND_BUTTON_LINK_COPY.id_button_icon = BUTTON_ICON.id_button_icon + LEFT JOIN parts.DOG_Location LOCATIONS ON t_COMMAND_BUTTON_LINK_COPY.id_location = LOCATIONS.id_location + WHERE t_COMMAND_BUTTON_LINK_COPY.is_new = 1 + UNION + SELECT + t_COMMAND_BUTTON_LINK.id_link + , t_COMMAND_BUTTON_LINK.id_command + , t_COMMAND_BUTTON_LINK.id_button_shape + , t_COMMAND_BUTTON_LINK.id_button_colour + , t_COMMAND_BUTTON_LINK.id_button_icon + , t_COMMAND_BUTTON_LINK.id_location + , t_COMMAND_BUTTON_LINK.name_error + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + ) + , Duplicate_Link_Row_Numbers AS ( + SELECT + COMBINED_LINK.id_link + , COMBINED_LINK.id_command + , COMBINED_LINK.id_button_shape + , COMBINED_LINK.id_button_colour + , COMBINED_LINK.id_button_icon + , COMBINED_LINK.id_location + , COMBINED_LINK.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_command, COMBINED_LINK.id_location ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate + FROM Combined_Links COMBINED_LINK + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Attempt to create duplicate or overwrite existing Dog Command Links on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg + FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK + WHERE DUPLICATE_LINK.index_link_as_duplicate > 1 + GROUP BY + DUPLICATE_LINK.id_command + , DUPLICATE_LINK.id_location + ; + END IF; + + + -- Permissions + -- Can Create + CALL parts.p_dog_calc_user( + a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_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 + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_new -- ids_permission + , v_id_access_level_edit -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CU_T.has_access, 0) + INTO + v_can_create + FROM parts.DOG_Calc_User_Temp CU_T + WHERE CU_T.GUID = a_guid + LIMIT 1 + ; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF v_can_create = 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 edit Commands.' + ) + ; + 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_Command_Button_Link; + END IF; + + DELETE FROM tmp_Command_Button_Link; + END IF; + + 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 + START TRANSACTION; + + INSERT INTO parts.DOG_Dog_Change_Set ( + comment + , id_user_updated_last_by + , updated_last_on + ) + VALUES ( + a_comment + , a_id_user + , v_time_start + ) + ; + + SET v_id_change_set := LAST_INSERT_ID(); + + UPDATE parts.DOG_Command_Button_Link COMMAND_BUTTON_LINK + INNER JOIN tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + ON COMMAND_BUTTON_LINK.id_link = t_COMMAND_BUTTON_LINK.id_link + AND t_COMMAND_BUTTON_LINK.is_new = 0 + SET + COMMAND_BUTTON_LINK.id_command = t_COMMAND_BUTTON_LINK.id_command + , COMMAND_BUTTON_LINK.id_button_shape = t_COMMAND_BUTTON_LINK.id_button_shape + , COMMAND_BUTTON_LINK.id_button_colour = t_COMMAND_BUTTON_LINK.id_button_colour + , COMMAND_BUTTON_LINK.id_button_icon = t_COMMAND_BUTTON_LINK.id_button_icon + , COMMAND_BUTTON_LINK.id_location = t_COMMAND_BUTTON_LINK.id_location + , COMMAND_BUTTON_LINK.active = t_COMMAND_BUTTON_LINK.active + , COMMAND_BUTTON_LINK.id_change_set = v_id_change_set + ; + + INSERT INTO parts.DOG_Command_Button_Link ( + id_command + , id_button_shape + , id_button_colour + , id_button_icon + , id_location + , active + , id_user_created_by + , created_on + ) + SELECT + t_COMMAND_BUTTON_LINK.id_command AS id_command + , t_COMMAND_BUTTON_LINK.id_button_shape AS id_button_shape + , t_COMMAND_BUTTON_LINK.id_button_colour AS id_button_colour + , t_COMMAND_BUTTON_LINK.id_button_icon AS id_button_icon + , t_COMMAND_BUTTON_LINK.id_location AS id_location + , t_COMMAND_BUTTON_LINK.active AS active + , a_id_user AS created_by + , v_time_start AS created_on + FROM tmp_Command_Button_Link t_COMMAND_BUTTON_LINK + WHERE + t_COMMAND_BUTTON_LINK.is_new = 1 + AND t_COMMAND_BUTTON_LINK.active = 1 + ; + + COMMIT; + END IF; + + START TRANSACTION; + + DELETE FROM parts.DOG_Command_Button_Link_Temp + WHERE GUID = a_guid + ; + + COMMIT; + + -- 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_Command_Button_Link; + END IF; + + DROP TEMPORARY TABLE tmp_Command_Button_Link; + DROP TEMPORARY TABLE tmp_Msg_Error; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + + +/* + + +SELECT * FROM demo.DOG_Command; +SELECT * FROM demo.DOG_Button_Shape; +SELECT * FROM demo.DOG_Colour; +SELECT * FROM demo.DOG_Button_Icon; +SELECT * FROM demo.DOG_Location; + + +'ripplysipplenippletippledipplekipple' +DELETE FROM parts.DOG_Command_Button_Link WHERE id_link > 740; +* / +delete +from parts.DOG_Command_Button_Link_Audit +where id_link > 768 +; +delete +from parts.DOG_Command_Button_Link +where id_link > 768 +; +delete +from parts.DOG_Command_Button_Link_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Command_Button_Link_Temp +; +select COUNT(*) +from parts.DOG_Command_Button_Link_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Command_Button_Link +; +select COUNT(*) +from parts.DOG_Command_Button_Link +; + +INSERT INTO parts.DOG_Command_Button_Link_Temp ( + id_link + , id_command + , id_button_shape + , id_button_colour + , id_button_icon + , id_location + , active + , guid +) +VALUES ( + -1 -- id_link + , 1 -- id_command + , 1 -- id_button_shape + , 1 -- id_button_colour + , 1 -- id_button_icon + , 1 -- id_location + , 1 -- active + , 'ripplysipplenippletippledipplekipple' +); + +CALL parts.p_dog_save_command_button_link ( + 'nipples' + , 'ripplysipplenippletippledipplekipple' + , 1 + , 1 +); + + +select + * + -- COUNT(*) +-- delete +from parts.DOG_Command_Button_Link_Temp +; +select COUNT(*) +from parts.DOG_Command_Button_Link_Temp +; +select + * + -- COUNT(*) +-- delete +from parts.DOG_Command_Button_Link +; +select COUNT(*) +from parts.DOG_Command_Button_Link +; + +*/ \ No newline at end of file diff --git a/static/MySQL/deprecated/1230_tbl_DOG_Visual_Understanding_Level.sql b/static/MySQL/deprecated/1230_tbl_DOG_Visual_Understanding_Level.sql index 9260320..cd9f2ef 100644 --- a/static/MySQL/deprecated/1230_tbl_DOG_Visual_Understanding_Level.sql +++ b/static/MySQL/deprecated/1230_tbl_DOG_Visual_Understanding_Level.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level ( id_understanding_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/deprecated/1232_tbl_DOG_Visual_Understanding_Level_Temp.sql b/static/MySQL/deprecated/1232_tbl_DOG_Visual_Understanding_Level_Temp.sql index 9c71779..0cda181 100644 --- a/static/MySQL/deprecated/1232_tbl_DOG_Visual_Understanding_Level_Temp.sql +++ b/static/MySQL/deprecated/1232_tbl_DOG_Visual_Understanding_Level_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_understanding_level INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/deprecated/1234_tbl_DOG_Verbal_Understanding_Level.sql b/static/MySQL/deprecated/1234_tbl_DOG_Verbal_Understanding_Level.sql index 9260320..cd9f2ef 100644 --- a/static/MySQL/deprecated/1234_tbl_DOG_Verbal_Understanding_Level.sql +++ b/static/MySQL/deprecated/1234_tbl_DOG_Verbal_Understanding_Level.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level ( id_understanding_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/deprecated/1236_tbl_DOG_Verbal_Understanding_Level_Temp.sql b/static/MySQL/deprecated/1236_tbl_DOG_Verbal_Understanding_Level_Temp.sql index 9c71779..0cda181 100644 --- a/static/MySQL/deprecated/1236_tbl_DOG_Verbal_Understanding_Level_Temp.sql +++ b/static/MySQL/deprecated/1236_tbl_DOG_Verbal_Understanding_Level_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_understanding_level INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/deprecated/1238_tbl_DOG_Button_Understanding_Level.sql b/static/MySQL/deprecated/1238_tbl_DOG_Button_Understanding_Level.sql index 9260320..cd9f2ef 100644 --- a/static/MySQL/deprecated/1238_tbl_DOG_Button_Understanding_Level.sql +++ b/static/MySQL/deprecated/1238_tbl_DOG_Button_Understanding_Level.sql @@ -10,7 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level ( id_understanding_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY - , code VARCHAR(100) NOT NULL + , code VARCHAR(250) NOT NULL , name VARCHAR(250) NOT NULL , active BIT NOT NULL DEFAULT 1 , created_on DATETIME diff --git a/static/MySQL/deprecated/1240_tbl_DOG_Button_Understanding_Level_Temp.sql b/static/MySQL/deprecated/1240_tbl_DOG_Button_Understanding_Level_Temp.sql index 9c71779..0cda181 100644 --- a/static/MySQL/deprecated/1240_tbl_DOG_Button_Understanding_Level_Temp.sql +++ b/static/MySQL/deprecated/1240_tbl_DOG_Button_Understanding_Level_Temp.sql @@ -11,7 +11,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT , id_understanding_level INT - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) , active BIT , guid BINARY(36) diff --git a/static/MySQL/deprecated/71104_p_dog_get_many_command.sql b/static/MySQL/deprecated/71104_p_dog_get_many_command.sql index fa6a83c..80c5bc4 100644 --- a/static/MySQL/deprecated/71104_p_dog_get_many_command.sql +++ b/static/MySQL/deprecated/71104_p_dog_get_many_command.sql @@ -39,7 +39,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -121,7 +121,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql b/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql index 885ee91..7633def 100644 --- a/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql +++ b/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql @@ -41,7 +41,7 @@ BEGIN 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); @@ -120,14 +120,14 @@ BEGIN CREATE TEMPORARY TABLE tmp_Understanding_Level ( id_understanding_level INT NOT NULL - , code VARCHAR(100) + , code VARCHAR(250) , name VARCHAR(250) ); 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 + , code VARCHAR(250) NOT NULL , msg TEXT NOT NULL ); diff --git a/static/css/pages/dog/button_icons.css b/static/css/pages/dog/button_icons.css new file mode 100644 index 0000000..2d8d14d --- /dev/null +++ b/static/css/pages/dog/button_icons.css @@ -0,0 +1,5 @@ + + +#tableMain tbody > div { + width: 49vh; +} diff --git a/static/css/pages/dog/command_button_links.css b/static/css/pages/dog/command_button_links.css new file mode 100644 index 0000000..6f7e648 --- /dev/null +++ b/static/css/pages/dog/command_button_links.css @@ -0,0 +1,42 @@ + +/* +#formFilters .container-input.filter.active_only { +} +*/ + + +#tableMain tbody > div { + width: 113vh; +} + +/* +#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%; +} +*/ +#tableMain tbody tr td table thead tr th.button_shape, +#tableMain tbody tr td table tbody tr td.button_shape, +#tableMain tbody tr td table thead tr th.colour, +#tableMain tbody tr td table tbody tr td.colour, +#tableMain tbody tr td table thead tr th.button_icon, +#tableMain tbody tr td table tbody tr td.button_icon { + width: 12vh; + max-width: 12vh; +} + +/* +select.id_variation, select.id_variation_type { + max-width: 40% !important; +} +*/ + +@media screen and (max-width: 850px) { + #formFilters input, + #formFilters select { + width: 12vh; + min-width: 12vh; + } +} diff --git a/static/css/pages/dog/locations.css b/static/css/pages/dog/locations.css index dda1dd4..2d8d14d 100644 --- a/static/css/pages/dog/locations.css +++ b/static/css/pages/dog/locations.css @@ -1,5 +1,5 @@ #tableMain tbody > div { - width: 99vh; + width: 49vh; } diff --git a/static/dist/css/dog_button_icons.bundle.css b/static/dist/css/dog_button_icons.bundle.css new file mode 100644 index 0000000..7214899 --- /dev/null +++ b/static/dist/css/dog_button_icons.bundle.css @@ -0,0 +1,64 @@ + +.img-product { + max-width: 20vh; + max-height: 20vh; + border-radius: 3vh; + justify-self: left; +} + +.img-thumbnail { + max-width: 10vh; + max-height: 10vh; + border-radius: 3vh; + justify-self: left; +} + +.buttonAddToBasket { + background-color: var(--colour-page-background); + border-color: var(--colour-primary); +} + +#buttonCheckout, .buttonBuyNow { + background-color: var(--colour-page-background); + /* color: var(--c_purple_dark); */ + border-color: var(--colour-primary); +} + +.button-increment, .button-decrement { + border: 2px solid darkgrey; + background-color: lightgray; + margin: 1vh 1vh; + width: 2.5vh; + height: 2.5vh; + border-radius: 1.25vh; + font-size: 2vh; +} + +.container-input > input { + padding: 0vh 1vh; + border-radius: 0.5vh; + max-width: 7vh; +} + +#basket { + max-width: 100%; +} + + + +/* Right column */ +.rightcolumn { + min-width: fit-content; +} + +/* Main Table */ + + + + +#tableMain tbody > div { + width: 49vh; +} + + +/*# sourceMappingURL=dog_button_icons.bundle.css.map*/ \ No newline at end of file diff --git a/static/dist/css/dog_button_icons.bundle.css.map b/static/dist/css/dog_button_icons.bundle.css.map new file mode 100644 index 0000000..bfe5d77 --- /dev/null +++ b/static/dist/css/dog_button_icons.bundle.css.map @@ -0,0 +1 @@ +{"version":3,"file":"css/dog_button_icons.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;;ACnDf;IACI,WAAW;AACf","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/button_icons.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n\n#tableMain tbody > div {\n width: 49vh;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/css/dog_command_button_links.bundle.css b/static/dist/css/dog_command_button_links.bundle.css new file mode 100644 index 0000000..c196fbf --- /dev/null +++ b/static/dist/css/dog_command_button_links.bundle.css @@ -0,0 +1,101 @@ + +.img-product { + max-width: 20vh; + max-height: 20vh; + border-radius: 3vh; + justify-self: left; +} + +.img-thumbnail { + max-width: 10vh; + max-height: 10vh; + border-radius: 3vh; + justify-self: left; +} + +.buttonAddToBasket { + background-color: var(--colour-page-background); + border-color: var(--colour-primary); +} + +#buttonCheckout, .buttonBuyNow { + background-color: var(--colour-page-background); + /* color: var(--c_purple_dark); */ + border-color: var(--colour-primary); +} + +.button-increment, .button-decrement { + border: 2px solid darkgrey; + background-color: lightgray; + margin: 1vh 1vh; + width: 2.5vh; + height: 2.5vh; + border-radius: 1.25vh; + font-size: 2vh; +} + +.container-input > input { + padding: 0vh 1vh; + border-radius: 0.5vh; + max-width: 7vh; +} + +#basket { + max-width: 100%; +} + + + +/* Right column */ +.rightcolumn { + min-width: fit-content; +} + +/* Main Table */ + + + +/* +#formFilters .container-input.filter.active_only { +} +*/ + + +#tableMain tbody > div { + width: 113vh; +} + +/* +#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%; +} +*/ +#tableMain tbody tr td table thead tr th.button_shape, +#tableMain tbody tr td table tbody tr td.button_shape, +#tableMain tbody tr td table thead tr th.colour, +#tableMain tbody tr td table tbody tr td.colour, +#tableMain tbody tr td table thead tr th.button_icon, +#tableMain tbody tr td table tbody tr td.button_icon { + width: 12vh; + max-width: 12vh; +} + +/* +select.id_variation, select.id_variation_type { + max-width: 40% !important; +} +*/ + +@media screen and (max-width: 850px) { + #formFilters input, + #formFilters select { + width: 12vh; + min-width: 12vh; + } +} + + +/*# sourceMappingURL=dog_command_button_links.bundle.css.map*/ \ No newline at end of file diff --git a/static/dist/css/dog_command_button_links.bundle.css.map b/static/dist/css/dog_command_button_links.bundle.css.map new file mode 100644 index 0000000..529662f --- /dev/null +++ b/static/dist/css/dog_command_button_links.bundle.css.map @@ -0,0 +1 @@ +{"version":3,"file":"css/dog_command_button_links.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;ACpDf;;;CAGC;;;AAGD;IACI,YAAY;AAChB;;AAEA;;;;;;;CAOC;AACD;;;;;;IAMI,WAAW;IACX,eAAe;AACnB;;AAEA;;;;CAIC;;AAED;IACI;;QAEI,WAAW;QACX,eAAe;IACnB;AACJ","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/command_button_links.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n/*\n#formFilters .container-input.filter.active_only {\n}\n*/\n\n\n#tableMain tbody > div {\n width: 113vh;\n}\n\n/*\n#tableMain tbody tr td table thead tr th.id_variation_type,\n#tableMain tbody tr td table tbody tr td.id_variation_type,\n#tableMain tbody tr td table thead tr th.id_variation, \n#tableMain tbody tr td table tbody tr td.id_variation {\n width: 47.5%;\n}\n*/\n#tableMain tbody tr td table thead tr th.button_shape, \n#tableMain tbody tr td table tbody tr td.button_shape,\n#tableMain tbody tr td table thead tr th.colour, \n#tableMain tbody tr td table tbody tr td.colour,\n#tableMain tbody tr td table thead tr th.button_icon, \n#tableMain tbody tr td table tbody tr td.button_icon {\n width: 12vh;\n max-width: 12vh;\n}\n\n/*\nselect.id_variation, select.id_variation_type {\n max-width: 40% !important;\n}\n*/\n\n@media screen and (max-width: 850px) {\n #formFilters input,\n #formFilters select {\n width: 12vh;\n min-width: 12vh;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/css/dog_command_categories.bundle.css b/static/dist/css/dog_command_categories.bundle.css index 1350ce8..663791e 100644 --- a/static/dist/css/dog_command_categories.bundle.css +++ b/static/dist/css/dog_command_categories.bundle.css @@ -60,26 +60,15 @@ min-width: 20vh; } +#tableMain tbody > div { + width: 58vh; +} #tableMain thead tr th, #tableMain tbody tr td { height: 3vh; } #tableMain tbody tr td.name .name { border: 1px solid var(--colour-accent); - /* - align-content: center; - align-items: center; - align-self: center; - text-align: center; - justify-content: center; - justify-items: center; - justify-self: center; - padding-top: auto; - padding-bottom: auto; - display: flex; - resize: none; - box-sizing: border-box; - */ } /* #tableMain thead tr th.code, diff --git a/static/dist/css/dog_command_categories.bundle.css.map b/static/dist/css/dog_command_categories.bundle.css.map index 4ffeb60..bd5b43c 100644 --- a/static/dist/css/dog_command_categories.bundle.css.map +++ b/static/dist/css/dog_command_categories.bundle.css.map @@ -1 +1 @@ -{"version":3,"file":"css/dog_command_categories.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;ACpDf;IACI,WAAW;IACX,eAAe;AACnB;;AAEA;;IAEI,WAAW;AACf;AACA;IACI,sCAAsC;IACtC;;;;;;;;;;;;;KAaC;AACL;AACA;;;CAGC;AACD;;IAEI,WAAW;IACX,eAAe;AACnB;;AAEA;IACI;;QAEI,WAAW;QACX,eAAe;IACnB;IACA;;QAEI,UAAU;QACV,cAAc;IAClB;AACJ,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/command_categories.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n#formFilters #search {\n width: 20vh;\n min-width: 20vh;\n}\n\n#tableMain thead tr th,\n#tableMain tbody tr td {\n height: 3vh;\n}\n#tableMain tbody tr td.name .name {\n border: 1px solid var(--colour-accent);\n /*\n align-content: center;\n align-items: center;\n align-self: center;\n text-align: center;\n justify-content: center;\n justify-items: center;\n justify-self: center;\n padding-top: auto;\n padding-bottom: auto;\n display: flex;\n resize: none;\n box-sizing: border-box;\n */\n}\n/*\n#tableMain thead tr th.code,\n#tableMain tbody tr td.code,\n*/\n#tableMain thead tr th.name ,\n#tableMain tbody tr td.name {\n width: 50vh;\n min-width: 50vh;\n}\n\n@media screen and (max-width: 800px) {\n #tableMain thead tr th.name ,\n #tableMain tbody tr td.name {\n width: 63vw;\n min-width: 63vw;\n }\n #tableMain thead tr th.active ,\n #tableMain tbody tr td.active {\n width: 3vw;\n min-width: 3vw;\n }\n}"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"css/dog_command_categories.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;ACpDf;IACI,WAAW;IACX,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;AACA;;IAEI,WAAW;AACf;AACA;IACI,sCAAsC;AAC1C;AACA;;;CAGC;AACD;;IAEI,WAAW;IACX,eAAe;AACnB;;AAEA;IACI;;QAEI,WAAW;QACX,eAAe;IACnB;IACA;;QAEI,UAAU;QACV,cAAc;IAClB;AACJ,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/command_categories.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n#formFilters #search {\n width: 20vh;\n min-width: 20vh;\n}\n\n#tableMain tbody > div {\n width: 58vh;\n}\n#tableMain thead tr th,\n#tableMain tbody tr td {\n height: 3vh;\n}\n#tableMain tbody tr td.name .name {\n border: 1px solid var(--colour-accent);\n}\n/*\n#tableMain thead tr th.code,\n#tableMain tbody tr td.code,\n*/\n#tableMain thead tr th.name ,\n#tableMain tbody tr td.name {\n width: 50vh;\n min-width: 50vh;\n}\n\n@media screen and (max-width: 800px) {\n #tableMain thead tr th.name ,\n #tableMain tbody tr td.name {\n width: 63vw;\n min-width: 63vw;\n }\n #tableMain thead tr th.active ,\n #tableMain tbody tr td.active {\n width: 3vw;\n min-width: 3vw;\n }\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/css/dog_commands.bundle.css b/static/dist/css/dog_commands.bundle.css index 0b44e1a..f22dbab 100644 --- a/static/dist/css/dog_commands.bundle.css +++ b/static/dist/css/dog_commands.bundle.css @@ -60,6 +60,10 @@ max-width: fit-content; } */ + +#tableMain tbody > div { + width: 99vh; +} #tableMain thead tr th.can-have-button, #tableMain tbody tr td.can-have-button { width: 6vh; diff --git a/static/dist/css/dog_commands.bundle.css.map b/static/dist/css/dog_commands.bundle.css.map index 31f3079..3725c59 100644 --- a/static/dist/css/dog_commands.bundle.css.map +++ b/static/dist/css/dog_commands.bundle.css.map @@ -1 +1 @@ -{"version":3,"file":"css/dog_commands.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;ACpDf;;;;CAIC;AACD;;IAEI,UAAU;IACV,cAAc;AAClB;;AAEA;;;;;;;;CAQC,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/commands.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n/*\n#formFilters .container {\n max-width: fit-content;\n}\n*/\n#tableMain thead tr th.can-have-button, \n#tableMain tbody tr td.can-have-button {\n width: 6vh;\n min-width: 6vh;\n}\n\n/*\n@media screen and (max-width: 600px) {\n #formFilters input,\n #formFilters select {\n width: 12vh;\n min-width: 12vh;\n }\n}\n*/"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"css/dog_commands.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;ACpDf;;;;CAIC;;AAED;IACI,WAAW;AACf;AACA;;IAEI,UAAU;IACV,cAAc;AAClB;;AAEA;;;;;;;;CAQC,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/commands.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n/*\n#formFilters .container {\n max-width: fit-content;\n}\n*/\n\n#tableMain tbody > div {\n width: 99vh;\n}\n#tableMain thead tr th.can-have-button, \n#tableMain tbody tr td.can-have-button {\n width: 6vh;\n min-width: 6vh;\n}\n\n/*\n@media screen and (max-width: 600px) {\n #formFilters input,\n #formFilters select {\n width: 12vh;\n min-width: 12vh;\n }\n}\n*/"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/css/dog_dog_command_links.bundle.css b/static/dist/css/dog_dog_command_links.bundle.css index 663de91..83ea45d 100644 --- a/static/dist/css/dog_dog_command_links.bundle.css +++ b/static/dist/css/dog_dog_command_links.bundle.css @@ -60,32 +60,13 @@ } */ + +#tableMain tbody > div { + width: 113vh; +} #tableMain { max-width: 90vw; } -/* -#tableMain thead tr th.category, #tableMain tbody tr td.category { - width: 8vh; - min-width: 8vh; -} -#tableMain thead tr th.product, #tableMain tbody tr td.product { - width: 10vh; - min-width: 10vh; -} -#tableMain thead tr th.product_variations.is_collapsed, #tableMain tbody tr td.product_variations.is_collapsed { - width: 10vh; - min-width: 10vh; - display: table-cell !important; -} -#tableMain thead tr th.product_variations, #tableMain tbody tr td.product_variations { - width: 24vh; - min-width: 24vh; -} -#tableMain thead tr th.active, #tableMain tbody tr td.active { - width: 6vh; - min-width: 6vh; -} -*/ td > input, td > select, diff --git a/static/dist/css/dog_dog_command_links.bundle.css.map b/static/dist/css/dog_dog_command_links.bundle.css.map index 4fa2477..d1b1ef5 100644 --- a/static/dist/css/dog_dog_command_links.bundle.css.map +++ b/static/dist/css/dog_dog_command_links.bundle.css.map @@ -1 +1 @@ -{"version":3,"file":"css/dog_dog_command_links.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;ACpDf;;;CAGC;;AAED;IACI,eAAe;AACnB;AACA;;;;;;;;;;;;;;;;;;;;;;CAsBC;;AAED;;;;;;IAMI,uCAAuC;IACvC,oBAAoB;AACxB;;AAEA;;;;IAII,YAAY;AAChB;;AAEA;;;;CAIC;;AAED;IACI;;QAEI,WAAW;QACX,eAAe;IACnB;AACJ","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/dog_command_links.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n/*\n#formFilters .container-input.filter.active_only {\n}\n*/\n\n#tableMain {\n max-width: 90vw;\n}\n/*\n#tableMain thead tr th.category, #tableMain tbody tr td.category {\n width: 8vh;\n min-width: 8vh;\n}\n#tableMain thead tr th.product, #tableMain tbody tr td.product {\n width: 10vh;\n min-width: 10vh;\n}\n#tableMain thead tr th.product_variations.is_collapsed, #tableMain tbody tr td.product_variations.is_collapsed {\n width: 10vh;\n min-width: 10vh;\n display: table-cell !important;\n}\n#tableMain thead tr th.product_variations, #tableMain tbody tr td.product_variations {\n width: 24vh;\n min-width: 24vh;\n}\n#tableMain thead tr th.active, #tableMain tbody tr td.active {\n width: 6vh;\n min-width: 6vh;\n}\n*/\n\ntd > input,\ntd > select,\ntd > textarea,\n.container-input > input,\n.container-input > select,\n.container-input > textarea {\n border: 2px solid var(--colour-primary);\n border-radius: 0.5vh;\n}\n\n#tableMain tbody tr td table thead tr th.id_variation_type,\n#tableMain tbody tr td table tbody tr td.id_variation_type,\n#tableMain tbody tr td table thead tr th.id_variation, \n#tableMain tbody tr td table tbody tr td.id_variation {\n width: 47.5%;\n}\n\n/*\nselect.id_variation, select.id_variation_type {\n max-width: 40% !important;\n}\n*/\n\n@media screen and (max-width: 850px) {\n #formFilters input,\n #formFilters select {\n width: 12vh;\n min-width: 12vh;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"css/dog_dog_command_links.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;ACpDf;;;CAGC;;;AAGD;IACI,YAAY;AAChB;AACA;IACI,eAAe;AACnB;;AAEA;;;;;;IAMI,uCAAuC;IACvC,oBAAoB;AACxB;;AAEA;;;;IAII,YAAY;AAChB;;AAEA;;;;CAIC;;AAED;IACI;;QAEI,WAAW;QACX,eAAe;IACnB;AACJ","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/dog_command_links.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n/*\n#formFilters .container-input.filter.active_only {\n}\n*/\n\n\n#tableMain tbody > div {\n width: 113vh;\n}\n#tableMain {\n max-width: 90vw;\n}\n\ntd > input,\ntd > select,\ntd > textarea,\n.container-input > input,\n.container-input > select,\n.container-input > textarea {\n border: 2px solid var(--colour-primary);\n border-radius: 0.5vh;\n}\n\n#tableMain tbody tr td table thead tr th.id_variation_type,\n#tableMain tbody tr td table tbody tr td.id_variation_type,\n#tableMain tbody tr td table thead tr th.id_variation, \n#tableMain tbody tr td table tbody tr td.id_variation {\n width: 47.5%;\n}\n\n/*\nselect.id_variation, select.id_variation_type {\n max-width: 40% !important;\n}\n*/\n\n@media screen and (max-width: 850px) {\n #formFilters input,\n #formFilters select {\n width: 12vh;\n min-width: 12vh;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/css/dog_locations.bundle.css b/static/dist/css/dog_locations.bundle.css new file mode 100644 index 0000000..4f3bc5d --- /dev/null +++ b/static/dist/css/dog_locations.bundle.css @@ -0,0 +1,64 @@ + +.img-product { + max-width: 20vh; + max-height: 20vh; + border-radius: 3vh; + justify-self: left; +} + +.img-thumbnail { + max-width: 10vh; + max-height: 10vh; + border-radius: 3vh; + justify-self: left; +} + +.buttonAddToBasket { + background-color: var(--colour-page-background); + border-color: var(--colour-primary); +} + +#buttonCheckout, .buttonBuyNow { + background-color: var(--colour-page-background); + /* color: var(--c_purple_dark); */ + border-color: var(--colour-primary); +} + +.button-increment, .button-decrement { + border: 2px solid darkgrey; + background-color: lightgray; + margin: 1vh 1vh; + width: 2.5vh; + height: 2.5vh; + border-radius: 1.25vh; + font-size: 2vh; +} + +.container-input > input { + padding: 0vh 1vh; + border-radius: 0.5vh; + max-width: 7vh; +} + +#basket { + max-width: 100%; +} + + + +/* Right column */ +.rightcolumn { + min-width: fit-content; +} + +/* Main Table */ + + + + +#tableMain tbody > div { + width: 49vh; +} + + +/*# sourceMappingURL=dog_locations.bundle.css.map*/ \ No newline at end of file diff --git a/static/dist/css/dog_locations.bundle.css.map b/static/dist/css/dog_locations.bundle.css.map new file mode 100644 index 0000000..944d99d --- /dev/null +++ b/static/dist/css/dog_locations.bundle.css.map @@ -0,0 +1 @@ +{"version":3,"file":"css/dog_locations.bundle.css","mappings":";AACA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;IAC/C,mCAAmC;AACvC;;AAEA;IACI,+CAA+C;IAC/C,iCAAiC;IACjC,mCAAmC;AACvC;;AAEA;IACI,0BAA0B;IAC1B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;;;AAIA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;;;;;ACnDf;IACI,WAAW;AACf","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/dog/locations.css"],"sourcesContent":["\n.img-product {\n max-width: 20vh;\n max-height: 20vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.img-thumbnail {\n max-width: 10vh;\n max-height: 10vh;\n border-radius: 3vh;\n justify-self: left;\n}\n\n.buttonAddToBasket {\n background-color: var(--colour-page-background);\n border-color: var(--colour-primary);\n}\n\n#buttonCheckout, .buttonBuyNow {\n background-color: var(--colour-page-background);\n /* color: var(--c_purple_dark); */\n border-color: var(--colour-primary);\n}\n\n.button-increment, .button-decrement {\n border: 2px solid darkgrey;\n background-color: lightgray;\n margin: 1vh 1vh;\n width: 2.5vh;\n height: 2.5vh;\n border-radius: 1.25vh;\n font-size: 2vh;\n}\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n#basket {\n max-width: 100%;\n}\n\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n\n","\n\n#tableMain tbody > div {\n width: 49vh;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/js/dog_button_icons.bundle.js b/static/dist/js/dog_button_icons.bundle.js new file mode 100644 index 0000000..feb0ff4 --- /dev/null +++ b/static/dist/js/dog_button_icons.bundle.js @@ -0,0 +1,17 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules. +(() => { +// extracted by mini-css-extract-plugin + +})(); + +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules. +(() => { +// extracted by mini-css-extract-plugin + +})(); + +/******/ })() +; +//# sourceMappingURL=dog_button_icons.bundle.js.map \ No newline at end of file diff --git a/static/dist/js/dog_button_icons.bundle.js.map b/static/dist/js/dog_button_icons.bundle.js.map new file mode 100644 index 0000000..69ee370 --- /dev/null +++ b/static/dist/js/dog_button_icons.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/dog_button_icons.bundle.js","mappings":";;;;AAAA;;;;;;ACAA","sources":["webpack://app/./static/css/sections/dog.css?a9d0","webpack://app/./static/css/pages/dog/button_icons.css?deab"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/js/dog_command_button_links.bundle.js b/static/dist/js/dog_command_button_links.bundle.js new file mode 100644 index 0000000..5019a97 --- /dev/null +++ b/static/dist/js/dog_command_button_links.bundle.js @@ -0,0 +1,17 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules. +(() => { +// extracted by mini-css-extract-plugin + +})(); + +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules. +(() => { +// extracted by mini-css-extract-plugin + +})(); + +/******/ })() +; +//# sourceMappingURL=dog_command_button_links.bundle.js.map \ No newline at end of file diff --git a/static/dist/js/dog_command_button_links.bundle.js.map b/static/dist/js/dog_command_button_links.bundle.js.map new file mode 100644 index 0000000..7f56e6d --- /dev/null +++ b/static/dist/js/dog_command_button_links.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/dog_command_button_links.bundle.js","mappings":";;;;AAAA;;;;;;ACAA","sources":["webpack://app/./static/css/sections/dog.css?a9d0","webpack://app/./static/css/pages/dog/command_button_links.css?edce"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/js/dog_locations.bundle.js b/static/dist/js/dog_locations.bundle.js new file mode 100644 index 0000000..3f991e3 --- /dev/null +++ b/static/dist/js/dog_locations.bundle.js @@ -0,0 +1,17 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules. +(() => { +// extracted by mini-css-extract-plugin + +})(); + +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules. +(() => { +// extracted by mini-css-extract-plugin + +})(); + +/******/ })() +; +//# sourceMappingURL=dog_locations.bundle.js.map \ No newline at end of file diff --git a/static/dist/js/dog_locations.bundle.js.map b/static/dist/js/dog_locations.bundle.js.map new file mode 100644 index 0000000..423c042 --- /dev/null +++ b/static/dist/js/dog_locations.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/dog_locations.bundle.js","mappings":";;;;AAAA;;;;;;ACAA","sources":["webpack://app/./static/css/sections/dog.css?a9d0","webpack://app/./static/css/pages/dog/locations.css?6c9a"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index 11e7c9c..9915f4d 100644 --- a/static/dist/js/main.bundle.js +++ b/static/dist/js/main.bundle.js @@ -751,6 +751,87 @@ var API = /*#__PURE__*/function () { return _saveDogCommandLinks.apply(this, arguments); } return saveDogCommandLinks; + }() // Locations + }, { + key: "saveLocations", + value: function () { + var _saveLocations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(locations, formFilters, comment) { + var dataRequest; + return _regeneratorRuntime().wrap(function _callee6$(_context6) { + while (1) switch (_context6.prev = _context6.next) { + case 0: + dataRequest = {}; + dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters); + dataRequest[flagLocation] = locations; + dataRequest[flagComment] = comment; + _context6.next = 6; + return API.request(hashSaveDogLocation, 'POST', dataRequest); + case 6: + return _context6.abrupt("return", _context6.sent); + case 7: + case "end": + return _context6.stop(); + } + }, _callee6); + })); + function saveLocations(_x11, _x12, _x13) { + return _saveLocations.apply(this, arguments); + } + return saveLocations; + }() // Button Icons + }, { + key: "saveButtonIcons", + value: function () { + var _saveButtonIcons = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(buttonIcons, formFilters, comment) { + var dataRequest; + return _regeneratorRuntime().wrap(function _callee7$(_context7) { + while (1) switch (_context7.prev = _context7.next) { + case 0: + dataRequest = {}; + dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters); + dataRequest[flagButtonIcon] = buttonIcons; + dataRequest[flagComment] = comment; + _context7.next = 6; + return API.request(hashSaveDogButtonIcon, 'POST', dataRequest); + case 6: + return _context7.abrupt("return", _context7.sent); + case 7: + case "end": + return _context7.stop(); + } + }, _callee7); + })); + function saveButtonIcons(_x14, _x15, _x16) { + return _saveButtonIcons.apply(this, arguments); + } + return saveButtonIcons; + }() // Command Button Links + }, { + key: "saveCommandButtonLinks", + value: function () { + var _saveCommandButtonLinks = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(links, formFilters, comment) { + var dataRequest; + return _regeneratorRuntime().wrap(function _callee8$(_context8) { + while (1) switch (_context8.prev = _context8.next) { + case 0: + dataRequest = {}; + dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters); + dataRequest[flagCommandButtonLink] = links; + dataRequest[flagComment] = comment; + _context8.next = 6; + return API.request(hashSaveDogCommandButtonLink, 'POST', dataRequest); + case 6: + return _context8.abrupt("return", _context8.sent); + case 7: + case "end": + return _context8.stop(); + } + }, _callee8); + })); + function saveCommandButtonLinks(_x17, _x18, _x19) { + return _saveCommandButtonLinks.apply(this, arguments); + } + return saveCommandButtonLinks; }() }]); }(); @@ -927,6 +1008,9 @@ var BasePage = /*#__PURE__*/function () { this.hookupButtonsNavDogCommands(); this.hookupButtonsNavDogDogCommandLinks(); this.hookupButtonsNavDogDogs(); + this.hookupButtonsNavDogLocations(); + this.hookupButtonsNavDogButtonIcons(); + this.hookupButtonsNavDogCommandButtonLinks(); } }, { key: "hookupButtonsNavHome", @@ -1000,6 +1084,21 @@ var BasePage = /*#__PURE__*/function () { value: function hookupButtonsNavDogDogs() { this.hookupButtonsNav('.' + flagNavDogDogs, hashPageDogDogs); } + }, { + key: "hookupButtonsNavDogLocations", + value: function hookupButtonsNavDogLocations() { + this.hookupButtonsNav('.' + flagNavDogLocations, hashPageDogLocations); + } + }, { + key: "hookupButtonsNavDogButtonIcons", + value: function hookupButtonsNavDogButtonIcons() { + this.hookupButtonsNav('.' + flagNavDogButtonIcons, hashPageDogButtonIcons); + } + }, { + key: "hookupButtonsNavDogCommandButtonLinks", + value: function hookupButtonsNavDogCommandButtonLinks() { + this.hookupButtonsNav('.' + flagNavDogCommandButtonLinks, hashPageDogCommandButtonLinks); + } }, { key: "hookupLogos", value: function hookupLogos() { @@ -2024,7 +2123,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { var changeHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) { _this21.handleChangeNestedElementCellTable(event, element); }; - this.hookupEventHandler("change", ddlSelector, function (event, element) { + this.hookupChangeHandlerTableCells(ddlSelector, function (event, element) { changeHandler(event, element); }); } @@ -2474,12 +2573,8 @@ var PageDogCommandCategories = /*#__PURE__*/function (_TableBasePage) { var inputCode = row.querySelector('td.' + flagCode + ' .' + flagCode); var inputName = row.querySelector('td.' + flagName + ' .' + flagName); var buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive); - - /* - console.log("inputName"); - console.log(inputName); - */ - + console.log("inputCode"); + console.log(inputCode); var jsonRow = {}; jsonRow[attrIdCommandCategory] = row.getAttribute(attrIdCommandCategory); jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(inputCode); @@ -2761,6 +2856,431 @@ var PageDogDogCommandLinks = /*#__PURE__*/function (_TableBasePage) { dog_command_links_defineProperty(PageDogDogCommandLinks, "hash", hashPageDogDogCommandLinks); dog_command_links_defineProperty(PageDogDogCommandLinks, "attrIdRowObject", attrIdDogCommandLink); +;// ./static/js/pages/dog/locations.js +function locations_typeof(o) { "@babel/helpers - typeof"; return locations_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, locations_typeof(o); } +function locations_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function locations_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, locations_toPropertyKey(o.key), o); } } +function locations_createClass(e, r, t) { return r && locations_defineProperties(e.prototype, r), t && locations_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function locations_callSuper(t, o, e) { return o = locations_getPrototypeOf(o), locations_possibleConstructorReturn(t, locations_isNativeReflectConstruct() ? Reflect.construct(o, e || [], locations_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function locations_possibleConstructorReturn(t, e) { if (e && ("object" == locations_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return locations_assertThisInitialized(t); } +function locations_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function locations_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (locations_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function locations_superPropGet(t, o, e, r) { var p = locations_get(locations_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } +function locations_get() { return locations_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = locations_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, locations_get.apply(null, arguments); } +function locations_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = locations_getPrototypeOf(t));); return t; } +function locations_getPrototypeOf(t) { return locations_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, locations_getPrototypeOf(t); } +function locations_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && locations_setPrototypeOf(t, e); } +function locations_setPrototypeOf(t, e) { return locations_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, locations_setPrototypeOf(t, e); } +function locations_defineProperty(e, r, t) { return (r = locations_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function locations_toPropertyKey(t) { var i = locations_toPrimitive(t, "string"); return "symbol" == locations_typeof(i) ? i : i + ""; } +function locations_toPrimitive(t, r) { if ("object" != locations_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != locations_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + + + +var PageDogLocations = /*#__PURE__*/function (_TableBasePage) { + function PageDogLocations(router) { + var _this; + locations_classCallCheck(this, PageDogLocations); + _this = locations_callSuper(this, PageDogLocations, [router]); + locations_defineProperty(_this, "callSaveTableContent", API.saveLocations); + _this.dogMixin = new DogTableMixinPage(_this); + return _this; + } + locations_inherits(PageDogLocations, _TableBasePage); + return locations_createClass(PageDogLocations, [{ + key: "initialize", + value: function initialize() { + this.sharedInitialize(); + } + }, { + key: "hookupFilters", + value: function hookupFilters() { + this.sharedHookupFilters(); + this.hookupFilterActive(); + } + }, { + key: "loadRowTable", + value: function loadRowTable(rowJson) { + if (rowJson == null) return; + if (_verbose) { + utils_Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); + } + } + }, { + key: "getJsonRow", + value: function getJsonRow(row) { + if (row == null) return; + var inputName = row.querySelector('td.' + flagName + ' .' + flagName); + var buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive); + var jsonRow = {}; + jsonRow[attrIdLocation] = row.getAttribute(attrIdLocation); + jsonRow[flagLocationParent] = this.getIdLocationParentRow(row); + jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName); + jsonRow[flagActive] = buttonActive.classList.contains(flagDelete); + console.log("jsonRow"); + console.log(jsonRow); + return jsonRow; + } + }, { + key: "getIdLocationParentRow", + value: function getIdLocationParentRow(row) { + var elementLocationParent = row.querySelector('td.' + flagLocationParent + ' .' + flagLocationParent); + return DOM.getElementAttributeValueCurrent(elementLocationParent); + } + }, { + key: "initialiseRowNew", + value: function initialiseRowNew(tbody, row) {} + }, { + key: "postInitialiseRowNewCallback", + value: function postInitialiseRowNewCallback(tbody) { + var newRows = tbody.querySelectorAll('tr.' + flagRowNew); + var newestRow = newRows[0]; + var clickableElementsSelector = ['td.' + flagLocationParent + ' div.' + flagLocationParent].join(''); + newestRow.querySelectorAll(clickableElementsSelector).forEach(function (clickableElement) { + clickableElement.click(); + }); + } + }, { + key: "hookupTableMain", + value: function hookupTableMain() { + locations_superPropGet(PageDogLocations, "hookupTableMain", this, 3)([]); + this.hookupFieldsLocationParent(); + this.hookupFieldsNameTable(); + this.hookupFieldsActive(); + } + }, { + key: "hookupFieldsLocationParent", + value: function hookupFieldsLocationParent() { + var _this2 = this; + /* + this.hookupTableCellDdlPreviews( + flagLocationParent + , Utils.getListFromDict(locations).filter(location => + ( + location[attrIdLocation] == idLocationRow + || idLocationRow < 1 + ) + ) // .sort((a, b) => a[flagName].localeCompare(b[flagName])) + , null // cellSelector + , (cellSelector) => { this.hookupLocationParentDdls(cellSelector); } + , + ); + fieldFlag + , optionList + , cellSelector = null + , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); } + , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); } + ) { + */ + var cellSelector = idTableMain + ' > tbody > tr > td.' + flagLocationParent; + this.hookupEventHandler("click", cellSelector + ' div.' + flagLocationParent, function (event, div) { + var row = DOM.getRowFromElement(div); + var idLocationRow = Number(row.getAttribute(attrIdLocation)); + utils_Utils.consoleLogIfNotProductionEnvironment({ + idLocationRow: idLocationRow + }); + _this2.handleClickTableCellDdlPreview(event, div, flagLocationParent, utils_Utils.getListFromDict(locations).filter(function (location) { + return location[attrIdLocation] != idLocationRow || idLocationRow < 1; + }) // .sort((a, b) => a[flagName].localeCompare(b[flagName])) + , cellSelector, function (ddlSelector) { + _this2.hookupTableCellDdls(ddlSelector, function (event, element) { + _this2.handleChangeNestedElementCellTable(event, element); + }); + }); + }); + this.hookupTableCellDdls(cellSelector + ' select.' + flagLocationParent, function (event, element) { + _this2.handleChangeNestedElementCellTable(event, element); + }); + } + /* + hookupLocationParentDdls(ddlSelector) { + this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeNestedElementCellTable(event, element); }); + } + */ + }, { + key: "leave", + value: function leave() { + locations_superPropGet(PageDogLocations, "leave", this, 3)([]); + } + }]); +}(TableBasePage); +locations_defineProperty(PageDogLocations, "hash", hashPageDogLocations); +locations_defineProperty(PageDogLocations, "attrIdRowObject", attrIdLocation); + +;// ./static/js/pages/dog/button_icons.js +function button_icons_typeof(o) { "@babel/helpers - typeof"; return button_icons_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, button_icons_typeof(o); } +function button_icons_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function button_icons_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, button_icons_toPropertyKey(o.key), o); } } +function button_icons_createClass(e, r, t) { return r && button_icons_defineProperties(e.prototype, r), t && button_icons_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function button_icons_callSuper(t, o, e) { return o = button_icons_getPrototypeOf(o), button_icons_possibleConstructorReturn(t, button_icons_isNativeReflectConstruct() ? Reflect.construct(o, e || [], button_icons_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function button_icons_possibleConstructorReturn(t, e) { if (e && ("object" == button_icons_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return button_icons_assertThisInitialized(t); } +function button_icons_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function button_icons_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (button_icons_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function button_icons_superPropGet(t, o, e, r) { var p = button_icons_get(button_icons_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } +function button_icons_get() { return button_icons_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = button_icons_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, button_icons_get.apply(null, arguments); } +function button_icons_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = button_icons_getPrototypeOf(t));); return t; } +function button_icons_getPrototypeOf(t) { return button_icons_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, button_icons_getPrototypeOf(t); } +function button_icons_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && button_icons_setPrototypeOf(t, e); } +function button_icons_setPrototypeOf(t, e) { return button_icons_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, button_icons_setPrototypeOf(t, e); } +function button_icons_defineProperty(e, r, t) { return (r = button_icons_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function button_icons_toPropertyKey(t) { var i = button_icons_toPrimitive(t, "string"); return "symbol" == button_icons_typeof(i) ? i : i + ""; } +function button_icons_toPrimitive(t, r) { if ("object" != button_icons_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != button_icons_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + + + +var PageDogButtonIcons = /*#__PURE__*/function (_TableBasePage) { + function PageDogButtonIcons(router) { + var _this; + button_icons_classCallCheck(this, PageDogButtonIcons); + _this = button_icons_callSuper(this, PageDogButtonIcons, [router]); + button_icons_defineProperty(_this, "callSaveTableContent", API.saveButtonIcons); + _this.dogMixin = new DogTableMixinPage(_this); + return _this; + } + button_icons_inherits(PageDogButtonIcons, _TableBasePage); + return button_icons_createClass(PageDogButtonIcons, [{ + key: "initialize", + value: function initialize() { + this.sharedInitialize(); + } + }, { + key: "hookupFilters", + value: function hookupFilters() { + this.sharedHookupFilters(); + this.hookupFilterActive(); + } + }, { + key: "loadRowTable", + value: function loadRowTable(rowJson) { + if (rowJson == null) return; + if (_verbose) { + utils_Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); + } + } + }, { + key: "getJsonRow", + value: function getJsonRow(row) { + if (row == null) return; + var inputName = row.querySelector('td.' + flagName + ' .' + flagName); + var buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive); + var jsonRow = {}; + jsonRow[attrIdButtonIcon] = row.getAttribute(attrIdButtonIcon); + jsonRow[flagImage] = this.getIdImageRow(row); + jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName); + jsonRow[flagActive] = buttonActive.classList.contains(flagDelete); + console.log("jsonRow"); + console.log(jsonRow); + return jsonRow; + } + }, { + key: "getIdImageRow", + value: function getIdImageRow(row) { + var elementImage = row.querySelector('td.' + flagImage + ' .' + flagImage); + return DOM.getElementAttributeValueCurrent(elementImage); + } + }, { + key: "initialiseRowNew", + value: function initialiseRowNew(tbody, row) {} + }, { + key: "postInitialiseRowNewCallback", + value: function postInitialiseRowNewCallback(tbody) { + var newRows = tbody.querySelectorAll('tr.' + flagRowNew); + var newestRow = newRows[0]; + var clickableElementsSelector = ['td.' + flagImage + ' div.' + flagImage].join(''); + newestRow.querySelectorAll(clickableElementsSelector).forEach(function (clickableElement) { + clickableElement.click(); + }); + } + }, { + key: "hookupTableMain", + value: function hookupTableMain() { + button_icons_superPropGet(PageDogButtonIcons, "hookupTableMain", this, 3)([]); + this.hookupFieldsImage(); + this.hookupFieldsNameTable(); + this.hookupFieldsActive(); + } + }, { + key: "hookupFieldsImage", + value: function hookupFieldsImage() { + this.hookupTableCellDdlPreviews(flagImage, utils_Utils.getListFromDict(buttonicons) // .sort((a, b) => a[flagName].localeCompare(b[flagName])) + ); + } + }, { + key: "leave", + value: function leave() { + button_icons_superPropGet(PageDogButtonIcons, "leave", this, 3)([]); + } + }]); +}(TableBasePage); +button_icons_defineProperty(PageDogButtonIcons, "hash", hashPageDogButtonIcons); +button_icons_defineProperty(PageDogButtonIcons, "attrIdRowObject", attrIdButtonIcon); + +;// ./static/js/pages/dog/command_button_links.js +function command_button_links_typeof(o) { "@babel/helpers - typeof"; return command_button_links_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, command_button_links_typeof(o); } +function command_button_links_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function command_button_links_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, command_button_links_toPropertyKey(o.key), o); } } +function command_button_links_createClass(e, r, t) { return r && command_button_links_defineProperties(e.prototype, r), t && command_button_links_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function command_button_links_callSuper(t, o, e) { return o = command_button_links_getPrototypeOf(o), command_button_links_possibleConstructorReturn(t, command_button_links_isNativeReflectConstruct() ? Reflect.construct(o, e || [], command_button_links_getPrototypeOf(t).constructor) : o.apply(t, e)); } +function command_button_links_possibleConstructorReturn(t, e) { if (e && ("object" == command_button_links_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return command_button_links_assertThisInitialized(t); } +function command_button_links_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function command_button_links_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (command_button_links_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function command_button_links_superPropGet(t, o, e, r) { var p = command_button_links_get(command_button_links_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } +function command_button_links_get() { return command_button_links_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = command_button_links_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, command_button_links_get.apply(null, arguments); } +function command_button_links_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = command_button_links_getPrototypeOf(t));); return t; } +function command_button_links_getPrototypeOf(t) { return command_button_links_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, command_button_links_getPrototypeOf(t); } +function command_button_links_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && command_button_links_setPrototypeOf(t, e); } +function command_button_links_setPrototypeOf(t, e) { return command_button_links_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, command_button_links_setPrototypeOf(t, e); } +function command_button_links_defineProperty(e, r, t) { return (r = command_button_links_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function command_button_links_toPropertyKey(t) { var i = command_button_links_toPrimitive(t, "string"); return "symbol" == command_button_links_typeof(i) ? i : i + ""; } +function command_button_links_toPrimitive(t, r) { if ("object" != command_button_links_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != command_button_links_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + + + +var PageDogCommandButtonLinks = /*#__PURE__*/function (_TableBasePage) { + function PageDogCommandButtonLinks(router) { + var _this; + command_button_links_classCallCheck(this, PageDogCommandButtonLinks); + _this = command_button_links_callSuper(this, PageDogCommandButtonLinks, [router]); + command_button_links_defineProperty(_this, "callSaveTableContent", API.saveCommandButtonLinks); + _this.dogMixin = new DogTableMixinPage(_this); + return _this; + } + command_button_links_inherits(PageDogCommandButtonLinks, _TableBasePage); + return command_button_links_createClass(PageDogCommandButtonLinks, [{ + key: "initialize", + value: function initialize() { + this.sharedInitialize(); + } + }, { + key: "hookupFilters", + value: function hookupFilters() { + this.sharedHookupFilters(); + this.hookupFilterCommandCategory(); + this.hookupFilterCommand(); + this.hookupFilterButtonShape(); + this.hookupFilterColour(); + this.hookupFilterButtonIcon(); + this.hookupFilterLocation(); + this.hookupFilterActive(); + } + }, { + key: "hookupFilterButtonShape", + value: function hookupFilterButtonShape() { + this.hookupFilter(attrIdButtonShape); + } + }, { + key: "hookupFilterColour", + value: function hookupFilterColour() { + this.hookupFilter(attrIdColour); + } + }, { + key: "hookupFilterButtonIcon", + value: function hookupFilterButtonIcon() { + this.hookupFilter(attrIdButtonIcon); + } + }, { + key: "hookupFilterLocation", + value: function hookupFilterLocation() { + this.hookupFilter(attrIdLocation); + } + }, { + key: "loadRowTable", + value: function loadRowTable(rowJson) { + if (rowJson == null) return; + if (_verbose) { + utils_Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); + } + } + }, { + key: "getJsonRow", + value: function getJsonRow(row) { + if (row == null) return; + var inputHandSignalDescription = row.querySelector('td.' + flagHandSignalDescription + ' textarea'); + var inputNotes = row.querySelector('td.' + flagNotes + ' textarea'); + var buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive); + var jsonRow = {}; + jsonRow[attrIdCommandButtonLink] = row.getAttribute(attrIdCommandButtonLink); + jsonRow[attrIdDog] = this.getIdDogRow(row); + jsonRow[attrIdCommand] = this.getIdCommandRow(row); + jsonRow[flagHandSignalDescription] = DOM.getElementAttributeValueCurrent(inputHandSignalDescription); + jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes); + jsonRow[flagActive] = buttonActive.classList.contains(flagDelete); + return jsonRow; + } + }, { + key: "initialiseRowNew", + value: function initialiseRowNew(tbody, row) {} + }, { + key: "postInitialiseRowNewCallback", + value: function postInitialiseRowNewCallback(tbody) { + var newRows = tbody.querySelectorAll('tr.' + flagRowNew); + var newestRow = newRows[newRows.length - 1]; + var clickableElementsSelector = ['td.' + flagDog + ' div.' + flagDog, ',td.' + flagCommandCategory + ' div.' + flagCommandCategory, ',td.' + flagCommand + ' div.' + flagCommand].join(''); + newestRow.querySelectorAll(clickableElementsSelector).forEach(function (clickableElement) { + clickableElement.click(); + }); + } + }, { + key: "hookupTableMain", + value: function hookupTableMain() { + command_button_links_superPropGet(PageDogCommandButtonLinks, "hookupTableMain", this, 3)([]); + this.hookupFieldsCommandCategory(); + this.hookupFieldsCommand(); + this.hookupFieldsButtonShape(); + this.hookupFieldsColour(); + this.hookupFieldsButtonIcon(); + this.hookupFieldsLocation(); + this.hookupFieldsActive(); + } + }, { + key: "hookupFieldsButtonShape", + value: function hookupFieldsButtonShape() { + this.hookupTableCellDdlPreviews(flagButtonShape, utils_Utils.getListFromDict(filterButtonShapes) // .sort((a, b) => a[flagName].localeCompare(b[flagName])) + ); + } + }, { + key: "hookupFieldsColour", + value: function hookupFieldsColour() { + this.hookupTableCellDdlPreviews(flagColour, utils_Utils.getListFromDict(filterColours) // .sort((a, b) => a[flagName].localeCompare(b[flagName])) + ); + } + }, { + key: "hookupFieldsButtonIcon", + value: function hookupFieldsButtonIcon() { + this.hookupTableCellDdlPreviews(flagButtonIcon, utils_Utils.getListFromDict(filterButtonIcons) // .sort((a, b) => a[flagName].localeCompare(b[flagName])) + ); + } + }, { + key: "hookupFieldsLocation", + value: function hookupFieldsLocation() { + this.hookupTableCellDdlPreviews(flagLocation, utils_Utils.getListFromDict(filterLocations) // .sort((a, b) => a[flagName].localeCompare(b[flagName])) + ); + } + }, { + key: "leave", + value: function leave() { + command_button_links_superPropGet(PageDogCommandButtonLinks, "leave", this, 3)([]); + } + }]); +}(TableBasePage); +command_button_links_defineProperty(PageDogCommandButtonLinks, "hash", hashPageDogCommandButtonLinks); +command_button_links_defineProperty(PageDogCommandButtonLinks, "attrIdRowObject", attrIdCommandButtonLink); + ;// ./static/js/pages/legal/accessibility_report.js function accessibility_report_typeof(o) { "@babel/helpers - typeof"; return accessibility_report_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, accessibility_report_typeof(o); } function accessibility_report_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } @@ -2972,6 +3492,9 @@ function router_toPrimitive(t, r) { if ("object" != router_typeof(t) || !t) retu // import PageDogDogs from './pages/dog/dogs.js'; + + + // Legal @@ -3015,6 +3538,18 @@ var Router = /*#__PURE__*/function () { module: PageDogDogCommandLinks }; // this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs }; + this.pages[hashPageDogLocations] = { + name: 'PageDogLocations', + module: PageDogLocations + }; + this.pages[hashPageDogButtonIcons] = { + name: 'PageDogButtonIcons', + module: PageDogButtonIcons + }; + this.pages[hashPageDogCommandButtonLinks] = { + name: 'PageDogCommandButtonLinks', + module: PageDogCommandButtonLinks + }; // Legal this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', @@ -3061,6 +3596,18 @@ var Router = /*#__PURE__*/function () { return _this.navigateToHash(hashPageDogDogCommandLinks, isPopState); }; // this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState); + this.routes[hashPageDogLocations] = function () { + var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + return _this.navigateToHash(hashPageDogLocations, isPopState); + }; + this.routes[hashPageDogButtonIcons] = function () { + var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + return _this.navigateToHash(hashPageDogButtonIcons, isPopState); + }; + this.routes[hashPageDogCommandButtonLinks] = function () { + var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + return _this.navigateToHash(hashPageDogCommandButtonLinks, isPopState); + }; // Legal this.routes[hashPageAccessibilityStatement] = function () { var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; diff --git a/static/dist/js/main.bundle.js.map b/static/dist/js/main.bundle.js.map index 7332219..abf0766 100644 --- a/static/dist/js/main.bundle.js.map +++ b/static/dist/js/main.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"js/main.bundle.js","mappings":"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","sources":["webpack://app/./static/js/lib/validation.js","webpack://app/./static/js/dom.js","webpack://app/./static/js/lib/events.js","webpack://app/./static/js/lib/local_storage.js","webpack://app/./static/js/api.js","webpack://app/./static/js/lib/utils.js","webpack://app/./static/js/components/common/temporary/overlay_confirm.js","webpack://app/./static/js/pages/base.js","webpack://app/./static/js/pages/core/home.js","webpack://app/./static/js/pages/dog/home.js","webpack://app/./static/js/lib/business_objects/business_objects.js","webpack://app/./static/js/components/common/temporary/overlay_error.js","webpack://app/./static/js/pages/base_table.js","webpack://app/./static/js/pages/dog/mixin.js","webpack://app/./static/js/pages/dog/mixin_table.js","webpack://app/./static/js/pages/dog/command_categories.js","webpack://app/./static/js/pages/dog/commands.js","webpack://app/./static/js/pages/dog/dog_command_links.js","webpack://app/./static/js/pages/legal/accessibility_report.js","webpack://app/./static/js/pages/legal/accessibility_statement.js","webpack://app/./static/js/pages/legal/license.js","webpack://app/./static/js/pages/legal/privacy_policy.js","webpack://app/./static/js/pages/legal/retention_schedule.js","webpack://app/./static/js/router.js","webpack://app/./static/js/app.js","webpack://app/./static/css/main.css?0a91","webpack://app/./static/css/components/button.css?0e0b","webpack://app/./static/css/components/card.css","webpack://app/./static/css/components/dialog.css","webpack://app/./static/css/components/form.css?94e1","webpack://app/./static/css/components/image.css?9f9c","webpack://app/./static/css/components/label.css?b78f","webpack://app/./static/css/components/modal.css","webpack://app/./static/css/components/navigation.css","webpack://app/./static/css/components/overlay.css?6dfd","webpack://app/./static/css/components/table.css?e553","webpack://app/./static/css/layouts/header.css?da75","webpack://app/./static/css/layouts/footer.css?65e3","webpack://app/./static/css/layouts/table-main.css?8c15","webpack://app/./static/css/lib/reset.css","webpack://app/./static/css/lib/typography.css","webpack://app/./static/css/lib/utils.css?0479","webpack://app/./static/css/lib/variables.css","webpack://app/./static/css/themes/light.css?855e"],"sourcesContent":["\nexport default class Validation {\n /*\n isNullOrWhitespace(v) {\n let txt = JSON.stringify(v).replace('/\\s\\g', '');\n return (txt == '' || 'null');\n }\n */\n\n static isEmpty(object) {\n\n let isEmpty = true;\n\n if (object !== null && object !== \"null\" && object !== undefined && object !== \"undefined\") {\n\n if (object.length == undefined) {\n isEmpty = false; // object exists but isn't a collection\n }\n else if (typeof object === \"function\") {\n isEmpty = false; // object is reference\n }\n else { // string or collection\n\n let isString = (typeof object == \"string\");\n\n if (isString) object = object.trim();\n\n if (object.length > 0) {\n\n if (isString) {\n isEmpty = false; // String greater than length 0\n }\n else {\n\n if (typeof object[0] != \"string\") {\n isEmpty = false;\n }\n else {\n for(let i = 0; i < object.length; i++) {\n if (object[i] != \"\") {\n isEmpty = false;\n break\n }\n }\n }\n }\n }\n }\n }\n\n return isEmpty;\n }\n\n static isValidNumber(value, positiveOnly) {\n return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);\n }\n\n static getDataContentType(params) {\n\n var data = null;\n var contentType = '';\n\n if (!Validation.isEmpty(params)) {\n\n if (typeof params === \"string\") {\n data = params;\n contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n }\n else {\n data = JSON.stringify(params);\n contentType = \"application/json; charset=UTF-8\";\n }\n }\n\n return { Data: data, ContentType: contentType };\n }\n\n static arrayContainsItem(array, itemValue) {\n\n var hasItem = false;\n\n if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {\n\n var isJQueryElementArray = array[0] instanceof jQuery;\n\n if (isJQueryElementArray) {\n\n for (let i = 0; i < array.length; i++) {\n\n if (document.querySelectorAll(array[i]).is(itemValue)) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n var isDate = array[0] instanceof Date;\n\n if (isDate) {\n \n for (let i = 0; i < array.length; i++) {\n\n if (array[i].getTime() === itemValue.getTime()) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n for (let i = 0; i < array.length; i++) {\n\n if (array[i] == itemValue) {\n hasItem = true;\n break;\n }\n }\n }\n }\n }\n\n return hasItem;\n }\n\n static dictHasKey(d, k) {\n return (k in d);\n }\n static areEqualDicts(dict1, dict2) {\n const keys1 = Object.keys(dict1);\n const keys2 = Object.keys(dict2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n for (let key of keys1) {\n if (dict1[key] !== dict2[key]) {\n return false;\n }\n }\n \n return true;\n }\n\n static imageExists(url, callback) {\n\n var img = new Image();\n\n img.onload = function() { callback(true); };\n img.onerror = function() { callback(false); };\n img.src = url;\n }\n\n static toFixedOrDefault(value, decimalPlaces, defaultValue = null) {\n return Validation.isValidNumber(value) ? parseFloat(value).toFixed(decimalPlaces) : defaultValue;\n }\n}\n","\nimport Utils from \"./lib/utils.js\";\nimport Validation from \"./lib/validation.js\";\n\nexport default class DOM {\n static setElementAttributesValuesCurrentAndPrevious(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementAttributeValueCurrent(element, data) {\n element.setAttribute(attrValueCurrent, data);\n }\n static setElementAttributeValuePrevious(element, data) {\n element.setAttribute(attrValuePrevious, data);\n }\n static setElementValuesCurrentAndPrevious(element, data) {\n DOM.setElementValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementValueCurrent(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n element.checked = data;\n }\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n element.value = data;\n }\n else {\n element.textContent = data;\n }\n }\n static setElementValueCurrentIfEmpty(element, data) {\n if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {\n DOM.setElementValueCurrent(element, data);\n }\n }\n static getCellFromElement(element) {\n return element.closest('td');\n }\n static getRowFromElement(element, flagRow) {\n let selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;\n return element.closest(selector);\n }\n static getClosestParent(element, parentSelector) {\n let parent = element.parentElement;\n while (parent) {\n if (parent.matches(parentSelector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n static convertForm2JSON(elementForm) {\n let dataForm = {};\n if (Validation.isEmpty(elementForm)) {\n return dataForm;\n }\n let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);\n let containerFilter, labelFilter, keyFilter, filter;\n for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {\n containerFilter = containersFilter[indexFilter];\n labelFilter = containerFilter.querySelector('label');\n keyFilter = labelFilter.getAttribute('for');\n filter = containerFilter.querySelector(`#${keyFilter}`);\n dataForm[keyFilter] = DOM.getElementValueCurrent(filter);\n }\n return dataForm;\n }\n static loadPageBody(contentNew) {\n let pageBody = document.querySelector(idPageBody);\n pageBody.innerHTML = contentNew;\n }\n static getHashPageCurrent() {\n const hashPageCurrent = document.body.dataset.page;\n return hashPageCurrent;\n }\n static updateAndCheckIsElementDirty(element) {\n element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));\n return DOM.isElementDirty(element);\n }\n static isElementDirty(element) {\n let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);\n DOM.handleDirtyElement(element, isDirty);\n return isDirty;\n }\n static handleDirtyElement(element, isDirty) {\n DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);\n }\n static toggleElementHasClassnameFlag(element, elementHasFlag, flag) {\n let elementAlreadyHasFlag = element.classList.contains(flag);\n if (elementHasFlag == elementAlreadyHasFlag) return;\n if (elementHasFlag) {\n element.classList.add(flag);\n } else {\n element.classList.remove(flag);\n }\n }\n static hasDirtyChildrenContainer(container) {\n if (container == null) return false;\n return container.querySelector('.' + flagDirty) != null;\n }\n static hasDirtyChildrenNotDeletedContainer(container) {\n if (container == null || container.classList.contains(flagDelete)) return false;\n return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;\n }\n static getElementValueCurrent(element) {\n let returnVal = '';\n \n if (!Validation.isEmpty(element)) {\n \n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n returnVal = element.checked;\n }\n /*\n else if (element.classList.contains(flagIsDatePicker)) {\n returnVal = getDatePickerDate(element, adjust4DayLightSavings);\n }\n */\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n returnVal = element.value;\n }\n else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON'\n returnVal = element.classList.contains(flagDelete);\n }\n else if (tagName === 'TD') {\n returnVal = DOM.getElementAttributeValueCurrent(element);\n }\n else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {\n returnVal = (element.classList.contains(flagIsChecked))\n }\n else {\n returnVal = element.textContent;\n }\n }\n \n if (Validation.isEmpty(returnVal)) returnVal = '';\n \n return returnVal;\n }\n static getElementAttributeValueCurrent(element) {\n // debugger;\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValueCurrent);\n }\n static getElementAttributeValuePrevious(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValuePrevious);\n }\n /* base_table.handleChangeElementCellTable\n static updateAndCheckIsTableElementDirty(element) {\n let wasDirty = DOM.isElementDirty(element);\n let row = DOM.getRowFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n let isDirty = DOM.updateAndCheckIsElementDirty(element);\n let cell = DOM.getCellFromElement(element);\n Utils.consoleLogIfNotProductionEnvironment({element, row, cell, isDirty, wasDirty});\n if (isDirty != wasDirty) {\n DOM.handleDirtyElement(cell, isDirty);\n let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isDirtyRow);\n }\n }\n }\n */\n static scrollToElement(parent, element) {\n // REQUIRED: parent has scroll-bar\n parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));\n }\n static isElementInContainer(container, element) {\n\n if (typeof jQuery === 'function') {\n if (container instanceof jQuery) container = container[0];\n if (element instanceof jQuery) element = element[0];\n }\n\n var containerBounds = container.getBoundingClientRect();\n var elementBounds = element.getBoundingClientRect();\n\n return (\n containerBounds.top <= elementBounds.top &&\n containerBounds.left <= elementBounds.left &&\n ((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&\n ((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))\n );\n }\n static alertError(errorType, errorText) {\n alert(errorType + '\\n' + errorText);\n }\n static createOptionUnselectedProductVariation() {\n return {\n [flagProductVariationType]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariationType],\n [flagName]: 'Select Variation Type',\n [attrIdProductVariationType]: 0,\n },\n [flagProductVariation]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariation],\n [flagName]: 'Select Variation',\n [attrIdProductVariation]: 0,\n },\n };\n }\n static createOption(optionJson) {\n if (Validation.isEmpty(optionJson)) optionJson = {\n text: 'Select',\n value: 0,\n };\n let option = document.createElement('option');\n option.value = optionJson.value;\n option.textContent = optionJson.text;\n option.selected = optionJson.selected;\n return option;\n }\n\n static escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n static unescapeHtml(html) {\n const div = document.createElement('div');\n div.innerHTML = html;\n return div.textContent || div.innerText || '';\n }\n}\n","\nexport default class Events {\n static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {\n document.querySelectorAll(selectorElement).forEach(function(element) {\n if (element.classList.contains(classInitialised)) return;\n eventHandler(element);\n element.classList.add(classInitialised);\n });\n }\n}","\nimport Validation from \"./validation.js\";\n\nexport default class LocalStorage {\n/*\nfunction getPageLocalStorage(pageHash) {\n\n let ls;\n try {\n ls = JSON.parse(localStorage.getItem(pageHash));\n } catch {\n\n }\n\n if (Validation.isEmpty(ls)) return {}\n\n return ls;\n}\nfunction getPageLocalStorageCurrent() {\n\n return JSON.parse(localStorage.getItem(hashPageCurrent));\n}\n\nfunction setPageLocalStorage(pageHash, newLS) {\n\n localStorage.setItem(pageHash, JSON.stringify(newLS));\n}\n\nfunction clearPageLocalStorage(pageHash) {\n localStorage.removeItem(pageHash);\n}\n\nfunction setupPageLocalStorage(pageHash) {\n\n let ls = getPageLocalStorage(pageHash);\n\n if (Validation.isEmpty(ls)) ls = {};\n\n setPageLocalStorage(pageHash, ls);\n}\n*/\n\n static getLocalStorage(key) {\n return JSON.parse(localStorage.getItem(key));\n }\n\n static setLocalStorage(key, newLS) {\n localStorage.setItem(key, JSON.stringify(newLS));\n }\n\n/*\nfunction setupPageLocalStorageNext(pageHashNext) {\n let lsOld = getPageLocalStorage(hashPageCurrent);\n hashPageCurrent = pageHashNext;\n clearPageLocalStorage(hashPageCurrent);\n setupPageLocalStorage(hashPageCurrent);\n let lsNew = getPageLocalStorage(hashPageCurrent);\n lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};\n setPageLocalStorage(hashPageCurrent, lsNew);\n}\n*/\n}","import DOM from './dom.js';\n\nexport default class API {\n \n static getCsrfToken() {\n return document.querySelector(idCSRFToken).getAttribute('content');\n }\n \n static async request(hashEndpoint, method = 'GET', data = null, params = null) {\n const url = API.getUrlFromHash(hashEndpoint, params);\n const csrfToken = API.getCsrfToken();\n const options = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n [flagCsrfToken]: csrfToken,\n }\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n data = { \n ...data, \n [flagCsrfToken]: csrfToken,\n };\n options.body = JSON.stringify(data);\n }\n\n try {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n console.error('API request failed:', error);\n throw error;\n }\n }\n \n static getUrlFromHash(hash, params = null) {\n if (hash == null) hash = hashPageHome;\n let url = API.parameteriseUrl(_pathHost + hash, params);\n return url;\n }\n static parameteriseUrl(url, params) {\n if (params) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return url;\n }\n static goToUrl(url) {\n window.location.href = url;\n }\n static goToHash(hash, params = null) {\n const url = API.getUrlFromHash(hash, params);\n API.goToUrl(url);\n }\n\n // specific api calls\n /* Example:\n getUsers: () => request('/users'),\n getUserById: (id) => request(`/users/${id}`),\n createUser: (userData) => request('/users', 'POST', userData),\n updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),\n deleteUser: (id) => request(`/users/${id}`, 'DELETE'),\n */\n static async loginUser() {\n let callback = {};\n callback[flagCallback] = DOM.getHashPageCurrent();\n return await API.request(hashPageUserLogin, 'POST', callback);\n }\n\n // dog\n // Command categories\n static async saveCommandCategories(commandCategories, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagCommandCategory] = commandCategories;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogCommandCategory, 'POST', dataRequest);\n }\n \n // Commands\n static async saveCommands(commands, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagCommand] = commands;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogCommand, 'POST', dataRequest);\n }\n \n // Dog Command Links\n static async saveDogCommandLinks(dogCommandLinks, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagDogCommandLink] = dogCommandLinks;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);\n }\n \n}\n","// Utility functions\n/*\nfunction $(selector) {\n return document.querySelector(selector);\n}\n\nfunction $$(selector) {\n return document.querySelectorAll(selector);\n}\n*/\nexport default class Utils {\n static getListFromDict(dict) {\n let list = [];\n for (let key in dict) {\n list.push(dict[key]);\n }\n return list;\n }\n static consoleLogIfNotProductionEnvironment(message) {\n if (environment.is_production != \"true\") {\n console.log(message);\n }\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayConfirm {\n static hookup(callbackSuccess) {\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.style.visibility = 'hidden';\n });\n });\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, (buttonConfirm) => {\n buttonConfirm.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n let textarea = overlay.querySelector('textarea');\n overlay.style.visibility = 'hidden';\n callbackSuccess(textarea.value);\n });\n });\n }\n static show() {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.classList.remove(flagIsCollapsed);\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class BasePage {\n constructor(router) {\n if (!router) {\n throw new Error(\"Router is required\");\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"initialising with router: \", router);\n }\n this.router = router;\n this.title = titlePageCurrent;\n if (this.constructor === BasePage) {\n throw new Error(\"Cannot instantiate abstract class\");\n }\n \n if (!this.constructor.hash) {\n throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);\n }\n }\n\n initialize() {\n throw new Error(\"Method 'initialize()' must be implemented.\");\n }\n\n sharedInitialize() {\n this.logInitialisation();\n this.hookupCommonElements();\n }\n\n logInitialisation() {\n Utils.consoleLogIfNotProductionEnvironment('Initializing ' + this.title + ' page');\n }\n \n hookupCommonElements() {\n // hookupVideos();\n this.hookupLogos();\n this.hookupNavigation();\n this.hookupOverlays();\n }\n \n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n \n hookupNavigation() {\n this.hookupEventHandler(\"click\", idButtonHamburger, (event, element) => {\n let overlayHamburger = document.querySelector(idOverlayHamburger);\n if (overlayHamburger.classList.contains(flagIsCollapsed)) {\n overlayHamburger.classList.remove(flagIsCollapsed);\n overlayHamburger.classList.add(flagExpanded);\n } else {\n overlayHamburger.classList.remove(flagExpanded);\n overlayHamburger.classList.add(flagIsCollapsed);\n }\n });\n\n this.hookupButtonsNavHome();\n // this.hookupButtonsNavAdminHome();\n this.hookupButtonsNavUserAccount();\n this.hookupButtonsNavUserLogout();\n this.hookupButtonsNavUserLogin();\n\n // this.hookupButtonsNavStoreHome();\n // this.hookupButtonsNavStoreManufacturingPurchaseOrders();\n this.hookupButtonsNavDogHome();\n this.hookupButtonsNavDogCommandCategories();\n this.hookupButtonsNavDogCommands();\n this.hookupButtonsNavDogDogCommandLinks();\n this.hookupButtonsNavDogDogs();\n }\n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n hookupButtonsNavHome() {\n this.hookupButtonsNav('.' + flagNavHome, hashPageHome);\n }\n hookupButtonsNav(buttonSelector, hashPageNav) {\n this.hookupEventHandler(\"click\", buttonSelector, (event, button) => { \n this.router.navigateToHash(hashPageNav); \n });\n }\n /*\n hookupButtonsNavAdminHome() {\n this.hookupButtonsNav('.' + flagNavAdminHome, hashPageAdminHome);\n }\n hookupButtonsNavServices() {\n this.hookupButtonsNav('.' + flagNavServices, hashPageServices);\n }\n */\n hookupButtonsNavUserAccount() {\n this.hookupButtonsNav('.' + flagNavUserAccount, hashPageUserAccount);\n }\n hookupButtonsNavUserLogout() {\n this.hookupButtonsNav('.' + flagNavUserLogout, hashPageUserLogout);\n }\n hookupButtonsNavUserLogin() {\n this.hookupEventHandler(\"click\", '.' + flagNavUserLogin, (event, navigator) => { \n event.stopPropagation();\n this.leave();\n API.loginUser()\n .then((response) => {\n if (response.Success) {\n window.location.href = response[flagCallback];\n } else {\n DOM.alertError(\"Error\", response.Message);\n }\n });\n });\n }\n hookupButtonsNavDogHome() {\n this.hookupButtonsNav('.' + flagNavDogHome, hashPageDogHome);\n }\n hookupButtonsNavDogCommandCategories() {\n this.hookupButtonsNav('.' + flagNavDogCommandCategories, hashPageDogCommandCategories);\n }\n hookupButtonsNavDogCommands() {\n this.hookupButtonsNav('.' + flagNavDogCommands, hashPageDogCommands);\n }\n hookupButtonsNavDogDogCommandLinks() {\n this.hookupButtonsNav('.' + flagNavDogDogCommandLinks, hashPageDogDogCommandLinks);\n }\n hookupButtonsNavDogDogs() {\n this.hookupButtonsNav('.' + flagNavDogDogs, hashPageDogDogs);\n }\n\n hookupLogos() {\n this.hookupEventHandler(\"click\", \".\" + flagImageLogo + \",\" + \".\" + flagLogo, (event, element) => {\n Utils.consoleLogIfNotProductionEnvironment('clicking logo');\n this.router.navigateToHash(hashPageHome);\n });\n }\n\n hookupOverlays() {\n this.hookupOverlayFromId(idOverlayConfirm);\n this.hookupOverlayFromId(idOverlayError);\n }\n\n hookupOverlayFromId(idOverlay) {\n Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {\n overlay.querySelector('button.' + flagCancel).addEventListener(\"click\", (event) => {\n event.stopPropagation();\n overlay.style.display = 'none';\n });\n });\n }\n\n hookupButtonSave() {\n Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n Utils.consoleLogIfNotProductionEnvironment('saving page: ', this.title);\n OverlayConfirm.show();\n });\n });\n }\n\n leave() {\n Utils.consoleLogIfNotProductionEnvironment('Leaving ' + this.title + ' page');\n if (this.constructor === BasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n }\n setLocalStoragePage(dataPage) {\n LocalStorage.setLocalStorage(this.hash, dataPage);\n }\n getLocalStoragePage() {\n return LocalStorage.getLocalStorage(this.hash);\n }\n\n toggleShowButtonsSaveCancel(show) { // , buttonSave = null, buttonCancel = null\n let buttonSave = document.querySelector('form.' + flagFilter + ' button.' + flagSave);\n let buttonCancel = document.querySelector('form.' + flagFilter + ' button.' + flagCancel);\n if (show) {\n buttonCancel.classList.remove(flagIsCollapsed);\n buttonSave.classList.remove(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('showing buttons');\n } else {\n buttonCancel.classList.add(flagIsCollapsed);\n buttonSave.classList.add(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('hiding buttons');\n }\n }\n\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();\n return isDirty;\n }\n\n}","\n// internal\nimport BasePage from \"../base.js\";\n// external\n\n\nexport default class PageHome extends BasePage {\n static hash = hashPageHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n // this.hookupButtonsNav();\n }\n\n leave() {\n super.leave();\n }\n}\n\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageDogHome extends BasePage {\n static hash = hashPageDogHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupDogHome();\n }\n hookupDogHome() {\n \n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport Utils from '../utils.js';\n\nexport default class BusinessObjects {\n static getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected = null) {\n return {\n text: objectJson[keyText],\n value: objectJson[keyValue],\n selected: (objectJson[keyValue] == valueSelected),\n };\n }\n static getOptionJsonFromObjectJson(objectJson, valueSelected = null) {\n let keyText = objectJson[flagNameAttrOptionText];\n let keyValue = objectJson[flagNameAttrOptionValue];\n Utils.consoleLogIfNotProductionEnvironment({objectJson, keyText, keyValue});\n return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);\n }\n static getObjectText(objectJson) {\n return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];\n }\n static getListObjectsFromIdDictAndCsv(idDict, idCsv) {\n let listObjects = [];\n let ids = idCsv.split(',');\n for (let id of ids) {\n listObjects.push(idDict[id]);\n }\n return listObjects;\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayError {\n static hookup() {\n Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayError);\n overlay.style.visibility = 'hidden';\n });\n });\n }\n static show(msgError) {\n let overlay = document.querySelector(idOverlayError);\n let labelError = overlay.querySelector(idLabelError);\n labelError.innerText = msgError;\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport Validation from \"../lib/validation.js\";\nimport BasePage from \"./base.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class TableBasePage extends BasePage {\n // static hash\n // static attrIdRowObject\n // callSaveTableContent\n\n constructor(router) {\n super(router);\n this.cursorYInitial = null;\n this.rowInitial = null;\n this.placeholder = null;\n this.dragSrcEl = null;\n this.dragSrcRow = null;\n\n this.hookupTableCellDdls = this.hookupTableCellDdls.bind(this);\n }\n \n initialize(isPopState = false) {\n throw new Error(\"Must implement initialize() method.\");\n }\n sharedInitialize(isPopState = false, isSinglePageApp = false) {\n if (!isPopState) {\n super.sharedInitialize();\n this.hookupFilters();\n this.hookupButtonsSaveCancel();\n this.hookupTableMain();\n OverlayConfirm.hookup(() => {\n if (isSinglePageApp) {\n this.saveRecordsTableDirtySinglePageApp();\n }\n else {\n this.saveRecordsTableDirty();\n }\n });\n } else {\n let dataPage = this.getLocalStoragePage();\n let filters = dataPage[flagFormFilters];\n let formFilters = TableBasePage.getFormFilters();\n let filtersDefault = DOM.convertForm2JSON(formFilters);\n if (!Validation.areEqualDicts(filters, filtersDefault)) {\n this.callFilterTableContent();\n }\n }\n }\n hookupFilters() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method hookupFilters().\");\n }\n }\n sharedHookupFilters() {\n this.hookupButtonApplyFilters();\n this.hookupSearchTextFilter();\n }\n hookupFilterActive() {\n let filterSelector = idFormFilters + ' #' + flagActiveOnly;\n let filterActiveOld = document.querySelector(filterSelector);\n filterActiveOld.removeAttribute('id');\n let parentDiv = filterActiveOld.parentElement;\n let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == \"True\");\n let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);\n filterActiveNew.setAttribute('id', flagActiveOnly);\n if (isChecked) filterActiveNew.classList.add(flagIsChecked);\n\n this.hookupEventHandler(\"click\", filterSelector, (event, filterActive) => {\n Utils.consoleLogIfNotProductionEnvironment({ filterActive });\n Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });\n let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;\n let wasChecked = svgElement.classList.contains(flagIsChecked);\n if (wasChecked) {\n svgElement.classList.remove(flagIsChecked);\n }\n else {\n svgElement.classList.add(flagIsChecked);\n }\n return this.handleChangeFilter(event, filterActive);\n });\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n hookupFilter(filterFlag, handler = (event, filter) => { return this.handleChangeFilter(event, filter); }) {\n let filterSelector = idFormFilters + ' #' + filterFlag;\n this.hookupEventHandler(\"change\", filterSelector, handler);\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n handleChangeFilter(event, filter) {\n let isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);\n let formFilters = TableBasePage.getFormFilters();\n let areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);\n let tbody = document.querySelector(idTableMain + ' tbody');\n let rows = tbody.querySelectorAll(':scope > tr');\n rows.forEach((row) => {\n if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);\n if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {\n row.classList.remove(flagIsCollapsed);\n let dirtyInputs = row.querySelectorAll('input.' + flagDirty);\n dirtyInputs.forEach((dirtyInput) => {\n dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);\n });\n }\n });\n if (areDirtyFilters) {\n /*\n tbody.querySelectorAll('tr').forEach((tr) => { \n if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove(); \n });\n */\n tbody.innerHTML = '
| Command Category | +Command | +Shape | +Colour | +Icon | +Location | ++ {% set class_name = model.FLAG_ACTIVE %} + {% set attribute_text = '' %} + {% include 'components/common/buttons/_icon_add.html' %} + | +
|---|