diff --git a/app.py b/app.py
index 11f940a..a193556 100644
--- a/app.py
+++ b/app.py
@@ -17,6 +17,8 @@ Initializes the Flask application, sets the configuration based on the environme
# IMPORTS
# internal
from config import app_config, Config
+from dog_training.controllers.dog.command import routes_dog_command
+from dog_training.controllers.dog.command_category import routes_dog_command_category
from dog_training.controllers.dog.dog import routes_dog
from dog_training.controllers.dog.dog_command_link import routes_dog_dog_command_link
from dog_training.controllers.dog.home import routes_dog_home
@@ -113,6 +115,8 @@ with app.app_context():
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_legal)
diff --git a/business_objects/dog/command.py b/business_objects/dog/command.py
index f5b8155..2334544 100644
--- a/business_objects/dog/command.py
+++ b/business_objects/dog/command.py
@@ -13,6 +13,8 @@ from dog_training.business_objects.dog.command_category import Command_Category
from dog_training.business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base
import dog_training.lib.argument_validation as av
from dog_training.extensions import db
+from dog_training.forms.dog.command import Filters_Command
+from dog_training.forms.dog.command_category import Filters_Command_Category
from dog_training.helpers.helper_app import Helper_App
# external
from dataclasses import dataclass
@@ -59,6 +61,7 @@ class Command(SQLAlchemy_ABC, Base):
command.notes = query_row[5]
command.active = av.input_bool(query_row[6], 'active', _m)
# command.created_on = query_row[7]
+ # command.command_category = Command_Category.from_db_command(query_row)
return command
@classmethod
@@ -74,7 +77,7 @@ class Command(SQLAlchemy_ABC, Base):
# command.notes = query_row[4]
command.active = True # av.input_bool(True, 'active', _m)
# command.created_on = query_row[7]
- command.command_category = Command_Category.from_db_dog_command_link(query_row)
+ command.command_category = Command_Category.from_db_dog_command_link(query_row) # this is done in datastore get many method using category dictionary
return command
@classmethod
@@ -84,7 +87,7 @@ class Command(SQLAlchemy_ABC, Base):
if json is None: return command
# Helper_App.console_log(f'{_m}\njson: {json}')
command.id_command = -1
- command.id_command_category = json[Command_Category.FLAG_COMMAND_CATEGORY]
+ command.id_command_category = json[Command_Category.ATTR_ID_COMMAND_CATEGORY]
command.name = json[cls.FLAG_NAME]
command.hand_signal_default_description = json[cls.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION]
command.can_have_button = json[cls.FLAG_CAN_HAVE_BUTTON]
@@ -141,8 +144,8 @@ class Command_Temp(db.Model, Base):
super().__init__()
@classmethod
- def from_Command(cls, command):
- _m = 'Command_Temp.from_Command'
+ def from_command(cls, command):
+ _m = 'Command_Temp.from_command'
temp = cls()
temp.id_command = command.id_command
temp.id_command_category = command.id_command_category
@@ -215,25 +218,38 @@ class Parameters_Command(Get_Many_Parameters_Base):
, output_commands = json.get('a_output_commands', False)
)
- """
@classmethod
- def from_form_filters_dog_command_link(cls, form):
- av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_dog_command_link', Filters_Dog_Command_Link)
+ def from_form_filters_command(cls, form):
+ av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command', Filters_Command)
has_filter_search_text = not (form.search.data == '' or form.search.data is None)
has_filter_command_category = not (has_filter_search_text or form.id_command_category.data == '0' or form.id_command_category.data == '' or form.id_command_category.data is None)
- has_filter_command = not (has_filter_search_text or form.id_command.data == '0' or form.id_command.data == '' or form.id_command.data is None)
- active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_dog_command_link")
- return cls(
- get_all_command_category = not has_filter_command_category
- , get_inactive_command_category = not active_only
- , ids_command_category = form.id_command_category.data if has_filter_command_category else ''
- , names_command_category = form.search_text.data if has_filter_search_text else ''
- , get_all_command = not has_filter_command
- , get_inactive_command = not active_only
- , ids_command = form.id_command.data if has_filter_command else ''
- , names_command = form.search_text.data if has_filter_search_text else ''
- )
- """
+ active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command")
+ filters = cls.get_default()
+ filters.get_all_command_category = not has_filter_command_category
+ filters.get_inactive_command_category = not active_only
+ filters.ids_command_category = form.id_command_category.data if has_filter_command_category else ''
+ filters.names_command_category = form.search_text.data if has_filter_search_text else ''
+ filters.get_all_command = True
+ filters.get_inactive_command = not active_only
+ filters.ids_command = ''
+ filters.names_command = form.search_text.data if has_filter_search_text else ''
+ return filters
+
+ @classmethod
+ def from_form_filters_command_category(cls, form):
+ av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command_category', Filters_Command_Category)
+ has_filter_search_text = not (form.search.data == '' or form.search.data is None)
+ active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command")
+ filters = cls.get_default()
+ filters.get_all_command_category = True
+ filters.get_inactive_command_category = not active_only
+ filters.ids_command_category = ''
+ filters.names_command_category = form.search_text.data if has_filter_search_text else ''
+ filters.get_all_command = True
+ filters.get_inactive_command = not active_only
+ filters.ids_command = ''
+ filters.names_command = form.search_text.data if has_filter_search_text else ''
+ return filters
def to_json(self):
return {
diff --git a/business_objects/dog/command_category.py b/business_objects/dog/command_category.py
index f62af64..7bfa8ab 100644
--- a/business_objects/dog/command_category.py
+++ b/business_objects/dog/command_category.py
@@ -64,7 +64,7 @@ class Command_Category(SQLAlchemy_ABC, Base):
command_category = cls()
if json is None: return Command_Category
# Helper_App.console_log(f'{_m}\njson: {json}')
- command_category.id_command_category = -1
+ command_category.id_command_category = json.get(cls.ATTR_ID_COMMAND_CATEGORY, -1)
command_category.code = json[cls.FLAG_CODE]
command_category.name = json[cls.FLAG_NAME]
command_category.active = json[cls.FLAG_ACTIVE]
diff --git a/business_objects/dog/dog_command_link.py b/business_objects/dog/dog_command_link.py
index c43caf3..77b1eac 100644
--- a/business_objects/dog/dog_command_link.py
+++ b/business_objects/dog/dog_command_link.py
@@ -71,8 +71,8 @@ class Dog_Command_Link(SQLAlchemy_ABC, Base):
if json is None: return dog_command_link
# Helper_App.console_log(f'{_m}\njson: {json}')
dog_command_link.id_link = -1
- dog_command_link.id_dog = json[Dog.FLAG_DOG]
- dog_command_link.id_command = json[Command.FLAG_COMMAND]
+ dog_command_link.id_dog = json[Dog.ATTR_ID_DOG]
+ dog_command_link.id_command = json[Command.ATTR_ID_COMMAND]
dog_command_link.hand_signal_description = json[cls.FLAG_HAND_SIGNAL_DESCRIPTION]
dog_command_link.notes = json[cls.FLAG_NOTES]
dog_command_link.active = json[cls.FLAG_ACTIVE]
@@ -120,15 +120,15 @@ class Dog_Command_Link_Temp(db.Model, Base):
hand_signal_description = db.Column(db.Text)
notes = db.Column(db.Text)
active = db.Column(db.Boolean)
- created_on = db.Column(db.DateTime)
+ # created_on = db.Column(db.DateTime)
guid: str = db.Column(db.String(36))
def __init__(self):
super().__init__()
@classmethod
- def from_Dog_Command_Link(cls, dog_command_link):
- _m = 'Dog_Command_Link_Temp.from_Dog_Command_Link'
+ def from_dog_command_link(cls, dog_command_link):
+ _m = 'Dog_Command_Link_Temp.from_dog_command_link'
temp = cls()
temp.id_link = dog_command_link.id_link
temp.id_dog = dog_command_link.id_dog
@@ -136,7 +136,7 @@ class Dog_Command_Link_Temp(db.Model, Base):
temp.hand_signal_description = dog_command_link.hand_signal_description
temp.notes = dog_command_link.notes
temp.active = dog_command_link.active
- temp.created_on = dog_command_link.created_on
+ # temp.created_on = dog_command_link.created_on
return temp
diff --git a/controllers/dog/command.py b/controllers/dog/command.py
new file mode 100644
index 0000000..8fc8879
--- /dev/null
+++ b/controllers/dog/command.py
@@ -0,0 +1,98 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: App Routing
+Feature: Dog - Command Routes
+
+Description:
+Contact Page Controller.
+"""
+
+# IMPORTS
+# internal
+from dog_training.business_objects.api import API
+from dog_training.business_objects.dog.command import Command
+from dog_training.business_objects.dog.dog_command_link import Dog_Command_Link
+from dog_training.datastores.datastore_dog import DataStore_Dog
+from dog_training.forms.dog.command import Filters_Command
+from dog_training.helpers.helper_app import Helper_App
+from dog_training.models.model_view_dog_command import Model_View_Dog_Command
+from dog_training.models.model_view_home import Model_View_Home
+import dog_training.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 dog_training.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 = Blueprint('routes_dog_command', __name__)
+
+
+@routes_dog_command.route(Model_View_Dog_Command.HASH_PAGE_DOG_COMMANDS, methods=['GET'])
+def commands():
+ Helper_App.console_log('commands')
+ Helper_App.console_log(f'request_args: {request.args}')
+ try:
+ form_filters = Filters_Command.from_json(request.args)
+ except Exception as e:
+ Helper_App.console_log(f'Error: {e}')
+ form_filters = Filters_Command()
+ Helper_App.console_log(f'form_filters={form_filters}')
+ model = Model_View_Dog_Command(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)
+
+@routes_dog_command.route(Model_View_Dog_Command.HASH_SAVE_DOG_COMMAND, methods=['POST'])
+def save_command():
+ data = Helper_App.get_request_data(request)
+ try:
+ form_filters = Filters_Command.from_json(data[Model_View_Dog_Command.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_return = Model_View_Dog_Command(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:
+ return jsonify({
+ Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE,
+ Model_View_Dog_Command.FLAG_MESSAGE: f'No commands.'
+ })
+ 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)
+
+ 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)}'
+ })
+ 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)
+ })
+ 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}'
+ })
\ No newline at end of file
diff --git a/controllers/dog/command_category.py b/controllers/dog/command_category.py
new file mode 100644
index 0000000..dfcbf38
--- /dev/null
+++ b/controllers/dog/command_category.py
@@ -0,0 +1,97 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: App Routing
+Feature: Dog - Command Routes
+
+Description:
+Contact Page Controller.
+"""
+
+# IMPORTS
+# internal
+from dog_training.business_objects.api import API
+from dog_training.business_objects.dog.command_category import Command_Category
+from dog_training.datastores.datastore_dog import DataStore_Dog
+from dog_training.forms.dog.command_category import Filters_Command_Category
+from dog_training.helpers.helper_app import Helper_App
+from dog_training.models.model_view_dog_command_category import Model_View_Dog_Command_Category
+from dog_training.models.model_view_home import Model_View_Home
+import dog_training.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 dog_training.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_category = Blueprint('routes_dog_command_category', __name__)
+
+
+@routes_dog_command_category.route(Model_View_Dog_Command_Category.HASH_PAGE_DOG_COMMAND_CATEGORIES, methods=['GET'])
+def command_categories():
+ Helper_App.console_log('command categories')
+ Helper_App.console_log(f'request_args: {request.args}')
+ try:
+ form_filters = Filters_Command_Category.from_json(request.args)
+ except Exception as e:
+ Helper_App.console_log(f'Error: {e}')
+ form_filters = Filters_Command_Category()
+ Helper_App.console_log(f'form_filters={form_filters}')
+ model = Model_View_Dog_Command_Category(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_categories.html', model = model)
+
+@routes_dog_command_category.route(Model_View_Dog_Command_Category.HASH_SAVE_DOG_COMMAND_CATEGORY, methods=['POST'])
+def save_command_category():
+ data = Helper_App.get_request_data(request)
+ try:
+ form_filters = Filters_Command_Category.from_json(data[Model_View_Dog_Command_Category.FLAG_FORM_FILTERS])
+ if not form_filters.validate_on_submit():
+ return jsonify({
+ Model_View_Dog_Command_Category.FLAG_STATUS: Model_View_Dog_Command_Category.FLAG_FAILURE,
+ Model_View_Dog_Command_Category.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
+ })
+ model_return = Model_View_Dog_Command_Category(form_filters_old=form_filters)
+ if not model_return.is_user_logged_in:
+ raise Exception('User not logged in')
+
+ command_categories = data[Model_View_Dog_Command_Category.FLAG_COMMAND_CATEGORY]
+ if len(command_categories) == 0:
+ return jsonify({
+ Model_View_Dog_Command_Category.FLAG_STATUS: Model_View_Dog_Command_Category.FLAG_FAILURE,
+ Model_View_Dog_Command_Category.FLAG_MESSAGE: f'No command categories.'
+ })
+ objs_command_category = []
+ for command_category in command_categories:
+ objs_command_category.append(Command_Category.from_json(command_category))
+ Helper_App.console_log(f'objs_command_category={objs_command_category}')
+ errors = DataStore_Dog.save_command_categories(data.get('comment', 'No comment'), objs_command_category)
+
+ if (len(errors) > 0):
+ return jsonify({
+ Model_View_Dog_Command_Category.FLAG_STATUS: Model_View_Dog_Command_Category.FLAG_FAILURE,
+ Model_View_Dog_Command_Category.FLAG_MESSAGE: f'Error saving command categories.\n{model_return.convert_list_objects_to_json(errors)}'
+ })
+ return jsonify({
+ Model_View_Dog_Command_Category.FLAG_STATUS: Model_View_Dog_Command_Category.FLAG_SUCCESS,
+ Model_View_Dog_Command_Category.FLAG_DATA: Model_View_Dog_Command_Category.convert_list_objects_to_json(model_return.command_categories)
+ })
+ except Exception as e:
+ return jsonify({
+ Model_View_Dog_Command_Category.FLAG_STATUS: Model_View_Dog_Command_Category.FLAG_FAILURE,
+ Model_View_Dog_Command_Category.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
+ })
\ No newline at end of file
diff --git a/controllers/dog/dog_command_link.py b/controllers/dog/dog_command_link.py
index f5a359b..ce8bb05 100644
--- a/controllers/dog/dog_command_link.py
+++ b/controllers/dog/dog_command_link.py
@@ -4,7 +4,7 @@ Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: App Routing
-Feature: Core - Contact Routes
+Feature: Dog - Dog Command Link Routes
Description:
Contact Page Controller.
@@ -56,9 +56,8 @@ def dog_command_links():
Helper_App.console_log(f'form_filters={form_filters}')
return render_template('pages/dog/_dog_command_links.html', model = model)
-"""
@routes_dog_dog_command_link.route(Model_View_Dog_Dog_Command_Link.HASH_SAVE_DOG_DOG_COMMAND_LINK, methods=['POST'])
-def save_category():
+def save_dog_command_link():
data = Helper_App.get_request_data(request)
try:
form_filters = Filters_Dog_Command_Link.from_json(data[Model_View_Dog_Dog_Command_Link.FLAG_FORM_FILTERS])
@@ -67,8 +66,11 @@ def save_category():
Model_View_Dog_Dog_Command_Link.FLAG_STATUS: Model_View_Dog_Dog_Command_Link.FLAG_FAILURE,
Model_View_Dog_Dog_Command_Link.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
})
+ model_return = Model_View_Dog_Dog_Command_Link(form_filters_old=form_filters)
+ if not model_return.is_user_logged_in:
+ raise Exception('User not logged in')
- dog_command_links = data[Model_View_Dog_Dog_Command_Link.FLAG_PRODUCT_CATEGORY]
+ dog_command_links = data[Model_View_Dog_Dog_Command_Link.FLAG_DOG_COMMAND_LINK]
if len(dog_command_links) == 0:
return jsonify({
Model_View_Dog_Dog_Command_Link.FLAG_STATUS: Model_View_Dog_Dog_Command_Link.FLAG_FAILURE,
@@ -78,11 +80,8 @@ def save_category():
for dog_command_link in dog_command_links:
objs_dog_command_link.append(Dog_Command_Link.from_json(dog_command_link))
Helper_App.console_log(f'objs_dog_command_link={objs_dog_command_link}')
- errors = Model_View_Dog_Dog_Command_Link.save_dog_command_links(data.get('comment', 'No comment'), objs_dog_command_link)
+ errors = DataStore_Dog.save_dog_command_links(data.get('comment', 'No comment'), objs_dog_command_link)
- model_return = Model_View_Dog_Dog_Command_Link(form_filters_old=form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in')
if (len(errors) > 0):
return jsonify({
Model_View_Dog_Dog_Command_Link.FLAG_STATUS: Model_View_Dog_Dog_Command_Link.FLAG_FAILURE,
@@ -90,11 +89,10 @@ def save_category():
})
return jsonify({
Model_View_Dog_Dog_Command_Link.FLAG_STATUS: Model_View_Dog_Dog_Command_Link.FLAG_SUCCESS,
- Model_View_Dog_Dog_Command_Link.FLAG_DATA: model_return.category_list.to_json()
+ Model_View_Dog_Dog_Command_Link.FLAG_DATA: Model_View_Dog_Dog_Command_Link.convert_list_objects_to_json(model_return.dog_command_links)
})
except Exception as e:
return jsonify({
Model_View_Dog_Dog_Command_Link.FLAG_STATUS: Model_View_Dog_Dog_Command_Link.FLAG_FAILURE,
Model_View_Dog_Dog_Command_Link.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-"""
\ No newline at end of file
+ })
\ No newline at end of file
diff --git a/datastores/datastore_dog.py b/datastores/datastore_dog.py
index dcc930b..5cb46c4 100644
--- a/datastores/datastore_dog.py
+++ b/datastores/datastore_dog.py
@@ -14,9 +14,9 @@ Datastore for Users
# from routes import bp_home
import dog_training.lib.argument_validation as av
from dog_training.business_objects.dog.command import Command, Command_Temp
-from dog_training.business_objects.dog.command_category import Command_Category
+from dog_training.business_objects.dog.command_category import Command_Category, Command_Category_Temp
from dog_training.business_objects.dog.dog import Dog
-from dog_training.business_objects.dog.dog_command_link import Dog_Command_Link
+from dog_training.business_objects.dog.dog_command_link import Dog_Command_Link, Dog_Command_Link_Temp
from dog_training.business_objects.sql_error import SQL_Error
from dog_training.datastores.datastore_base import DataStore_Base
from dog_training.helpers.helper_app import Helper_App
@@ -95,6 +95,8 @@ class DataStore_Dog(DataStore_Base):
command_category_indexes[new_command_category.id_command_category] = len(command_categories)
command_categories.append(new_command_category)
+ Helper_App.console_log(f'command_category_indexes: {command_category_indexes}')
+
# Commands
cursor.nextset()
result_set_1 = cursor.fetchall()
@@ -104,6 +106,8 @@ class DataStore_Dog(DataStore_Base):
for row in result_set_1:
new_command = Command.from_db_command(row)
command_indexes[new_command.id_command] = len(commands)
+ index_command_category = command_category_indexes[new_command.id_command_category]
+ new_command.command_category = command_categories[index_command_category]
commands.append(new_command)
# Errors
@@ -158,6 +162,50 @@ class DataStore_Dog(DataStore_Base):
return dog_command_links, errors
+ @classmethod
+ def save_dog_command_links(cls, comment, links):
+ _m = f'{cls}.save_dog_command_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 = Dog_Command_Link_Temp.from_dog_command_link(link)
+ row.guid = guid
+ rows.append(row)
+
+ cls.upload_bulk(Dog_Command_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_dog_command_link', argument_dict_list)
+
+ Helper_App.console_log('Dog Command 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
+
@classmethod
def save_commands(cls, comment, commands):
_m = f'{cls}.save_commands'
@@ -201,3 +249,50 @@ class DataStore_Dog(DataStore_Base):
cls.db_cursor_clear(cursor)
return errors
+
+ @classmethod
+ def save_command_categories(cls, comment, command_categories):
+ _m = f'{cls}.save_command_categories'
+ 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 command categories: {command_categories}')
+
+ rows = []
+ for command_category in command_categories:
+ row = Command_Category_Temp.from_command_category(command_category)
+ row.guid = guid
+ rows.append(row)
+
+ cls.upload_bulk(Command_Category_Temp.__tablename__, rows, 1000)
+
+ Helper_App.console_log('Commands 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_category', argument_dict_list)
+
+ Helper_App.console_log('Commands 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/command.py b/forms/dog/command.py
new file mode 100644
index 0000000..8523668
--- /dev/null
+++ b/forms/dog/command.py
@@ -0,0 +1,62 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: Backend
+Feature: Command Form
+
+Description:
+Defines Flask-WTF form for handling user input on Commands page.
+"""
+
+# IMPORTS
+# internal
+from dog_training.business_objects.base import Base
+from dog_training.business_objects.dog.command_category import Command_Category
+# from dog_training.business_objects.dog.command import Command # Circular
+from dog_training.helpers.helper_app import Helper_App
+# from dog_training.models.model_view_store import Model_View_Store # circular
+# from dog_training.models.model_view_base import Model_View_Base
+from dog_training.forms.base import Form_Base
+import dog_training.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(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()
+ )
+ 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.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
+ , Base.FLAG_ACTIVE_ONLY: self.active_only.data
+ }
diff --git a/forms/dog/command_category.py b/forms/dog/command_category.py
new file mode 100644
index 0000000..f74b12c
--- /dev/null
+++ b/forms/dog/command_category.py
@@ -0,0 +1,55 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: Backend
+Feature: Command Form
+
+Description:
+Defines Flask-WTF form for handling user input on Commands page.
+"""
+
+# IMPORTS
+# internal
+from dog_training.business_objects.base import Base
+# from dog_training.business_objects.dog.command_category import Command_Category # Circular
+# from dog_training.business_objects.dog.command import Command # Circular
+from dog_training.helpers.helper_app import Helper_App
+# from dog_training.models.model_view_store import Model_View_Store # circular
+# from dog_training.models.model_view_base import Model_View_Base
+from dog_training.forms.base import Form_Base
+import dog_training.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_Category(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/dog_command_link.py b/forms/dog/dog_command_link.py
index bc28f9f..e973288 100644
--- a/forms/dog/dog_command_link.py
+++ b/forms/dog/dog_command_link.py
@@ -4,10 +4,10 @@ Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: Backend
-Feature: Contact Us Form
+Feature: Dog Command Link Form
Description:
-Defines Flask-WTF form for handling user input on Contact Us page.
+Defines Flask-WTF form for handling user input on Dog Command Links page.
"""
# IMPORTS
@@ -62,11 +62,8 @@ class Filters_Dog_Command_Link(Form_Base):
Helper_App.console_log(f'{_m}\njson: {json}')
filters = cls()
filters.search.data = json[Base.FLAG_SEARCH]
- # filters.id_dog.choices = [(json[Dog.ATTR_ID_DOG], json[Dog.ATTR_ID_DOG])]
filters.id_dog.data = json[Dog.ATTR_ID_DOG]
- # filters.id_command_category.choices = [(json[Command.ATTR_ID_COMMAND], json[Command.ATTR_ID_COMMAND])]
filters.id_command_category.data = json[Command_Category.ATTR_ID_COMMAND_CATEGORY]
- # filters.id_command.choices = [(json[Command.ATTR_ID_COMMAND], json[Command.ATTR_ID_COMMAND])]
filters.id_command.data = json[Command.ATTR_ID_COMMAND]
filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json')
return filters
diff --git a/models/model_view_base.py b/models/model_view_base.py
index 025ae60..1778fdb 100644
--- a/models/model_view_base.py
+++ b/models/model_view_base.py
@@ -130,6 +130,7 @@ 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_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'
@@ -157,15 +158,16 @@ class Model_View_Base(BaseModel, ABC):
FLAG_USER: ClassVar[str] = User.FLAG_USER
FLAG_WEBSITE: ClassVar[str] = Base.FLAG_WEBSITE
HASH_GET_ALTCHA_CHALLENGE: ClassVar[str] = '/altcha/create-challenge'
- HASH_GET_DOG_SCRIPTS_SHARED: ClassVar[str] = '/dog/scripts_shared'
+ HASH_GET_DOG_SCRIPTS_SHARED: ClassVar[str] = '/dog/scripts-shared'
HASH_PAGE_ACCESSIBILITY_REPORT: ClassVar[str] = '/accessibility-report'
HASH_PAGE_ACCESSIBILITY_STATEMENT: ClassVar[str] = '/accessibility-statement'
HASH_PAGE_ADMIN_HOME: ClassVar[str] = '/admin'
HASH_PAGE_CONTACT: ClassVar[str] = '/contact'
HASH_PAGE_CONTACT_SUCCESS: ClassVar[str] = '/contact-success'
HASH_PAGE_DATA_RETENTION_SCHEDULE: ClassVar[str] = '/retention-schedule'
+ HASH_PAGE_DOG_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'
+ HASH_PAGE_DOG_DOG_COMMAND_LINKS: ClassVar[str] = '/dog/dog-command-links'
HASH_PAGE_DOG_DOGS: ClassVar[str] = '/dog/dogs'
HASH_PAGE_DOG_HOME: ClassVar[str] = '/dog/home'
HASH_PAGE_ERROR_NO_PERMISSION: ClassVar[str] = '/error'
@@ -175,6 +177,9 @@ 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_COMMAND: ClassVar[str] = '/dog/save-command'
+ HASH_SAVE_DOG_COMMAND_CATEGORY: ClassVar[str] = '/dog/save-command-category'
+ HASH_SAVE_DOG_DOG_COMMAND_LINK: ClassVar[str] = '/dog/save-dog-command-link'
ID_BUTTON_ADD: ClassVar[str] = 'buttonAdd'
ID_BUTTON_APPLY_FILTERS: ClassVar[str] = 'buttonApplyFilters'
ID_BUTTON_CANCEL: ClassVar[str] = 'buttonCancel'
@@ -304,4 +309,7 @@ class Model_View_Base(BaseModel, ABC):
def jsonify(data):
return jsonify(data)
def get_mail_contact_public(self):
- return self.app.config['MAIL_CONTACT_PUBLIC']
\ No newline at end of file
+ return self.app.config['MAIL_CONTACT_PUBLIC']
+ @staticmethod
+ def format_null_string_as_blank(string):
+ return '' if string is None else string
\ No newline at end of file
diff --git a/models/model_view_dog_command.py b/models/model_view_dog_command.py
new file mode 100644
index 0000000..862ddc2
--- /dev/null
+++ b/models/model_view_dog_command.py
@@ -0,0 +1,60 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: View Models
+Feature: Store Permutations View Model
+
+Description:
+Data model for store permutations view
+"""
+
+# internal
+from dog_training.business_objects.dog.command import Command, Parameters_Command
+from dog_training.datastores.datastore_dog import DataStore_Dog
+from dog_training.models.model_view_dog_base import Model_View_Dog_Base
+from dog_training.forms.dog.command import Filters_Command
+# from routes import bp_home
+from dog_training.helpers.helper_app import Helper_App
+import dog_training.lib.argument_validation as av
+
+# external
+from pydantic import BaseModel
+from typing import ClassVar
+
+class Model_View_Dog_Command(Model_View_Dog_Base):
+ FLAG_CAN_HAVE_BUTTON: ClassVar[str] = Command.FLAG_CAN_HAVE_BUTTON
+ FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION: ClassVar[str] = Command.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION
+ filter_command_categories: list = None
+ commands: list = None
+ form_filters: Filters_Command = None
+ form_filters_old: Filters_Command
+
+ @property
+ def title(self):
+ return 'Command'
+
+ def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_COMMANDS):
+ _m = 'Model_View_Dog_Command.__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, filter_commands, errors = datastore.get_many_command(parameters_filter_command)
+ self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]
+
+ Helper_App.console_log(f'Form filters: {self.form_filters}')
+ parameters_filter_command = Parameters_Command.from_form_filters_command(self.form_filters)
+ Helper_App.console_log(f'Query args: {parameters_filter_command}')
+ command_categories, self.commands, errors = datastore.get_many_command(parameters_filter_command)
+
+
+ """
+ @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_category.py b/models/model_view_dog_command_category.py
new file mode 100644
index 0000000..4822c82
--- /dev/null
+++ b/models/model_view_dog_command_category.py
@@ -0,0 +1,54 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: View Models
+Feature: Store Permutations View Model
+
+Description:
+Data model for store permutations view
+"""
+
+# internal
+from dog_training.business_objects.dog.command import Parameters_Command
+from dog_training.business_objects.dog.command_category import Command_Category
+from dog_training.datastores.datastore_dog import DataStore_Dog
+from dog_training.models.model_view_dog_base import Model_View_Dog_Base
+from dog_training.forms.dog.command_category import Filters_Command_Category
+# from routes import bp_home
+from dog_training.helpers.helper_app import Helper_App
+import dog_training.lib.argument_validation as av
+
+# external
+from pydantic import BaseModel
+from typing import ClassVar
+
+class Model_View_Dog_Command_Category(Model_View_Dog_Base):
+ command_categories: list = None
+ form_filters: Filters_Command_Category = None
+ form_filters_old: Filters_Command_Category
+
+ @property
+ def title(self):
+ return 'Command Category'
+
+ def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_COMMAND_CATEGORIES):
+ _m = 'Model_View_Dog_Command_Category.__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_command = Parameters_Command.from_form_filters_command_category(self.form_filters)
+ Helper_App.console_log(f'Query args: {parameters_filter_command}')
+ self.command_categories, commands, errors = datastore.get_many_command(parameters_filter_command)
+
+
+ """
+ @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_dog_command_link.py b/models/model_view_dog_dog_command_link.py
index f8ec167..43f6324 100644
--- a/models/model_view_dog_dog_command_link.py
+++ b/models/model_view_dog_dog_command_link.py
@@ -47,26 +47,14 @@ class Model_View_Dog_Dog_Command_Link(Model_View_Dog_Base):
datastore = DataStore_Dog()
parameters_filter_dog = Parameters_Dog.get_default()
self.filter_dogs, errors = datastore.get_many_dog(parameters_filter_dog)
+ self.form_filters.id_dog.choices += [(str(dog.id_dog), dog.name) for dog in self.filter_dogs]
parameters_filter_command = Parameters_Command.get_default()
self.filter_command_categories, self.filter_commands, errors = datastore.get_many_command(parameters_filter_command)
+ self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]
+ self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in self.filter_commands]
Helper_App.console_log(f'Form filters: {self.form_filters}')
parameters_filter_dog_command_link = Parameters_Dog_Command_Link.from_form_filters_dog_command_link(self.form_filters)
Helper_App.console_log(f'Query args: {parameters_filter_dog_command_link}')
- self.dog_command_links, errors = datastore.get_many_dog_command_link(parameters_filter_dog_command_link)
-
- # Helper_App.console_log(f'dogs: {self.filter_dogs}')
- # Helper_App.console_log(f'commands: {self.filter_commands}')
- # Helper_App.console_log(f'links: {self.dog_command_links}')
-
- self.form_filters.id_dog.choices += [(str(dog.id_dog), dog.name) for dog in self.filter_dogs]
- self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]
- self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in self.filter_commands]
-
- """
- @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
+ self.dog_command_links, errors = datastore.get_many_dog_command_link(parameters_filter_dog_command_link)
\ No newline at end of file
diff --git a/static/MySQL/00000_combined.sql b/static/MySQL/00000_combined.sql
index 35a167e..5e344aa 100644
--- a/static/MySQL/00000_combined.sql
+++ b/static/MySQL/00000_combined.sql
@@ -1,43 +1,23 @@
USE demo;
--- Clear previous proc
-DROP PROCEDURE IF EXISTS p_dog_get_many_user;
-
+DROP PROCEDURE IF EXISTS demo.p_dog_save_command_category;
DELIMITER //
-CREATE PROCEDURE p_dog_get_many_user (
- IN a_id_user INT
- , IN a_auth0_id_user VARCHAR(200)
- , IN a_get_all_user BIT
- , IN a_get_inactive_user BIT
- , IN a_ids_user TEXT
- , IN a_auth0_ids_user TEXT
- , IN a_names_user TEXT
- , IN a_emails_user TEXT
- , IN a_require_all_id_search_filters_met BIT
- , IN a_require_any_id_search_filters_met BIT
- , IN a_require_all_non_id_search_filters_met BIT
- , IN a_require_any_non_id_search_filters_met BIT
- , IN a_debug BIT
+CREATE PROCEDURE demo.p_dog_save_command_category (
+ IN a_comment VARCHAR(500),
+ IN a_guid BINARY(36),
+ IN a_id_user INT,
+ IN a_debug BIT
)
BEGIN
- DECLARE v_code_type_error_bad_data VARCHAR(50);
- DECLARE v_guid BINARY(36);
- DECLARE v_has_filter_user_auth0_id BIT;
- DECLARE v_has_filter_user_id BIT;
- DECLARE v_has_filter_user_name BIT;
- DECLARE v_id_access_level_admin INT;
- DECLARE v_id_access_level_view INT;
- DECLARE v_id_minimum INT;
- DECLARE v_id_permission_dog_admin INT;
- DECLARE v_id_permission_user INT;
- DECLARE v_id_permission_user_admin INT;
+ DECLARE v_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_ids_permission_required VARCHAR(4000);
- DECLARE v_ids_user TEXT;
- DECLARE v_is_new BIT;
- DECLARE v_rank_max INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
@@ -53,13 +33,13 @@ 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(100)
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
- , code
+ , code
, msg
)
SELECT
@@ -69,7 +49,7 @@ BEGIN
FROM demo.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
-
+
SELECT
t_ERROR.id_error
, t_ERROR.id_type
@@ -83,693 +63,555 @@ BEGIN
FROM tmp_Msg_Error t_ERROR
INNER JOIN demo.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_guid := UUID();
- SET v_id_access_level_admin := (SELECT id_access_level FROM demo.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1);
- SET v_id_access_level_view := (SELECT id_access_level FROM demo.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
- SET v_id_permission_dog_admin := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'DOG_ADMIN' LIMIT 1);
- SET v_id_permission_user := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'USER_VIEW' LIMIT 1);
- SET v_id_permission_user_admin := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'USER_ADMIN' LIMIT 1);
SET v_code_type_error_bad_data := 'BAD_DATA';
- SET v_id_type_error_bad_data := (SELECT id_type FROM demo.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
- SET v_ids_permission_required := CONCAT(v_id_permission_user, ',', v_id_permission_user_admin, ',', v_id_permission_dog_admin);
- SET v_is_new := FALSE;
+ SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
+ SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
+ SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
- SET a_get_all_user := IFNULL(a_get_all_user, 1);
- SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
- SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
- SET a_auth0_ids_user := TRIM(IFNULL(a_auth0_ids_user, ''));
- SET a_names_user := TRIM(IFNULL(a_names_user, ''));
- SET a_emails_user := TRIM(IFNULL(a_emails_user, ''));
- SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
- SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
- SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
- SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
- SET a_debug := IFNULL(a_debug, 0);
+ CALL demo.p_core_validate_guid ( a_guid );
- IF a_debug = 1 THEN
- SELECT
- a_id_user
- , a_auth0_id_user
- , a_get_all_user
- , a_get_inactive_user
- , a_ids_user
- , a_auth0_ids_user
- , a_names_user
- , a_emails_user
- , a_require_all_id_search_filters_met
- , a_require_any_id_search_filters_met
- , a_require_all_non_id_search_filters_met
- , a_require_any_non_id_search_filters_met
- , a_debug
- ;
- END IF;
+ DROP TABLE IF EXISTS tmp_Command_Category_Copy;
+ DROP TABLE IF EXISTS tmp_Command_Category;
- DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
- DROP TEMPORARY TABLE IF EXISTS tmp_User_Access;
- DROP TEMPORARY TABLE IF EXISTS tmp_User;
-
- CREATE TEMPORARY TABLE tmp_User (
- id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL
- , id_user INT
- , id_permission_required INT NOT NULL
- , priority_access_level_required INT NOT NULL
- , is_super_user BIT
- , priority_access_level_user INT
- , has_access BIT
- , can_view BIT
- , can_edit BIT
- , can_admin BIT
- , can_admin_dog BIT
- , can_admin_user BIT
+ CREATE TEMPORARY TABLE tmp_Command_Category (
+ id_temp INT
+ , id_command_category INT
+ , code VARCHAR(100)
+ , name VARCHAR(250)
+ , active BIT
+ , is_new BIT
+ , name_error VARCHAR(250)
);
-
- CREATE TEMPORARY TABLE tmp_User_Access (
- id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL
- , id_user INT
- , id_permission_required INT NOT NULL
- , priority_access_level_required INT NOT NULL
- , is_super_user BIT
- , priority_access_level_user INT
- , has_access BIT
- , can_view BIT
- , can_edit BIT
- , can_admin BIT
+
+ CREATE TEMPORARY TABLE tmp_Command_Category_Copy (
+ id_temp INT
+ , id_command_category INT
+ , code VARCHAR(100)
+ , name VARCHAR(250)
+ , active BIT
+ , is_new BIT
+ , name_error VARCHAR(250)
);
-
- CREATE TEMPORARY TABLE tmp_Msg_Error (
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
- , id_type INT NOT NULL
- , code VARCHAR(100) NOT NULL
+ , id_type INT NULL
+ , code VARCHAR(100)
, msg TEXT NOT NULL
);
- /*
- CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id (
- substring VARCHAR(4000) NOT NULL
- , as_int INT NULL
- );
- DELETE FROM tmp_Split_Id;
+
- CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Auth0_Id (
- substring VARCHAR(4000) NOT NULL
- , as_int INT NULL
- );
- DELETE FROM tmp_Split_Auth0_Id;
-
- CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name (
- substring VARCHAR(4000) NOT NULL
- , as_int INT NULL
- );
- DELETE FROM tmp_Split_Name;
- IF ISNULL(a_id_user) AND NOT ISNULL(a_auth0_id_user) THEN
- SET a_id_user := (SELECT U.id_user FROM demo.DOG_User U WHERE U.id_user_auth0 = a_auth0_id_user LIMIT 1);
+ -- Get data from Temp table
+ INSERT INTO tmp_Command_Category (
+ id_temp
+ , id_command_category
+ , code
+ , name
+ , active
+ , is_new
+ )
+ SELECT
+ COMMAND_CATEGORY_T.id_temp
+ , COMMAND_CATEGORY_T.id_command_category
+ , COALESCE(
+ COMMAND_CATEGORY_T.code
+ , COMMAND_CATEGORY.code
+ ) AS code
+ , COALESCE(
+ COMMAND_CATEGORY_T.name
+ , COMMAND_CATEGORY.name
+ ) AS name
+ , COALESCE(COMMAND_CATEGORY_T.active, 1) AS active
+ , CASE WHEN IFNULL(COMMAND_CATEGORY_T.id_command_category, 0) < 1 THEN 1 ELSE 0 END AS is_new
+ FROM demo.DOG_Command_Category_Temp COMMAND_CATEGORY_T
+ LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND_CATEGORY_T.id_command_category = COMMAND_CATEGORY.id_command_category
+ WHERE COMMAND_CATEGORY_T.guid = a_guid
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'Command_Category_Temp records';
+ SELECT * FROM tmp_Command_Category;
+ SELECT COUNT(*) FROM tmp_Command_Category;
END IF;
-
- IF
- ISNULL(a_id_user)
- AND ISNULL(a_auth0_id_user)
- THEN
+
+ -- Error names
+ UPDATE tmp_Command_Category t_COMMAND_CATEGORY
+ SET t_COMMAND_CATEGORY.name_error = COALESCE(t_COMMAND_CATEGORY.code, t_COMMAND_CATEGORY.name, '(No Command Category)')
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set name_error';
+ SELECT * FROM tmp_Command_Category;
+ SELECT COUNT(*) FROM tmp_Command_Category;
+ END IF;
+
+ -- Missing Command Category Ids
+ UPDATE tmp_Command_Category t_COMMAND_CATEGORY
+ LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.code = COMMAND_CATEGORY.code
+ SET
+ t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.is_new = 0
+ WHERE
+ IFNULL(t_COMMAND_CATEGORY.id_command_category, 0) < 1
+ AND NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set missing id_command_category';
+ SELECT * FROM tmp_Command_Category;
+ SELECT COUNT(*) FROM tmp_Command_Category;
+ END IF;
+
+ -- Validation
+ -- Missing mandatory fields
+ -- code
+ IF EXISTS ( SELECT * FROM tmp_Command_Category t_COMMAND_CATEGORY WHERE t_COMMAND_CATEGORY.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 Command Category(s) do not have a valid Code: ', GROUP_CONCAT(t_COMMAND_CATEGORY.name_error SEPARATOR ', ')) AS msg
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ WHERE t_COMMAND_CATEGORY.code IS NULL
+ ;
+ END IF;
+ -- name
+ IF EXISTS ( SELECT * FROM tmp_Command_Category t_COMMAND_CATEGORY WHERE t_COMMAND_CATEGORY.name 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 Command Category(s) do not have a valid Command: ', GROUP_CONCAT(t_COMMAND_CATEGORY.name_error SEPARATOR ', ')) AS msg
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ WHERE t_COMMAND_CATEGORY.name IS NULL
+ ;
+ END IF;
+
+ /*
+ -- Duplicates
+ INSERT INTO tmp_Command_Category_Copy (
+ id_temp
+ , id_command_category
+ , id_dog
+ , id_command
+ , hand_signal_description
+ , notes
+ , active
+ , is_new
+ , name_error
+ , does_have_valid_command_category_id
+ )
+ SELECT
+ t_COMMAND_CATEGORY.id_temp
+ , t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.hand_signal_description
+ , t_COMMAND_CATEGORY.notes
+ , t_COMMAND_CATEGORY.active
+ , t_COMMAND_CATEGORY.is_new
+ , t_COMMAND_CATEGORY.name_error
+ , t_COMMAND_CATEGORY.does_have_valid_command_category_id
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Command_Category;
+ SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Command_Category_Copy;
+
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ UNION
+ SELECT
+ COMMAND_CATEGORY.id_command_category
+ , COMMAND_CATEGORY.id_dog
+ , COMMAND_CATEGORY.id_command
+ , IFNULL(
+ t_COMMAND_CATEGORY_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM demo.DOG_Command_Category COMMAND_CATEGORY
+ LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category
+ INNER JOIN demo.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog
+ INNER JOIN demo.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command
+ WHERE
+ NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ AND t_COMMAND_CATEGORY.does_have_valid_command_category_id = 0
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_command_category
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category
+ )
+ SELECT * -- AS count_duplicate_link_row_numbers
+ FROM Duplicate_Link_Row_Numbers;
+ END IF;
+
+ IF EXISTS (
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ UNION
+ SELECT
+ COMMAND_CATEGORY.id_command_category
+ , COMMAND_CATEGORY.id_dog
+ , COMMAND_CATEGORY.id_command
+ , IFNULL(
+ t_COMMAND_CATEGORY_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM demo.DOG_Command_Category COMMAND_CATEGORY
+ LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category
+ INNER JOIN demo.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog
+ INNER JOIN demo.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category)
+ AND NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_command_category
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg
+ FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
+ WHERE DUPLICATE_LINK.index_link_as_duplicate = 2
+ GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
+ ) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
- VALUES (
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ UNION
+ SELECT
+ COMMAND_CATEGORY.id_command_category
+ , COMMAND_CATEGORY.id_dog
+ , COMMAND_CATEGORY.id_command
+ , IFNULL(
+ t_COMMAND_CATEGORY_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM demo.DOG_Command_Category COMMAND_CATEGORY
+ LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category
+ INNER JOIN demo.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog
+ INNER JOIN demo.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category)
+ AND NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_command_category
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category
+ )
+ SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('User ID required for authorisation.')
- )
+ , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg
+ FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
+ -- LEFT JOIN demo.DOG_Dog DOG ON DUPLICATE_LINK.id_dog = DOG.id_dog
+ -- LEFT JOIN demo.DOG_Command COMMAND ON DUPLICATE_LINK.id_command = COMMAND.id_command
+ WHERE DUPLICATE_LINK.index_link_as_duplicate = 2
+ GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
;
END IF;
-
- SET v_has_filter_user_id := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_auth0_id := CASE WHEN a_auth0_ids_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_name := CASE WHEN a_names_user = '' THEN 0 ELSE 1 END;
-
- IF a_debug = 1 THEN
- SELECT
- v_has_filter_user_id
- , v_has_filter_user_auth0_id
- , v_has_filter_user_name
- ;
- END IF;
-
- -- User IDs
- IF v_has_filter_user_id = 1 THEN
- CALL demo.p_core_split(v_guid, a_ids_user, ',', FALSE);
-
- SET sql_mode = '';
-
- INSERT INTO tmp_Split_Id (
- substring
- , as_int
- )
- SELECT
- substring
- , CAST(substring AS DECIMAL(10,0)) AS as_int
- FROM demo.CORE_Split_Temp
- WHERE
- GUID = v_guid
- AND IFNULL(substring, '') != ''
- ;
-
- CALL demo.p_core_clear_split( v_guid );
-
- IF EXISTS (
- SELECT *
- FROM tmp_Split_Id t_SPLIT_ID
- LEFT JOIN demo.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
- WHERE
- ISNULL(t_SPLIT_ID.as_int)
- OR ISNULL(USER.id_user)
- OR USER.active = 0
- ) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('Invalid or inactive User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
- FROM tmp_Split_Id t_SPLIT_ID
- LEFT JOIN demo.DOG_User U ON t_SPLIT_ID.as_int = USER.id_user
- WHERE
- ISNULL(t_SPLIT_ID.as_int)
- OR ISNULL(USER.id_user)
- OR USER.active = 0
- ;
- END IF;
- END IF;
-
- -- Auth0 User IDs
- IF v_has_filter_user_auth0_id = 1 THEN
- CALL demo.p_core_split(v_guid, a_auth0_ids_user, ',', FALSE);
-
- INSERT INTO tmp_Split_Auth0_Id (
- substring
- )
- SELECT
- substring
- FROM demo.CORE_Split_Temp
- WHERE
- GUID = v_guid
- AND IFNULL(substring, '') != ''
- ;
-
- CALL demo.p_core_clear_split( v_guid );
-
- IF EXISTS (
- SELECT *
- FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
- LEFT JOIN demo.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
- WHERE
- ISNULL(t_SPLIT_AUTH0.substring)
- OR ISNULL(USER.id_user_auth0)
- OR USER.active = 0
- ) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('Invalid or inactive Auth0 User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_AUTH0.substring SEPARATOR ', '), 'NULL'))
- FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
- LEFT JOIN demo.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
- WHERE
- ISNULL(t_SPLIT_AUTH0.substring)
- OR ISNULL(USER.id_user_auth0)
- OR USER.active = 0
- ;
- END IF;
- END IF;
-
- -- User Names
- IF v_has_filter_user_name = 1 THEN
- CALL demo.p_core_split(v_guid, a_names_user, ',', FALSE);
-
- SET sql_mode = '';
-
- INSERT INTO tmp_Split_Name (
- substring
- )
- SELECT
- substring
- FROM demo.CORE_Split_Temp
- WHERE
- GUID = v_guid
- AND IFNULL(substring, '') != ''
- ;
-
- CALL demo.p_core_clear_split( v_guid );
- END IF;
-
- IF
- v_has_filter_user_id = 1
- OR v_has_filter_user_auth0_id = 1
- THEN
- INSERT INTO tmp_User (
- id_user
- , does_meet_id_filters
- , does_meet_non_id_filters
- )
- WITH
- User_Id_Filter AS (
- SELECT USER.id_user
- FROM tmp_Split_Id t_SPLIT_ID
- INNER JOIN demo.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
- )
- , User_Auth0_Id_Filter AS (
- SELECT USER.id_user
- FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
- INNER JOIN demo.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
- )
- , User_Name_Filter AS (
- SELECT USER.id_user
- FROM tmp_Split_Name t_SPLIT_NAME
- INNER JOIN demo.DOG_User USER ON CONCAT(USER.firstname, ' ', USER.surname) LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
- WHERE IFNULL(t_SPLIT_NAME.substring, '') <> ''
- )
- , User_Filters AS (
- SELECT
- USER_COMBINED.id_user
- , MAX(USER_COMBINED.does_meet_id_filter) AS does_meet_id_filter
- , MAX(USER_COMBINED.does_meet_auth0_id_filter) AS does_meet_auth0_id_filter
- , MAX(USER_COMBINED.does_meet_name_filter) AS does_meet_name_filter
- FROM (
- SELECT
- ID_FILTER.id_user
- , 1 AS does_meet_id_filter
- , 0 AS does_meet_auth0_id_filter
- , 0 AS does_meet_name_filter
- FROM User_Id_Filter ID_FILTER
- UNION
- SELECT
- AUTH0_ID_FILTER.id_user
- , 0 AS does_meet_id_filter
- , 1 AS does_meet_auth0_id_filter
- , 0 AS does_meet_name_filter
- FROM User_Auth0_Id_Filter AUTH0_ID_FILTER
- UNION
- SELECT
- NAME_FILTER.id_user
- , 0 AS does_meet_id_filter
- , 0 AS does_meet_auth0_id_filter
- , 1 AS does_meet_name_filter
- FROM User_Name_Filter NAME_FILTER
- ) USER_COMBINED
- GROUP BY USER_COMBINED.id_user
- )
- SELECT
- USER.id_user
- , CASE WHEN
- (
- v_has_filter_user_id = 0
- AND v_has_filter_user_auth0_id = 0
- )
- OR IFNULL(USER_FILTERS.does_meet_id_filter, 0) = 1
- OR IFNULL(USER_FILTERS.does_meet_auth0_id_filter, 0) = 1
- THEN 1 ELSE 0 END AS does_meet_id_filters
- , CASE WHEN
- (
- v_has_filter_user_name = 0
- )
- OR IFNULL(USER_FILTERS.does_meet_name_filter, 0) = 1
- THEN 1 ELSE 0 END AS does_meet_non_id_filters
- FROM demo.DOG_User USER
- LEFT JOIN User_Filters USER_FILTERS ON USER.id_user = USER_FILTERS.id_user
- WHERE
- (
- a_get_all_user = 1
- OR (
- v_has_filter_user_id = 1
- AND USER_FILTERS.does_meet_id_filter = 1
- )
- OR (
- v_has_filter_user_auth0_id = 1
- AND USER_FILTERS.does_meet_auth0_id_filter = 1
- )
- OR (
- v_has_filter_user_id = 1
- AND USER_FILTERS.does_meet_id_filter = 1
- )
- )
- AND (
- a_get_inactive_user = 1
- OR USER.active = 1
- )
- ;
- END IF;
-
- DELETE FROM tmp_Split_Id;
- DELETE FROM tmp_Split_Auth0_Id;
- DELETE FROM tmp_Split_Name;
-
- IF a_debug = 1 THEN
- SELECT 'After get all Users';
- SELECT * FROM tmp_User;
- END IF;
-
- -- Filter records
- IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
- DELETE t_USER
- FROM tmp_User t_USER
- WHERE
- (
- a_require_all_id_search_filters_met = 1
- AND t_USER.does_meet_id_filters = 0
- )
- OR (
- a_require_all_non_id_search_filters_met = 1
- AND t_USER.does_meet_non_id_filters = 0
- )
- OR (
- a_require_any_id_search_filters_met = 1
- AND t_USER.does_meet_id_filters = 0
- )
- OR (
- a_require_any_non_id_search_filters_met = 1
- AND t_USER.does_meet_non_id_filters = 0
- )
- ;
- END IF;
-
- IF a_debug = 1 THEN
- SELECT 'After filter Users';
- SELECT * FROM tmp_User;
- END IF;
-
*/
-
-
- -- Calculated fields
- -- Can admin dog
- IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
- IF a_debug = 1 THEN
- SELECT
- v_guid -- guid
- , a_get_all_user -- get_all_user
- , a_get_inactive_user -- get_inactive_user
- , a_ids_user -- ids_user
- , a_auth0_ids_user -- a_auth0_ids_user
- , a_names_user -- a_names_user
- , a_emails_user -- a_emails_user
- , 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
- , v_id_permission_dog_admin -- ids_permission
- , v_id_access_level_admin -- ids_access_level
- , 0 -- a_show_errors
- , 0 -- a_debug
- ;
- SELECT * FROM demo.DOG_Calc_User_Temp;
- END IF;
-
- CALL demo.p_dog_calc_user(
- v_guid -- guid
- , a_get_all_user -- get_all_user
- , a_get_inactive_user -- get_inactive_user
- , a_ids_user -- ids_user
- , a_auth0_ids_user -- a_auth0_ids_user
- , a_names_user -- a_names_user
- , a_emails_user -- a_emails_user
- , 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
- , v_id_permission_dog_admin -- ids_permission
- , v_id_access_level_admin -- ids_access_level
- , 0 -- a_show_errors
- , 0 -- a_debug
- );
-
- INSERT INTO tmp_User (
- id_user
- , id_permission_required
- , priority_access_level_required
- , is_super_user
- , priority_access_level_user
- , has_access
- , can_view
- , can_edit
- , can_admin
- , can_admin_dog
- )
- SELECT
- CALC_USER_T.id_user
- , CALC_USER_T.id_permission_required
- , CALC_USER_T.priority_access_level_required
- , CALC_USER_T.is_super_user
- , CALC_USER_T.priority_access_level_user
- , CALC_USER_T.has_access
- , CALC_USER_T.can_view
- , CALC_USER_T.can_edit
- , CALC_USER_T.can_admin
- , CALC_USER_T.can_admin AS can_admin_dog
- FROM demo.DOG_Calc_User_Temp CALC_USER_T
- WHERE CALC_USER_T.guid = v_guid
- ;
-
- IF a_debug = 1 THEN
- SELECT * FROM tmp_User;
- END IF;
-
- CALL demo.p_dog_clear_calc_user( v_guid, FALSE );
- END IF;
- -- Can admin user
- IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
- IF a_debug = 1 THEN
- SELECT
- v_guid -- guid
- , a_get_all_user -- get_all_user
- , a_get_inactive_user -- get_inactive_user
- , a_ids_user -- ids_user
- , a_auth0_ids_user -- a_auth0_ids_user
- , a_names_user -- a_names_user
- , a_emails_user -- a_emails_user
- , 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
- , v_id_permission_dog_admin -- ids_permission
- , v_id_access_level_admin -- ids_access_level
- , 0 -- a_show_errors
- , 0 -- a_debug
- ;
- SELECT * FROM demo.DOG_Calc_User_Temp;
- END IF;
-
- CALL demo.p_dog_calc_user(
- v_guid -- guid
- , a_get_all_user -- get_all_user
- , a_get_inactive_user -- get_inactive_user
- , a_ids_user -- ids_user
- , a_auth0_ids_user -- a_auth0_ids_user
- , a_names_user -- a_names_user
- , a_emails_user -- a_emails_user
- , 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
- , v_id_permission_user_admin -- ids_permission
- , v_id_access_level_admin -- ids_access_level
- , 0 -- a_show_errors
- , 0 -- a_debug
- );
-
- UPDATE tmp_User t_USER
- INNER JOIN demo.DOG_Calc_User_Temp CALC_USER_T
- ON CALC_USER_T.id_user = t_USER.id_user
- AND CALC_USER_T.guid = v_guid
- SET t_USER.can_admin_user = CALC_USER_T.can_admin
- ;
-
- IF a_debug = 1 THEN
- SELECT * FROM tmp_User;
- END IF;
-
- CALL demo.p_dog_clear_calc_user( v_guid, FALSE );
- END IF;
-
-- Permissions
- IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
- IF a_debug = 1 THEN
- SELECT
- v_guid -- guid
- , 0 -- get_all_user
- , 0 -- get_inactive_user
- , a_id_user -- ids_user
- , a_auth0_id_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_user -- ids_permission
- , v_id_access_level_view -- ids_access_level
- , 0 -- a_show_errors
- , 0 -- a_debug
- ;
- SELECT * FROM demo.DOG_Calc_User_Temp;
- END IF;
-
- CALL demo.p_dog_calc_user(
- v_guid -- guid
- , 0 -- get_all_user
- , 0 -- get_inactive_user
- , a_id_user -- ids_user
- , a_auth0_id_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_user -- ids_permission
- , v_id_access_level_view -- ids_access_level
- , 0 -- a_show_errors
- , 0 -- a_debug
- );
-
- INSERT INTO tmp_User_Access (
- id_user
- , id_permission_required
- , priority_access_level_required
- , is_super_user
- , priority_access_level_user
- , has_access
- , can_view
- , can_edit
- , can_admin
- )
- SELECT
- CALC_USER_T.id_user
- , CALC_USER_T.id_permission_required
- , CALC_USER_T.priority_access_level_required
- , CALC_USER_T.is_super_user
- , CALC_USER_T.priority_access_level_user
- , CALC_USER_T.has_access
- , CALC_USER_T.can_view
- , CALC_USER_T.can_edit
- , CALC_USER_T.can_admin
- FROM demo.DOG_Calc_User_Temp CALC_USER_T
- WHERE CALC_USER_T.guid = v_guid
+ -- Can Create
+ CALL demo.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 demo.DOG_Calc_User_Temp CU_T
+ WHERE CU_T.GUID = a_guid
+ LIMIT 1
+ ;
+
+ CALL demo.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.'
+ )
;
-
- IF a_debug = 1 THEN
- SELECT * FROM tmp_User_Access;
- END IF;
-
- IF NOT EXISTS (SELECT * FROM tmp_User t_USER WHERE t_USER.can_view = 1) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- VALUES (
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT(
- 'You do not have view permissions for '
- , (SELECT PERMISSION.name FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.id_permission = v_id_permission_user LIMIT 1)
- )
- )
- ;
- END IF;
-
- CALL demo.p_dog_clear_calc_user( v_guid, FALSE );
- END IF;
-
-
- 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_User;
- END IF;
-
- DELETE FROM tmp_User;
END IF;
+
+ 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_Command_Category;
+ END IF;
+
+ DELETE FROM tmp_Command_Category;
+ END IF;
+
+ 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
+ START TRANSACTION;
+
+ INSERT INTO demo.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 demo.DOG_Command_Category COMMAND_CATEGORY
+ INNER JOIN tmp_Command_Category t_COMMAND_CATEGORY
+ ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY.id_command_category
+ AND t_COMMAND_CATEGORY.is_new = 0
+ SET
+ COMMAND_CATEGORY.code = t_COMMAND_CATEGORY.code
+ , COMMAND_CATEGORY.name = t_COMMAND_CATEGORY.name
+ , COMMAND_CATEGORY.active = t_COMMAND_CATEGORY.active
+ , COMMAND_CATEGORY.id_change_set = v_id_change_set
+ ;
+
+ INSERT INTO demo.DOG_Command_Category (
+ code
+ , name
+ , active
+ , id_user_created_by
+ , created_on
+ )
+ SELECT
+ t_COMMAND_CATEGORY.code AS code
+ , t_COMMAND_CATEGORY.name AS name
+ , t_COMMAND_CATEGORY.active AS active
+ , a_id_user AS created_by
+ , v_time_start AS created_on
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ WHERE
+ t_COMMAND_CATEGORY.is_new = 1
+ AND t_COMMAND_CATEGORY.active = 1
+ ;
+
+ COMMIT;
+ END IF;
+
+ START TRANSACTION;
+
+ DELETE FROM demo.DOG_Command_Category_Temp
+ WHERE GUID = a_guid
+ ;
+
+ COMMIT;
- -- Returns
- SELECT
- USER.id_user
- , USER.id_user_auth0
- , USER.firstname
- , USER.surname
- , USER.email
- , USER.is_email_verified
- , USER.is_super_user
- , t_USER.can_admin_dog
- , t_USER.can_admin_user
- FROM tmp_User t_USER
- INNER JOIN demo.DOG_User USER ON t_USER.id_user = USER.id_user
- ;
-
- # Errors
+ -- Errors
SELECT
t_ERROR.id_error
- , t_ERROR.id_type
+ , t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
- , t_ERROR.msg
+ , t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
- INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
- ;
+ INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
+ ;
- IF a_debug = 1 THEN
- SELECT 'End';
- SELECT * FROM tmp_User;
- SELECT * FROM tmp_User_Access;
- END IF;
+ IF a_debug = 1 THEN
+ SELECT * FROM tmp_Command_Category;
+ END IF;
+
+ DROP TEMPORARY TABLE tmp_Command_Category;
+ DROP TEMPORARY TABLE tmp_Msg_Error;
- -- Clean up
- DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
- DROP TEMPORARY TABLE IF EXISTS tmp_User_Access;
- DROP TEMPORARY TABLE IF EXISTS tmp_User;
-
- IF a_debug = 1 THEN
- CALL demo.p_debug_timing_reporting ( v_time_start );
- END IF;
+ IF a_debug = 1 THEN
+ CALL demo.p_core_debug_timing_reporting ( v_time_start );
+ END IF;
END //
DELIMITER ;
+
/*
-select * FROM demo.DOG_Calc_User_Temp;
-delete FROM demo.DOG_Calc_User_Temp;
-SELECT *
-FROM demo.DOG_USER;
-*/
+'ripplesipplenippletippledipplekipple'
+DELETE FROM demo.DOG_Command_Category WHERE id_command_category > 740;
+* /
+delete
+from demo.DOG_Command_Category_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from demo.DOG_Command_Category_Temp
+;
+select COUNT(*)
+from demo.DOG_Command_Category_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from demo.DOG_Command_Category
+;
+select COUNT(*)
+from demo.DOG_Command_Category
+;
-CALL p_dog_get_many_user(
- NULL -- :a_id_user,
- , 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_id_user,
- , 1 -- :a_get_all_user,
- , 0 -- :a_get_inactive_user,
- -- , 0 -- :a_get_first_user_only,
- , NULL -- :a_ids_user,
- , 'auth0|6582b95c895d09a70ba10fef' -- :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,
- , 1 -- :a_require_any_non_id_search_filters_met,
- , 0 -- a_debug
+INSERT INTO demo.DOG_Command_Category_Temp (
+ id_command_category
+ , code
+ , name
+ , active
+ , guid
+)
+VALUES (
+ -1 -- id_command_category
+ , 'ACTIVITIES' -- code
+ , 'A Sport Is Fun' -- name
+ , 1 -- active
+ , 'ripplesipplenippletippledipplekipple'
);
+CALL demo.p_dog_save_command_category (
+ 'nipples'
+ , 'ripplesipplenippletippledipplekipple'
+ , 1
+ , 1
+);
+
+
+select
+ *
+ -- COUNT(*)
+-- delete
+from demo.DOG_Command_Category_Temp
+;
+select COUNT(*)
+from demo.DOG_Command_Category_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from demo.DOG_Command_Category
+;
+select COUNT(*)
+from demo.DOG_Command_Category
+;
+
+*/
\ No newline at end of file
diff --git a/static/MySQL/60010_p_core_split.sql b/static/MySQL/60010_p_core_split.sql
index 29d573b..edea81e 100644
--- a/static/MySQL/60010_p_core_split.sql
+++ b/static/MySQL/60010_p_core_split.sql
@@ -43,8 +43,8 @@ BEGIN
substring VARCHAR(4000) NOT NULL
);
- SET v_has_string = CASE WHEN a_string = '' THEN 0 ELSE 1 END;
- SET v_has_separator = CASE WHEN a_separator = '' THEN 0 ELSE 1 END;
+ SET v_has_string = CASE WHEN a_string <> '' THEN 1 ELSE 0 END;
+ SET v_has_separator = CASE WHEN a_separator <> '' THEN 1 ELSE 0 END;
IF v_has_string THEN
diff --git a/static/MySQL/60012_p_core_split_key_value_pair_csv.sql b/static/MySQL/60012_p_core_split_key_value_pair_csv.sql
index 78e519e..f6be675 100644
--- a/static/MySQL/60012_p_core_split_key_value_pair_csv.sql
+++ b/static/MySQL/60012_p_core_split_key_value_pair_csv.sql
@@ -18,7 +18,7 @@ BEGIN
SET a_string := IFNULL(a_string, '');
SET a_debug := IFNULL(a_debug, 0);
- SET v_has_string = CASE WHEN a_string = '' THEN 0 ELSE 1 END;
+ SET v_has_string = CASE WHEN a_string <> '' THEN 1 ELSE 0 END;
IF a_debug = 1 THEN
SELECT
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 d419d99..80da5c4 100644
--- a/static/MySQL/70516_p_dog_create_new_user_auth0.sql
+++ b/static/MySQL/70516_p_dog_create_new_user_auth0.sql
@@ -166,8 +166,8 @@ BEGIN
END IF;
END IF;
- SET v_has_filter_user := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_auth0 := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END;
+ SET v_has_filter_user := CASE WHEN a_ids_user <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_user_auth0 := CASE WHEN a_ids_user_auth0 <> '' THEN 1 ELSE 0 END;
IF a_debug = 1 THEN
SELECT
diff --git a/static/MySQL/70516_p_dog_get_many_user.sql b/static/MySQL/70516_p_dog_get_many_user.sql
index 02b3f5f..b900b35 100644
--- a/static/MySQL/70516_p_dog_get_many_user.sql
+++ b/static/MySQL/70516_p_dog_get_many_user.sql
@@ -167,308 +167,6 @@ BEGIN
, code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
- /*
- CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id (
- substring VARCHAR(4000) NOT NULL
- , as_int INT NULL
- );
- DELETE FROM tmp_Split_Id;
-
- CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Auth0_Id (
- substring VARCHAR(4000) NOT NULL
- , as_int INT NULL
- );
- DELETE FROM tmp_Split_Auth0_Id;
-
- CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name (
- substring VARCHAR(4000) NOT NULL
- , as_int INT NULL
- );
- DELETE FROM tmp_Split_Name;
- IF ISNULL(a_id_user) AND NOT ISNULL(a_auth0_id_user) THEN
- SET a_id_user := (SELECT U.id_user FROM parts.DOG_User U WHERE U.id_user_auth0 = a_auth0_id_user LIMIT 1);
- END IF;
-
- IF
- ISNULL(a_id_user)
- AND ISNULL(a_auth0_id_user)
- THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- VALUES (
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('User ID required for authorisation.')
- )
- ;
- END IF;
-
- SET v_has_filter_user_id := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_auth0_id := CASE WHEN a_auth0_ids_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_name := CASE WHEN a_names_user = '' THEN 0 ELSE 1 END;
-
- IF a_debug = 1 THEN
- SELECT
- v_has_filter_user_id
- , v_has_filter_user_auth0_id
- , v_has_filter_user_name
- ;
- END IF;
-
- -- User IDs
- IF v_has_filter_user_id = 1 THEN
- CALL parts.p_core_split(v_guid, a_ids_user, ',', FALSE);
-
- SET sql_mode = '';
-
- INSERT INTO tmp_Split_Id (
- substring
- , as_int
- )
- SELECT
- substring
- , CAST(substring AS DECIMAL(10,0)) AS as_int
- FROM parts.CORE_Split_Temp
- WHERE
- GUID = v_guid
- AND IFNULL(substring, '') != ''
- ;
-
- CALL parts.p_core_clear_split( v_guid );
-
- IF EXISTS (
- SELECT *
- FROM tmp_Split_Id t_SPLIT_ID
- LEFT JOIN parts.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
- WHERE
- ISNULL(t_SPLIT_ID.as_int)
- OR ISNULL(USER.id_user)
- OR USER.active = 0
- ) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('Invalid or inactive User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
- FROM tmp_Split_Id t_SPLIT_ID
- LEFT JOIN parts.DOG_User U ON t_SPLIT_ID.as_int = USER.id_user
- WHERE
- ISNULL(t_SPLIT_ID.as_int)
- OR ISNULL(USER.id_user)
- OR USER.active = 0
- ;
- END IF;
- END IF;
-
- -- Auth0 User IDs
- IF v_has_filter_user_auth0_id = 1 THEN
- CALL parts.p_core_split(v_guid, a_auth0_ids_user, ',', FALSE);
-
- INSERT INTO tmp_Split_Auth0_Id (
- substring
- )
- SELECT
- substring
- FROM parts.CORE_Split_Temp
- WHERE
- GUID = v_guid
- AND IFNULL(substring, '') != ''
- ;
-
- CALL parts.p_core_clear_split( v_guid );
-
- IF EXISTS (
- SELECT *
- FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
- LEFT JOIN parts.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
- WHERE
- ISNULL(t_SPLIT_AUTH0.substring)
- OR ISNULL(USER.id_user_auth0)
- OR USER.active = 0
- ) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('Invalid or inactive Auth0 User IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_AUTH0.substring SEPARATOR ', '), 'NULL'))
- FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
- LEFT JOIN parts.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
- WHERE
- ISNULL(t_SPLIT_AUTH0.substring)
- OR ISNULL(USER.id_user_auth0)
- OR USER.active = 0
- ;
- END IF;
- END IF;
-
- -- User Names
- IF v_has_filter_user_name = 1 THEN
- CALL parts.p_core_split(v_guid, a_names_user, ',', FALSE);
-
- SET sql_mode = '';
-
- INSERT INTO tmp_Split_Name (
- substring
- )
- SELECT
- substring
- FROM parts.CORE_Split_Temp
- WHERE
- GUID = v_guid
- AND IFNULL(substring, '') != ''
- ;
-
- CALL parts.p_core_clear_split( v_guid );
- END IF;
-
- IF
- v_has_filter_user_id = 1
- OR v_has_filter_user_auth0_id = 1
- THEN
- INSERT INTO tmp_User (
- id_user
- , does_meet_id_filters
- , does_meet_non_id_filters
- )
- WITH
- User_Id_Filter AS (
- SELECT USER.id_user
- FROM tmp_Split_Id t_SPLIT_ID
- INNER JOIN parts.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user
- )
- , User_Auth0_Id_Filter AS (
- SELECT USER.id_user
- FROM tmp_Split_Auth0_Id t_SPLIT_AUTH0
- INNER JOIN parts.DOG_User USER ON t_SPLIT_AUTH0.substring = USER.id_user_auth0
- )
- , User_Name_Filter AS (
- SELECT USER.id_user
- FROM tmp_Split_Name t_SPLIT_NAME
- INNER JOIN parts.DOG_User USER ON CONCAT(USER.firstname, ' ', USER.surname) LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
- WHERE IFNULL(t_SPLIT_NAME.substring, '') <> ''
- )
- , User_Filters AS (
- SELECT
- USER_COMBINED.id_user
- , MAX(USER_COMBINED.does_meet_id_filter) AS does_meet_id_filter
- , MAX(USER_COMBINED.does_meet_auth0_id_filter) AS does_meet_auth0_id_filter
- , MAX(USER_COMBINED.does_meet_name_filter) AS does_meet_name_filter
- FROM (
- SELECT
- ID_FILTER.id_user
- , 1 AS does_meet_id_filter
- , 0 AS does_meet_auth0_id_filter
- , 0 AS does_meet_name_filter
- FROM User_Id_Filter ID_FILTER
- UNION
- SELECT
- AUTH0_ID_FILTER.id_user
- , 0 AS does_meet_id_filter
- , 1 AS does_meet_auth0_id_filter
- , 0 AS does_meet_name_filter
- FROM User_Auth0_Id_Filter AUTH0_ID_FILTER
- UNION
- SELECT
- NAME_FILTER.id_user
- , 0 AS does_meet_id_filter
- , 0 AS does_meet_auth0_id_filter
- , 1 AS does_meet_name_filter
- FROM User_Name_Filter NAME_FILTER
- ) USER_COMBINED
- GROUP BY USER_COMBINED.id_user
- )
- SELECT
- USER.id_user
- , CASE WHEN
- (
- v_has_filter_user_id = 0
- AND v_has_filter_user_auth0_id = 0
- )
- OR IFNULL(USER_FILTERS.does_meet_id_filter, 0) = 1
- OR IFNULL(USER_FILTERS.does_meet_auth0_id_filter, 0) = 1
- THEN 1 ELSE 0 END AS does_meet_id_filters
- , CASE WHEN
- (
- v_has_filter_user_name = 0
- )
- OR IFNULL(USER_FILTERS.does_meet_name_filter, 0) = 1
- THEN 1 ELSE 0 END AS does_meet_non_id_filters
- FROM parts.DOG_User USER
- LEFT JOIN User_Filters USER_FILTERS ON USER.id_user = USER_FILTERS.id_user
- WHERE
- (
- a_get_all_user = 1
- OR (
- v_has_filter_user_id = 1
- AND USER_FILTERS.does_meet_id_filter = 1
- )
- OR (
- v_has_filter_user_auth0_id = 1
- AND USER_FILTERS.does_meet_auth0_id_filter = 1
- )
- OR (
- v_has_filter_user_id = 1
- AND USER_FILTERS.does_meet_id_filter = 1
- )
- )
- AND (
- a_get_inactive_user = 1
- OR USER.active = 1
- )
- ;
- END IF;
-
- DELETE FROM tmp_Split_Id;
- DELETE FROM tmp_Split_Auth0_Id;
- DELETE FROM tmp_Split_Name;
-
- IF a_debug = 1 THEN
- SELECT 'After get all Users';
- SELECT * FROM tmp_User;
- END IF;
-
- -- Filter records
- IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
- DELETE t_USER
- FROM tmp_User t_USER
- WHERE
- (
- a_require_all_id_search_filters_met = 1
- AND t_USER.does_meet_id_filters = 0
- )
- OR (
- a_require_all_non_id_search_filters_met = 1
- AND t_USER.does_meet_non_id_filters = 0
- )
- OR (
- a_require_any_id_search_filters_met = 1
- AND t_USER.does_meet_id_filters = 0
- )
- OR (
- a_require_any_non_id_search_filters_met = 1
- AND t_USER.does_meet_non_id_filters = 0
- )
- ;
- END IF;
-
- IF a_debug = 1 THEN
- SELECT 'After filter Users';
- SELECT * FROM tmp_User;
- END IF;
-
- */
-
-- Calculated fields
-- Can admin dog
@@ -754,7 +452,6 @@ delete FROM parts.DOG_Calc_User_Temp;
SELECT *
FROM parts.DOG_USER;
-*/
CALL p_dog_get_many_user(
NULL -- :a_id_user,
@@ -772,4 +469,4 @@ CALL p_dog_get_many_user(
, 1 -- :a_require_any_non_id_search_filters_met,
, 0 -- a_debug
);
-
+*/
diff --git a/static/MySQL/70530_p_dog_calc_user.sql b/static/MySQL/70530_p_dog_calc_user.sql
index 6430db1..a0685a8 100644
--- a/static/MySQL/70530_p_dog_calc_user.sql
+++ b/static/MySQL/70530_p_dog_calc_user.sql
@@ -198,12 +198,12 @@ BEGIN
);
DELETE FROM tmp_Split_Email_Calc_User;
- SET v_has_filter_user_id = CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_auth0_id = CASE WHEN a_auth0_ids_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_name = CASE WHEN a_names_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_user_email = CASE WHEN a_emails_user = '' THEN 0 ELSE 1 END;
- SET v_has_filter_permission = CASE WHEN a_ids_permission_required = '' THEN 0 ELSE 1 END;
- SET v_has_filter_access_level = CASE WHEN a_ids_access_level_required = '' THEN 0 ELSE 1 END;
+ SET v_has_filter_user_id = CASE WHEN a_ids_user <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_user_auth0_id = CASE WHEN a_auth0_ids_user <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_user_name = CASE WHEN a_names_user <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_user_email = CASE WHEN a_emails_user <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_permission = CASE WHEN a_ids_permission_required <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_access_level = CASE WHEN a_ids_access_level_required <> '' THEN 1 ELSE 0 END;
IF a_debug = 1 THEN
SELECT
diff --git a/static/MySQL/71001_p_dog_calc_dog.sql b/static/MySQL/71001_p_dog_calc_dog.sql
index d1ba5ee..aff66d1 100644
--- a/static/MySQL/71001_p_dog_calc_dog.sql
+++ b/static/MySQL/71001_p_dog_calc_dog.sql
@@ -154,8 +154,8 @@ BEGIN
);
DELETE FROM tmp_Split_Name_Calc_Dog;
- SET v_has_filter_dog_id = CASE WHEN a_ids_dog = '' THEN 0 ELSE 1 END;
- SET v_has_filter_dog_name = CASE WHEN a_names_dog = '' THEN 0 ELSE 1 END;
+ SET v_has_filter_dog_id = CASE WHEN a_ids_dog <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_dog_name = CASE WHEN a_names_dog <> '' THEN 1 ELSE 0 END;
-- Dogs
IF v_has_filter_dog_id = 1 THEN
diff --git a/static/MySQL/71003_p_dog_save_command.sql b/static/MySQL/71003_p_dog_save_command.sql
index 42d56dc..dcd3a64 100644
--- a/static/MySQL/71003_p_dog_save_command.sql
+++ b/static/MySQL/71003_p_dog_save_command.sql
@@ -15,7 +15,7 @@ BEGIN
DECLARE v_can_create BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_access_level_admin INT;
- DECLARE v_id_access_level_create INT;
+ DECLARE v_id_access_level_edit INT;
DECLARE v_id_change_set INT;
DECLARE v_id_permission_dog_admin INT;
DECLARE v_id_permission_dog_new INT;
@@ -74,7 +74,8 @@ BEGIN
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_dog_admin := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_ADMIN' LIMIT 1);
SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
- SET v_id_access_level_admin := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
+ SET v_id_access_level_admin := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'ADMIN' 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 );
@@ -118,12 +119,29 @@ BEGIN
SELECT
COMMAND_T.id_command AS id_command
, COMMAND_T.id_command_category AS id_command_category
- , COALESCE(COMMAND_T.name, COMMAND.name) AS name
- , COALESCE(COMMAND_T.hand_signal_default_description, COMMAND.hand_signal_default_description) AS hand_signal_default_description
- , COALESCE(COMMAND_T.can_have_button, COMMAND.can_have_button) AS can_have_button
- , COALESCE(COMMAND_T.notes, COMMAND.notes) AS notes
- , COALESCE(COMMAND_T.active, COMMAND.active, 1) AS active
+ , COALESCE(
+ COMMAND_T.name
+ , COMMAND.name
+ ) AS name
+ , COALESCE(
+ COMMAND_T.hand_signal_default_description
+ , COMMAND.hand_signal_default_description
+ ) AS hand_signal_default_description
+ , COALESCE(
+ COMMAND_T.can_have_button
+ , COMMAND.can_have_button
+ ) AS can_have_button
+ , COALESCE(
+ COMMAND_T.notes
+ , COMMAND.notes
+ ) AS notes
+ , COALESCE(
+ COMMAND_T.active
+ , COMMAND.active
+ , 1
+ ) AS active
, CASE WHEN IFNULL(COMMAND_T.id_command, 0) < 1 THEN 1 ELSE 0 END AS is_new
+ -- , CASE WHEN NOT ISNULL(COMMAND_T.id_command) THEN 1 ELSE 0 END AS does_have_valid_command_id
, COMMAND_T.name_command_category AS name_command_category
FROM parts.DOG_Command_Temp COMMAND_T
@@ -131,35 +149,61 @@ BEGIN
WHERE COMMAND_T.guid = a_guid
;
+ IF a_debug = 1 THEN
+ SELECT 'Command_Temp records';
+ SELECT * FROM tmp_Command;
+ SELECT COUNT(*) FROM tmp_Command;
+ END IF;
+
+ -- Error names
UPDATE tmp_Command t_COMMAND
- SET name_error = COALESCE(t_COMMAND.name, t_COMMAND.notes, t_COMMAND.name_command_category, '(No Command)')
+ LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
+ LEFT JOIN parts.DOG_Command COMMAND ON t_COMMAND.id_command = COMMAND.id_command
+ SET t_COMMAND.name_error = CONCAT(
+ COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)')
+ )
;
+ IF a_debug = 1 THEN
+ SELECT 'After set name_error';
+ SELECT * FROM tmp_Command;
+ SELECT COUNT(*) FROM tmp_Command;
+ END IF;
+
-- Find missing id_command_category by name_command_category
UPDATE tmp_Command t_COMMAND
INNER JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND.name_command_category = COMMAND_CATEGORY.name
SET t_COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
- WHERE t_COMMAND.id_command_category IS NULL
+ WHERE
+ t_COMMAND.id_command_category IS NULL
+ AND COMMAND_CATEGORY.id_command_category IS NOT NULL
;
-
- IF EXISTS (
- SELECT *
- FROM tmp_Command t_COMMAND
- WHERE ISNULL(t_COMMAND.id_command_category)
- LIMIT 1
- ) 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 Command(s) do not have a Category: ', GROUP_CONCAT(t_COMMAND.name_error SEPARATOR ', ')) AS msg
- FROM tmp_Command t_COMMAND
- WHERE t_COMMAND.id_command_category IS NULL
- ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set missing id_command_category from name';
+ SELECT * FROM tmp_Command;
+ SELECT COUNT(*) FROM tmp_Command;
+ END IF;
+
+ -- Missing Command Ids
+ UPDATE tmp_Command t_COMMAND
+ LEFT JOIN parts.DOG_Command COMMAND
+ ON t_COMMAND.id_command_category = COMMAND.id_command_category
+ AND t_COMMAND.name = COMMAND.name
+ SET
+ t_COMMAND.id_command = COMMAND.id_command
+ , t_COMMAND.is_new = 0
+ WHERE
+ IFNULL(t_COMMAND.id_command, 0) < 1
+ AND NOT ISNULL(COMMAND.id_command)
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set missing id_command';
+ SELECT * FROM tmp_Command;
+ SELECT COUNT(*) FROM tmp_Command;
END IF;
-- Validation
@@ -211,6 +255,7 @@ BEGIN
END IF;
-- Permissions
+ -- Can Create
IF a_debug = 1 THEN
SELECT
a_guid
@@ -224,46 +269,13 @@ BEGIN
, 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_admin -- ids_permission
- , v_id_access_level_admin -- ids_access_level
+ , v_id_permission_dog_new -- ids_permission
+ , v_id_access_level_edit -- ids_access_level
+ , 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
- -- Can Admin
- 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_admin -- ids_permission
- , v_id_access_level_admin -- ids_access_level
- , 0 -- a_show_errors
- , 0 -- a_debug
- );
-
- SELECT
- IFNULL(CU_T.has_access, 0)
- INTO
- v_can_admin
- 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
- );
-
- -- Can Create
CALL parts.p_dog_calc_user(
a_guid
, 0 -- get_all_user
@@ -277,7 +289,7 @@ BEGIN
, 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_create -- ids_access_level
+ , v_id_access_level_edit -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
@@ -296,7 +308,7 @@ BEGIN
, 0 -- a_debug
);
- IF (v_can_create = 0 AND EXISTS(SELECT * FROM tmp_Command WHERE is_new = 1)) THEN
+ 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
@@ -309,25 +321,7 @@ BEGIN
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
- , 'You do not have permission to create new Commands.'
- )
- ;
- END IF;
-
- IF (v_can_admin = 0 AND EXISTS(SELECT * FROM tmp_Command WHERE is_new = 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 admin Commands.'
+ , 'You do not have permission to edit new Commands.'
)
;
END IF;
@@ -439,29 +433,60 @@ DELIMITER ;
/*
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Command_Temp
+;
+select COUNT(*)
+from parts.DOG_Command_Temp
+;
-select
- *
- -- COUNT(*)
--- delete
-from parts.DOG_Command_Temp
-;
-select COUNT(*)
-from parts.DOG_Command_Temp
-;
-select
- *
- -- COUNT(*)
--- delete
-from parts.DOG_Command
+*/
+
+
+
+
+DELETE FROM demo.DOG_Command_Temp;
+SELECT *
+ /*
+ CC.name
+ , C.name
+ */
+FROM parts.DOG_Command C
+INNER JOIN parts.DOG_Command_Category CC ON C.id_command_category = CC.id_command_category
+ORDER BY CC.name, C.name
;
select COUNT(*)
from parts.DOG_Command
;
+INSERT INTO parts.DOG_Command_Temp (
+ id_command
+ , id_command_category
+ , name
+ , hand_signal_default_description
+ , can_have_button
+ , notes
+ , active
+ , guid
+)
+VALUES (
+ -1 -- id_command
+ , 1 -- id_command_category
+ , 'Bathing' -- name
+ , 'Burp and juice' -- hand_signal_default_description
+ , 1 -- can_have_category
+ , 'Sweet' -- notes
+ , 1 -- active
+ , 'ripplesipplenippletippledipplekipple'
+);
+
+
CALL parts.p_dog_save_command (
- 'nipples'
+ 'ripplesipplenippletippledipplekipple'
, (SELECT GUID FROM parts.DOG_Command_Temp COMMAND_TEMP ORDER BY id_temp DESC LIMIT 1)
, 1
, 1
@@ -477,14 +502,15 @@ from parts.DOG_Command_Temp
select COUNT(*)
from parts.DOG_Command_Temp
;
-select
- *
- -- COUNT(*)
--- delete
-from parts.DOG_Command
+SELECT *
+ /*
+ CC.name
+ , C.name
+ */
+FROM parts.DOG_Command C
+INNER JOIN parts.DOG_Command_Category CC ON C.id_command_category = CC.id_command_category
+ORDER BY CC.name, C.name
;
select COUNT(*)
from parts.DOG_Command
;
-
-*/
diff --git a/static/MySQL/71102_p_dog_save_command_category.sql b/static/MySQL/71102_p_dog_save_command_category.sql
new file mode 100644
index 0000000..5aa2e2e
--- /dev/null
+++ b/static/MySQL/71102_p_dog_save_command_category.sql
@@ -0,0 +1,617 @@
+
+USE parts;
+
+DROP PROCEDURE IF EXISTS parts.p_dog_save_command_category;
+
+DELIMITER //
+CREATE PROCEDURE parts.p_dog_save_command_category (
+ 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(100)
+ , 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_Category_Copy;
+ DROP TABLE IF EXISTS tmp_Command_Category;
+
+ CREATE TEMPORARY TABLE tmp_Command_Category (
+ id_temp INT
+ , id_command_category INT
+ , code VARCHAR(100)
+ , name VARCHAR(250)
+ , active BIT
+ , is_new BIT
+ , name_error VARCHAR(250)
+ );
+
+ CREATE TEMPORARY TABLE tmp_Command_Category_Copy (
+ id_temp INT
+ , id_command_category INT
+ , code VARCHAR(100)
+ , 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(100)
+ , msg TEXT NOT NULL
+ );
+
+
+ -- Get data from Temp table
+ INSERT INTO tmp_Command_Category (
+ id_temp
+ , id_command_category
+ , code
+ , name
+ , active
+ , is_new
+ )
+ SELECT
+ COMMAND_CATEGORY_T.id_temp
+ , COMMAND_CATEGORY_T.id_command_category
+ , COALESCE(
+ COMMAND_CATEGORY_T.code
+ , COMMAND_CATEGORY.code
+ ) AS code
+ , COALESCE(
+ COMMAND_CATEGORY_T.name
+ , COMMAND_CATEGORY.name
+ ) AS name
+ , COALESCE(COMMAND_CATEGORY_T.active, 1) AS active
+ , CASE WHEN IFNULL(COMMAND_CATEGORY_T.id_command_category, 0) < 1 THEN 1 ELSE 0 END AS is_new
+ FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T
+ LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMMAND_CATEGORY_T.id_command_category = COMMAND_CATEGORY.id_command_category
+ WHERE COMMAND_CATEGORY_T.guid = a_guid
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'Command_Category_Temp records';
+ SELECT * FROM tmp_Command_Category;
+ SELECT COUNT(*) FROM tmp_Command_Category;
+ END IF;
+
+ -- Error names
+ UPDATE tmp_Command_Category t_COMMAND_CATEGORY
+ SET t_COMMAND_CATEGORY.name_error = COALESCE(t_COMMAND_CATEGORY.code, t_COMMAND_CATEGORY.name, '(No Command Category)')
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set name_error';
+ SELECT * FROM tmp_Command_Category;
+ SELECT COUNT(*) FROM tmp_Command_Category;
+ END IF;
+
+ -- Missing Command Category Ids
+ UPDATE tmp_Command_Category t_COMMAND_CATEGORY
+ LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.code = COMMAND_CATEGORY.code
+ SET
+ t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.is_new = 0
+ WHERE
+ IFNULL(t_COMMAND_CATEGORY.id_command_category, 0) < 1
+ AND NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set missing id_command_category';
+ SELECT * FROM tmp_Command_Category;
+ SELECT COUNT(*) FROM tmp_Command_Category;
+ END IF;
+
+ -- Validation
+ -- Missing mandatory fields
+ -- code
+ IF EXISTS ( SELECT * FROM tmp_Command_Category t_COMMAND_CATEGORY WHERE t_COMMAND_CATEGORY.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 Command Category(s) do not have a valid Code: ', GROUP_CONCAT(t_COMMAND_CATEGORY.name_error SEPARATOR ', ')) AS msg
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ WHERE t_COMMAND_CATEGORY.code IS NULL
+ ;
+ END IF;
+ -- name
+ IF EXISTS ( SELECT * FROM tmp_Command_Category t_COMMAND_CATEGORY WHERE t_COMMAND_CATEGORY.name 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 Command Category(s) do not have a valid Name: ', GROUP_CONCAT(t_COMMAND_CATEGORY.name_error SEPARATOR ', ')) AS msg
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ WHERE t_COMMAND_CATEGORY.name IS NULL
+ ;
+ END IF;
+
+ /*
+ -- Duplicates
+ INSERT INTO tmp_Command_Category_Copy (
+ id_temp
+ , id_command_category
+ , id_dog
+ , id_command
+ , hand_signal_description
+ , notes
+ , active
+ , is_new
+ , name_error
+ , does_have_valid_command_category_id
+ )
+ SELECT
+ t_COMMAND_CATEGORY.id_temp
+ , t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.hand_signal_description
+ , t_COMMAND_CATEGORY.notes
+ , t_COMMAND_CATEGORY.active
+ , t_COMMAND_CATEGORY.is_new
+ , t_COMMAND_CATEGORY.name_error
+ , t_COMMAND_CATEGORY.does_have_valid_command_category_id
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Command_Category;
+ SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Command_Category_Copy;
+
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ UNION
+ SELECT
+ COMMAND_CATEGORY.id_command_category
+ , COMMAND_CATEGORY.id_dog
+ , COMMAND_CATEGORY.id_command
+ , IFNULL(
+ t_COMMAND_CATEGORY_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM parts.DOG_Command_Category COMMAND_CATEGORY
+ LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category
+ INNER JOIN parts.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog
+ INNER JOIN parts.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command
+ WHERE
+ NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ AND t_COMMAND_CATEGORY.does_have_valid_command_category_id = 0
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_command_category
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category
+ )
+ SELECT * -- AS count_duplicate_link_row_numbers
+ FROM Duplicate_Link_Row_Numbers;
+ END IF;
+
+ IF EXISTS (
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ UNION
+ SELECT
+ COMMAND_CATEGORY.id_command_category
+ , COMMAND_CATEGORY.id_dog
+ , COMMAND_CATEGORY.id_command
+ , IFNULL(
+ t_COMMAND_CATEGORY_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM parts.DOG_Command_Category COMMAND_CATEGORY
+ LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category
+ INNER JOIN parts.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog
+ INNER JOIN parts.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category)
+ AND NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_command_category
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg
+ FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
+ WHERE DUPLICATE_LINK.index_link_as_duplicate = 2
+ GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
+ ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_COMMAND_CATEGORY.id_command_category
+ , t_COMMAND_CATEGORY.id_dog
+ , t_COMMAND_CATEGORY.id_command
+ , t_COMMAND_CATEGORY.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category
+ UNION
+ SELECT
+ COMMAND_CATEGORY.id_command_category
+ , COMMAND_CATEGORY.id_dog
+ , COMMAND_CATEGORY.id_command
+ , IFNULL(
+ t_COMMAND_CATEGORY_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM parts.DOG_Command_Category COMMAND_CATEGORY
+ LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category
+ INNER JOIN parts.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog
+ INNER JOIN parts.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category)
+ AND NOT ISNULL(COMMAND_CATEGORY.id_command_category)
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_command_category
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg
+ FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
+ -- LEFT JOIN parts.DOG_Dog DOG ON DUPLICATE_LINK.id_dog = DOG.id_dog
+ -- LEFT JOIN parts.DOG_Command COMMAND ON DUPLICATE_LINK.id_command = COMMAND.id_command
+ WHERE DUPLICATE_LINK.index_link_as_duplicate = 2
+ GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
+ ;
+ 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_Category;
+ END IF;
+
+ DELETE FROM tmp_Command_Category;
+ 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_Category COMMAND_CATEGORY
+ INNER JOIN tmp_Command_Category t_COMMAND_CATEGORY
+ ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY.id_command_category
+ AND t_COMMAND_CATEGORY.is_new = 0
+ SET
+ COMMAND_CATEGORY.code = t_COMMAND_CATEGORY.code
+ , COMMAND_CATEGORY.name = t_COMMAND_CATEGORY.name
+ , COMMAND_CATEGORY.active = t_COMMAND_CATEGORY.active
+ , COMMAND_CATEGORY.id_change_set = v_id_change_set
+ ;
+
+ INSERT INTO parts.DOG_Command_Category (
+ code
+ , name
+ , active
+ , id_user_created_by
+ , created_on
+ )
+ SELECT
+ t_COMMAND_CATEGORY.code AS code
+ , t_COMMAND_CATEGORY.name AS name
+ , t_COMMAND_CATEGORY.active AS active
+ , a_id_user AS created_by
+ , v_time_start AS created_on
+ FROM tmp_Command_Category t_COMMAND_CATEGORY
+ WHERE
+ t_COMMAND_CATEGORY.is_new = 1
+ AND t_COMMAND_CATEGORY.active = 1
+ ;
+
+ COMMIT;
+ END IF;
+
+ START TRANSACTION;
+
+ DELETE FROM parts.DOG_Command_Category_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_Category;
+ END IF;
+
+ DROP TEMPORARY TABLE tmp_Command_Category;
+ 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 ;
+
+
+
+/*
+
+'ripplesipplenippletippledipplekipple'
+DELETE FROM parts.DOG_Command_Category WHERE id_command_category > 740;
+* /
+delete
+from parts.DOG_Command_Category_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Command_Category_Temp
+;
+select COUNT(*)
+from parts.DOG_Command_Category_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Command_Category
+;
+select COUNT(*)
+from parts.DOG_Command_Category
+;
+
+INSERT INTO parts.DOG_Command_Category_Temp (
+ id_command_category
+ , code
+ , name
+ , active
+ , guid
+)
+VALUES (
+ -1 -- id_command_category
+ , 'ACTIVITIES' -- code
+ , 'A Sport Is Fun' -- name
+ , 1 -- active
+ , 'ripplesipplenippletippledipplekipple'
+);
+
+CALL parts.p_dog_save_command_category (
+ 'nipples'
+ , 'ripplesipplenippletippledipplekipple'
+ , 1
+ , 1
+);
+
+
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Command_Category_Temp
+;
+select COUNT(*)
+from parts.DOG_Command_Category_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Command_Category
+;
+select COUNT(*)
+from parts.DOG_Command_Category
+;
+
+*/
\ No newline at end of file
diff --git a/static/MySQL/71104_p_dog_calc_command.sql b/static/MySQL/71104_p_dog_calc_command.sql
index 355ccfd..4ef69dc 100644
--- a/static/MySQL/71104_p_dog_calc_command.sql
+++ b/static/MySQL/71104_p_dog_calc_command.sql
@@ -200,12 +200,12 @@ BEGIN
);
DELETE FROM tmp_Split_Notes_Calc_Command;
- SET v_has_filter_command_category_id = CASE WHEN a_ids_command_category = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_category_name = CASE WHEN a_names_command_category = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_id = CASE WHEN a_ids_command = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_name = CASE WHEN a_names_command = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_hand_signal_default_description = CASE WHEN a_hand_signal_default_descriptions_command = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_notes = CASE WHEN a_notes_command = '' THEN 0 ELSE 1 END;
+ SET v_has_filter_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;
-- Command Categories
IF v_has_filter_command_category_id = 1 THEN
@@ -574,7 +574,7 @@ BEGIN
OR COMMAND_FILTERS.does_meet_hand_signal_default_description_filter = 1
OR COMMAND_FILTERS.does_meet_notes_filter = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
- , CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NULL THEN 0 ELSE 1 END AS does_command_category_already_exist_in_temp_table
+ , CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NOT NULL THEN 1 ELSE 0 END AS does_command_category_already_exist_in_temp_table
FROM parts.DOG_Command COMMAND
INNER JOIN tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY ON COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
LEFT JOIN Command_Filters COMMAND_FILTERS ON COMMAND.id_command = COMMAND_FILTERS.id_command
@@ -700,7 +700,7 @@ BEGIN
OR IFNULL(COMMAND_FILTERS.does_meet_hand_signal_default_description_filter, 0) = 1
OR IFNULL(COMMAND_FILTERS.does_meet_notes_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
- , CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NULL THEN 0 ELSE 1 END AS does_command_category_already_exist_in_temp_table
+ , CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NOT NULL THEN 1 ELSE 0 END AS does_command_category_already_exist_in_temp_table
FROM parts.DOG_Command COMMAND
INNER JOIN tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY ON COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
LEFT JOIN Command_Filters COMMAND_FILTERS ON COMMAND.id_command = COMMAND_FILTERS.id_command
diff --git a/static/MySQL/71104_p_dog_get_many_command.sql b/static/MySQL/71104_p_dog_get_many_command.sql
index 62ea98a..2f35ce9 100644
--- a/static/MySQL/71104_p_dog_get_many_command.sql
+++ b/static/MySQL/71104_p_dog_get_many_command.sql
@@ -389,6 +389,7 @@ BEGIN
, t_COMMAND_CATEGORY.does_meet_id_filters
, t_COMMAND_CATEGORY.does_meet_non_id_filters
FROM tmp_Command_Category t_COMMAND_CATEGORY
+ ORDER BY t_COMMAND_CATEGORY.name
;
END IF;
@@ -406,6 +407,10 @@ BEGIN
, t_COMMAND.does_meet_id_filters
, t_COMMAND.does_meet_non_id_filters
FROM tmp_Command t_COMMAND
+ INNER JOIN tmp_Command_Category t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
+ ORDER BY
+ t_COMMAND_CATEGORY.name
+ , t_COMMAND.name
;
END IF;
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 3f9a363..0eca26b 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
@@ -137,16 +137,16 @@ BEGIN
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
SET a_debug := IFNULL(a_debug, 0);
- SET v_has_filter_dog_id = CASE WHEN a_ids_dog = '' THEN 0 ELSE 1 END;
- SET v_has_filter_dog_name = CASE WHEN a_names_dog = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_category_id = CASE WHEN a_ids_command_category = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_category_name = CASE WHEN a_names_command_category = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_id = CASE WHEN a_ids_command = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_name = CASE WHEN a_names_command = '' THEN 0 ELSE 1 END;
- SET v_has_filter_link_hand_signal_description = CASE WHEN a_hand_signal_descriptions_link = '' THEN 0 ELSE 1 END;
- SET v_has_filter_command_notes = CASE WHEN a_notes_command = '' THEN 0 ELSE 1 END;
- SET v_has_filter_link_id = CASE WHEN a_ids_link = '' THEN 0 ELSE 1 END;
- SET v_has_filter_link_notes = CASE WHEN a_notes_link = '' THEN 0 ELSE 1 END;
+ SET v_has_filter_dog_id = CASE WHEN a_ids_dog <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_dog_name = CASE WHEN a_names_dog <> '' THEN 1 ELSE 0 END;
+ 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_link_hand_signal_description = CASE WHEN a_hand_signal_descriptions_link <> '' 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_link_id = CASE WHEN a_ids_link <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_link_notes = CASE WHEN a_notes_link <> '' THEN 1 ELSE 0 END;
IF a_debug = 1 THEN
SELECT
@@ -814,6 +814,10 @@ BEGIN
LEFT JOIN tmp_Dog t_DOG ON DOG_COMMAND_LINK.id_dog = t_DOG.id_dog
LEFT JOIN tmp_Command t_COMMAND ON DOG_COMMAND_LINK.id_command = t_COMMAND.id_command
LEFT JOIN tmp_Command_Category t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
+ ORDER BY
+ t_DOG.name
+ , t_COMMAND_CATEGORY.name
+ , t_COMMAND.name
;
-- Errors
@@ -882,6 +886,33 @@ CALL parts.p_dog_get_many_dog_command_link (
, 1 -- a_debug
);
+CALL parts.p_dog_get_many_dog_command_link (
+ 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
+ , 1 -- a_get_all_link
+ , 0 -- a_get_inactive_link
+ , '' -- a_ids_link
+ , 1 -- a_get_all_dog
+ , 0 -- a_get_inactive_dog
+ , '' -- a_ids_dog
+ , '' -- a_names_dog
+ , 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_descriptions_link
+ , '' -- a_notes_command
+ , '' -- a_notes_link
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 1 -- a_require_any_non_id_search_filters_met
+ , 0 -- a_debug
+);
+
CALL parts.p_dog_get_many_dog_command_link (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_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
new file mode 100644
index 0000000..f3e1c4a
--- /dev/null
+++ b/static/MySQL/71110_p_dog_save_dog_command_link.sql
@@ -0,0 +1,688 @@
+
+USE parts;
+
+DROP PROCEDURE IF EXISTS parts.p_dog_save_dog_command_link;
+
+DELIMITER //
+CREATE PROCEDURE parts.p_dog_save_dog_command_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(100)
+ , 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_Dog_Command_Link_Copy;
+ DROP TABLE IF EXISTS tmp_Dog_Command_Link;
+
+ CREATE TEMPORARY TABLE tmp_Dog_Command_Link (
+ id_temp INT
+ , id_link INT
+ , id_dog INT
+ , id_command INT
+ , hand_signal_description TEXT
+ , notes TEXT
+ , active BIT
+ , is_new BIT
+ , name_error VARCHAR(250)
+ , does_have_valid_link_id BIT
+ );
+
+ CREATE TEMPORARY TABLE tmp_Dog_Command_Link_Copy (
+ id_temp INT
+ , id_link INT
+ , id_dog INT
+ , id_command INT
+ , hand_signal_description TEXT
+ , notes TEXT
+ , active BIT
+ , is_new BIT
+ , name_error VARCHAR(250)
+ , does_have_valid_link_id BIT
+ );
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(100)
+ , msg TEXT NOT NULL
+ );
+
+
+ -- Get data from Temp table
+ INSERT INTO tmp_Dog_Command_Link (
+ id_temp
+ , id_link
+ , id_dog
+ , id_command
+ , hand_signal_description
+ , notes
+ , active
+ , is_new
+ , does_have_valid_link_id
+ )
+ SELECT
+ DOG_COMMAND_LINK_T.id_temp
+ , DOG_COMMAND_LINK_T.id_link
+ , COALESCE(
+ DOG_COMMAND_LINK_T.id_dog
+ , DOG_COMMAND_LINK.id_dog
+ ) AS id_dog
+ , COALESCE(
+ DOG_COMMAND_LINK_T.id_command
+ , DOG_COMMAND_LINK.id_command
+ ) AS id_command
+ , NULLIF(
+ COALESCE(
+ DOG_COMMAND_LINK_T.hand_signal_description
+ , DOG_COMMAND_LINK.hand_signal_description
+ )
+ , ''
+ ) AS hand_signal_description
+ , NULLIF(
+ COALESCE(
+ DOG_COMMAND_LINK_T.notes
+ , DOG_COMMAND_LINK.notes
+ )
+ , ''
+ ) AS notes
+ , COALESCE(DOG_COMMAND_LINK_T.active, 1) AS active
+ , CASE WHEN IFNULL(DOG_COMMAND_LINK_T.id_link, 0) < 1 THEN 1 ELSE 0 END AS is_new
+ , CASE WHEN NOT ISNULL(DOG_COMMAND_LINK_T.id_link) THEN 1 ELSE 0 END AS does_have_valid_link_id
+ FROM parts.DOG_Dog_Command_Link_Temp DOG_COMMAND_LINK_T
+ LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON DOG_COMMAND_LINK_T.id_link = DOG_COMMAND_LINK.id_link
+ WHERE DOG_COMMAND_LINK_T.guid = a_guid
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'Dog_Command_Link_Temp records';
+ SELECT * FROM tmp_Dog_Command_Link;
+ SELECT COUNT(*) FROM tmp_Dog_Command_Link;
+ END IF;
+
+ -- Error names
+ UPDATE tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ LEFT JOIN parts.DOG_Dog DOG ON t_DOG_COMMAND_LINK.id_dog = DOG.id_dog
+ LEFT JOIN parts.DOG_Command COMMAND ON t_DOG_COMMAND_LINK.id_command = COMMAND.id_command
+ SET t_DOG_COMMAND_LINK.name_error = CASE WHEN
+ ISNULL(DOG.id_dog)
+ AND ISNULL(COMMAND.id_command)
+ THEN COALESCE(t_DOG_COMMAND_LINK.hand_signal_description, t_DOG_COMMAND_LINK.notes, '(No Dog Command Link)')
+ ELSE CONCAT(
+ COALESCE(DOG.name, t_DOG_COMMAND_LINK.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_DOG_COMMAND_LINK.id_command, '(No Command)')
+ ) END
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set name_error';
+ SELECT * FROM tmp_Dog_Command_Link;
+ SELECT COUNT(*) FROM tmp_Dog_Command_Link;
+ END IF;
+
+ -- Missing Dog Command Link Ids
+ UPDATE tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK
+ -- ON t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link
+ ON t_DOG_COMMAND_LINK.id_dog = DOG_COMMAND_LINK.id_dog
+ AND t_DOG_COMMAND_LINK.id_command = DOG_COMMAND_LINK.id_command
+ SET
+ t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link
+ , t_DOG_COMMAND_LINK.is_new = 0
+ WHERE
+ IFNULL(t_DOG_COMMAND_LINK.id_link, 0) < 1
+ AND NOT ISNULL(DOG_COMMAND_LINK.id_link)
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After set missing id_link';
+ SELECT * FROM tmp_Dog_Command_Link;
+ SELECT COUNT(*) FROM tmp_Dog_Command_Link;
+ END IF;
+
+ -- Validation
+ -- Missing mandatory fields
+ -- id_dog
+ IF EXISTS (
+ SELECT *
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ LEFT JOIN demo.DOG_Dog DOG ON t_DOG_COMMAND_LINK.id_dog = DOG.id_dog
+ WHERE
+ ISNULL(t_DOG_COMMAND_LINK.id_dog)
+ OR ISNULL(DOG.id_dog)
+ OR DOG.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 Dog: ', GROUP_CONCAT(t_DOG_COMMAND_LINK.name_error SEPARATOR ', ')) AS msg
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ LEFT JOIN parts.DOG_Dog DOG ON t_DOG_COMMAND_LINK.id_dog = DOG.id_dog
+ WHERE
+ ISNULL(t_DOG_COMMAND_LINK.id_dog)
+ OR ISNULL(DOG.id_dog)
+ OR DOG.active = 0
+ ;
+ END IF;
+ -- id_command
+ IF EXISTS (
+ SELECT *
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ LEFT JOIN demo.DOG_Command COMMAND ON t_DOG_COMMAND_LINK.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_DOG_COMMAND_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_DOG_COMMAND_LINK.name_error SEPARATOR ', ')) AS msg
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ LEFT JOIN parts.DOG_Command COMMAND ON t_DOG_COMMAND_LINK.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_DOG_COMMAND_LINK.id_command)
+ OR ISNULL(COMMAND.id_command)
+ OR COMMAND.active = 0
+ ;
+ END IF;
+
+ /*
+ -- Duplicates
+ INSERT INTO tmp_Dog_Command_Link_Copy (
+ id_temp
+ , id_link
+ , id_dog
+ , id_command
+ , hand_signal_description
+ , notes
+ , active
+ , is_new
+ , name_error
+ , does_have_valid_link_id
+ )
+ SELECT
+ t_DOG_COMMAND_LINK.id_temp
+ , t_DOG_COMMAND_LINK.id_link
+ , t_DOG_COMMAND_LINK.id_dog
+ , t_DOG_COMMAND_LINK.id_command
+ , t_DOG_COMMAND_LINK.hand_signal_description
+ , t_DOG_COMMAND_LINK.notes
+ , t_DOG_COMMAND_LINK.active
+ , t_DOG_COMMAND_LINK.is_new
+ , t_DOG_COMMAND_LINK.name_error
+ , t_DOG_COMMAND_LINK.does_have_valid_link_id
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Dog_Command_Link;
+ SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Dog_Command_Link_Copy;
+
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_DOG_COMMAND_LINK.id_link
+ , t_DOG_COMMAND_LINK.id_dog
+ , t_DOG_COMMAND_LINK.id_command
+ , t_DOG_COMMAND_LINK.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link
+ UNION
+ SELECT
+ DOG_COMMAND_LINK.id_link
+ , DOG_COMMAND_LINK.id_dog
+ , DOG_COMMAND_LINK.id_command
+ , IFNULL(
+ t_DOG_COMMAND_LINK_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_DOG_COMMAND_LINK_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_DOG_COMMAND_LINK_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK
+ LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK_COPY.id_link
+ INNER JOIN parts.DOG_Dog DOG ON DOG_COMMAND_LINK.id_dog = DOG.id_dog
+ INNER JOIN parts.DOG_Command COMMAND ON DOG_COMMAND_LINK.id_command = COMMAND.id_command
+ WHERE
+ NOT ISNULL(DOG_COMMAND_LINK.id_link)
+ AND t_DOG_COMMAND_LINK.does_have_valid_link_id = 0
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_link
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON COMBINED_LINK.id_link = DOG_COMMAND_LINK.id_link
+ )
+ SELECT * -- AS count_duplicate_link_row_numbers
+ FROM Duplicate_Link_Row_Numbers;
+ END IF;
+
+ IF EXISTS (
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_DOG_COMMAND_LINK.id_link
+ , t_DOG_COMMAND_LINK.id_dog
+ , t_DOG_COMMAND_LINK.id_command
+ , t_DOG_COMMAND_LINK.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link
+ UNION
+ SELECT
+ DOG_COMMAND_LINK.id_link
+ , DOG_COMMAND_LINK.id_dog
+ , DOG_COMMAND_LINK.id_command
+ , IFNULL(
+ t_DOG_COMMAND_LINK_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_DOG_COMMAND_LINK_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_DOG_COMMAND_LINK_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK
+ LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK_COPY.id_link
+ INNER JOIN parts.DOG_Dog DOG ON DOG_COMMAND_LINK.id_dog = DOG.id_dog
+ INNER JOIN parts.DOG_Command COMMAND ON DOG_COMMAND_LINK.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_DOG_COMMAND_LINK_COPY.id_link)
+ AND NOT ISNULL(DOG_COMMAND_LINK.id_link)
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_link
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON COMBINED_LINK.id_link = DOG_COMMAND_LINK.id_link
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT('Attempt to create duplicate 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 = 2
+ GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
+ ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ WITH
+ Combined_Links AS (
+ SELECT
+ t_DOG_COMMAND_LINK.id_link
+ , t_DOG_COMMAND_LINK.id_dog
+ , t_DOG_COMMAND_LINK.id_command
+ , t_DOG_COMMAND_LINK.name_error
+ -- , 1 AS is_from_temporary_table
+ -- , 0 AS is_from_permanent_table
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link
+ UNION
+ SELECT
+ DOG_COMMAND_LINK.id_link
+ , DOG_COMMAND_LINK.id_dog
+ , DOG_COMMAND_LINK.id_command
+ , IFNULL(
+ t_DOG_COMMAND_LINK_COPY.name_error
+ , CONCAT(
+ COALESCE(DOG.name, t_DOG_COMMAND_LINK_COPY.id_dog, '(No Dog)')
+ , ' - '
+ , COALESCE(COMMAND.name, t_DOG_COMMAND_LINK_COPY.id_command, '(No Command)')
+ )
+ ) AS name_error
+ -- , 0 AS is_from_temporary_table
+ -- , 1 AS is_from_permanent_table
+ FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK
+ LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK_COPY.id_link
+ INNER JOIN parts.DOG_Dog DOG ON DOG_COMMAND_LINK.id_dog = DOG.id_dog
+ INNER JOIN parts.DOG_Command COMMAND ON DOG_COMMAND_LINK.id_command = COMMAND.id_command
+ WHERE
+ ISNULL(t_DOG_COMMAND_LINK_COPY.id_link)
+ AND NOT ISNULL(DOG_COMMAND_LINK.id_link)
+ )
+ , Duplicate_Link_Row_Numbers AS (
+ SELECT
+ COMBINED_LINK.id_link
+ , COMBINED_LINK.id_dog
+ , COMBINED_LINK.id_command
+ , COMBINED_LINK.name_error
+ , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate
+ FROM Combined_Links COMBINED_LINK
+ -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON COMBINED_LINK.id_link = DOG_COMMAND_LINK.id_link
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT('Attempt to create duplicate Dog Command Links on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg
+ FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
+ -- LEFT JOIN parts.DOG_Dog DOG ON DUPLICATE_LINK.id_dog = DOG.id_dog
+ -- LEFT JOIN parts.DOG_Command COMMAND ON DUPLICATE_LINK.id_command = COMMAND.id_command
+ WHERE DUPLICATE_LINK.index_link_as_duplicate = 2
+ GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
+ ;
+ 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_Dog_Command_Link;
+ END IF;
+
+ DELETE FROM tmp_Dog_Command_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_Dog_Command_Link DOG_COMMAND_LINK
+ INNER JOIN tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK.id_link
+ AND t_DOG_COMMAND_LINK.is_new = 0
+ SET
+ DOG_COMMAND_LINK.id_dog = t_DOG_COMMAND_LINK.id_dog
+ , DOG_COMMAND_LINK.id_command = t_DOG_COMMAND_LINK.id_command
+ , DOG_COMMAND_LINK.hand_signal_description = t_DOG_COMMAND_LINK.hand_signal_description
+ , DOG_COMMAND_LINK.notes = t_DOG_COMMAND_LINK.notes
+ , DOG_COMMAND_LINK.active = t_DOG_COMMAND_LINK.active
+ , DOG_COMMAND_LINK.id_change_set = v_id_change_set
+ ;
+
+ INSERT INTO parts.DOG_Dog_Command_Link (
+ id_dog
+ , id_command
+ , hand_signal_description
+ , notes
+ , active
+ , id_user_created_by
+ , created_on
+ )
+ SELECT
+ t_DOG_COMMAND_LINK.id_dog AS id_dog
+ , t_DOG_COMMAND_LINK.id_command AS id_command
+ , t_DOG_COMMAND_LINK.hand_signal_description AS hand_signal_description
+ , t_DOG_COMMAND_LINK.notes AS notes
+ , t_DOG_COMMAND_LINK.active AS active
+ , a_id_user AS created_by
+ , v_time_start AS created_on
+ FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK
+ WHERE
+ t_DOG_COMMAND_LINK.is_new = 1
+ AND t_DOG_COMMAND_LINK.active = 1
+ ;
+
+ COMMIT;
+ END IF;
+
+ START TRANSACTION;
+
+ DELETE FROM parts.DOG_Dog_Command_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_Dog_Command_Link;
+ END IF;
+
+ DROP TEMPORARY TABLE tmp_Dog_Command_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 ;
+
+
+
+/*
+
+'ripplesipplenippletippledipplekipple'
+DELETE FROM parts.DOG_Dog_Command_Link WHERE id_link > 740;
+* /
+delete
+from parts.DOG_Dog_Command_Link_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Dog_Command_Link_Temp
+;
+select COUNT(*)
+from parts.DOG_Dog_Command_Link_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Dog_Command_Link
+;
+select COUNT(*)
+from parts.DOG_Dog_Command_Link
+;
+
+INSERT INTO parts.DOG_Dog_Command_Link_Temp (
+ id_link
+ , id_dog
+ , id_command
+ , hand_signal_description
+ , notes
+ , active
+ , guid
+)
+VALUES (
+ -1 -- id_link
+ , 1 -- id_dog
+ , 1 -- id_command
+ , 'Test' -- hand_signal_description
+ , NULL -- notes
+ , 1 -- active
+ , 'ripplesipplenippletippledipplekipple'
+);
+
+CALL parts.p_dog_save_dog_command_link (
+ 'nipples'
+ , 'ripplesipplenippletippledipplekipple'
+ , 1
+ , 1
+);
+
+
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Dog_Command_Link_Temp
+;
+select COUNT(*)
+from parts.DOG_Dog_Command_Link_Temp
+;
+select
+ *
+ -- COUNT(*)
+-- delete
+from parts.DOG_Dog_Command_Link
+;
+select COUNT(*)
+from parts.DOG_Dog_Command_Link
+;
+
+*/
\ No newline at end of file
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 a0f1ba5..885ee91 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
@@ -151,7 +151,7 @@ BEGIN
CALL parts.p_core_validate_guid ( v_guid );
- SET v_has_filter_understanding_level_id = CASE WHEN a_ids_understanding_level = '' THEN 0 ELSE 1 END;
+ SET v_has_filter_understanding_level_id = CASE WHEN a_ids_understanding_level <> '' THEN 1 ELSE 0 END;
SET v_has_filter_understanding_level_code = CASE WHEN a_codes_understanding_level = '' THEN 0 ELSE 1 END;
SET v_has_filter_understanding_level_name = CASE WHEN a_names_understanding_level = '' THEN 0 ELSE 1 END;
diff --git a/static/css/components/button.css b/static/css/components/button.css
index 6395d8f..53d0ec1 100644
--- a/static/css/components/button.css
+++ b/static/css/components/button.css
@@ -1,17 +1,23 @@
.button {
display: inline-block;
- padding: 0.75rem 1.5rem;
- border-radius: 6px;
+ padding: 0.5vh 0.75vh;
+ border-radius: 0.75vh;
text-decoration: none;
- font-weight: 500;
+ font-weight: bold;
transition: all 0.3s ease;
width: fit-content;
cursor: pointer;
}
+.button.collapsed {
+ display: block;
+ opacity: 0;
+}
+
.button-primary {
- background: var(--colour-primary);
- color: white;
+ background: var(--colour-accent);
+ color: var(--colour-primary);
+ border: 2px solid var(--colour-primary);
}
.button-primary:hover {
diff --git a/static/css/components/overlay.css b/static/css/components/overlay.css
index 4450241..40462cd 100644
--- a/static/css/components/overlay.css
+++ b/static/css/components/overlay.css
@@ -79,4 +79,16 @@
left: 25vw;
width: 50vw;
height: 50vh;
+}
+
+#overlayConfirm .row > * {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+#overlayConfirm .row .button.button-cancel {
+ margin-right: 0.5vh;
+}
+#overlayConfirm .row .button.submit {
+ margin-left: 0.5vh;
}
\ No newline at end of file
diff --git a/static/css/layouts/header.css b/static/css/layouts/header.css
index 50e0e9e..1e260e8 100644
--- a/static/css/layouts/header.css
+++ b/static/css/layouts/header.css
@@ -115,6 +115,9 @@ header {
#formFilters .container-input {
padding: 0 0.5vh;
}
+#formFilters .container-input:has(.dirty) {
+ background-color: var(--colour-accent);
+}
#formFilters .container-input input {
width: 10vh;
@@ -152,6 +155,7 @@ header {
width: 12vh;
}
+/*
#formFilters button {
padding: 0.5vh 0.75vh;
background-color: var(--colour-accent);
@@ -165,6 +169,7 @@ header {
display: block;
opacity: 0;
}
+*/
form.filter button.save, form.filter button.button-cancel {
margin-top: 0;
diff --git a/static/css/layouts/table-main.css b/static/css/layouts/table-main.css
index 8a95bd2..9461bd0 100644
--- a/static/css/layouts/table-main.css
+++ b/static/css/layouts/table-main.css
@@ -4,7 +4,6 @@
padding: 1vh;
max-width: 95vw; /* min(calc(1vh * 80), calc(1vw * 90)); */
width: min-content;
- margin: 1vh auto;
align-items: normal;
justify-content: normal;
}
@@ -39,10 +38,14 @@
#tableMain select,
#tableMain input:not([type="checkbox"]),
-#tableMain textarea, #tableMain div {
+#tableMain textarea,
+#tableMain div {
box-sizing: border-box;
width: 100%;
height: 100%;
+ border: 1px solid var(--colour-accent);
+ border-radius: 0.5vh;
+ text-align: center;
}
#tableMain thead tr th, #tableMain tbody tr td {
diff --git a/static/css/main.css b/static/css/main.css
index 9853ebc..35b9782 100644
--- a/static/css/main.css
+++ b/static/css/main.css
@@ -95,7 +95,7 @@ script, link {
}
#pageBody > .card {
height: fit-content;
- margin-top: 1vh;
+ margin: 1vh auto;
}
#pageBody > .card:first-of-type{
margin-top: 0vh;
diff --git a/static/css/pages/dog/command_categories.css b/static/css/pages/dog/command_categories.css
new file mode 100644
index 0000000..e4cc8e7
--- /dev/null
+++ b/static/css/pages/dog/command_categories.css
@@ -0,0 +1,32 @@
+
+/*
+#formFilters .container {
+ max-width: fit-content;
+}
+*/
+
+#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,
+#tableMain tbody tr td.code,
+#tableMain thead tr th.name ,
+#tableMain tbody tr td.name {
+ width: 35vh;
+ min-width: 35vh;
+}
\ No newline at end of file
diff --git a/static/css/pages/dog/commands.css b/static/css/pages/dog/commands.css
index 2393818..bc58af7 100644
--- a/static/css/pages/dog/commands.css
+++ b/static/css/pages/dog/commands.css
@@ -1,53 +1,6 @@
-
+/*
#formFilters .container {
max-width: fit-content;
}
-
-#formFilters .container-input.filter.is_not_empty {
- width: 10vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-
-
-#tableMain {
- max-width: min(calc(1vh * 65), calc(1vw * 90));
-}
-
-#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order {
- width: 5vh;
- min-width: 5vh;
-}
-#tableMain tbody tr td.product_category, #tableMain thead tr th.product_category {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain tbody tr td.name, #tableMain thead tr th.name {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain thead tr th.has_variations, #tableMain tbody tr td.has_variations {
- width: 5vh;
- min-width: 5vh;
-}
-#tableMain tbody tr td.access_level, #tableMain thead tr th.access_level {
- width: 7vh;
- min-width: 7vh;
-}
-#tableMain tbody tr td.active, #tableMain thead tr th.active {
- width: 5vh;
- min-width: 5vh;
-}
-
-td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea {
- border: 2px solid var(--border-colour);
- border-radius: 0.5vh;
-}
-
-#tableMain tbody tr td table thead tr th.id_variation_type, #tableMain tbody tr td table tbody tr td.id_variation_type, #tableMain tbody tr td table thead tr th.id_variation, #tableMain tbody tr td table tbody tr td.id_variation {
- width: 47.5%;
-}
-
+*/
\ No newline at end of file
diff --git a/static/css/pages/dog/dog_command_links.css b/static/css/pages/dog/dog_command_links.css
index d8bfb2d..c896fec 100644
--- a/static/css/pages/dog/dog_command_links.css
+++ b/static/css/pages/dog/dog_command_links.css
@@ -1,16 +1,8 @@
-
-#formFilters .container {
- max-width: fit-content;
-}
-
-#formFilters .container-input:has(.dirty) {
- background-color: var(--colour-accent);
-}
-
+/*
#formFilters .container-input.filter.active_only {
}
-
+*/
#tableMain {
max-width: 90vw;
@@ -39,22 +31,20 @@
}
*/
- td > input
-, td > select
-, td > textarea
-, .container-input > input
-, .container-input > select
-, .container-input > textarea
-{
+td > input,
+td > select,
+td > textarea,
+.container-input > input,
+.container-input > select,
+.container-input > textarea {
border: 2px solid var(--colour-primary);
border-radius: 0.5vh;
}
- #tableMain tbody tr td table thead tr th.id_variation_type
-, #tableMain tbody tr td table tbody tr td.id_variation_type
-, #tableMain tbody tr td table thead tr th.id_variation
-, #tableMain tbody tr td table tbody tr td.id_variation
-{
+#tableMain tbody tr td table thead tr th.id_variation_type,
+#tableMain tbody tr td table tbody tr td.id_variation_type,
+#tableMain tbody tr td table thead tr th.id_variation,
+#tableMain tbody tr td table tbody tr td.id_variation {
width: 47.5%;
}
diff --git a/static/css/pages/dog/home.css b/static/css/pages/dog/home.css
index e69de29..f8d9774 100644
--- a/static/css/pages/dog/home.css
+++ b/static/css/pages/dog/home.css
@@ -0,0 +1,7 @@
+#pageBody .column .row {
+ margin-top: 0.5vh;
+}
+#pageBody .column .row .button {
+ margin-left: auto;
+ margin-right: auto;
+}
\ No newline at end of file
diff --git a/static/js/api.js b/static/js/api.js
index eb337e4..7d39f8b 100644
--- a/static/js/api.js
+++ b/static/js/api.js
@@ -70,24 +70,32 @@ export default class API {
return await API.request(hashPageUserLogin, 'POST', callback);
}
- /*
- // store
- // product categories
- static async saveCategories(categories, formFilters, comment) {
+ // dog
+ // Command categories
+ static async saveCommandCategories(commandCategories, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
- dataRequest[flagProductCategory] = categories;
+ dataRequest[flagCommandCategory] = commandCategories;
dataRequest[flagComment] = comment;
- return await API.request(hashSaveStoreProductCategory, 'POST', dataRequest);
+ return await API.request(hashSaveDogCommandCategory, 'POST', dataRequest);
}
- // products
- static async saveProducts(products, formFilters, comment) {
+ // Commands
+ static async saveCommands(commands, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
- dataRequest[flagProduct] = products;
+ dataRequest[flagCommand] = commands;
dataRequest[flagComment] = comment;
- return await API.request(hashSaveStoreProduct, 'POST', dataRequest);
+ return await API.request(hashSaveDogCommand, 'POST', dataRequest);
}
- */
+
+ // Dog Command Links
+ static async saveDogCommandLinks(dogCommandLinks, formFilters, comment) {
+ let dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagDogCommandLink] = dogCommandLinks;
+ dataRequest[flagComment] = comment;
+ return await API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);
+ }
+
}
diff --git a/static/js/lib/events.js b/static/js/lib/events.js
index 77d52a5..05edecd 100644
--- a/static/js/lib/events.js
+++ b/static/js/lib/events.js
@@ -3,8 +3,8 @@ export default class Events {
static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {
document.querySelectorAll(selectorElement).forEach(function(element) {
if (element.classList.contains(classInitialised)) return;
- element.classList.add(classInitialised);
eventHandler(element);
+ element.classList.add(classInitialised);
});
}
}
\ No newline at end of file
diff --git a/static/js/pages/base.js b/static/js/pages/base.js
index a78d8d5..c33d2f1 100644
--- a/static/js/pages/base.js
+++ b/static/js/pages/base.js
@@ -78,6 +78,7 @@ export default class BasePage {
// this.hookupButtonsNavStoreHome();
// this.hookupButtonsNavStoreManufacturingPurchaseOrders();
this.hookupButtonsNavDogHome();
+ this.hookupButtonsNavDogCommandCategories();
this.hookupButtonsNavDogCommands();
this.hookupButtonsNavDogDogCommandLinks();
this.hookupButtonsNavDogDogs();
@@ -129,6 +130,9 @@ export default class BasePage {
hookupButtonsNavDogHome() {
this.hookupButtonsNav('.' + flagNavDogHome, hashPageDogHome);
}
+ hookupButtonsNavDogCommandCategories() {
+ this.hookupButtonsNav('.' + flagNavDogCommandCategories, hashPageDogCommandCategories);
+ }
hookupButtonsNavDogCommands() {
this.hookupButtonsNav('.' + flagNavDogCommands, hashPageDogCommands);
}
diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js
index 4da0d3e..cd9a44f 100644
--- a/static/js/pages/base_table.js
+++ b/static/js/pages/base_table.js
@@ -74,8 +74,8 @@ export default class TableBasePage extends BasePage {
if (isChecked) filterActiveNew.classList.add(flagIsChecked);
this.hookupEventHandler("click", filterSelector, (event, filterActive) => {
- console.log({ filterActive });
- console.log({ [filterActive.tagName]: filterActive.tagName });
+ Utils.consoleLogIfNotProductionEnvironment({ filterActive });
+ Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });
let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;
let wasChecked = svgElement.classList.contains(flagIsChecked);
if (wasChecked) {
@@ -120,6 +120,36 @@ export default class TableBasePage extends BasePage {
hookupSearchTextFilter() {
this.hookupFilter(flagSearch);
}
+ hookupFilterDog() {
+ this.hookupFilter(attrIdDog);
+ }
+ hookupFilterCommandCategory() {
+ this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {
+ TableBasePage.isDirtyFilter(filterCommandCategory);
+ let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);
+ let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);
+ console.log("filter commands unsorted");
+ console.log(Utils.getListFromDict(filterCommands));
+ let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => command[attrIdCommandCategory] == idCommandCategory);
+ let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));
+ let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);
+ let idCommandPrevious = DOM.getElementAttributeValuePrevious(filterCommand);
+ filterCommand.innerHTML = '';
+ let optionJson, option;
+ option = DOM.createOption(null);
+ filterCommand.appendChild(option);
+ sortedCommands.forEach((command) => {
+ optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);
+ option = DOM.createOption(optionJson);
+ filterCommand.appendChild(option);
+ });
+ filterCommand.dispatchEvent(new Event('change'));
+ return isDirtyFilter;
+ });
+ }
+ hookupFilterCommand() {
+ this.hookupFilter(attrIdCommand);
+ }
/*
getAndLoadFilteredTableContent = () => {
this.callFilterTableContent()
@@ -132,11 +162,11 @@ export default class TableBasePage extends BasePage {
callFilterTableContent() {
let formFilters = this.getFormFilters();
let filtersJson = DOM.convertForm2JSON(formFilters);
- console.log("callFilterTableContent");
- console.log("formFilters");
- console.log(formFilters);
- console.log("filtersJson");
- console.log(filtersJson);
+ Utils.consoleLogIfNotProductionEnvironment("callFilterTableContent");
+ Utils.consoleLogIfNotProductionEnvironment("formFilters");
+ Utils.consoleLogIfNotProductionEnvironment(formFilters);
+ Utils.consoleLogIfNotProductionEnvironment("filtersJson");
+ Utils.consoleLogIfNotProductionEnvironment(filtersJson);
this.leave();
API.goToHash(this.constructor.hash, filtersJson);
}
@@ -178,6 +208,7 @@ export default class TableBasePage extends BasePage {
}
let formElement = this.getFormFilters();
let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));
+ Utils.consoleLogIfNotProductionEnvironment({ formElement, comment, records });
this.callSaveTableContent(records, formElement, comment)
.then(data => {
if (data[flagStatus] == flagSuccess) {
@@ -388,7 +419,7 @@ export default class TableBasePage extends BasePage {
let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);
let wasDirtyElement = element.classList.contains(flagDirty);
let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);
- Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});
+ // Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});
// let td = DOM.getCellFromElement(element);
// DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));
if (isDirtyElement != wasDirtyElement) {
@@ -427,14 +458,17 @@ export default class TableBasePage extends BasePage {
}) {
this.hookupEventHandler("change", inputSelector, handler);
}
- hookupTextareasCodeTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagCode + ' textarea');
+ hookupFieldsCodeTable() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagCode + ' > .' + flagCode);
}
- hookupTextareasNameTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagName + ' textarea');
+ hookupFieldsNameTable() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagName + ' > .' + flagName);
}
- hookupTextareasDescriptionTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagDescription + ' textarea');
+ hookupFieldsDescriptionTable() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagDescription + ' > .' + flagDescription);
+ }
+ hookupFieldsNotesTable() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagNotes + ' > .' + flagNotes);
}
hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {
let selectorButton = 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;
@@ -494,39 +528,41 @@ export default class TableBasePage extends BasePage {
this.updateAndToggleShowButtonsSaveCancel();
}
hookupTdsAccessLevel() {
- let cellSelector = idTableMain + ' tbody td.' + flagAccessLevel;
- this.hookupTableCellDdlPreviews(cellSelector, Utils.getListFromDict(accessLevels));
+ this.hookupTableCellDdlPreviews(flagAccessLevel, Utils.getListFromDict(accessLevels));
}
hookupTableCellDdlPreviews(
- cellSelector
+ fieldFlag
, optionList
- , ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }
+ , cellSelector = null
+ , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); }
, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }
) {
- this.hookupEventHandler("click", cellSelector, (event, td) => {
+ if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;
+ this.hookupEventHandler("click", cellSelector + ' div.' + fieldFlag, (event, div) => {
this.handleClickTableCellDdlPreview(
event
- , td
+ , div
+ , fieldFlag
, optionList
, cellSelector
- , (cellSelector) => { ddlHookup(
- cellSelector
+ , (ddlSelector) => { ddlHookup(
+ ddlSelector
, (event, element) => { changeHandler(event, element); }
); }
);
});
- ddlHookup(cellSelector + ' select');
+ ddlHookup(cellSelector + ' select.' + fieldFlag);
}
hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {
this.hookupEventHandler("change", ddlSelector, (event, element) => { changeHandler(event, element); });
}
- handleClickTableCellDdlPreview(event, td, optionObjectList, cellSelector, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {
- if (td.querySelector('select')) return;
- let tdNew = td.cloneNode(true);
- td.parentNode.replaceChild(tdNew, td);
- let idSelected = DOM.getElementAttributeValueCurrent(tdNew);
- tdNew.innerHTML = '';
+ handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList, cellSelector = null, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {
+ if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;
+ let idSelected = DOM.getElementAttributeValueCurrent(div);
+ let td = DOM.getCellFromElement(div);
+ td.innerHTML = '';
let ddl = document.createElement('select');
+ ddl.classList.add(fieldFlag);
DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);
let optionJson, option;
if (_verbose) {
@@ -540,17 +576,17 @@ export default class TableBasePage extends BasePage {
option = DOM.createOption(optionJson);
ddl.appendChild(option);
});
- tdNew.appendChild(ddl);
- let ddlSelector = cellSelector + ' select';
+ td.appendChild(ddl);
+ let ddlSelector = cellSelector + ' select.' + fieldFlag;
ddlHookup(ddlSelector);
}
+ /*
hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) {
- this.hookupEventHandler("click", cellSelector, (event, td) => {
- let div = td.querySelector('div');
- if (!div || div.classList.contains(flagCollapsed)) return;
- this.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });
+ this.hookupEventHandler("click", cellSelector + ' div', (event, div) => {
+ this.handleClickTableCellDdlPreview(event, div, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });
});
}
+ */
toggleColumnCollapsed(flagColumn, isCollapsed) {
this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagCollapsed);
}
@@ -560,8 +596,9 @@ export default class TableBasePage extends BasePage {
hookupFieldsCommandCategory() {
this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagCommandCategory
- , Utils.getListFromDict(filterCommandCategories)
+ flagCommandCategory
+ , Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName]))
+ , null
, (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }
);
}
@@ -569,19 +606,30 @@ export default class TableBasePage extends BasePage {
this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });
}
handleChangeCommandCategoryDdl(event, ddlCategory) {
- let idCommandCategoryOld = DOM.getElementAttributeValueCurrent(ddlCategory);
- this.handleChangeNestedElementCellTable(event, ddlCategory);
- let idCommandCategoryNew = DOM.getElementAttributeValueCurrent(ddlCategory);
- if (idCommandCategoryOld == idCommandCategoryNew) return;
let row = DOM.getRowFromElement(ddlCategory);
+ let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);
+ this.handleChangeNestedElementCellTable(event, ddlCategory);
+ let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);
+ if (idCommandCategoryRowOld == idCommandCategoryRowNew) return;
+ let idCommandCategoryFilter = this.getIdCommandCategoryFilter();
let tdCommand = row.querySelector('td.' + flagCommand);
tdCommand.dispatchEvent(new Event('click'));
- let ddlCommand = row.querySelector('td.' + flagCommand + ' select');
+ let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand);
ddlCommand.innerHTML = '';
ddlCommand.appendChild(DOM.createOption(null));
let optionJson, option;
- Utils.getListFromDict(filterCommands).forEach((command) => {
- if (idCommandCategoryNew != '0' && command[attrIdCommandCategory] != idCommandCategoryNew) return;
+ let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command =>
+ (
+ command[attrIdCommandCategory] == idCommandCategoryRowNew
+ || idCommandCategoryRowNew == 0
+ )
+ && (
+ command[attrIdCommandCategory] == idCommandCategoryFilter
+ || idCommandCategoryFilter == 0
+ )
+ );
+ let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));
+ sortedCommands.forEach((command) => {
optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);
option = DOM.createOption(optionJson);
ddlCommand.appendChild(option);
@@ -589,36 +637,44 @@ export default class TableBasePage extends BasePage {
this.handleChangeNestedElementCellTable(event, ddlCommand);
}
hookupFieldsCommand() {
- let cellSelector = idTableMain + ' td.' + flagCommand;
- this.hookupEventHandler("click", cellSelector, (event, td) => {
- let parentTr = td.parentElement;
+ this.hookupEventHandler("click", idTableMain + ' td.' + flagCommand + ' .' + flagCommand, (event, div) => {
+ Utils.consoleLogIfNotProductionEnvironment(div);
+ let parentTr = DOM.getRowFromElement(div);
+ Utils.consoleLogIfNotProductionEnvironment({ div, parentTr });
let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);
- let idCommandCategoryRow = DOM.getElementAttributeValueCurrent(tdCommandCategory);
+ let idCommandCategoryRow = this.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);
let idCommandCategoryFilter = this.getIdCommandCategoryFilter();
let filterCommandList = Utils.getListFromDict(filterCommands);
let commandsInCategory = filterCommandList.filter(command =>
(
command[attrIdCommandCategory] == idCommandCategoryRow
+ || idCommandCategoryRow == 0
)
&& (
command[attrIdCommandCategory] == idCommandCategoryFilter
|| idCommandCategoryFilter == 0
)
);
- console.log({ tdCommandCategory, idCommandCategoryRow, filterCommandList, commandsInCategory });
- console.log(filterCommandList);
+ let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));
+ Utils.consoleLogIfNotProductionEnvironment({ tdCommandCategory, idCommandCategoryRow, idCommandCategoryFilter, filterCommandList, commandsInCategory });
+ Utils.consoleLogIfNotProductionEnvironment(filterCommandList);
this.handleClickTableCellDdlPreview(
event
- , td
- , commandsInCategory
- , cellSelector
+ , div
+ , flagCommand
+ , sortedCommands
+ , null
, (cellSelector) => { this.hookupTableCellDdls(
cellSelector
, (event, element) => { this.handleChangeNestedElementCellTable(event, element); }
); }
);
});
- this.hookupTableCellDdls(cellSelector + ' select');
+ this.hookupTableCellDdls(idTableMain + ' td.' + flagCommand + ' select.' + flagCommand);
+ }
+ getIdCommandCategoryRow(tr) {
+ let elementCommandCategory = tr.querySelector('td.' + flagCommandCategory + ' .' + flagCommandCategory);
+ return DOM.getElementAttributeValueCurrent(elementCommandCategory);
}
getIdCommandCategoryFilter() {
let formFilters = this.getFormFilters();
@@ -626,9 +682,10 @@ export default class TableBasePage extends BasePage {
let commandFilter = formFilters.querySelector('#' + attrIdCommand);
let idCommandCategory = 0;
let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);
- console.log({ valueCurrentCommandCategoryFilter });
+ Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandCategoryFilter });
if (valueCurrentCommandCategoryFilter == "") {
let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);
+ Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandFilter });
if (valueCurrentCommandFilter != "") {
let command = filterCommands[valueCurrentCommandFilter];
idCommandCategory = command[attrIdCommandCategory];
@@ -642,6 +699,10 @@ export default class TableBasePage extends BasePage {
let idCommandCategoryFilter = this.getIdCommandCategoryFilter();
return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);
}
+ getIdCommandRow(tr) {
+ let elementCommand = tr.querySelector('td.' + flagCommand + ' .' + flagCommand);
+ return DOM.getElementAttributeValueCurrent(elementCommand);
+ }
getIdCommandFilter() {
let formFilters = this.getFormFilters();
let commandFilter = formFilters.querySelector('#' + attrIdCommand);
@@ -654,7 +715,11 @@ export default class TableBasePage extends BasePage {
return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);
}
hookupFieldsDog() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagDog, Utils.getListFromDict(filterDogs));
+ this.hookupTableCellDdlPreviews(flagDog, Utils.getListFromDict(filterDogs));
+ }
+ getIdDogRow(tr) {
+ let elementDog = tr.querySelector('td.' + flagDog + ' .' + flagDog);
+ return DOM.getElementAttributeValueCurrent(elementDog);
}
createTdActive(isActive) {
diff --git a/static/js/pages/dog/basket.js b/static/js/pages/dog/basket.js
deleted file mode 100644
index 5a571ba..0000000
--- a/static/js/pages/dog/basket.js
+++ /dev/null
@@ -1,198 +0,0 @@
-
-import Events from "../../lib/events.js";
-import LocalStorage from "../../lib/local_storage.js";
-import BasePage from "../base.js";
-
-export default class PageDogBasket extends BasePage {
- static hash = hashPageDogBasket;
-
- constructor(router) {
- super(router);
- }
-
- initialize() {
- this.sharedInitialize();
- this.hookupDogCardsInfo();
- this.hookupOverlaysDogBasketInfo();
- this.hookupButtonCheckoutSession();
- }
-
-
- hookupDogCardsInfo() {
-
- document.querySelectorAll(idContainerInfoDelivery).addEventListener("click", function(event) {
- if (_verbose) { console.log("delivery modal display method"); }
- document.querySelectorAll(idOverlayInfoDelivery).css('display', 'block');
- });
-
- document.querySelectorAll(idContainerInfoBilling).addEventListener("click", function(event) {
- if (_verbose) { console.log("billing modal display method"); }
- document.querySelectorAll(idOverlayInfoBilling).css('display', 'block');
- });
- }
-
- hookupOverlaysDogBasketInfo() {
-
- let elOverlay, elForm;
-
- // Delivery
- elOverlay = document.querySelectorAll(idOverlayInfoDelivery);
- elForm = elOverlay.querySelector('form');
-
- hookupOverlay(elOverlay);
- Events.initialiseEventHandler(elForm, flagInitialised, function() {
- elForm.submit(function(event) {
- elForm = document.querySelectorAll(elForm);
- event.preventDefault();
- if (_verbose) { console.log("delivery submit method"); }
-
- ajaxData = {};
- ajaxData[keyInfoType] = keyInfoDelivery;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
-
- ajaxJSONData('info delivery', mapHashToController(hashDogBasketInfo), ajaxData, loadInfoAddress, false);
- // document.querySelectorAll(idOverlayInfoDelivery).css('display', 'none');
- });
- });
-
- // Billing
- elOverlay = document.querySelectorAll(idOverlayInfoBilling);
- elForm = elOverlay.querySelector('form');
-
- hookupOverlay(elOverlay);
- Events.initialiseEventHandler(elForm, flagInitialised, function() {
- elForm.submit(function(event) {
- event.preventDefault();
- if (_verbose) { console.log("billing submit method"); }
-
- ajaxData = {};
- ajaxData[keyInfoType] = keyInfoBilling;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling); // formData; // form.serialize();
-
- ajaxJSONData('info billing', mapHashToController(hashDogBasketInfo), ajaxData, loadInfoAddress, false);
- // document.querySelectorAll(idOverlayInfoBilling).css('display', 'none');
- });
- });
- let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyCity, keyCounty];
- for (var k in keys) {
- elForm.querySelector('#' + keys[k]).removeAttr('required');
- }
- }
-
- loadInfoAddress(response) {
-
- if (_verbose) { console.log('response:'); console.log(response.data); }
- let infoType = response.data[keyInfoType];
- let infoAddress = response.data[infoType];
- LocalStorage.setLocalStorage(infoType, infoAddress);
-
- // update webpage elements in background
- if (infoType == keyInfoBilling) {
-
- let container = document.querySelectorAll(idContainerInfoBilling);
- if (infoAddress[keyInfoIdentical]) {
- container.querySelector('div').innerHTML = "Same as delivery address";
- } else {
- container.querySelector('div').innerHTML = "" + infoAddress[keyNameFull] + ' at ' + infoAddress[keyPostcode] + " ";
- }
-
- document.querySelectorAll(idOverlayInfoBilling).css('display', 'none');
-
- document.querySelectorAll(idOverlayInfoBilling).querySelector('form').classList.add(flagSubmitted);
- } else {
-
- let container = document.querySelectorAll(idContainerInfoDelivery);
- container.querySelector('div').innerHTML = "" + infoAddress[keyNameFull] + ' at ' + infoAddress[keyPostcode] + " ";
-
- document.querySelectorAll(idOverlayInfoDelivery).css('display', 'none');
-
- document.querySelectorAll(idOverlayInfoDelivery).querySelector('form').classList.add(flagSubmitted);
- }
- }
-
- convertFormBilling2JSON(ajaxData, idOverlayInfo) {
-
- let elOverlay, elForm, elOverlayDelivery, elFormDelivery;
-
- elOverlay = document.querySelectorAll(idOverlayInfo);
- elForm = elOverlay.querySelector('form');
- elOverlay = document.querySelectorAll(idOverlayInfoDelivery);
- elForm = elOverlay.querySelector('form');
-
- ajaxData[flagForm] = convertForm2JSON(elForm); // formData; // form.serialize();
- let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
- if (_verbose) {
- console.log('converting billing form to json\nform ID: ' + elForm.id);
- console.log('ajaxData:');
- console.log(ajaxData);
- }
- ajaxData[flagForm][keyInfoIdentical] = getElementValueCurrent(elForm.querySelector('#' + keyInfoIdentical));
- for (var k in keys) {
- if (idOverlayInfo == idOverlayInfoBilling && ajaxData[flagForm][keyInfoIdentical]) {
- ajaxData[flagForm][keys[k]] = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k]));
- } else {
- ajaxData[flagForm][keys[k]] = getElementValueCurrent(elForm.querySelector('#' + keys[k]));
- }
- }
- if (_verbose) {
- console.log('ajaxData:');
- console.log(ajaxData);
- }
- return ajaxData;
- }
-
- hookupButtonCheckoutSession() {
- let btnCheckout = document.querySelectorAll(idButtonCheckout);
- btnCheckout.classList.remove(flagInitialised);
- Events.initialiseEventHandler(idButtonCheckout, flagInitialised, function() {
-
- btnCheckout.removeEventListener("click");
- btnCheckout.addEventListener("click", function(event) {
-
-
- //setupPageLocalStorageNext(hashPageDogBasket);
- let basket = LocalStorage.getLocalStorage(keyBasket);
- // goToPage(hashPageDogBasket);
- let ajaxData = {};
- ajaxData[keyBasket] = basket;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling);
- ajaxData[key_code_currency] = getCurrencySelected();
- // ajaxData[keyIsSubscription] = false; // only checkout one-time payment items for now
-
- ajaxJSONData('checkout session', mapHashToController(hashPageDogCheckout), ajaxData, handleResponseCheckout, false);
- });
- });
- }
-
- handleResponseCheckout(response) {
- // let tmpData = {};
- // tmpData[keyIdCheckout] = response.data[keyIdCheckout]
- // goToPage(hashPageDogCheckoutSession, tmpData);
- window.location.href = response.data[keyUrlCheckout]
- }
-
- hookupButtonFormBillingCopy() {
-
- // let elButton = document.querySelectorAll(idButtonFormBillingCopy);
-
- Events.initialiseEventHandler(idButtonFormBillingCopy, flagInitialised, function() {
- document.querySelectorAll(idButtonFormBillingCopy).addEventListener("click", function (event) {
-
- let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
-
- let elFormBilling = document.querySelectorAll(idOverlayInfoBilling).querySelector('form');
- let elFormDelivery = document.querySelectorAll(idOverlayInfoDelivery).querySelector('form');
-
- for (var k in keys) {
- elFormBilling.querySelector('#' + keys[k]).value = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k]));
- }
- });
- });
- }
-
-
- leave() {
- super.leave();
- }
-}
diff --git a/static/js/pages/dog/command_categories.js b/static/js/pages/dog/command_categories.js
new file mode 100644
index 0000000..4933203
--- /dev/null
+++ b/static/js/pages/dog/command_categories.js
@@ -0,0 +1,70 @@
+
+import API from "../../api.js";
+import BusinessObjects from "../../lib/business_objects/business_objects.js";
+import DOM from "../../dom.js";
+import Events from "../../lib/events.js";
+import TableBasePage from "../base_table.js";
+import Utils from "../../lib/utils.js";
+import Validation from "../../lib/validation.js";
+import DogTableMixinPage from "./mixin_table.js";
+
+export default class PageDogCommandCategories extends TableBasePage {
+ static hash = hashPageDogCommandCategories;
+ static attrIdRowObject = attrIdCommandCategory;
+ callSaveTableContent = API.saveCommandCategories;
+
+ constructor(router) {
+ super(router);
+ this.dogMixin = new DogTableMixinPage(this);
+ }
+
+ initialize() {
+ this.sharedInitialize();
+ }
+
+ hookupFilters() {
+ this.sharedHookupFilters();
+ this.hookupFilterActive();
+ }
+
+ loadRowTable(rowJson) {
+ if (rowJson == null) return;
+ if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); }
+ }
+ getJsonRow(row) {
+ if (row == null) return;
+ let inputCode = row.querySelector('td.' + flagCode + ' .' + flagCode);
+ let inputName = row.querySelector('td.' + flagName + ' .' + flagName);
+ let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
+
+ /*
+ console.log("inputName");
+ console.log(inputName);
+ */
+
+ let jsonRow = {};
+ jsonRow[attrIdCommandCategory] = row.getAttribute(attrIdCommandCategory);
+ jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(inputCode);
+ jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);
+ jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
+ return jsonRow;
+ }
+ initialiseRowNew(tbody, row) {
+
+ }
+ postInitialiseRowNewCallback(tbody) {
+ // let newRows = tbody.querySelectorAll('tr.' + flagRowNew);
+ }
+
+ hookupTableMain() {
+ super.hookupTableMain();
+ this.hookupFieldsCodeTable();
+ this.hookupFieldsNameTable();
+ this.hookupFieldsActive();
+ }
+
+ leave() {
+ super.leave();
+ }
+}
+
diff --git a/static/js/pages/dog/commands.js b/static/js/pages/dog/commands.js
index 8a2a235..2352a7c 100644
--- a/static/js/pages/dog/commands.js
+++ b/static/js/pages/dog/commands.js
@@ -1,10 +1,12 @@
-
+
+import API from "../../api.js";
+import BusinessObjects from "../../lib/business_objects/business_objects.js";
+import DOM from "../../dom.js";
import Events from "../../lib/events.js";
import TableBasePage from "../base_table.js";
-import API from "../../api.js";
-import DOM from "../../dom.js";
-import DogTableMixinPage from "./mixin_table.js";
import Utils from "../../lib/utils.js";
+import Validation from "../../lib/validation.js";
+import DogTableMixinPage from "./mixin_table.js";
export default class PageDogCommands extends TableBasePage {
static hash = hashPageDogCommands;
@@ -22,122 +24,75 @@ export default class PageDogCommands extends TableBasePage {
hookupFilters() {
this.sharedHookupFilters();
- this.hookupFilterDog();
- this.hookupFilterIsNotEmpty();
+ this.hookupFilterCommandCategory();
this.hookupFilterActive();
}
- hookupFilterDog() {
- this.hookupFilter(flagDog);
+ hookupFilterCommandCategory() {
+ this.hookupFilter(attrIdCommandCategory);
}
loadRowTable(rowJson) {
- return;
if (rowJson == null) return;
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function(element) {
- element.classList.remove(flagInitialised);
- });
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let tdDog = row.querySelector('td.' + flagDog);
- let divDog = tdDog.querySelector('div.' + flagDog);
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let divAccessLevel = tdAccessLevel.querySelector('div.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
-
- DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, rowJson[flagDisplayOrder]);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, rowJson[flagCode]);
- DOM.setElementValuesCurrentAndPrevious(textareaName, rowJson[flagName]);
- DOM.setElementValuesCurrentAndPrevious(textareaDescription, rowJson[flagDescription]);
- tdAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- tdAccessLevel.setAttribute(flagAccessLevelRequired, rowJson[flagAccessLevelRequired]);
- divAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- DOM.setElementValuesCurrentAndPrevious(divAccessLevel, rowJson[attrIdAccessLevel]);
- divAccessLevel.textContent = rowJson[flagAccessLevelRequired];
- DOM.setElementValuesCurrentAndPrevious(inputActive, rowJson[flagActive]);
- row.setAttribute(rowJson[flagKeyPrimary], rowJson[rowJson[flagKeyPrimary]]);
-
- let table = TableBasePage.getTableMain();
- let bodyTable = table.querySelector('tbody');
- bodyTable.appendChild(row);
+ if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); }
}
getJsonRow(row) {
if (row == null) return;
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let tdDog = row.querySelector('td.' + flagDog);
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- // let tdCommandVariations = row.querySelector('td.' + flagCommandVariations);
- let inputHasVariations = row.querySelector('td.' + flagHasVariations + ' input[type="checkbox"]');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
+ let inputName = row.querySelector('td.' + flagName + ' textarea');
+ let inputHandSignalDefaultDescription = row.querySelector('td.' + flagHandSignalDefaultDescription + ' textarea');
+ let inputCanHaveButton = row.querySelector('td.' + flagCanHaveButton + ' input');
+ let inputNotes = row.querySelector('td.' + flagNotes + ' textarea');
+ let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
- let jsonCommand = {};
- jsonCommand[attrIdCommand] = row.getAttribute(attrIdCommand);
- jsonCommand[attrIdDog] = DOM.getElementAttributeValueCurrent(tdDog);
- jsonCommand[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- // jsonRow[flagCommandVariations] = DOM.getElementAttributeValueCurrent(tdCommandVariations);
- // jsonRow[flagHasVariations] = jsonRow[flagCommandVariations] != '';
- jsonCommand[flagHasVariations] = DOM.getElementAttributeValueCurrent(inputHasVariations);
- // jsonCommand[flagAccessLevelRequired] = tdAccessLevel.getAttribute(flagAccessLevelRequired);
- jsonCommand[attrIdAccessLevel] = DOM.getElementAttributeValueCurrent(tdAccessLevel);
- jsonCommand[flagActive] = buttonActive.classList.contains(flagDelete);
- jsonCommand[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
- return jsonCommand;
+ let jsonRow = {};
+ jsonRow[attrIdCommand] = row.getAttribute(attrIdCommand);
+ jsonRow[attrIdCommandCategory] = this.getIdCommandCategoryRow(row);
+ jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);
+ jsonRow[flagHandSignalDefaultDescription] = DOM.getElementAttributeValueCurrent(inputHandSignalDefaultDescription);
+ jsonRow[flagCanHaveButton] = (DOM.getElementAttributeValueCurrent(inputCanHaveButton) == "true");
+ jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);
+ jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
+ return jsonRow;
}
initialiseRowNew(tbody, row) {
- if (row == null) return;
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
+
+ }
+ postInitialiseRowNewCallback(tbody) {
+ let newRows = tbody.querySelectorAll('tr.' + flagRowNew);
+ let newestRow = newRows[newRows.length - 1];
+ let clickableElementsSelector = [
+ 'td.' + flagDog + ' div.' + flagDog
+ , ',td.' + flagCommandCategory + ' div.' + flagCommandCategory
+ , ',td.' + flagCommand + ' div.' + flagCommand
+ ].join('');
+ newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {
+ clickableElement.click();
+ });
}
hookupTableMain() {
super.hookupTableMain();
- this.hookupSlidersDisplayOrderTable();
- this.hookupTdsDog();
- this.hookupTextareasNameTable();
- this.hookupInputsHasVariationsTable();
- this.hookupTdsAccessLevel();
+ this.hookupFieldsCommandCategory();
+ this.hookupFieldsNameTable();
+ this.hookupTextareasHandSignalDefaultDescription();
+ this.hookupFieldsCanHaveButton();
+ this.hookupFieldsNotesTable();
this.hookupFieldsActive();
}
- hookupTdsDog() {
- let cellSelector = idTableMain + ' tbody td.' + flagDog;
- this.hookupTableCellDdlPreviews(cellSelector, Utils.getListFromDict(filterDogs));
+ hookupFieldsCommandCategory() {
+ this.hookupTableCellDdlPreviews(
+ flagCommandCategory
+ , Utils.getListFromDict(filterCommandCategories)
+ );
}
- hookupInputsHasVariationsTable() {
- let cellSelector = idTableMain + ' tbody td.' + flagHasVariations + ' input[type="checkbox"]';
- this.hookupChangeHandlerTableCells(cellSelector);
+ hookupTextareasHandSignalDefaultDescription() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagHandSignalDefaultDescription + ' textarea');
}
-
- /*
- isDirtyRow(row) {
- if (row == null) return false;
- console.log("Command Command isDirtyRow");
- console.log("row: ", row);
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder);
- let inputCode = row.querySelector('td.' + flagCode + ' textarea');
- let inputName = row.querySelector('td.' + flagName + ' textarea');
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- let isDirty = sliderDisplayOrder.classList.contains(flagDirty) || inputCode.classList.contains(flagDirty) || inputName.classList.contains(flagDirty) ||
- inputDescription.classList.contains(flagDirty) || tdAccessLevel.classList.contains(flagDirty) || inputActive.classList.contains(flagDirty);
- DOM.handleDirtyElement(row, isDirty);
- return isDirty;
+ hookupFieldsCanHaveButton() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCanHaveButton + ' input');
}
- */
-
+
leave() {
super.leave();
}
-
- /*
- getFiltersDefaults() {
- filters = {};
- filters.flagIsNotEmpty = true;
- filters.flagActive = true;
- return filters;
- }
- */
}
diff --git a/static/js/pages/dog/dog_command_links.js b/static/js/pages/dog/dog_command_links.js
index 30630a8..fddf46e 100644
--- a/static/js/pages/dog/dog_command_links.js
+++ b/static/js/pages/dog/dog_command_links.js
@@ -29,157 +29,28 @@ export default class PageDogDogCommandLinks extends TableBasePage {
this.hookupFilterCommand();
this.hookupFilterActive();
}
- hookupFilterDog() {
- this.hookupFilter(attrIdDog);
- }
- hookupFilterCommandCategory() {
- this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {
- // loadDogCommandLinks();
- // let wasDirtyFilter = filterCommandCategory.classList.contains(flagDirty);
- PageDogDogCommandLinks.isDirtyFilter(filterCommandCategory);
- let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);
- let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);
- let commands = filterCommands.filter(command => command[attrIdCommandCategory] == idCommandCategory);
- let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);
- let idCommandPrevious = filterCommand.getAttribute(attrValuePrevious);
- filterCommand.innerHTML = '';
- let optionJson, option;
- option = DOM.createOption(null);
- filterCommand.appendChild(option);
- commands.forEach((command) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);
- option = DOM.createOption(optionJson);
- filterCommand.appendChild(option);
- });
- filterCommand.dispatchEvent(new Event('change'));
- return isDirtyFilter;
- });
- }
- hookupFilterCommand() {
- this.hookupFilter(attrIdCommand);
- }
loadRowTable(rowJson) {
if (rowJson == null) return;
- if (_verbose) { console.log("applying data row: ", rowJson); }
- /*
- let tableMain = TableBasePage.getTableMain();
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- let dllDog = row.querySelector('td.' + flagDog + ' select');
- dllDog.value = rowJson[attrIdDog];
- let ddlCommand = row.querySelector('td.' + flagCommand + ' select');
- let optionJson, option;
- listCommands.forEach(function(command) {
- if (command[attrIdDog] != rowJson[attrIdDog]) return;
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);
- option = DOM.createOption(optionJson, rowJson[attrIdCommand]);
- ddlCommand.appendChild(option);
- });
- ddlCommand.value = rowJson[attrIdCommand];
- row.querySelector('td.' + flagCommandVariations + ' textarea').value = rowJson[flagCommandVariations];
- let tdCommandVariations = row.querySelector('td.' + flagCommandVariations);
- let textareaCommandVariations = tdCommandVariations.querySelector('textarea');
- DOM.setElementValuesCurrentAndPrevious(textareaCommandVariations, rowJson[flagCommandVariations]);
- let thCommandVariations = row.querySelector('td.' + flagCommandVariations);
- if (!thCommandVariations.classList.contains(flagCollapsed)) tdCommandVariations.classList.remove(flagCollapsed);
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- DOM.setElementValuesCurrentAndPrevious(inputDescription, rowJson[flagDescription]);
- let inputCostLocal = row.querySelector('td.' + flagCostLocal + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputCostLocal, rowJson[flagCostLocal]);
- let tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCurrencyCost, rowJson[flagCurrencyCost]);
- let ddlCurrencyCost = tdCurrencyCost.querySelector('select');
- DOM.setElementValuesCurrentAndPrevious(ddlCurrencyCost, rowJson[flagCurrencyCost]);
- let inputProfitLocalMin = row.querySelector('td.' + flagProfitLocalMin + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputProfitLocalMin, rowJson[flagProfitLocalMin]);
- let inputLatencyManufactureDays = row.querySelector('td.' + flagLatencyManufacture + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputLatencyManufactureDays, rowJson[flagLatencyManufacture]);
- let inputQuantityStock = row.querySelector('td.' + flagQuantityStock + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityStock, rowJson[flagQuantityStock]);
- let inputQuantityMin = row.querySelector('td.' + flagQuantityMin + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityMin, rowJson[flagQuantityMin]);
- let inputQuantityMax = row.querySelector('td.' + flagQuantityMax + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityMax, rowJson[flagQuantityMax]);
- let inputQuantityStep = row.querySelector('td.' + flagCountUnitMeasurementPerQuantityStep + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityStep, rowJson[flagCountUnitMeasurementPerQuantityStep]);
-
-
-
- row.querySelector('td.' + flagQuantityStock + ' input').value = rowJson[flagQuantityStock];
- row.querySelector('td.' + flagQuantityMin + ' input').value = rowJson[flagQuantityMin];
- row.querySelector('td.' + flagQuantityMax + ' input').value = rowJson[flagQuantityMax];
- row.querySelector('td.' + flagCostLocal).innerHTML = rowJson[flagCostLocal];
- row.setAttribute(attrIdDog, rowJson[flagDog]);
- row.setAttribute(attrIdCommand, rowJson[flagCommand]);
- row.setAttribute(attrIdDogCommandLink, rowJson[attrIdDogCommandLink]);
- let tbody = tableMain.querySelector('tbody');
- tbody.appendChild(row);
- */
+ if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); }
}
getJsonRow(row) {
if (row == null) return;
- let tdDog = row.querySelector('td.' + flagDog);
- let tdCommand = row.querySelector('td.' + flagCommand);
let inputHandSignalDescription = row.querySelector('td.' + flagHandSignalDescription + ' textarea');
let inputNotes = row.querySelector('td.' + flagNotes + ' textarea');
let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
let jsonRow = {};
jsonRow[attrIdDogCommandLink] = row.getAttribute(attrIdDogCommandLink);
- jsonRow[attrIdDog] = tdDog.getAttribute(attrValueCurrent);
- jsonRow[attrIdCommand] = tdCommand.getAttribute(attrValueCurrent);
- jsonRow[flagHandSignalDescription] = inputHandSignalDescription.getAttribute(attrValueCurrent);
- jsonRow[flagNotes] = inputNotes.getAttribute(attrValueCurrent);
+ 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;
}
initialiseRowNew(tbody, row) {
- /*
- this.initialiseRowNewDdlsDog(row);
- this.initialiseRowNewDdlsCommandCategory(row);
- this.initialiseRowNewDdlsCommand(row);
- this.initialiseRowNewDdlsDogAndCommand(row);
- let checkboxIsSubscription = row.querySelector('td.' + flagIsSubscription + ' input');
- let checkboxDoesExpireFasterOnceUnsealed = row.querySelector('td.' + flagDoesExpireFasterOnceUnsealed + ' input');
- this.handleChangeCheckboxDoesExpireFasterOnceUnsealed(null, checkboxDoesExpireFasterOnceUnsealed);
- this.handleChangeCheckboxIsSubscription(null, checkboxIsSubscription);
- */
- }
- initialiseRowNewDdlsDog(row) {
- let ddlDogFilter = document.querySelector(idFormFilters + ' #' + attrIdDog);
- let idDogFilter = DOM.getElementValueCurrent(ddlDogFilter);
- let hasDogFilter = !(Validation.isEmpty(idDogFilter) || idDogFilter == '0');
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({ ddlDogFilter, idDogFilter, hasDogFilter });
- }
- if (!hasDogFilter) return;
- let ddlDog = row.querySelector('td.' + flagDog + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlDog, idDogFilter);
- this.handleChangeDogDdl(null, ddlDog);
- }
- initialiseRowNewDdlsCommandCategory(row) {
- let idCommandCategoryFilter = this.getIdCommandCategoryFilter();
- let hasCommandCategoryFilter = this.getHasCommandCategoryFilter();
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({ddlDogFilter, idDogFilter, hasDogFilter, idCommandCategoryFilter, hasCommandCategoryFilter});
- }
- if (!hasCommandCategoryFilter) return;
- let ddlCommandCategory = row.querySelector('td.' + flagCommandCategory + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlCommandCategory, idCommandCategoryFilter);
- }
- initialiseRowNewDdlsCommand(row) {
- let idCommandFilter = this.getIdCommandFilter();
- let hasCommandFilter = this.getHasCommandFilter();
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({ddlDogFilter, idDogFilter, hasDogFilter, ddlCommandFilter, idCommandFilter, hasCommandFilter});
- }
- if (!hasCommandFilter) return;
- let ddlCommand = row.querySelector('td.' + flagCommand + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlCommand, idCommandFilter);
+
}
postInitialiseRowNewCallback(tbody) {
let newRows = tbody.querySelectorAll('tr.' + flagRowNew);
@@ -200,15 +71,12 @@ export default class PageDogDogCommandLinks extends TableBasePage {
this.hookupFieldsCommandCategory();
this.hookupFieldsCommand();
this.hookupTextareasHandSignalDescription();
- this.hookupTextareasNotes();
+ this.hookupFieldsNotesTable();
this.hookupFieldsActive();
}
hookupTextareasHandSignalDescription() {
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagHandSignalDescription + ' textarea');
}
- hookupTextareasNotes() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNotes + ' textarea');
- }
leave() {
super.leave();
diff --git a/static/js/pages/dog/dogs.js b/static/js/pages/dog/dogs.js
deleted file mode 100644
index 609b1f5..0000000
--- a/static/js/pages/dog/dogs.js
+++ /dev/null
@@ -1,132 +0,0 @@
-
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import API from "../../api.js";
-import DOM from "../../dom.js";
-import DogTableMixinPage from "./mixin_table.js";
-
-export default class PageDogDogs extends TableBasePage {
- static hash = hashPageDogDogs;
- static attrIdRowObject = attrIdDog;
- callSaveTableContent = API.saveDogs;
-
- constructor(router) {
- super(router);
- this.dogMixin = new DogTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterIsNotEmpty();
- this.hookupFilterActive();
- }
- hookupFilterIsNotEmpty() {
- this.hookupEventHandler("change", idFormFilters + ' .' + flagIsNotEmpty, (event, filter) => {
- PageDogDogs.isDirtyFilter(filter);
- });
- }
-
- loadRowTable(rowJson) {
- if (rowJson == null) return;
- if (_verbose) { console.log("applying data row: ", rowJson); }
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function(element) {
- element.classList.remove(flagInitialised);
- });
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let textareaDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let divAccessLevel = tdAccessLevel.querySelector('div.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
-
- DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, rowJson[flagDisplayOrder]);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, rowJson[flagCode]);
- DOM.setElementValuesCurrentAndPrevious(textareaName, rowJson[flagName]);
- DOM.setElementValuesCurrentAndPrevious(textareaDescription, rowJson[flagDescription]);
- tdAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- tdAccessLevel.setAttribute(flagAccessLevelRequired, rowJson[flagAccessLevelRequired]);
- divAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- DOM.setElementValuesCurrentAndPrevious(divAccessLevel, rowJson[attrIdAccessLevel]);
- divAccessLevel.textContent = rowJson[flagAccessLevelRequired];
- DOM.setElementValuesCurrentAndPrevious(inputActive, rowJson[flagActive]);
- row.setAttribute(rowJson[flagKeyPrimary], rowJson[rowJson[flagKeyPrimary]]);
-
- let table = TableBasePage.getTableMain();
- let bodyTable = table.querySelector('tbody');
- bodyTable.appendChild(row);
- }
- getJsonRow(row) {
- if (row == null) return;
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let textareaDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonDog = {};
- jsonDog[attrIdDog] = row.getAttribute(attrIdDog);
- jsonDog[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonDog[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonDog[flagDescription] = DOM.getElementAttributeValueCurrent(textareaDescription);
- // jsonDog[flagAccessLevelRequired] = tdAccessLevel.getAttribute(flagAccessLevelRequired);
- jsonDog[attrIdAccessLevel] = DOM.getElementAttributeValueCurrent(tdAccessLevel);
- jsonDog[flagActive] = buttonActive.classList.contains(flagDelete);
- jsonDog[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
- return jsonDog;
- }
- initialiseRowNew(tbody, row) {
- if (row == null) return;
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupSlidersDisplayOrderTable();
- this.hookupTextareasCodeTable();
- this.hookupTextareasNameTable();
- this.hookupTextareasDescriptionTable();
- this.hookupTdsAccessLevel();
- this.hookupFieldsActive();
- }
-
- /*
- isDirtyRow(row) {
- if (row == null) return false;
- console.log("Product Dog isDirtyRow");
- console.log("row: ", row);
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder);
- let inputCode = row.querySelector('td.' + flagCode + ' textarea');
- let inputName = row.querySelector('td.' + flagName + ' textarea');
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- let isDirty = sliderDisplayOrder.classList.contains(flagDirty) || inputCode.classList.contains(flagDirty) || inputName.classList.contains(flagDirty) ||
- inputDescription.classList.contains(flagDirty) || tdAccessLevel.classList.contains(flagDirty) || inputActive.classList.contains(flagDirty);
- DOM.handleDirtyElement(row, isDirty);
- return isDirty;
- }
- */
-
- leave() {
- super.leave();
- }
-
- /*
- getFiltersDefaults() {
- filters = {};
- filters.flagIsNotEmpty = true;
- filters.flagActive = true;
- return filters;
- }
- */
-}
-
diff --git a/static/js/pages/dog/home.js b/static/js/pages/dog/home.js
index 7f017a8..8beead1 100644
--- a/static/js/pages/dog/home.js
+++ b/static/js/pages/dog/home.js
@@ -10,9 +10,11 @@ export default class PageDogHome extends BasePage {
initialize() {
this.sharedInitialize();
- this.hookupFiltersDog();
this.hookupDogHome();
}
+ hookupDogHome() {
+
+ }
leave() {
super.leave();
diff --git a/static/js/pages/dog/manufacturing_purchase_orders.js b/static/js/pages/dog/manufacturing_purchase_orders.js
deleted file mode 100644
index 815c1c0..0000000
--- a/static/js/pages/dog/manufacturing_purchase_orders.js
+++ /dev/null
@@ -1,509 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import ProductPermutation from "../../lib/business_objects/dog/product_permutation.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import DogTableMixinPage from "./mixin_table.js";
-
-export default class PageDogManufacturingPurchaseOrders extends TableBasePage {
- static hash = hashPageDogManufacturingPurchaseOrders;
- static attrIdRowObject = attrIdManufacturingPurchaseOrder;
- callSaveTableContent = API.saveManufacturingPurchaseOrders;
-
- constructor(router) {
- super(router);
- this.dogMixin = new DogTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let tdCurrency = row.querySelector('td.' + flagCurrency);
- let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let inputPriceTotalLocalVatExcl = row.querySelector('td.' + flagPriceTotalLocalVatExcl + ' input');
- let inputPriceTotalLocalVatIncl = row.querySelector('td.' + flagPriceTotalLocalVatIncl + ' input');
- let trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdManufacturingPurchaseOrder] = row.getAttribute(attrIdManufacturingPurchaseOrder);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- jsonRow[flagPriceTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatExcl);
- jsonRow[flagPriceTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatIncl);
- let orderItems = [];
- if (trsPurchaseOrderItem != null) {
- trsPurchaseOrderItem.forEach((tr) => {
- orderItems.push(this.getJsonRowOrderItem(tr));
- });
- }
- jsonRow[flagOrderItems] = orderItems;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getJsonRowOrderItem(tr) {
- let inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- let tdCategory = tr.querySelector('td.' + flagProductCategory);
- let tdProduct = tr.querySelector('td.' + flagProduct);
- let tdVariations = tr.querySelector('td.' + flagProductVariations);
- let tdUnitQuantity = tr.querySelector('td.' + flagUnitMeasurementQuantity);
- let inputQuantityUsed = tr.querySelector('td.' + flagQuantityUsed + ' input');
- let inputQuantityProduced = tr.querySelector('td.' + flagQuantityProduced + ' input');
- let tdUnitMeasurementLatencyManufacture = tr.querySelector('td.' + flagUnitMeasurementLatencyManufacture);
- let inputLatencyManufacture = tr.querySelector('td.' + flagLatencyManufacture + ' input');
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdManufacturingPurchaseOrder] = tr.getAttribute(attrIdManufacturingPurchaseOrder);
- jsonRow[attrIdManufacturingPurchaseOrderProductLink] = tr.getAttribute(attrIdManufacturingPurchaseOrderProductLink);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdVariations);
- jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity);
- jsonRow[flagQuantityUsed] = DOM.getElementAttributeValueCurrent(inputQuantityUsed);
- jsonRow[flagQuantityProduced] = DOM.getElementAttributeValueCurrent(inputQuantityProduced);
- jsonRow[attrIdUnitMeasurementLatencyManufacture] = DOM.getElementAttributeValueCurrent(tdUnitMeasurementLatencyManufacture);
- jsonRow[flagLatencyManufacture] = DOM.getElementAttributeValueCurrent(inputLatencyManufacture);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
-
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupCurrencyFields();
- this.hookupCostAndPriceInputs();
- this.hookupOrderItemsFields();
- this.hookupFieldsActive();
- }
- hookupCostAndPriceInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPriceTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPriceTotalLocalVatIncl + ' input');
- }
- hookupOrderItemsFields() {
- this.hookupOrderItemsPreviews();
- this.hookupFieldsOrderItemDisplayOrder();
- this.hookupFieldsOrderItemProductCategory();
- this.hookupFieldsOrderItemProduct();
- this.hookupFieldsOrderItemProductVariations();
- this.hookupFieldsOrderItemUnitQuantity();
- this.hookupFieldsOrderItemQuantityUsed();
- this.hookupFieldsOrderItemQuantityProduced();
- this.hookupFieldsOrderItemUnitMeasurementLatencyManufacture();
- this.hookupFieldsOrderItemLatencyManufacture();
- this.hookupFieldsOrderItemActive();
- this.hookupFieldsOrderItemAddDelete();
- this.hookupButtonsOrderItemAdd();
- }
- hookupOrderItemsPreviews() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems, (event, td) => {
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickOrderItemsPreview(event, td);
- });
- }
- handleClickOrderItemsPreview(event, element) {
- if (_verbose) { console.log("click order items preview"); }
- this.toggleColumnHeaderCollapsed(flagOrderItems, false);
- element.classList.remove(flagCollapsed);
- let row = DOM.getRowFromElement(element);
- let idManufacturingPurchaseOrder = row.getAttribute(attrIdManufacturingPurchaseOrder);
- let manufacturingPurchaseOrder = idManufacturingPurchaseOrder > 0 ? manufacturingPurchaseOrders[idManufacturingPurchaseOrder] : {
- [flagOrderItems]: [],
- };
- let tblOrderItems = document.createElement("table");
- tblOrderItems.classList.add(flagOrderItems);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
-
- let thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- let thCategory = document.createElement("th");
- thCategory.classList.add(flagProductCategory);
- thCategory.textContent = 'Category';
- let thProduct = document.createElement("th");
- thProduct.classList.add(flagProduct);
- thProduct.textContent = 'Product';
- let thVariations = document.createElement("th");
- thVariations.classList.add(flagProductVariations);
- thVariations.classList.add(flagCollapsed);
- thVariations.textContent = 'Variations';
- let thUnitQuantity = document.createElement("th");
- thUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- thUnitQuantity.textContent = 'Unit Quantity';
- let thQuantityUsed = document.createElement("th");
- thQuantityUsed.classList.add(flagQuantityUsed);
- thQuantityUsed.textContent = 'Quantity Used';
- let thQuantityProduced = document.createElement("th");
- thQuantityProduced.classList.add(flagQuantityProduced);
- thQuantityProduced.textContent = 'Quantity Produced';
- /*
- let thCostTotalLocalVatExcl = document.createElement("th");
- thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl';
- let thCostTotalLocalVatIncl = document.createElement("th");
- thCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- thCostTotalLocalVatIncl.textContent = 'Cost Total Local VAT Incl';
- let thCostUnitLocalVatExcl = document.createElement("th");
- thCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- thCostUnitLocalVatExcl.textContent = 'Cost Unit Local VAT Excl';
- let thCostUnitLocalVatIncl = document.createElement("th");
- thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl';
- */
- let thUnitMeasurementLatencyManufacture = document.createElement("th");
- thUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- thUnitMeasurementLatencyManufacture.textContent = 'Unit Measurement Latency Manufacture';
- let thLatencyManufacture = document.createElement("th");
- thLatencyManufacture.classList.add(flagLatencyManufacture);
- thLatencyManufacture.textContent = 'Latency Manufacture';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- let thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
-
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCategory);
- tr.appendChild(thProduct);
- tr.appendChild(thVariations);
- tr.appendChild(thUnitQuantity);
- tr.appendChild(thQuantityUsed);
- tr.appendChild(thQuantityProduced);
- /*
- tr.appendChild(thCostTotalLocalVatExcl);
- tr.appendChild(thCostTotalLocalVatIncl);
- tr.appendChild(thCostUnitLocalVatExcl);
- tr.appendChild(thCostUnitLocalVatIncl);
- */
- tr.appendChild(thUnitMeasurementLatencyManufacture);
- tr.appendChild(thLatencyManufacture);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblOrderItems.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- manufacturingPurchaseOrder[flagOrderItems].forEach((orderItem, index) => {
- this.addRowManufacturingPurchaseOrderItem(tbody, orderItem);
- });
- tblOrderItems.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblOrderItems);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblOrderItems: ", tblOrderItems); }
- this.hookupOrderItemsFields();
- }
- addRowManufacturingPurchaseOrderItem(tbody, orderItem) { // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions,
- if (_verbose) { console.log("addRowManufacturingPurchaseOrderItem: ", orderItem); }
- let tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- let inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, orderItem[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
-
- let tdCategory = document.createElement("td");
- tdCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCategory, orderItem[attrIdProductCategory]);
- let divCategory = document.createElement("div");
- divCategory.classList.add(flagProductCategory);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divCategory, orderItem[attrIdProductCategory]);
- let productCategory = productCategories[orderItem[attrIdProductCategory]];
- divCategory.textContent = BusinessObjects.getObjectText(productCategory);
- tdCategory.appendChild(divCategory);
-
- let tdProduct = document.createElement("td");
- tdProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdProduct, orderItem[attrIdProductCategory]);
- let divProduct = document.createElement("div");
- divProduct.classList.add(flagProduct);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divProduct, orderItem[attrIdProduct]);
- let product = products[orderItem[attrIdProduct]];
- divProduct.textContent = BusinessObjects.getObjectText(product);
- tdProduct.appendChild(divProduct);
-
- let tdVariations = document.createElement("td");
- tdVariations.classList.add(flagProductVariations);
- tdVariations.classList.add(flagCollapsed);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[attrIdProductCategory]);
- let divVariations = document.createElement("div");
- divVariations.classList.add(flagProductVariations);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[attrIdProductVariation]);
- let variationsText = ProductPermutation.getProductVariationsPreviewFromIdCsv(orderItem[flagProductVariations]);
- divVariations.textContent = variationsText;
- tdVariations.appendChild(divVariations);
-
- let tdUnitQuantity = document.createElement("td");
- tdUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitQuantity, orderItem[attrIdProductCategory]);
- let divUnitQuantity = document.createElement("div");
- divUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- // DOM.setElementValuesCurrentAndPrevious(divUnitQuantity, orderItem[flagUnitMeasurementQuantity]);
- let unitQuantity = unitMeasurements[orderItem[attrIdUnitMeasurementQuantity]];
- divUnitQuantity.textContent = BusinessObjects.getObjectText(unitQuantity);
- tdUnitQuantity.appendChild(divUnitQuantity);
-
- let tdQuantityUsed = document.createElement("td");
- tdQuantityUsed.classList.add(flagQuantityUsed);
- let inputQuantityUsed = document.createElement("input");
- inputQuantityUsed.classList.add(flagQuantityUsed);
- inputQuantityUsed.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityUsed, orderItem[flagQuantityUsed]);
- tdQuantityUsed.appendChild(inputQuantityUsed);
-
- let tdQuantityProduced = document.createElement("td");
- tdQuantityProduced.classList.add(flagQuantityProduced);
- let inputQuantityProduced = document.createElement("input");
- inputQuantityProduced.classList.add(flagQuantityProduced);
- inputQuantityProduced.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityProduced, orderItem[flagQuantityProduced]);
- tdQuantityProduced.appendChild(inputQuantityProduced);
-
- /*
- let tdCostTotalLocalVatExcl = document.createElement("td");
- tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- let inputCostTotalLocalVatExcl = document.createElement("input");
- inputCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- inputCostTotalLocalVatExcl.type = 'number';
- inputCostTotalLocalVatExcl.step = 0.01;
- DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]);
- tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl);
-
- let tdCostTotalLocalVatIncl = document.createElement("td");
- tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- let inputCostTotalLocalVatIncl = document.createElement("input");
- inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- inputCostTotalLocalVatIncl.type = 'number';
- inputCostTotalLocalVatIncl.step = 0.01;
- DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]);
- tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl);
-
- let tdCostUnitLocalVatExcl = document.createElement("td");
- tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- let divCostUnitLocalVatExcl = document.createElement("div");
- divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, orderItem[flagCostUnitLocalVatExcl]);
- tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
-
- let tdCostUnitLocalVatIncl = document.createElement("td");
- tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- let divCostUnitLocalVatIncl = document.createElement("div");
- divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, orderItem[flagCostUnitLocalVatIncl]);
- tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl);
- */
-
- let tdUnitMeasurementLatencyManufacture = document.createElement("td");
- tdUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitMeasurementLatencyManufacture, orderItem[attrIdUnitMeasurementLatencyManufacture]);
- let divUnitMeasurementLatencyManufacture = document.createElement("div");
- divUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- // DOM.setElementValuesCurrentAndPrevious(divUnitMeasurementLatencyManufacture, orderItem[flagUnitMeasurementLatencyManufacture]);
- let unitMeasurementLatencyManufacture = unitMeasurementsTime[orderItem[attrIdUnitMeasurementLatencyManufacture]];
- divUnitMeasurementLatencyManufacture.textContent = BusinessObjects.getObjectText(unitMeasurementLatencyManufacture);
- tdUnitMeasurementLatencyManufacture.appendChild(divUnitMeasurementLatencyManufacture);
-
- let tdLatencyManufacture = document.createElement("td");
- tdLatencyManufacture.classList.add(flagLatencyManufacture);
- let inputLatencyManufacture = document.createElement("input");
- inputLatencyManufacture.classList.add(flagLatencyManufacture);
- inputLatencyManufacture.type = 'number';
- inputLatencyManufacture.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputLatencyManufacture, orderItem[flagLatencyManufacture]);
- tdLatencyManufacture.appendChild(inputLatencyManufacture);
-
- let tdActive = this.createTdActive(orderItem[flagActive]);
-
- let tr = document.createElement("tr");
- tr.classList.add(flagOrderItems);
- tr.setAttribute(attrIdManufacturingPurchaseOrder, orderItem[attrIdManufacturingPurchaseOrder]);
- tr.setAttribute(attrIdManufacturingPurchaseOrderProductLink, orderItem[attrIdManufacturingPurchaseOrderProductLink]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCategory);
- tr.appendChild(tdProduct);
- tr.appendChild(tdVariations);
- tr.appendChild(tdUnitQuantity);
- tr.appendChild(tdQuantityUsed);
- tr.appendChild(tdQuantityProduced);
- /*
- tr.appendChild(tdCostTotalLocalVatExcl);
- tr.appendChild(tdCostTotalLocalVatIncl);
- tr.appendChild(tdCostUnitLocalVatExcl);
- tr.appendChild(tdCostUnitLocalVatIncl);
- */
- tr.appendChild(tdUnitMeasurementLatencyManufacture);
- tr.appendChild(tdLatencyManufacture);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupFieldsOrderItemDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagDisplayOrder + ' input');
- }
- hookupFieldsOrderItemProductCategory() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductCategory
- , Utils.getListFromDict(productCategories)
- , (cellSelector) => { this.hookupProductCategoryDdls(cellSelector); }
- );
- }
- hookupFieldsOrderItemProduct() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
- hookupFieldsOrderItemProductVariations() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element));
- }
- hookupFieldsOrderItemUnitQuantity() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements));
- }
- hookupFieldsOrderItemQuantityUsed() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityUsed + ' input');
- }
- hookupFieldsOrderItemQuantityProduced() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityProduced + ' input');
- }
- /*
- hookupFieldsOrderItemPriceTotalLocalVatExcl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- this.updateFieldsPriceUnitLocalVatExcl(element);
- }
- );
- }
- hookupFieldsOrderItemPriceTotalLocalVatIncl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatIncl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- this.updateFieldsPriceUnitLocalVatIncl(element);
- }
- );
- }
- updateFieldsPriceUnitLocalVatExcl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputPriceTotalLocalVatExcl = row.querySelector('td.' + flagPriceTotalLocalVatExcl + ' input');
- let priceTotalLocalVatExcl = DOM.getElementValueCurrent(inputPriceTotalLocalVatExcl);
- let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input');
- let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed);
-
- let divPriceUnitLocalVatExcl = row.querySelector('td.' + flagPriceUnitLocalVatExcl + ' div');
- let priceUnitLocalVatExcl = quantityUsed == 0 ? 0 : priceTotalLocalVatExcl / quantityUsed;
- DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatExcl, priceUnitLocalVatExcl);
-
- let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divPriceGrandTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatExcl + ' div');
- let inputsPriceTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input');
- let priceGrandTotalLocalVatExcl = Array.from(inputsPriceTotalLocalVatExcl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divPriceGrandTotalLocalVatExcl, priceGrandTotalLocalVatExcl);
- }
- updateFieldsPriceUnitLocalVatIncl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputPriceTotalLocalVatIncl = row.querySelector('td.' + flagPriceTotalLocalVatIncl + ' input');
- let priceTotalLocalVatIncl = DOM.getElementValueCurrent(inputPriceTotalLocalVatIncl);
- let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input');
- let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed);
-
- let divPriceUnitLocalVatIncl = row.querySelector('td.' + flagPriceUnitLocalVatIncl + ' div');
- let priceUnitLocalVatIncl = quantityUsed == 0 ? 0 : priceTotalLocalVatIncl / quantityUsed;
- DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatIncl, priceUnitLocalVatIncl);
-
- let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divPriceGrandTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatIncl + ' div');
- let inputsPriceTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatIncl + ' input');
- let priceGrandTotalLocalVatIncl = Array.from(inputsPriceTotalLocalVatIncl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divPriceGrandTotalLocalVatIncl, priceGrandTotalLocalVatIncl);
- }
- hookupFieldsOrderItemPriceUnitLocalVatExcl() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceUnitLocalVatExcl + ' input');
- }
- hookupFieldsOrderItemPriceUnitLocalVatIncl() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceUnitLocalVatIncl + ' input');
- }
- */
- hookupFieldsOrderItemUnitMeasurementLatencyManufacture() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementLatencyManufacture, Utils.getListFromDict(unitMeasurementsTime));
- }
- hookupFieldsOrderItemLatencyManufacture() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagLatencyManufacture + ' input');
- }
- hookupFieldsOrderItemActive() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' input.' + flagActive);
- }
- hookupFieldsOrderItemAddDelete() {
- let selectorButton = idTableMain + ' td.' + flagOrderItems + ' td.' + flagOrderItems + ' button';
- let selectorButtonDelete = selectorButton + '.' + flagDelete;
- let selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsOrderItemAdd();
- }
- hookupButtonsOrderItemAdd() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, (event, element) => {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idManufacturingPurchaseOrder = row.getAttribute(attrIdManufacturingPurchaseOrder);
- // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0;
- let countManufacturingOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagManufacturingPurchaseOrder).length;
- let manufacturingPurchaseOrderItem = {
- [attrIdManufacturingPurchaseOrder]: idManufacturingPurchaseOrder,
- [attrIdManufacturingPurchaseOrderProductLink]: -1 - countManufacturingOrderItems,
- [attrIdProductCategory]: 0,
- [attrIdProduct]: 0,
- [flagProductVariations]: '',
- [attrIdUnitMeasurementQuantity]: 0,
- [flagQuantityUsed]: '',
- [flagQuantityProduced]: '',
- [attrIdUnitMeasurementLatencyManufacture]: 0,
- [flagLatencyManufacture]: '',
- [flagDisplayOrder]: countManufacturingOrderItems + 1,
- [flagActive]: true, // !hasActiveOrderItem,
- };
- let tbody = row.querySelector('td.' + flagOrderItems + ' table tbody');
- this.addRowManufacturingPurchaseOrderItem(tbody, manufacturingPurchaseOrderItem);
- /*
- if (!hasActiveOrderItem) {
- let tdOrderItem = row.querySelector('td.' + flagOrderItems);
- // tdOrderItem.setAttribute(attrIdManufacturingOrderItem, manufacturingPurchaseOrderItem[attrIdManufacturingOrderItem]);
- DOM.setElementAttributeValueCurrent(tdOrderItem, manufacturingPurchaseOrderItem[attrIdManufacturingOrderItem]);
- }
- */
- this.hookupOrderItemsFields();
- });
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/dog/mixin.js b/static/js/pages/dog/mixin.js
index 4610d39..10a98b1 100644
--- a/static/js/pages/dog/mixin.js
+++ b/static/js/pages/dog/mixin.js
@@ -13,7 +13,7 @@ export default class DogMixinPage {
}
initialize() {
- console.log('hookup dog start for ', this.page.hash);
+ Utils.consoleLogIfNotProductionEnvironment('hookup dog start for ', this.page.hash);
this.hookupFilters();
this.hookupLocalStorageDog();
}
@@ -29,14 +29,14 @@ export default class DogMixinPage {
let d; // , lsShared;
let selectorCardProduct = '.card.subcard';
Events.initialiseEventHandler(selectorCardProduct, flagInitialised, function(cardProduct) {
- if (_verbose) { console.log("initialising product card: ", cardProduct); }
+ if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("initialising product card: ", cardProduct); }
cardProduct.addEventListener("click", function(event) {
// d = { keyIdProduct: product.getAttribute(attrIdProduct) }
var elemClicked = event.target;
if (elemClicked.id != 'submit') { // disable for submit buttons
if (_verbose) {
- console.log("product click: " + cardProduct.getAttribute(attrIdProduct));
- console.log("permutation click: " + cardProduct.getAttribute(attrIdPermutation));
+ Utils.consoleLogIfNotProductionEnvironment("product click: " + cardProduct.getAttribute(attrIdProduct));
+ Utils.consoleLogIfNotProductionEnvironment("permutation click: " + cardProduct.getAttribute(attrIdPermutation));
}
var d = {}
d[keyIdProduct] = cardProduct.getAttribute(attrIdProduct)
@@ -45,7 +45,7 @@ export default class DogMixinPage {
goToPage(hashPageDogProduct, d);
}
});
- if (_verbose) { console.log("click method added for product ID: " + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation)); }
+ if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("click method added for product ID: " + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation)); }
});
}
*/
diff --git a/static/js/pages/dog/product_variations.js b/static/js/pages/dog/product_variations.js
deleted file mode 100644
index 88a639b..0000000
--- a/static/js/pages/dog/product_variations.js
+++ /dev/null
@@ -1,240 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import DogTableMixinPage from "./mixin_table.js";
-
-export default class PageDogProductVariations extends TableBasePage {
- static hash = hashPageDogProductVariations;
- static attrIdRowObject = attrIdProductVariationType;
- callSaveTableContent = API.saveProductVariations;
-
- constructor(router) {
- super(router);
- this.dogMixin = new DogTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- this.hookupFilterIsNotEmpty();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let inputDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' input');
- let textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let textareaNamePlural = row.querySelector('td.' + flagNamePlural + ' textarea');
- let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdProductVariationType] = row.getAttribute(attrIdProductVariationType);
- if (Validation.isEmpty(jsonRow[attrIdProductVariationType])) jsonRow[attrIdProductVariationType] = -1;
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonRow[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonRow[flagNamePlural] = DOM.getElementAttributeValueCurrent(textareaNamePlural);
-
- let variations = [];
- if (tdProductVariations.classList.contains(flagDirty)) {
- let trsProductVariation = tdProductVariations.querySelectorAll('tr.' + flagProductVariation + '.' + flagDirty);
- if (trsProductVariation != null) {
- trsProductVariation.forEach((tr, indexRow) => {
- variations.push(this.getJsonRowProductVariation(tr, indexRow));
- });
- }
- }
- else {
- // variations = BusinessObjects.getListObjectsFromIdDictAndCsv(productVariationTypes, DOM.getElementAttributeValueCurrent(tdProductVariations));
- }
- jsonRow[flagProductVariations] = variations;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getJsonRowProductVariation(tr, indexRow) {
- let inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- let textareaCode = tr.querySelector('td.' + flagCode + ' textarea');
- let textareaName = tr.querySelector('td.' + flagName + ' textarea');
- // let checkboxActive = tr.querySelector('td.' + flagActive + ' input');
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdProductVariation] = tr.getAttribute(attrIdProductVariation);
- if (Validation.isEmpty(jsonRow[attrIdProductVariation])) jsonRow[attrIdProductVariation] = -1 - indexRow;
- jsonRow[attrIdProductVariationType] = tr.getAttribute(attrIdProductVariationType);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonRow[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
-
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupSlidersDisplayOrderTable();
- this.hookupTextareasCodeTable();
- this.hookupTextareasNameTable();
- this.hookupTextareasNamePluralTable();
- this.hookupFieldsProductVariation();
- this.hookupFieldsActive();
- }
- hookupTextareasNamePluralTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagNamePlural + ' textarea');
- }
- hookupFieldsProductVariation() {
- this.hookupProductVariationsPreviews();
- this.hookupFieldsProductVariationDisplayOrder();
- this.hookupFieldsProductVariationCode();
- this.hookupFieldsProductVariationName();
- this.hookupFieldsProductVariationActive();
- }
- hookupProductVariationsPreviews() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations + ' div', (event, element) => {
- let td = DOM.getCellFromElement(element);
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickProductVariationsPreview(event, element);
- });
- }
- handleClickProductVariationsPreview(event, element) {
- if (_verbose) { console.log("click order items preview"); }
- let row = DOM.getRowFromElement(element);
- let idProductVariationType = row.getAttribute(attrIdProductVariationType);
- let productVariationType = productVariationTypes[idProductVariationType];
- if (productVariationType == null) productVariationType = {
- [flagProductVariations]: [],
- };
- let tblProductVariations = document.createElement("table");
- tblProductVariations.classList.add(flagProductVariations);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
-
- let thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- let thCode = document.createElement("th");
- thCode.classList.add(flagCode);
- thCode.textContent = 'Code';
- let thName = document.createElement("th");
- thName.classList.add(flagName);
- thName.textContent = 'Name';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- // thActive.textContent = 'Active';
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagActive);
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thActive.appendChild(buttonAdd);
-
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCode);
- tr.appendChild(thName);
- tr.appendChild(thActive);
- thead.appendChild(tr);
- tblProductVariations.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- productVariationType[flagProductVariations].forEach((productVariation, index) => {
- this.addRowProductVariation(tbody, productVariation);
- });
- tblProductVariations.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblProductVariations);
- cellNew.classList.remove(flagCollapsed);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblProductVariations: ", tblProductVariations); }
- this.toggleColumnHeaderCollapsed(flagProductVariations, false);
- this.hookupFieldsProductVariation();
- }
- addRowProductVariation(tbody, productVariation) {
- if (_verbose) { console.log("addRowProductVariation: ", productVariation); }
-
- let tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- let inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, productVariation[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
-
- let tdCode = document.createElement("td");
- tdCode.classList.add(flagCode);
- let textareaCode = document.createElement("textarea");
- textareaCode.classList.add(flagCode);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, productVariation[flagCode]);
- tdCode.appendChild(textareaCode);
-
- let tdName = document.createElement("td");
- tdName.classList.add(flagName);
- let textareaName = document.createElement("textarea");
- textareaName.classList.add(flagName);
- DOM.setElementValuesCurrentAndPrevious(textareaName, productVariation[flagName]);
- tdName.appendChild(textareaName);
-
- let tdActive = this.createTdActive(productVariation[flagActive]);
-
- let tr = document.createElement("tr");
- tr.classList.add(flagProductVariation);
- tr.setAttribute(attrIdProductVariationType, productVariation[attrIdProductVariationType]);
- tr.setAttribute(attrIdProductVariation, productVariation[attrIdProductVariation]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCode);
- tr.appendChild(tdName);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupFieldsProductVariationDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' td.' + flagDisplayOrder + ' input');
- }
- hookupFieldsProductVariationCode() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' textarea.' + flagCode);
- }
- hookupFieldsProductVariationName() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' textarea.' + flagName);
- }
- hookupFieldsProductVariationActive() {
- this.hookupFieldsActive(flagProductVariations, (event, element) => { this.hookupButtonsProductVariationAdd(event, element); });
- }
- hookupButtonsProductVariationAdd(event, element) {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idProductVariationType = row.getAttribute(attrIdProductVariationType);
- let idProductVariation = row.getAttribute(attrIdProductVariation);
- let countProductVariations = row.querySelectorAll('td.' + flagProductVariations + ' tr').length;
- let productVariation = {
- [attrIdProductVariationType]: idProductVariationType,
- [attrIdProductVariation]: idProductVariation,
- [flagCode]: '',
- [flagName]: '',
- [flagDisplayOrder]: countProductVariations,
- [flagActive]: true,
- };
- let tbody = row.querySelector('td.' + flagProductVariations + ' table tbody');
- this.addRowProductVariation(tbody, productVariation);
- this.hookupFieldsProductVariation();
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/dog/stock_items.js b/static/js/pages/dog/stock_items.js
deleted file mode 100644
index 7b33c58..0000000
--- a/static/js/pages/dog/stock_items.js
+++ /dev/null
@@ -1,355 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import DogTableMixinPage from "./mixin_table.js";
-
-export default class PageDogStockItems extends TableBasePage {
- static hash = hashPageDogStockItems;
- static attrIdRowObject = attrIdStockItem;
- callSaveTableContent = API.saveStockItems;
-
- constructor(router) {
- super(router);
- this.dogMixin = new DogTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterProductCategory();
- this.hookupFilterProduct();
- this.hookupFilterOutOfStock();
- this.hookupFilterMinStock();
- this.hookupFilterMaxStock();
- }
- hookupFilterProductCategory() {
- this.hookupFilter(flagProductCategory, (event, filterCategory) => {
- // loadPermutations();
- // let wasDirtyFilter = filterCategory.classList.contains(flagDirty);
- PageDogStockItems.isDirtyFilter(filterCategory);
- let isDirtyFilter = filterCategory.classList.contains(flagDirty);
- let idProductCategory = DOM.getElementValueCurrent(filterCategory);
- let products = productCategories[idProductCategory];
- let filterProduct = document.querySelector(idFormFilters + ' .' + flagProduct);
- let idProductPrevious = filterProduct.getAttribute(attrValuePrevious);
- filterProduct.innerHTML = '';
- let optionJson, option;
- option = DOM.createOption(null);
- filterProduct.appendChild(option);
- products.forEach((product) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product, idProductPrevious);
- option = DOM.createOption(optionJson);
- filterProduct.appendChild(option);
- });
- filterProduct.dispatchEvent(new Event('change'));
- });
- }
- hookupFilterProduct() {
- this.hookupFilter(flagProduct);
- }
- hookupFilterOutOfStock() {
- this.hookupFilter(flagIsOutOfStock);
- }
- hookupFilterMinStock() {
- this.hookupFilter(flagQuantityMin);
- }
- hookupFilterMaxStock() {
- this.hookupFilter(flagQuantityMax);
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let tdProductCategory = row.querySelector('td.' + flagProductCategory);
- let tdProduct = row.querySelector('td.' + flagProduct);
- let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- let inputCostLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' input');
- let inputCostLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' input');
- let inputDatePurchased = row.querySelector('td.' + flagDatePurchased + ' input');
- let inputDateReceived = row.querySelector('td.' + flagDateReceived + ' input');
- let tdStorageLocation = row.querySelector('td.' + flagStorageLocation);
- let inputIsSealed = row.querySelector('td.' + flagIsSealed + ' input');
- let inputDateUnsealed = row.querySelector('td.' + flagDateUnsealed + ' input');
- let inputDateExpiration = row.querySelector('td.' + flagDateExpiration + ' input');
- let inputIsConsumed = row.querySelector('td.' + flagIsConsumed + ' input');
- let inputDateConsumed = row.querySelector('td.' + flagDateConsumed + ' input');
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdStockItem] = row.getAttribute(attrIdStockItem);
- jsonRow[attrIdProductPermutation] = tdProductVariations.getAttribute(attrIdProductPermutation);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdProductCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdProductVariations);
- jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != '';
- jsonRow[flagCurrencyCost] = DOM.getElementAttributeValueCurrent(tdCurrencyCost);
- jsonRow[flagCostUnitLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostLocalVatExcl);
- jsonRow[flagCostUnitLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostLocalVatIncl);
- jsonRow[flagDatePurchased] = DOM.getElementAttributeValueCurrent(inputDatePurchased);
- jsonRow[flagDateReceived] = DOM.getElementAttributeValueCurrent(inputDateReceived);
- jsonRow[attrIdStorageLocation] = DOM.getElementAttributeValueCurrent(tdStorageLocation);
- jsonRow[flagIsSealed] = DOM.getElementAttributeValueCurrent(inputIsSealed);
- jsonRow[flagDateUnsealed] = DOM.getElementAttributeValueCurrent(inputDateUnsealed);
- jsonRow[flagDateExpiration] = DOM.getElementAttributeValueCurrent(inputDateExpiration);
- jsonRow[flagIsConsumed] = DOM.getElementAttributeValueCurrent(inputIsConsumed);
- jsonRow[flagDateConsumed] = DOM.getElementAttributeValueCurrent(inputDateConsumed);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- let ddlCategoryFilter = document.querySelector(idFormFilters + ' #' + attrIdProductCategory);
- let idProductCategoryFilter = DOM.getElementValueCurrent(ddlCategoryFilter);
- let hasCategoryFilter = !(Validation.isEmpty(idProductCategoryFilter) || idProductCategoryFilter == '0');
- let ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct);
- let idProductFilter = DOM.getElementValueCurrent(ddlProductFilter);
- let hasProductFilter = !(Validation.isEmpty(idProductFilter) || idProductFilter == '0');
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({ddlCategoryFilter, idProductCategoryFilter, hasCategoryFilter, ddlProductFilter, idProductFilter, hasProductFilter});
- }
- if (!hasCategoryFilter && !hasProductFilter) return;
- if (hasCategoryFilter) {
- let ddlCategory = row.querySelector('td.' + flagProductCategory + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlCategory, idProductCategoryFilter);
- this.handleChangeProductCategoryDdl(null, ddlCategory);
- }
- if (hasProductFilter) {
- let ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlProduct, idProductFilter);
- }
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupProductCategoryFields();
- this.hookupProductFields();
- this.hookupFieldsProductPermutationVariation();
- this.hookupCurrencyCostFields();
- this.hookupCostInputs();
- this.hookupOrderDateInputs();
- this.hookupStorageLocationFields();
- this.hookupSealingInputs();
- this.hookupExpirationDateInputs();
- this.hookupConsumationInputs();
- this.hookupFieldsActive();
- }
- hookupProductCategoryFields() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagProductCategory
- , Utils.getListFromDict(productCategories)
- , (event, element) => { this.hookupProductCategoryDdls(event, element); }
- );
- }
- hookupProductFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
-
- /*
- handleClickProductPermutationVariationsPreview(event, element) {
- let row = DOM.getRowFromElement(element);
- let tdProduct = row.querySelector('td.' + flagProduct);
- let idProduct = DOM.getElementValueCurrent(tdProduct);
- let product = products[idProduct];
- if (!product[flagHasVariations]) return;
- super.handleClickProductPermutationVariationsPreview(event, element);
- }
- */
- handleClickButtonProductPermutationVariationsAdd(event, element) {
- let row = DOM.getRowFromElement(element);
- let tbody = row.querySelector('tbody');
- let permutationVariation = PageDogStockItems.createOptionUnselectedProductVariation();
- this.addProductPermutationVariationRow(tbody, permutationVariation);
- }
-
- hookupCurrencyCostFields(){
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrencyCost, Utils.getListFromDict(currencies));
- }
- hookupCostInputs(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatIncl + ' input');
- }
- hookupOrderDateInputs(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDatePurchased + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDateReceived + ' input');
- }
-
- hookupStorageLocationFields(){
- this.hookupEventHandler(
- "click",
- idTableMain + ' td.' + flagStorageLocation + ' div',
- (event, element) => this.handleClickStorageLocationPreview(event, element)
- );
- }
- handleClickStorageLocationPreview(event, element) {
- this.toggleColumnCollapsed(flagStorageLocation, false);
- let idPlant = element.getAttribute(attrIdPlant);
- let idStorageLocation = element.getAttribute(attrIdStorageLocation);
- let tblStorageLocation = document.createElement("table");
- tblStorageLocation.classList.add(flagStorageLocation);
- let thead = document.createElement("thead");
- let thPlant = document.createElement("th");
- thPlant.textContent = 'Plant';
- let thLocation = document.createElement("th");
- thLocation.textContent = 'Location';
- let trHead = document.createElement("tr");
- trHead.appendChild(thPlant);
- trHead.appendChild(thLocation);
- thead.appendChild(trHead);
- tblStorageLocation.appendChild(thead);
- let tbody = document.createElement("tbody");
-
- let plant, optionPlantJson, optionPlant, storageLocation, optionStorageLocationJson, optionStorageLocation;
- let plantKeys = Object.keys(plants);
- let storageLocationKeys = Object.keys(storageLocations);
-
- debugger;
- let plantJson = idPlant != null ? plants[idPlant] : {
- [attrIdPlant]: null,
- };
- let storageLocationJson = idStorageLocation != null ? storageLocations[idStorageLocation] : {
- [attrIdStorageLocation]: null,
- };
-
- let tdPlant = document.createElement("td");
- tdPlant.classList.add(flagPlant);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdPlant, plantJson[attrIdPlant]);
-
- let ddlPlant = document.createElement("select");
- ddlPlant.classList.add(flagPlant);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlPlant, plantJson[attrIdPlant]);
-
- optionPlant = DOM.createOption(null);
- if (_verbose) { console.log("optionPlant: ", optionPlant); }
- ddlPlant.appendChild(optionPlant);
-
- plantKeys.forEach((plantKey) => {
- plant = plants[plantKey];
- optionPlantJson = BusinessObjects.getOptionJsonFromObjectJson(
- plant, // objectJson
- plantJson[attrIdPlant] // valueSelected
- );
- optionPlant = DOM.createOption(optionPlantJson);
- if (_verbose) { console.log("optionPlant: ", optionPlant); }
- ddlPlant.appendChild(optionPlant);
- });
-
- let tdStorageLocation = document.createElement("td");
- tdStorageLocation.classList.add(flagStorageLocation);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdStorageLocation, storageLocationJson[attrIdStorageLocation]);
-
- let ddlStorageLocation = document.createElement("select");
- ddlStorageLocation.classList.add(flagStorageLocation);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlStorageLocation, storageLocationJson[attrIdStorageLocation]);
-
- optionStorageLocation = DOM.createOption(null);
- if (_verbose) { console.log("optionStorageLocation: ", optionStorageLocation); }
- ddlStorageLocation.appendChild(optionStorageLocation);
-
- storageLocationKeys.forEach((StorageLocationKey) => {
- storageLocation = storageLocations[StorageLocationKey];
- optionStorageLocationJson = BusinessObjects.getOptionJsonFromObjectJson(
- storageLocation, // objectJson
- storageLocationJson[attrIdStorageLocation] // valueSelected
- );
- optionStorageLocation = DOM.createOption(optionStorageLocationJson);
- if (_verbose) { console.log("optionStorageLocation: ", optionStorageLocation); }
- ddlStorageLocation.appendChild(optionStorageLocation);
- });
-
- let trBody = document.createElement("tr");
- tdPlant.appendChild(ddlPlant);
- trBody.appendChild(tdPlant);
- tdStorageLocation.appendChild(ddlStorageLocation);
- trBody.appendChild(tdStorageLocation);
- tbody.appendChild(trBody);
-
- tblStorageLocation.appendChild(tbody);
- let tdParent = DOM.getCellFromElement(element);
- tdParent.innerHTML = '';
- tdParent.appendChild(tblStorageLocation);
- if (_verbose) { console.log("tblStorageLocation: ", tblStorageLocation); }
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPlant + ' select', (event, element) => { this.handleChangeStoragePlantDdl(event, element); });
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagStorageLocation + ' select', (event, element) => { this.handleChangeStorageLocationDdl(event, element); });
- }
- handleChangeStoragePlantDdl(event, ddlPlant) {
- this.handleChangeNestedElementCellTable(event, ddlPlant);
- let row = DOM.getRowFromElement(ddlPlant);
- let ddlStorageLocation = row.querySelector('td.' + flagStorageLocation + ' select');
- ddlStorageLocation.innerHTML = '';
- ddlStorageLocation.appendChild(DOM.createOption(null));
- let idPlant = DOM.getElementValueCurrent(ddlPlant);
- let storageLocations = plants[idPlant][flagStorageLocations];
- let optionJson, option;
- storageLocations.forEach((storageLocation) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(storageLocation);
- option = DOM.createOption(optionJson);
- ddlStorageLocation.appendChild(option);
- });
- this.handleChangeNestedElementCellTable(event, ddlStorageLocation);
- }
- handleChangeStorageLocationDdl(event, ddlStorageLocation) {
- this.handleChangeNestedElementCellTable(event, ddlStorageLocation);
- }
-
- hookupSealingInputs() {
- this.hookupIsSealedFields();
- this.hookupDateUnsealedInputs();
- }
- hookupIsSealedFields(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsSealed + ' input', (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- let isSealed = DOM.getElementValueCurrent(element);
- let row = DOM.getRowFromElement(element);
- let inputDateUnsealed = row.querySelector('td.' + flagDateUnsealed + ' input');
- if (isSealed) {
- inputDateUnsealed.classList.add(flagCollapsed);
- } else {
- inputDateUnsealed.classList.remove(flagCollapsed);
- }
- });
- }
- hookupDateUnsealedInputs(){
- this.hookupChangeHandlerTableCellsWhenNotCollapsed("change", idTableMain + ' td.' + flagDateUnsealed + ' input');
- }
-
- hookupExpirationDateInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDateExpiration + ' input');
- }
-
- hookupConsumationInputs() {
- this.hookupIsConsumedFields();
- this.hookupDateConsumedInputs();
- }
- hookupIsConsumedFields(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsConsumed + ' input', (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- let isConsumed = DOM.getElementValueCurrent(element);
- let row = DOM.getRowFromElement(element);
- let inputDateConsumed = row.querySelector('td.' + flagDateConsumed + ' input');
- if (isConsumed) {
- inputDateConsumed.classList.remove(flagCollapsed);
- } else {
- inputDateConsumed.classList.add(flagCollapsed);
- }
- });
- }
- hookupDateConsumedInputs(){
- this.hookupChangeHandlerTableCellsWhenNotCollapsed("change", idTableMain + ' td.' + flagDateConsumed + ' input');
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/dog/supplier_purchase_orders.js b/static/js/pages/dog/supplier_purchase_orders.js
deleted file mode 100644
index 550b0b5..0000000
--- a/static/js/pages/dog/supplier_purchase_orders.js
+++ /dev/null
@@ -1,509 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import ProductPermutation from "../../lib/business_objects/dog/product_permutation.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import DogTableMixinPage from "./mixin_table.js";
-
-export default class PageDogSupplierPurchaseOrders extends TableBasePage {
- static hash = hashPageDogSupplierPurchaseOrders;
- static attrIdRowObject = attrIdSupplierPurchaseOrder;
- callSaveTableContent = API.saveSupplierPurchaseOrders;
-
- constructor(router) {
- super(router);
- this.dogMixin = new DogTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let tdSupplier = row.querySelector('td.' + flagSupplier);
- let tdCurrency = row.querySelector('td.' + flagCurrency);
- let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems);
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdSupplierPurchaseOrder] = row.getAttribute(attrIdSupplierPurchaseOrder);
- jsonRow[attrIdSupplier] = DOM.getElementAttributeValueCurrent(tdSupplier);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- // jsonRow[flagOrderItems] = DOM.getElementAttributeValueCurrent(tdItems);
- let orderItems = [];
- if (trsPurchaseOrderItem != null) {
- trsPurchaseOrderItem.forEach((tr) => {
- orderItems.push(this.getJsonRowOrderItem(tr));
- });
- }
- jsonRow[flagOrderItems] = orderItems;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getJsonRowOrderItem(tr) {
- let inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- let tdCategory = tr.querySelector('td.' + flagProductCategory);
- let tdProduct = tr.querySelector('td.' + flagProduct);
- let tdVariations = tr.querySelector('td.' + flagProductVariations);
- let tdUnitQuantity = tr.querySelector('td.' + flagUnitMeasurementQuantity);
- let inputQuantityOrdered = tr.querySelector('td.' + flagQuantityOrdered + ' input');
- let inputQuantityReceived = tr.querySelector('td.' + flagQuantityReceived + ' input');
- let inputCostTotalLocalVatExcl = tr.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let inputCostTotalLocalVatIncl = tr.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let inputLatencyDeliveryDays = tr.querySelector('td.' + flagLatencyDeliveryDays + ' input');
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdSupplierPurchaseOrder] = tr.getAttribute(attrIdSupplierPurchaseOrder);
- jsonRow[attrIdSupplierPurchaseOrderProductLink] = tr.getAttribute(attrIdSupplierPurchaseOrderProductLink);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdVariations);
- jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity);
- jsonRow[flagQuantityOrdered] = DOM.getElementAttributeValueCurrent(inputQuantityOrdered);
- jsonRow[flagQuantityReceived] = DOM.getElementAttributeValueCurrent(inputQuantityReceived);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- jsonRow[flagLatencyDeliveryDays] = DOM.getElementAttributeValueCurrent(inputLatencyDeliveryDays);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
-
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupSupplierFields();
- this.hookupCurrencyFields();
- this.hookupCostInputs();
- this.hookupOrderItemsFields();
- this.hookupFieldsActive();
- }
- hookupSupplierFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagSupplier, Utils.getListFromDict(suppliers));
- }
- hookupCostInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input');
- }
- hookupOrderItemsFields() {
- this.hookupOrderItemsPreviews();
- this.hookupFieldsOrderItemDisplayOrder();
- this.hookupFieldsOrderItemProductCategory();
- this.hookupFieldsOrderItemProduct();
- // this.hookupFieldsOrderItemProductVariations();
- this.hookupFieldsProductPermutationVariation();
- this.hookupFieldsOrderItemUnitQuantity();
- this.hookupFieldsOrderItemQuantityOrdered();
- this.hookupFieldsOrderItemQuantityReceived();
- this.hookupFieldsOrderItemCostTotalLocalVatExcl();
- this.hookupFieldsOrderItemCostTotalLocalVatIncl();
- this.hookupFieldsOrderItemLatencyDeliveryDays();
- this.hookupFieldsOrderItemActive();
- this.hookupFieldsOrderItemAddDelete();
- }
- hookupOrderItemsPreviews() {
- this.hookupEventHandler("click", idTableMain + ' > tbody > tr > td.' + flagOrderItems + ' > div', (event, div) => {
- let td = DOM.getCellFromElement(div);
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickOrderItemsPreview(event, div);
- });
- }
- handleClickOrderItemsPreview(event, element) {
- if (_verbose) { console.log("click order items preview"); }
- this.toggleColumnHeaderCollapsed(flagOrderItems, false);
- /*
- let td = DOM.getCellFromElement(element);
- td.classList.remove(flagCollapsed);
- */
-
- let row = DOM.getRowFromElement(element);
- let idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
- // if (idSupplierPurchaseOrder == null || idSupplierPurchaseOrder < 1) return;
- let supplierPurchaseOrder = supplierPurchaseOrders[idSupplierPurchaseOrder];
- if (supplierPurchaseOrder == null) supplierPurchaseOrder = {
- [flagOrderItems]: [],
- };
- let tblOrderItems = document.createElement("table");
- tblOrderItems.classList.add(flagOrderItems);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
-
- let thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- let thCategory = document.createElement("th");
- thCategory.classList.add(flagProductCategory);
- thCategory.textContent = 'Category';
- let thProduct = document.createElement("th");
- thProduct.classList.add(flagProduct);
- thProduct.textContent = 'Product';
- let thVariations = document.createElement("th");
- thVariations.classList.add(flagProductVariations);
- thVariations.classList.add(flagCollapsed);
- thVariations.textContent = 'Variations';
- let thUnitQuantity = document.createElement("th");
- thUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- thUnitQuantity.textContent = 'Unit Quantity';
- let thQuantityOrdered = document.createElement("th");
- thQuantityOrdered.classList.add(flagQuantityOrdered);
- thQuantityOrdered.textContent = 'Quantity Ordered';
- let thQuantityReceived = document.createElement("th");
- thQuantityReceived.classList.add(flagQuantityReceived);
- thQuantityReceived.textContent = 'Quantity Received';
- let thCostTotalLocalVatExcl = document.createElement("th");
- thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl';
- let thCostTotalLocalVatIncl = document.createElement("th");
- thCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- thCostTotalLocalVatIncl.textContent = 'Cost Total Local VAT Incl';
- let thCostUnitLocalVatExcl = document.createElement("th");
- thCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- thCostUnitLocalVatExcl.textContent = 'Cost Unit Local VAT Excl';
- let thCostUnitLocalVatIncl = document.createElement("th");
- thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl';
- let thLatencyDeliveryDays = document.createElement("th");
- thLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- thLatencyDeliveryDays.textContent = 'Latency Delivery (Days)';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- let thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
-
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCategory);
- tr.appendChild(thProduct);
- tr.appendChild(thVariations);
- tr.appendChild(thUnitQuantity);
- tr.appendChild(thQuantityOrdered);
- tr.appendChild(thQuantityReceived);
- tr.appendChild(thCostTotalLocalVatExcl);
- tr.appendChild(thCostTotalLocalVatIncl);
- tr.appendChild(thCostUnitLocalVatExcl);
- tr.appendChild(thCostUnitLocalVatIncl);
- tr.appendChild(thLatencyDeliveryDays);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblOrderItems.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- supplierPurchaseOrder[flagOrderItems].forEach((orderItem, index) => {
- this.addRowSupplierPurchaseOrderItem(tbody, orderItem);
- });
- tblOrderItems.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblOrderItems);
- cellNew.classList.remove(flagCollapsed);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblOrderItems: ", tblOrderItems); }
- this.hookupOrderItemsFields();
- }
- addRowSupplierPurchaseOrderItem(tbody, orderItem) { // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions,
- if (_verbose) { console.log("addRowSupplierPurchaseOrderItem: ", orderItem); }
-
- let tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- let inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, orderItem[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
-
- let tdCategory = document.createElement("td");
- tdCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCategory, orderItem[attrIdProductCategory]);
- let divCategory = document.createElement("div");
- divCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(divCategory, orderItem[attrIdProductCategory]);
- // divCategory.textContent = orderItem[flagProductCategory];
- let productCategory = productCategories[orderItem[attrIdProductCategory]];
- divCategory.textContent = BusinessObjects.getObjectText(productCategory);
- tdCategory.appendChild(divCategory);
-
- let tdProduct = document.createElement("td");
- tdProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdProduct, orderItem[attrIdProduct]);
- let divProduct = document.createElement("div");
- divProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(divProduct, orderItem[attrIdProduct]);
- // divProduct.textContent = orderItem[flagProduct];
- let product = products[orderItem[attrIdProduct]];
- divProduct.textContent = BusinessObjects.getObjectText(product);
- tdProduct.appendChild(divProduct);
-
- let tdVariations = document.createElement("td");
- tdVariations.classList.add(flagProductVariations);
- tdVariations.classList.add(flagCollapsed);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[flagProductVariations]);
- let divVariations = document.createElement("div");
- divVariations.classList.add(flagProductVariations);
- DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[flagProductVariations]);
- // divVariations.textContent = orderItem[flagProductVariations];
- let variationsText = ProductPermutation.getProductVariationsPreviewFromIdCsv(orderItem[flagProductVariations]);
- divVariations.textContent = variationsText;
- tdVariations.appendChild(divVariations);
-
- let tdUnitQuantity = document.createElement("td");
- tdUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
- let divUnitQuantity = document.createElement("div");
- divUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(divUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
- let unitQuantity = unitMeasurements[orderItem[attrIdUnitMeasurementQuantity]];
- divUnitQuantity.textContent = BusinessObjects.getObjectText(unitQuantity);
- tdUnitQuantity.appendChild(divUnitQuantity);
-
- let tdQuantityOrdered = document.createElement("td");
- tdQuantityOrdered.classList.add(flagQuantityOrdered);
- let inputQuantityOrdered = document.createElement("input");
- inputQuantityOrdered.classList.add(flagQuantityOrdered);
- inputQuantityOrdered.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityOrdered, orderItem[flagQuantityOrdered]);
- tdQuantityOrdered.appendChild(inputQuantityOrdered);
-
- let tdQuantityReceived = document.createElement("td");
- tdQuantityReceived.classList.add(flagQuantityReceived);
- let inputQuantityReceived = document.createElement("input");
- inputQuantityReceived.classList.add(flagQuantityReceived);
- inputQuantityReceived.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityReceived, orderItem[flagQuantityReceived]);
- tdQuantityReceived.appendChild(inputQuantityReceived);
-
- let tdCostTotalLocalVatExcl = document.createElement("td");
- tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- let inputCostTotalLocalVatExcl = document.createElement("input");
- inputCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- inputCostTotalLocalVatExcl.type = 'number';
- inputCostTotalLocalVatExcl.step = 0.01;
- DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]);
- tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl);
-
- let tdCostTotalLocalVatIncl = document.createElement("td");
- tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- let inputCostTotalLocalVatIncl = document.createElement("input");
- inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- inputCostTotalLocalVatIncl.type = 'number';
- inputCostTotalLocalVatIncl.step = 0.01;
- DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]);
- tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl);
-
- let tdCostUnitLocalVatExcl = document.createElement("td");
- tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- let divCostUnitLocalVatExcl = document.createElement("div");
- divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatExcl], 3, null));
- tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
-
- let tdCostUnitLocalVatIncl = document.createElement("td");
- tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- let divCostUnitLocalVatIncl = document.createElement("div");
- divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatIncl], 3, null));
- tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl);
-
- let tdLatencyDeliveryDays = document.createElement("td");
- tdLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- let inputLatencyDeliveryDays = document.createElement("input");
- inputLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- inputLatencyDeliveryDays.type = 'number';
- inputLatencyDeliveryDays.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputLatencyDeliveryDays, orderItem[flagLatencyDeliveryDays]);
- tdLatencyDeliveryDays.appendChild(inputLatencyDeliveryDays);
-
- let tdActive = this.createTdActive(orderItem[flagActive]);
-
- let tr = document.createElement("tr");
- tr.classList.add(flagOrderItems);
- tr.setAttribute(attrIdSupplierPurchaseOrder, orderItem[attrIdSupplierPurchaseOrder]);
- tr.setAttribute(attrIdSupplierPurchaseOrderProductLink, orderItem[attrIdSupplierPurchaseOrderProductLink]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCategory);
- tr.appendChild(tdProduct);
- tr.appendChild(tdVariations);
- tr.appendChild(tdUnitQuantity);
- tr.appendChild(tdQuantityOrdered);
- tr.appendChild(tdQuantityReceived);
- tr.appendChild(tdCostTotalLocalVatExcl);
- tr.appendChild(tdCostTotalLocalVatIncl);
- tr.appendChild(tdCostUnitLocalVatExcl);
- tr.appendChild(tdCostUnitLocalVatIncl);
- tr.appendChild(tdLatencyDeliveryDays);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupFieldsOrderItemDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagDisplayOrder + ' input');
- }
- hookupFieldsOrderItemProductCategory() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductCategory
- , Utils.getListFromDict(productCategories)
- , (cellSelector) => { this.hookupProductCategoryDdls(cellSelector); }
- );
- }
- hookupFieldsOrderItemProduct() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
- /*
- hookupFieldsOrderItemProductVariations() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element));
- }
- hookupDdlsProductPermutationVariation() {
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation);
- }
- hookupDdlsProductPermutationVariationType() {
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType);
- }
- */
- hookupFieldsOrderItemUnitQuantity() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity
- , Utils.getListFromDict(unitMeasurements)
- );
- }
- hookupFieldsOrderItemQuantityOrdered() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityOrdered + ' input'
- );
- }
- hookupFieldsOrderItemQuantityReceived() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityReceived + ' input'
- );
- }
- hookupFieldsOrderItemCostTotalLocalVatExcl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatExcl);
- this.updateFieldsCostUnitLocalVatExcl(element);
- }
- );
- }
- hookupFieldsOrderItemCostTotalLocalVatIncl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatIncl);
- this.updateFieldsCostUnitLocalVatIncl(element);
- }
- );
- }
- updateFieldsCostUnitLocalVatExcl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let costTotalLocalVatExcl = DOM.getElementValueCurrent(inputCostTotalLocalVatExcl);
- let inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
- let quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
-
- let divCostUnitLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' div');
- let costUnitLocalVatExcl = quantityOrdered == 0 ? 0 : costTotalLocalVatExcl / quantityOrdered;
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, costUnitLocalVatExcl.toFixed(3));
-
- let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divCostGrandTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatExcl + ' div');
- let inputsCostTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input');
- let costGrandTotalLocalVatExcl = Array.from(inputsCostTotalLocalVatExcl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divCostGrandTotalLocalVatExcl, costGrandTotalLocalVatExcl);
- }
- updateFieldsCostUnitLocalVatIncl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let costTotalLocalVatIncl = DOM.getElementValueCurrent(inputCostTotalLocalVatIncl);
- let inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
- let quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
-
- let divCostUnitLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' div');
- let costUnitLocalVatIncl = quantityOrdered == 0 ? 0 : costTotalLocalVatIncl / quantityOrdered;
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, costUnitLocalVatIncl.toFixed(3));
-
- let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divCostGrandTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatIncl + ' div');
- let inputsCostTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input');
- let costGrandTotalLocalVatIncl = Array.from(inputsCostTotalLocalVatIncl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divCostGrandTotalLocalVatIncl, costGrandTotalLocalVatIncl);
- }
- hookupFieldsOrderItemLatencyDeliveryDays() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagLatencyDeliveryDays + ' input');
- }
- hookupFieldsOrderItemActive() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' input.' + flagActive);
- }
- hookupFieldsOrderItemAddDelete() {
- let selectorButton = idTableMain + ' td.' + flagOrderItems + ' td.' + flagOrderItems + ' button';
- let selectorButtonDelete = selectorButton + '.' + flagDelete;
- let selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsOrderItemAdd();
- }
- hookupButtonsOrderItemAdd() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, (event, element) => {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
- // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0;
- let countSupplierOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagSupplierPurchaseOrder).length;
- let supplierOrderItem = {
- [attrIdSupplierPurchaseOrder]: idSupplierPurchaseOrder,
- [attrIdSupplierPurchaseOrderProductLink]: -1 - countSupplierOrderItems,
- [attrIdProductCategory]: 0,
- [attrIdProduct]: 0,
- [flagProductVariations]: '',
- [attrIdUnitMeasurementQuantity]: 0,
- [flagQuantityOrdered]: '',
- [flagQuantityReceived]: '',
- [flagCostTotalLocalVatExcl]: '',
- [flagCostTotalLocalVatIncl]: '',
- [flagCostUnitLocalVatExcl]: '',
- [flagCostUnitLocalVatIncl]: '',
- [flagLatencyDeliveryDays]: '',
- [flagDisplayOrder]: countSupplierOrderItems + 1,
- [flagActive]: true, // !hasActiveOrderItem,
- };
- let tbody = row.querySelector('td.' + flagOrderItems + ' table tbody');
- this.addRowSupplierPurchaseOrderItem(tbody, supplierOrderItem);
- /*
- if (!hasActiveOrderItem) {
- let tdOrderItem = row.querySelector('td.' + flagOrderItems);
- // tdOrderItem.setAttribute(attrIdSupplierOrderItem, supplierOrderItem[attrIdSupplierOrderItem]);
- DOM.setElementAttributeValueCurrent(tdOrderItem, supplierOrderItem[attrIdSupplierPurchaseOrderProductLink]);
- }
- */
- this.hookupOrderItemsFields();
- });
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/dog/suppliers.js b/static/js/pages/dog/suppliers.js
deleted file mode 100644
index 8b2de23..0000000
--- a/static/js/pages/dog/suppliers.js
+++ /dev/null
@@ -1,381 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import DogTableMixinPage from "./mixin_table.js";
-
-export default class PageDogSuppliers extends TableBasePage {
- static hash = hashPageDogSuppliers;
- static attrIdRowObject = attrIdSupplier;
- callSaveTableContent = API.saveSuppliers;
-
- constructor(router) {
- super(router);
- this.dogMixin = new DogTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let textareaNameCompany = row.querySelector('td.' + flagNameCompany + ' textarea');
- let textareaNameContact = row.querySelector('td.' + flagNameContact + ' textarea');
- let textareaDepartmentContact = row.querySelector('td.' + flagDepartmentContact + ' textarea');
- let tdAddress = row.querySelector('td.' + flagAddress);
- let textareaPhoneNumber = row.querySelector('td.' + flagPhoneNumber + ' textarea');
- let textareaFax = row.querySelector('td.' + flagFax + ' textarea');
- let textareaEmail = row.querySelector('td.' + flagEmail + ' textarea');
- let textareaWebsite = row.querySelector('td.' + flagWebsite + ' textarea');
- let tdCurrency = row.querySelector('td.' + flagCurrency);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdSupplier] = row.getAttribute(attrIdSupplier);
- jsonRow[flagNameCompany] = DOM.getElementAttributeValueCurrent(textareaNameCompany);
- jsonRow[flagNameContact] = DOM.getElementAttributeValueCurrent(textareaNameContact);
- jsonRow[flagDepartmentContact] = DOM.getElementAttributeValueCurrent(textareaDepartmentContact);
- jsonRow[attrIdSupplierAddress] = DOM.getElementAttributeValueCurrent(tdAddress);
- jsonRow[flagSupplierAddress] = this.getSupplierAddressesFromRow(row);
- jsonRow[flagPhoneNumber] = DOM.getElementAttributeValueCurrent(textareaPhoneNumber);
- jsonRow[flagFax] = DOM.getElementAttributeValueCurrent(textareaFax);
- jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(textareaEmail);
- jsonRow[flagWebsite] = DOM.getElementAttributeValueCurrent(textareaWebsite);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getSupplierAddressesFromRow(row) {
- let supplierAddresses = [];
- let trs = row.querySelectorAll('td.' + flagAddress + ' tbody tr');
- let address, inputPostcode, inputAddressLine1, inputAddressLine2, inputCity, inputCounty, ddlRegion, inputActive;
- trs.forEach((tr) => {
- inputPostcode = tr.querySelector('td.' + flagPostcode + ' textarea');
- inputAddressLine1 = tr.querySelector('td.' + flagAddressLine1 + ' textarea');
- inputAddressLine2 = tr.querySelector('td.' + flagAddressLine2 + ' textarea');
- inputCity = tr.querySelector('td.' + flagCity + ' textarea');
- inputCounty = tr.querySelector('td.' + flagCounty + ' textarea');
- ddlRegion = tr.querySelector('td.' + flagRegion + ' select');
- inputActive = tr.querySelector('td.' + flagActive + ' input');
- address = {
- [attrIdSupplierAddress]: tr.getAttribute(attrIdSupplierAddress),
- [attrIdSupplier]: row.getAttribute(attrIdSupplier),
- [flagPostcode]: DOM.getElementAttributeValueCurrent(inputPostcode),
- [flagAddressLine1]: DOM.getElementAttributeValueCurrent(inputAddressLine1),
- [flagAddressLine2]: DOM.getElementAttributeValueCurrent(inputAddressLine2),
- [flagCity]: DOM.getElementAttributeValueCurrent(inputCity),
- [flagCounty]: DOM.getElementAttributeValueCurrent(inputCounty),
- [attrIdRegion]: DOM.getElementAttributeValueCurrent(ddlRegion),
- [flagActive]: DOM.getElementAttributeValueCurrent(inputActive),
- };
- supplierAddresses.push(address);
- });
- return supplierAddresses;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupNameCompanyInputs();
- this.hookupNameContactInputs();
- this.hookupDepartmentContactInputs();
- this.hookupAddressFields();
- this.hookupPhoneNumberInputs();
- this.hookupFaxInputs();
- this.hookupEmailInputs();
- this.hookupWebsiteInputs();
- this.hookupCurrencyFields();
- this.hookupFieldsActive();
- }
- hookupNameCompanyInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNameCompany + ' textarea');
- }
- hookupNameContactInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNameContact + ' textarea');
- }
- hookupDepartmentContactInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDepartmentContact + ' textarea');
- }
-
- hookupAddressFields() {
- this.hookupAddressPreviews();
- this.hookupAddressPostcodeInputs();
- this.hookupAddressLine1Inputs();
- this.hookupAddressLine2Inputs();
- this.hookupAddressCityInputs();
- this.hookupAddressCountyInputs();
- this.hookupAddressRegionDdls();
- this.hookupAddressActiveCheckboxes();
- this.hookupAddressDeleteButtons();
- this.hookupAddressUndeleteButtons();
- this.hookupAddressAddButtons();
- }
- hookupAddressPreviews() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress, (event, td) => {
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickAddressPreview(event, td);
- });
- }
- handleClickAddressPreview(event, element) {
- if (_verbose) { console.log("click address preview"); }
- this.toggleColumnHeaderCollapsed(flagAddress, false);
- element.classList.remove(flagCollapsed);
- let row = DOM.getRowFromElement(element);
- let idSupplier = row.getAttribute(attrIdSupplier);
- let supplierAddressList = idSupplier > 0 ? supplierAddresses[idSupplier] : [];
- let tblAddresses = document.createElement("table");
- tblAddresses.classList.add(flagAddress);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
- let thPostcode = document.createElement("th");
- thPostcode.classList.add(flagPostcode);
- thPostcode.textContent = 'Postcode';
- let thAddressLine1 = document.createElement("th");
- thAddressLine1.classList.add(flagAddressLine1);
- thAddressLine1.textContent = 'Address Line 1';
- let thAddressLine2 = document.createElement("th");
- thAddressLine2.classList.add(flagAddressLine2);
- thAddressLine2.textContent = 'Address Line 2';
- let thCity = document.createElement("th");
- thCity.classList.add(flagCity);
- thCity.textContent = 'City';
- let thCounty = document.createElement("th");
- thCounty.classList.add(flagCounty);
- thCounty.textContent = 'County';
- let thRegion = document.createElement("th");
- thRegion.classList.add(flagRegion);
- thRegion.textContent = 'Region';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- let thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
-
- tr.appendChild(thPostcode);
- tr.appendChild(thAddressLine1);
- tr.appendChild(thAddressLine2);
- tr.appendChild(thCity);
- tr.appendChild(thCounty);
- tr.appendChild(thRegion);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblAddresses.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- let regionOptions = Utils.getListFromDict(regions);
- supplierAddressList.forEach((supplierAddress, index) => {
- this.addRowSupplierAddress(tbody, supplierAddress, regionOptions);
- });
- tblAddresses.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblAddresses);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblAddresses: ", tblAddresses); }
- this.hookupAddressFields();
- }
- addRowSupplierAddress(tbody, supplierAddress, regionOptions) {
- if (_verbose) { console.log("addRowSupplierAddress: ", supplierAddress); }
- let tdPostcode = document.createElement("td");
- tdPostcode.classList.add(flagPostcode);
- let textareaPostcode = document.createElement("textarea");
- textareaPostcode.classList.add(flagPostcode);
- DOM.setElementValuesCurrentAndPrevious(textareaPostcode, supplierAddress[flagPostcode]);
- tdPostcode.appendChild(textareaPostcode);
-
- let tdAddressLine1 = document.createElement("td");
- tdAddressLine1.classList.add(flagAddressLine1);
- let textareaAddressLine1 = document.createElement("textarea");
- textareaAddressLine1.classList.add(flagAddressLine1);
- DOM.setElementValuesCurrentAndPrevious(textareaAddressLine1, supplierAddress[flagAddressLine1]);
- tdAddressLine1.appendChild(textareaAddressLine1);
-
- let tdAddressLine2 = document.createElement("td");
- tdAddressLine2.classList.add(flagAddressLine2);
- let textareaAddressLine2 = document.createElement("textarea");
- textareaAddressLine2.classList.add(flagAddressLine2);
- DOM.setElementValuesCurrentAndPrevious(textareaAddressLine2, supplierAddress[flagAddressLine2]);
- tdAddressLine2.appendChild(textareaAddressLine2);
-
- let tdCity = document.createElement("td");
- tdCity.classList.add(flagCity);
- let textareaCity = document.createElement("textarea");
- textareaCity.classList.add(flagCity);
- DOM.setElementValuesCurrentAndPrevious(textareaCity, supplierAddress[flagCity]);
- tdCity.appendChild(textareaCity);
-
- let tdCounty = document.createElement("td");
- tdCounty.classList.add(flagCounty);
- let textareaCounty = document.createElement("textarea");
- textareaCounty.classList.add(flagCounty);
- DOM.setElementValuesCurrentAndPrevious(textareaCounty, supplierAddress[flagCounty]);
- tdCounty.appendChild(textareaCounty);
-
- let region = supplierAddress[flagRegion];
- if (!region) region = {[attrIdRegion]: ''};
- let tdRegion = document.createElement("td");
- tdRegion.classList.add(flagRegion);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdRegion, region[attrIdRegion]);
- let ddlRegion = document.createElement("select");
- ddlRegion.classList.add(flagRegion);
- let optionJson, option;
- option = DOM.createOption(null);
- ddlRegion.appendChild(option);
- regionOptions.forEach((regionOption) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(regionOption);
- option = DOM.createOption(optionJson);
- ddlRegion.appendChild(option);
- });
- DOM.setElementValuesCurrentAndPrevious(ddlRegion, region[attrIdRegion]);
- tdRegion.appendChild(ddlRegion);
-
- let tdActive = this.createTdActive(supplierAddress[flagActive]);
-
- let tr = document.createElement("tr");
- tr.setAttribute(attrIdSupplierAddress, supplierAddress[attrIdSupplierAddress]);
- tr.setAttribute(attrIdSupplier, supplierAddress[attrIdSupplier]);
- tr.appendChild(tdPostcode);
- tr.appendChild(tdAddressLine1);
- tr.appendChild(tdAddressLine2);
- tr.appendChild(tdCity);
- tr.appendChild(tdCounty);
- tr.appendChild(tdRegion);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupAddressPostcodeInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagPostcode);
- }
- hookupAddressLine1Inputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine1);
- }
- hookupAddressLine2Inputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine2);
- }
- hookupAddressCityInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCity);
- }
- hookupAddressCountyInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCounty);
- }
- hookupAddressRegionDdls() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' select.' + flagRegion);
- }
- hookupAddressActiveCheckboxes() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' input.' + flagActive, (event, element) => {
- let rowSupplierAddress = element.closest('tr');
- let idAddress = rowSupplierAddress.getAttribute(attrIdSupplierAddress);
- DOM.setElementAttributeValueCurrent(rowSupplierAddress, idAddress);
- let rowSupplier = rowSupplierAddress.closest(idTableMain + ' > tbody > tr');
- let checkboxesActive = rowSupplier.querySelectorAll('td.' + flagAddress + ' input.' + flagActive);
- let isActive = element.checked;
- if (isActive) {
- checkboxesActive.forEach((checkbox) => {
- if (checkbox == element) return;
- DOM.setElementValueCurrent(checkbox, false);
- });
- }
- /*
- else if (checkboxesActive.length > 0) {
- DOM.setElementValueCurrent(checkboxesActive[0], false);
- }
- */
- });
- }
- hookupFieldsAddressAddDelete() {
- let selectorButton = idTableMain + ' td.' + flagAddress + ' button';
- let selectorButtonDelete = selectorButton + '.' + flagDelete;
- let selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- }
- hookupAddressDeleteButtons() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' button.' + flagDelete, (event, element) => {
- let row = DOM.getRowFromElement(element);
- row.classList.add(flagDelete);
-
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- element.replaceWith(buttonAdd);
- this.hookupAddressUndeleteButtons();
- });
- }
- hookupAddressUndeleteButtons() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' td button.' + flagAdd, (event, element) => {
- let row = DOM.getRowFromElement(element);
- row.classList.remove(flagDelete);
-
- let buttonDelete = document.createElement("button");
- buttonDelete.classList.add(flagDelete);
- buttonDelete.textContent = 'x';
- element.replaceWith(buttonDelete);
- this.hookupAddressDeleteButtons();
- });
- }
- hookupAddressAddButtons() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' th button.' + flagAdd, (event, element) => {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idSupplier = row.getAttribute(attrIdSupplier);
- let hasActiveAddress = row.querySelectorAll('td.' + flagAddress + ' input.' + flagActive + ':checked').length > 0;
- let countSupplierAddresses = row.querySelectorAll('td.' + flagAddress + ' td.' + flagAddress).length;
- let supplierAddress = {
- [attrIdSupplier]: idSupplier,
- [attrIdSupplierAddress]: -1 - countSupplierAddresses,
- [flagPostcode]: '',
- [flagAddressLine1]: '',
- [flagAddressLine2]: '',
- [flagCity]: '',
- [flagCounty]: '',
- [attrIdRegion]: '',
- [flagActive]: !hasActiveAddress,
- };
- let tbody = row.querySelector('td.' + flagAddress + ' table tbody');
- this.addRowSupplierAddress(tbody, supplierAddress, Utils.getListFromDict(regions));
- if (!hasActiveAddress) {
- let tdAddress = row.querySelector('td.' + flagAddress);
- // tdAddress.setAttribute(attrIdSupplierAddress, supplierAddress[attrIdSupplierAddress]);
- DOM.setElementAttributeValueCurrent(tdAddress, supplierAddress[attrIdSupplierAddress]);
- }
- this.hookupAddressFields();
- });
- }
-
- hookupPhoneNumberInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPhoneNumber + ' textarea');
- }
- hookupFaxInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagFax + ' textarea');
- }
- hookupEmailInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagEmail + ' textarea');
- }
- hookupWebsiteInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagWebsite + ' textarea');
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/router.js b/static/js/router.js
index 36cfcc6..ecb263e 100644
--- a/static/js/router.js
+++ b/static/js/router.js
@@ -4,9 +4,10 @@
import PageHome from './pages/core/home.js';
// Dog
import PageDogHome from './pages/dog/home.js';
+import PageDogCommandCategories from './pages/dog/command_categories.js';
import PageDogCommands from './pages/dog/commands.js';
import PageDogDogCommandLinks from './pages/dog/dog_command_links.js';
-import PageDogDogs from './pages/dog/dogs.js';
+// import PageDogDogs from './pages/dog/dogs.js';
// Legal
import PageAccessibilityReport from './pages/legal/accessibility_report.js';
import PageAccessibilityStatement from './pages/legal/accessibility_statement.js';
@@ -31,9 +32,10 @@ export default class Router {
this.pages[hashPageHome] = { name: 'PageHome', module: PageHome };
// Dog
this.pages[hashPageDogHome] = { name: 'PageDogHome', module: PageDogHome };
+ this.pages[hashPageDogCommandCategories] = { name: 'PageDogCommands', module: PageDogCommandCategories };
this.pages[hashPageDogCommands] = { name: 'PageDogCommands', module: PageDogCommands };
this.pages[hashPageDogDogCommandLinks] = { name: 'PageDogDogCommandLinks', module: PageDogDogCommandLinks };
- this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs };
+ // this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs };
// Legal
this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };
this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };
@@ -49,9 +51,10 @@ export default class Router {
this.routes[hashPageHome] = (isPopState = false) => this.navigateToHash(hashPageHome, isPopState);
// Dog
this.routes[hashPageDogHome] = (isPopState = false) => this.navigateToHash(hashPageDogHome, isPopState);
+ this.routes[hashPageDogCommandCategories] = (isPopState = false) => this.navigateToHash(hashPageDogCommandCategories, isPopState);
this.routes[hashPageDogCommands] = (isPopState = false) => this.navigateToHash(hashPageDogCommands, isPopState);
this.routes[hashPageDogDogCommandLinks] = (isPopState = false) => this.navigateToHash(hashPageDogDogCommandLinks, isPopState);
- this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState);
+ // this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState);
// Legal
this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);
this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);
diff --git a/templates/components/common/buttons/_buttons_save_cancel.html b/templates/components/common/buttons/_buttons_save_cancel.html
index 512d65b..3b9b9f3 100644
--- a/templates/components/common/buttons/_buttons_save_cancel.html
+++ b/templates/components/common/buttons/_buttons_save_cancel.html
@@ -1,15 +1,15 @@
{% if block_id == 'button_save' %}
-Save
+Save
{% elif block_id == 'button_cancel' %}
-Cancel
+Cancel
{% elif block_id == 'button_add' %}
-+
++
{% elif block_id == 'button_confirm' %}
-Confirm
+Confirm
{% elif block_id == 'button_get_in_touch' %}
-Get in touch
+Get in touch
{% elif block_id == 'button_apply_filters' %}
-Apply filters
+Apply filters
{% elif block_id == 'button_clear_filters' %}
{% elif block_id == 'buttons_table_default' %}
diff --git a/templates/components/common/temporary/_overlay_confirm.html b/templates/components/common/temporary/_overlay_confirm.html
index a086d9c..c123e61 100644
--- a/templates/components/common/temporary/_overlay_confirm.html
+++ b/templates/components/common/temporary/_overlay_confirm.html
@@ -1,4 +1,4 @@
-
+
Are you sure?
diff --git a/templates/components/common/temporary/template_overlay.html b/templates/components/common/temporary/template_overlay.html
index 464f817..5614be0 100644
--- a/templates/components/common/temporary/template_overlay.html
+++ b/templates/components/common/temporary/template_overlay.html
@@ -12,7 +12,7 @@
{{ overlay_title }}
- Close
+ Close
diff --git a/templates/components/dog/_row_command.html b/templates/components/dog/_row_command.html
new file mode 100644
index 0000000..1cc0b84
--- /dev/null
+++ b/templates/components/dog/_row_command.html
@@ -0,0 +1,61 @@
+
+{% if is_blank_row %}
+
+
+ {% include 'components/dog/_preview_DDL_command_category.html' %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% set active = True %}
+ {% include 'components/dog/_td_active.html' %}
+
+{% else %}
+
+ {% set command_category = command.command_category %}
+
+ {% include 'components/dog/_preview_DDL_command_category.html' %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% set active = command.active %}
+ {% include 'components/dog/_td_active.html' %}
+
+{% endif %}
diff --git a/templates/components/dog/_row_command_category.html b/templates/components/dog/_row_command_category.html
new file mode 100644
index 0000000..a8145da
--- /dev/null
+++ b/templates/components/dog/_row_command_category.html
@@ -0,0 +1,32 @@
+
+{% if is_blank_row %}
+
+
+
+
+
+
+
+ {% set active = True %}
+ {% include 'components/dog/_td_active.html' %}
+
+{% else %}
+
+
+
+
+
+
+
+ {% set active = command_category.active %}
+ {% include 'components/dog/_td_active.html' %}
+
+{% endif %}
diff --git a/templates/components/dog/_row_dog_command_link.html b/templates/components/dog/_row_dog_command_link.html
index b55fbd1..b18acaa 100644
--- a/templates/components/dog/_row_dog_command_link.html
+++ b/templates/components/dog/_row_dog_command_link.html
@@ -10,11 +10,15 @@
{% include 'components/dog/_preview_DDL_command.html' %}
-
-
+
+
-
-
+
+
{% set active = True %}
{% include 'components/dog/_td_active.html' %}
@@ -33,11 +37,19 @@
{% include 'components/dog/_preview_DDL_command.html' %}
-
-
+
+
-
-
+
+
{% set active = link.active %}
{% include 'components/dog/_td_active.html' %}
diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html
index 7462d77..6b04010 100644
--- a/templates/layouts/layout.html
+++ b/templates/layouts/layout.html
@@ -99,6 +99,7 @@
var flagDirty = "{{ model.FLAG_DIRTY }}";
var flagDisplayOrder = "{{ model.FLAG_DISPLAY_ORDER }}";
var flagDog = "{{ model.FLAG_DOG }}";
+ var flagDogDogCommandLink = "{{ model.FLAG_DOG_DOG_COMMAND_LINK }}";
var flagDragging = "dragging";
var flagDragOver = "drag-over";
var flagEdit = "{{ model.FLAG_EDIT }}";
@@ -128,6 +129,7 @@
var flagNavAdminHome = "{{ model.FLAG_NAV_ADMIN_HOME }}";
var flagNavContact = "{{ model.FLAG_NAV_CONTACT }}";
var flagNavHome = "{{ model.FLAG_NAV_HOME }}";
+ var flagNavDogCommandCategories = "{{ model.FLAG_NAV_DOG_COMMAND_CATEGORIES }}";
var flagNavDogCommands = "{{ model.FLAG_NAV_DOG_COMMANDS }}";
var flagNavDogDogs = "{{ model.FLAG_NAV_DOG_DOGS }}";
var flagNavDogDogCommandLinks = "{{ model.FLAG_NAV_DOG_DOG_COMMAND_LINKS }}";
@@ -165,6 +167,7 @@
var hashPageContact = "{{ model.HASH_PAGE_CONTACT }}";
var hashPageContactSuccess = "{{ model.HASH_PAGE_CONTACT_SUCCESS }}";
var hashPageDataRetentionSchedule = "{{ model.HASH_PAGE_DATA_RETENTION_SCHEDULE }}";
+ var hashPageDogCommandCategories = "{{ model.HASH_PAGE_DOG_COMMAND_CATEGORIES }}";
var hashPageDogCommands = "{{ model.HASH_PAGE_DOG_COMMANDS }}";
var hashPageDogDogCommandLinks = "{{ model.HASH_PAGE_DOG_DOG_COMMAND_LINKS }}";
var hashPageDogDogs = "{{ model.HASH_PAGE_DOG_DOGS }}";
@@ -177,6 +180,9 @@
var hashPageUserAdmin = "{{ model.HASH_PAGE_USER_ADMIN }}";
var hashPageUserLogin = "{{ model.HASH_PAGE_USER_LOGIN }}";
var hashPageUserLogout = "{{ model.HASH_PAGE_USER_LOGOUT }}";
+ var hashSaveDogCommand = "{{ model.HASH_SAVE_DOG_COMMAND }}";
+ var hashSaveDogCommandCategory = "{{ model.HASH_SAVE_DOG_COMMAND_CATEGORY }}";
+ var hashSaveDogDogCommandLink = "{{ model.HASH_SAVE_DOG_DOG_COMMAND_LINK }}";
var idButtonApplyFilters = "#{{ model.ID_BUTTON_APPLY_FILTERS }}";
var idButtonHamburger = "#{{ model.ID_BUTTON_HAMBURGER }}";
var idContainerTemplateElements = "#{{ model.ID_CONTAINER_TEMPLATE_ELEMENTS }}";
@@ -224,7 +230,7 @@
{#
- ☰
+ ☰
#}
diff --git a/templates/pages/dog/_command_categories.html b/templates/pages/dog/_command_categories.html
new file mode 100644
index 0000000..c88462b
--- /dev/null
+++ b/templates/pages/dog/_command_categories.html
@@ -0,0 +1,73 @@
+{% extends 'layouts/layout.html' %}
+
+{% block page_body %}
+
+
+
+
+
+
+
+ Code
+ Name
+
+ {% set class_name = model.FLAG_ACTIVE %}
+ {% set attribute_text = '' %}
+ {% include 'components/common/buttons/_icon_add.html' %}
+
+
+
+
+ {% set is_blank_row = False %}
+ {% for command_category in model.command_categories %}
+ {% include 'components/dog/_row_command_category.html' %}
+ {% endfor %}
+
+ {% set is_blank_row = True %}
+ {% include 'components/dog/_row_command_category.html' %}
+
+
+
+ {% include 'components/common/temporary/_overlay_confirm.html' %}
+ {% include 'components/common/temporary/_overlay_error.html' %}
+
+
+
+
+ {% set class_name = '' %}
+ {% include 'components/common/buttons/_icon_trash.html' %}
+
+ {% set class_name = model.FLAG_ACTIVE %}
+ {% set attribute_text = '' %}
+ {% include 'components/common/buttons/_icon_add.html' %}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/pages/dog/_commands.html b/templates/pages/dog/_commands.html
new file mode 100644
index 0000000..62a674d
--- /dev/null
+++ b/templates/pages/dog/_commands.html
@@ -0,0 +1,89 @@
+{% extends 'layouts/layout.html' %}
+
+{% block page_body %}
+
+
+
+
+
+
+
+ Command Category
+ Command
+ Default Hand Signal
+ Can Have Button?
+ Notes
+
+ {% set class_name = model.FLAG_ACTIVE %}
+ {% set attribute_text = '' %}
+ {% include 'components/common/buttons/_icon_add.html' %}
+
+
+
+
+ {% set is_blank_row = False %}
+ {% for command in model.commands %}
+ {% include 'components/dog/_row_command.html' %}
+ {% endfor %}
+
+ {% set is_blank_row = True %}
+ {% include 'components/dog/_row_command.html' %}
+
+
+
+ {% include 'components/common/temporary/_overlay_confirm.html' %}
+ {% include 'components/common/temporary/_overlay_error.html' %}
+
+
+
+
+ {% set class_name = '' %}
+ {% include 'components/common/buttons/_icon_trash.html' %}
+
+ {% set class_name = model.FLAG_ACTIVE %}
+ {% set attribute_text = '' %}
+ {% include 'components/common/buttons/_icon_add.html' %}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/pages/dog/_dog_command_links.html b/templates/pages/dog/_dog_command_links.html
index c41463a..0d113ae 100644
--- a/templates/pages/dog/_dog_command_links.html
+++ b/templates/pages/dog/_dog_command_links.html
@@ -93,15 +93,12 @@
{% endblock %}
\ No newline at end of file
diff --git a/templates/pages/dog/_home.html b/templates/pages/dog/_home.html
index 1ca07b8..583d0a8 100644
--- a/templates/pages/dog/_home.html
+++ b/templates/pages/dog/_home.html
@@ -9,13 +9,16 @@
Dog
- Dogs
+ Dogs
- Commands
+ Command Categories
- Dog Command Links
+ Commands
+
+
+ Dog Command Links
diff --git a/todo.txt b/todo.txt
index fe76567..84a5037 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,7 +1,9 @@
Command list random generator for assessment - and any other variables e.g. location, handler
-
Last tested
-Print page option on Dog Command Links Page, Assessment-single Page for test sessions, giving the dog to another handler temporarily - give view only access
\ No newline at end of file
+Print page option on Dog Command Links Page, Assessment-single Page for test sessions, giving the dog to another handler temporarily - give view only access
+
+UI warning for attempt to create duplicate
+
diff --git a/webpack.config.js b/webpack.config.js
index a8e5d32..91cef25 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -69,6 +69,10 @@ module.exports = {
path.resolve(__dirname, 'static/css/sections/dog.css'),
path.resolve(__dirname, 'static/css/pages/dog/dogs.css')
],
+ dog_command_categories: [
+ path.resolve(__dirname, 'static/css/sections/dog.css'),
+ path.resolve(__dirname, 'static/css/pages/dog/command_categories.css')
+ ],
dog_commands: [
path.resolve(__dirname, 'static/css/sections/dog.css'),
path.resolve(__dirname, 'static/css/pages/dog/commands.css')