Files
parts_website/static/MySQL/0000_combined.sql

2622 lines
69 KiB
SQL

USE partsltd_prod;
-- Permanent Temp Tables
DROP TABLE IF EXISTS partsltd_prod.tmp_ph_Calc_User;
DROP TABLE IF EXISTS partsltd_prod.tmp_core_Msg_Error;
DROP TABLE IF EXISTS partsltd_prod.tmp_ph_User;
DROP TABLE IF EXISTS partsltd_prod.tmp_ph_User_Role_Link;
-- Permanent Tables
DROP TABLE IF EXISTS partsltd_prod.PH_Contact_Form_Temp;
DROP TABLE IF EXISTS partsltd_prod.PH_Contact_Form_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_Contact_Form;
DROP TABLE IF EXISTS partsltd_prod.PH_Contact_Form_Change_Set;
DROP TABLE IF EXISTS partsltd_prod.PH_Calc_User_Temp;
DROP TABLE IF EXISTS partsltd_prod.PH_User_Role_Link_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_User_Role_Link;
DROP TABLE IF EXISTS partsltd_prod.PH_Role_Permission_Link_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_Role_Permission_Link;
DROP TABLE IF EXISTS partsltd_prod.PH_Role_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_Role;
DROP TABLE IF EXISTS partsltd_prod.PH_User_Temp;
DROP TABLE IF EXISTS partsltd_prod.PH_User_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_User;
DROP TABLE IF EXISTS partsltd_prod.PH_Permission_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_Permission;
DROP TABLE IF EXISTS partsltd_prod.PH_Permission_Group_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_Permission_Group;
DROP TABLE IF EXISTS partsltd_prod.PH_Access_Level_Audit;
DROP TABLE IF EXISTS partsltd_prod.PH_Access_Level;
DROP TABLE IF EXISTS partsltd_prod.PH_User_Change_Set;
DROP TABLE IF EXISTS partsltd_prod.CORE_Split_Key_Value_Pair_Csv_Temp;
DROP TABLE IF EXISTS partsltd_prod.CORE_Split_Temp;
DROP TABLE IF EXISTS partsltd_prod.CORE_Msg_Error_Type;
-- Stored Procedures
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_test_get_many_contact_form;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_get_many_contact_form;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_test_save_contact_form;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_save_contact_form;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_clear_calc_user;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_calc_user;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_clear_split_key_value_pair_csv;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_split_key_value_pair_csv;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_clear_split;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_split;
DROP PROCEDURE IF EXISTS partsltd_prod.p_clear_split_key_value_pair_csv;
DROP PROCEDURE IF EXISTS partsltd_prod.p_split_key_value_pair_csv;
DROP PROCEDURE IF EXISTS partsltd_prod.p_clear_split;
DROP PROCEDURE IF EXISTS partsltd_prod.p_split;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_debug_timing_reporting;
DROP PROCEDURE IF EXISTS partsltd_prod.p_debug_timing_reporting;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_validate_guid;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_validate_guid_test;
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'CORE_Msg_Error_Type'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.CORE_Msg_Error_Type (
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(50) NOT NULL
, name VARCHAR(500) NOT NULL
, description VARCHAR(1000)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'CORE_Split_Temp'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.CORE_Split_Temp (
guid BINARY(36) NOT NULL
, display_order INT NOT NULL
, substring VARCHAR(4000) NOT NULL
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'CORE_Split_Key_Value_Pair_Csv_Temp'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.CORE_Split_Key_Value_Pair_Csv_Temp (
guid BINARY(36) NOT NULL
, id INT NOT NULL
, key_column VARCHAR(4000) NULL
, value_column VARCHAR(4000) NULL
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_User_Change_Set'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_User_Change_Set (
id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, comment VARCHAR(500)
, updated_last_on DATETIME
, id_user_updated_last_by INT
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Access_Level'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Access_Level (
id_access_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(50)
, name VARCHAR(255)
, priority INT NOT NULL
, display_order INT NOT NULL
, active BIT NOT NULL DEFAULT 1
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Permission_Group'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Permission_Group (
id_group INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(50)
, name VARCHAR(255)
, display_order INT NOT NULL
, active BIT NOT NULL DEFAULT 1
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Permission'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Permission (
id_permission INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(50)
, name VARCHAR(255)
, id_permission_group INT NOT NULL
, CONSTRAINT FK_PH_Permission_id_permission_group
FOREIGN KEY (id_permission_group)
REFERENCES partsltd_prod.PH_Permission_Group(id_group)
, id_access_level_required INT NOT NULL
, CONSTRAINT FK_PH_Permission_id_access_level_required
FOREIGN KEY (id_access_level_required)
REFERENCES partsltd_prod.PH_Access_Level(id_access_level)
, display_order INT NOT NULL
, active BIT NOT NULL DEFAULT 1
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_User'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_User (
id_user INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_user_auth0 VARCHAR(200)
, firstname VARCHAR(255)
, surname VARCHAR(255)
, email VARCHAR(254)
, is_email_verified BIT NOT NULL DEFAULT 0
, is_super_user BIT NOT NULL DEFAULT 0
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_PH_User_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES partsltd_prod.PH_User(id_user)
, id_change_set INT
, CONSTRAINT FK_PH_User_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_User_Audit'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_User_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_user INT NOT NULL
, CONSTRAINT FK_PH_User_Audit_id_user
FOREIGN KEY (id_user)
REFERENCES partsltd_prod.PH_User(id_user)
, name_field VARCHAR(50) NOT NULL
, value_prev VARCHAR(500)
, value_new VARCHAR(500)
, id_change_set INT NOT NULL
, CONSTRAINT FK_PH_User_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_User_Temp'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_User_Temp (
id_temp INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_user INT NOT NULL
, id_user_auth0 VARCHAR(200)
, firstname VARCHAR(255)
, surname VARCHAR(255)
, email VARCHAR(254)
, is_email_verified BIT
, is_super_user BIT
, active BIT
, guid BINARY(36) NOT NULL
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Role'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Role (
id_role INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(50)
, name VARCHAR(255)
, display_order INT NOT NULL
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_PH_Role_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES partsltd_prod.PH_User(id_user)
, id_change_set INT
, CONSTRAINT FK_PH_Role_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Role_Audit'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Role_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_role INT NOT NULL
, CONSTRAINT FK_PH_Role_Audit_id_role
FOREIGN KEY (id_role)
REFERENCES partsltd_prod.PH_Role(id_role)
, name_field VARCHAR(50) NOT NULL
, value_prev VARCHAR(500)
, value_new VARCHAR(500)
, id_change_set INT NOT NULL
, CONSTRAINT FK_PH_Role_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Role_Permission_Link'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Role_Permission_Link (
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_role INT NOT NULL
, CONSTRAINT FK_PH_Role_Permission_Link_id_role
FOREIGN KEY (id_role)
REFERENCES partsltd_prod.PH_Role(id_role)
, id_permission INT NOT NULL
, CONSTRAINT FK_PH_Role_Permission_Link_id_permission
FOREIGN KEY (id_permission)
REFERENCES partsltd_prod.PH_Permission(id_permission)
, id_access_level INT NOT NULL
, CONSTRAINT FK_PH_Role_Permission_Link_id_access_level
FOREIGN KEY (id_access_level)
REFERENCES partsltd_prod.PH_Access_Level(id_access_level)
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_PH_Role_Permission_Link_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES partsltd_prod.PH_User(id_user)
, id_change_set INT
, CONSTRAINT FK_PH_Role_Permission_Link_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Role_Permission_Link_Audit';
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Role_Permission_Link_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_link INT NOT NULL
, CONSTRAINT FK_PH_Role_Permission_Link_Audit_id_link
FOREIGN KEY (id_link)
REFERENCES partsltd_prod.PH_Role_Permission_Link(id_link)
, name_field VARCHAR(50) NOT NULL
, value_prev VARCHAR(500)
, value_new VARCHAR(500)
, id_change_set INT NOT NULL
, CONSTRAINT FK_PH_Role_Permission_Link_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_User_Role_Link'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_User_Role_Link (
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_user INT NOT NULL
, CONSTRAINT FK_PH_User_Role_Link_id_user
FOREIGN KEY (id_user)
REFERENCES partsltd_prod.PH_User(id_user)
, id_role INT NOT NULL
, CONSTRAINT FK_PH_User_Role_Link_id_role
FOREIGN KEY (id_role)
REFERENCES partsltd_prod.PH_Role(id_role)
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_PH_User_Role_Link_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES partsltd_prod.PH_User(id_user)
, id_change_set INT
, CONSTRAINT FK_PH_User_Role_Link_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_User_Role_Link_Audit'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_User_Role_Link_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_link INT NOT NULL
, CONSTRAINT FK_PH_User_Role_Link_Audit_id_link
FOREIGN KEY (id_link)
REFERENCES partsltd_prod.PH_User_Role_Link(id_link)
, name_field VARCHAR(50) NOT NULL
, value_prev VARCHAR(500)
, value_new VARCHAR(500)
, id_change_set INT NOT NULL
, CONSTRAINT FK_PH_User_Role_Link_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_User_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Calc_User_Temp'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Calc_User_Temp (
guid BINARY(36) NOT NULL
, id_user INT
, id_permission_required INT NOT NULL
, CONSTRAINT FK_PH_Calc_User_Temp_id_permission_required
FOREIGN KEY (id_permission_required)
REFERENCES partsltd_prod.PH_Permission (id_permission)
, priority_access_level_required INT NOT NULL
, is_super_user BIT
, priority_access_level_user INT
, has_access BIT
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Contact_Form_Change_Set'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Contact_Form_Change_Set (
id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, comment VARCHAR(500)
, updated_last_on DATETIME
, id_user_updated_last_by INT
, CONSTRAINT FK_PH_Role_id_user_updated_last_by
FOREIGN KEY (id_user_updated_last_by)
REFERENCES partsltd_prod.PH_User(id_user)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Contact_Form'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Contact_Form (
id_contact_form INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, email VARCHAR(255) NOT NULL
, name_contact VARCHAR(255) NOT NULL
, name_company VARCHAR(255) NOT NULL
, message TEXT NOT NULL
, receive_marketing_communications BIT NOT NULL DEFAULT 0
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_PH_Contact_Form_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES partsltd_prod.PH_User(id_user)
, id_change_set INT
, CONSTRAINT FK_PH_Contact_Form_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_Contact_Form_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Contact_Form_Audit'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Contact_Form_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_contact_form INT NOT NULL
, CONSTRAINT FK_PH_Contact_Form_Audit_id_contact_form
FOREIGN KEY (id_contact_form)
REFERENCES partsltd_prod.PH_Contact_Form(id_contact_form)
, name_field VARCHAR(50) NOT NULL
, value_prev TEXT
, value_new TEXT
, id_change_set INT NOT NULL
, CONSTRAINT FK_PH_Contact_Form_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES partsltd_prod.PH_Contact_Form_Change_Set(id_change_set)
);
USE partsltd_prod;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'partsltd_prod'
AND TABLE_NAME = 'PH_Contact_Form_Temp'
;
CREATE TABLE IF NOT EXISTS partsltd_prod.PH_Contact_Form_Temp (
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_contact_form INT
, email VARCHAR(255)
, name_contact VARCHAR(255)
, name_company VARCHAR(255)
, message TEXT
, receive_marketing_communications BIT
, active BIT
, guid BINARY(36)
);
USE partsltd_prod;
DROP TRIGGER IF EXISTS partsltd_prod.before_insert_PH_User_Change_Set;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_insert_PH_User_Change_Set
BEFORE INSERT ON partsltd_prod.PH_User_Change_Set
FOR EACH ROW
BEGIN
IF NEW.updated_last_on <=> NULL THEN
SET NEW.updated_last_on = NOW();
END IF;
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_update_PH_User_Change_Set
BEFORE UPDATE ON partsltd_prod.PH_User_Change_Set
FOR EACH ROW
BEGIN
IF NOT EXISTS(SELECT * FROM partsltd_prod.PH_User WHERE id_user = NEW.id_user_updated_last_by) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New Updated-Last-By User ID must be provided.';
END IF;
END //
DELIMITER ;
USE partsltd_prod;
DROP TRIGGER IF EXISTS partsltd_prod.before_insert_PH_User;
DROP TRIGGER IF EXISTS partsltd_prod.before_update_PH_User;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_insert_PH_User
BEFORE INSERT ON partsltd_prod.PH_User
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_update_PH_User
BEFORE UPDATE ON partsltd_prod.PH_User
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO partsltd_prod.PH_User_Audit (
id_user,
name_field,
value_prev,
value_new,
id_change_set
)
-- Changed id_user_auth0
SELECT NEW.id_user, 'id_user_auth0', OLD.id_user_auth0, NEW.id_user_auth0, NEW.id_change_set
WHERE NOT (OLD.id_user_auth0 <=> NEW.id_user_auth0)
UNION
-- Changed firstname
SELECT NEW.id_user, 'firstname', OLD.firstname, NEW.firstname, NEW.id_change_set
WHERE NOT (OLD.firstname <=> NEW.firstname)
UNION
-- Changed surname
SELECT NEW.id_user, 'surname', OLD.surname, NEW.surname, NEW.id_change_set
WHERE NOT (OLD.surname <=> NEW.surname)
UNION
-- Changed email
SELECT NEW.id_user, 'email', OLD.email, NEW.email, NEW.id_change_set
WHERE NOT (OLD.email <=> NEW.email)
UNION
-- Changed is_email_verified
SELECT NEW.id_user, 'is_email_verified', CONVERT(CONVERT(OLD.is_email_verified, SIGNED), CHAR), CONVERT(CONVERT(NEW.is_email_verified, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.is_email_verified <=> NEW.is_email_verified)
UNION
-- Changed is_super_user
SELECT NEW.id_user, 'is_super_user', CONVERT(CONVERT(OLD.is_super_user, SIGNED), CHAR), CONVERT(CONVERT(NEW.is_super_user, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.is_super_user <=> NEW.is_super_user)
UNION
-- Changed active
SELECT NEW.id_user, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
USE partsltd_prod;
DROP TRIGGER IF EXISTS partsltd_prod.before_insert_PH_Role;
DROP TRIGGER IF EXISTS partsltd_prod.before_update_PH_Role;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_insert_PH_Role
BEFORE INSERT ON partsltd_prod.PH_Role
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_update_PH_Role
BEFORE UPDATE ON partsltd_prod.PH_Role
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO partsltd_prod.PH_Role_Audit (
id_role,
name_field,
value_prev,
value_new,
id_change_set
)
-- Changed code
SELECT NEW.id_role, 'code', OLD.code, NEW.code, NEW.id_change_set
WHERE NOT OLD.code <=> NEW.code
UNION
-- Changed name
SELECT NEW.id_role, 'name', OLD.name, NEW.name, NEW.id_change_set
WHERE NOT OLD.name <=> NEW.name
UNION
-- Changed active
SELECT NEW.id_role, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
UNION
-- Changed display_order
SELECT NEW.id_role, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
WHERE NOT OLD.display_order <=> NEW.display_order
;
END //
DELIMITER ;
USE partsltd_prod;
DROP TRIGGER IF EXISTS partsltd_prod.before_insert_PH_Role_Permission_Link;
DROP TRIGGER IF EXISTS partsltd_prod.before_update_PH_Role_Permission_Link;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_insert_PH_Role_Permission_Link
BEFORE INSERT ON partsltd_prod.PH_Role_Permission_Link
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_update_PH_Role_Permission_Link
BEFORE UPDATE ON partsltd_prod.PH_Role_Permission_Link
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO partsltd_prod.PH_Role_Permission_Link_Audit (
id_link,
name_field,
value_prev,
value_new,
id_change_set
)
-- Changed id_role
SELECT NEW.id_link, 'id_role', CONVERT(OLD.id_role, CHAR), CONVERT(NEW.id_role, CHAR), NEW.id_change_set
WHERE NOT OLD.id_role <=> NEW.id_role
UNION
-- Changed id_permission
SELECT NEW.id_link, 'id_permission', CONVERT(OLD.id_permission, CHAR), CONVERT(NEW.id_permission, CHAR), NEW.id_change_set
WHERE NOT OLD.id_permission <=> NEW.id_permission
UNION
-- Changed id_access_level
SELECT NEW.id_link, 'id_access_level', CONVERT(OLD.id_access_level, CHAR), CONVERT(NEW.id_access_level, CHAR), NEW.id_change_set
WHERE NOT OLD.id_access_level <=> NEW.id_access_level
UNION
-- Changed active
SELECT NEW.id_link, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
USE partsltd_prod;
DROP TRIGGER IF EXISTS partsltd_prod.before_insert_PH_User_Role_Link;
DROP TRIGGER IF EXISTS partsltd_prod.before_update_PH_User_Role_Link;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_insert_PH_User_Role_Link
BEFORE INSERT ON partsltd_prod.PH_User_Role_Link
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_update_PH_User_Role_Link
BEFORE UPDATE ON partsltd_prod.PH_User_Role_Link
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO partsltd_prod.PH_User_Role_Link_Audit (
id_link,
name_field,
value_prev,
value_new,
id_change_set
)
-- Changed id_user
SELECT NEW.id_link, 'id_user', CONVERT(OLD.id_user, CHAR), CONVERT(NEW.id_user, CHAR), NEW.id_change_set
WHERE NOT OLD.id_user <=> NEW.id_user
UNION
-- Changed id_role
SELECT NEW.id_link, 'id_role', CONVERT(OLD.id_role, CHAR), CONVERT(NEW.id_role, CHAR), NEW.id_change_set
WHERE NOT OLD.id_role <=> NEW.id_role
UNION
-- Changed active
SELECT NEW.id_link, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;USE partsltd_prod;
DROP TRIGGER IF EXISTS partsltd_prod.before_insert_PH_Contact_Form_Change_Set;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_insert_PH_Contact_Form_Change_Set
BEFORE INSERT ON partsltd_prod.PH_Contact_Form_Change_Set
FOR EACH ROW
BEGIN
IF NEW.updated_last_on <=> NULL THEN
SET NEW.updated_last_on = NOW();
END IF;
END //
DELIMITER ;
USE partsltd_prod;
DROP TRIGGER IF EXISTS partsltd_prod.before_insert_PH_Contact_Form;
DROP TRIGGER IF EXISTS partsltd_prod.before_update_PH_Contact_Form;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_insert_PH_Contact_Form
BEFORE INSERT ON partsltd_prod.PH_Contact_Form
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER partsltd_prod.before_update_PH_Contact_Form
BEFORE UPDATE ON partsltd_prod.PH_Contact_Form
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO partsltd_prod.PH_Contact_Form_Audit (
id_contact_form,
name_field,
value_prev,
value_new,
id_change_set
)
-- Changed email
SELECT NEW.id_contact_form, 'email', OLD.email, NEW.email, NEW.id_change_set
WHERE NOT OLD.email <=> NEW.email
UNION
-- Changed name_contact
SELECT NEW.id_contact_form, 'name_contact', OLD.name_contact, NEW.name_contact, NEW.id_change_set
WHERE NOT OLD.name_contact <=> NEW.name_contact
UNION
-- Changed name_company
SELECT NEW.id_contact_form, 'name_company', OLD.name_company, NEW.name_company, NEW.id_change_set
WHERE NOT OLD.name_company <=> NEW.name_company
UNION
-- Changed message
SELECT NEW.id_contact_form, 'message', OLD.message, NEW.message, NEW.id_change_set
WHERE NOT OLD.message <=> NEW.message
UNION
-- Changed receive_marketing_communications
SELECT NEW.id_contact_form, 'receive_marketing_communications', CONVERT(CONVERT(OLD.receive_marketing_communications, SIGNED), CHAR), CONVERT(CONVERT(NEW.receive_marketing_communications, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.receive_marketing_communications <=> NEW.receive_marketing_communications)
UNION
-- Changed active
SELECT NEW.id_contact_form, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_validate_guid;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_validate_guid_test;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_core_validate_guid (
IN a_guid BINARY(36)
)
BEGIN
IF ISNULL(a_guid) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'GUID is required.'
;
END IF;
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_core_validate_guid_test ()
BEGIN
CALL partsltd_prod.p_core_validate_guid ( 'nips' );
CALL partsltd_prod.p_core_validate_guid ( NULL );
END //
DELIMITER ;
-- CALL partsltd_prod.p_core_validate_guid_test();
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_debug_timing_reporting;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_core_debug_timing_reporting (
IN a_time_start TIMESTAMP(6)
)
BEGIN
/*
PROCEDURE partsltd_prod.p_core_debug_timing_reporting
Shared method timing reporting
*/
DECLARE v_time_end TIMESTAMP(6);
SET v_time_end := CURRENT_TIMESTAMP(6);
SELECT
a_time_start
, UNIX_TIMESTAMP(a_time_start)
, MICROSECOND(a_time_start) / 1000
, v_time_end
, UNIX_TIMESTAMP(v_time_end)
, MICROSECOND(v_time_end) / 1000
, v_time_end - a_time_start AS timestamp_delta
, UNIX_TIMESTAMP(v_time_end - a_time_start) AS UNIX_TIMESTAMP_timestamp_delta
, MICROSECOND(v_time_end - a_time_start) AS MICROSECOND_timestamp_delta
-- , TIME_FORMAT(TIMEDIFF(v_time_end, a_time_start), '%H:%i:%s') AS time_difference
, CONCAT(
TIME_FORMAT(TIMEDIFF(v_time_end, a_time_start), '%H hours, %i minutes, %s seconds'),
', ',
TIMESTAMPDIFF(MICROSECOND, a_time_start, v_time_end) % 1000000 / 1000, ' milliseconds'
) AS time_difference
;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_core_debug_timing_reporting (
CURRENT_TIMESTAMP(6)
);
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_split;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_core_split (
IN a_guid BINARY(36)
, IN a_string LONGTEXT
, IN a_separator VARCHAR(1000)
-- IN a_allow_empty BIT
, IN a_debug BIT
)
BEGIN
DECLARE v_has_string BIT;
DECLARE v_has_separator BIT;
DECLARE v_i_separator INT;
DECLARE v_i_start INT;
DECLARE v_i_end INT;
DECLARE v_current_item VARCHAR(4000);
DECLARE v_time_start TIMESTAMP(6);
SET v_time_start := CURRENT_TIMESTAMP(6);
SET a_string := IFNULL(a_string, '');
SET a_separator := IFNULL(a_separator, '');
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_guid
, a_string
, a_separator
, a_debug
;
END IF;
CALL partsltd_prod.p_core_validate_guid ( a_guid );
DROP TABLE IF EXISTS tmp_Split_Split;
CREATE TEMPORARY TABLE tmp_Split_Split (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
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;
IF v_has_string THEN
SET v_i_start = 1;
SET v_i_end = LOCATE(',', a_string);
WHILE v_i_end > 0 DO
SET v_current_item = SUBSTRING(a_string, v_i_start, v_i_end - v_i_start);
INSERT INTO tmp_Split_Split (substring) VALUES (v_current_item);
SET v_i_start = v_i_end + 1;
SET v_i_end = LOCATE(',', a_string, v_i_start);
END WHILE;
SET v_current_item = SUBSTRING(a_string, v_i_start);
INSERT INTO tmp_Split_Split (substring) VALUES (TRIM(v_current_item));
END IF;
IF EXISTS (SELECT * FROM tmp_Split_Split LIMIT 1) THEN
START TRANSACTION;
INSERT INTO partsltd_prod.CORE_Split_Temp (
guid
, display_order
, substring
)
SELECT
a_guid
, display_order
, substring
FROM tmp_Split_Split
;
COMMIT;
END IF;
DROP TABLE IF EXISTS tmp_Split_Split;
IF a_debug = 1 THEN
CALL partsltd_prod.p_core_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_core_split (
'nips'
, 'noods, cheese ' -- a_string
, ',' -- a_separator
-- '0', -- a_allow_empty
, 1
);
SELECT *
FROM partsltd_prod.CORE_Split_Temp
WHERE GUID = 'nips';
CALL partsltd_prod.p_core_clear_split_temp( 'nips' );
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_clear_split;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_core_clear_split (
IN a_guid BINARY(36)
)
BEGIN
CALL partsltd_prod.p_core_validate_guid( a_guid );
START TRANSACTION;
-- DROP TABLE IF EXISTS
DELETE FROM partsltd_prod.CORE_Split_Temp
WHERE GUID = a_guid
;
COMMIT;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_core_clear_split ( 'nips' );
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_split_key_value_pair_csv;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_core_split_key_value_pair_csv (
IN a_guid BINARY(36)
, IN a_string LONGTEXT
, IN a_debug BIT
)
BEGIN
DECLARE v_has_string BIT;
DECLARE v_current_item VARCHAR(4000);
DECLARE v_time_start TIMESTAMP(6);
SET v_time_start := CURRENT_TIMESTAMP(6);
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;
IF a_debug = 1 THEN
SELECT
a_guid
, a_string
, a_debug
;
END IF;
CALL partsltd_prod.p_core_validate_guid ( a_guid );
DROP TABLE IF EXISTS tmp_Input_Split_Key_Value_Pair_Csv;
DROP TABLE IF EXISTS tmp_Split_Split_Key_Value_Pair_Csv;
CREATE TEMPORARY TABLE tmp_Input_Split_Key_Value_Pair_Csv (
input_string TEXT
);
CREATE TEMPORARY TABLE tmp_Split_Split_Key_Value_Pair_Csv (
id INT AUTO_INCREMENT PRIMARY KEY
, key_column VARCHAR(4000)
, value_column VARCHAR(4000)
);
INSERT INTO tmp_Input_Split_Key_Value_Pair_Csv (
input_string
)
VALUES (
a_string
);
INSERT INTO tmp_Split_Split_Key_Value_Pair_Csv (key_column, value_column)
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(t.pair, ':', 1), ',', -1) AS key_column,
SUBSTRING_INDEX(t.pair, ':', -1) AS value_column
FROM (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(input_string, ',', n), ',', -1) pair
FROM temp_input
CROSS JOIN (
SELECT a.N + b.N * 10 + 1 n
FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) numbers
WHERE n <= 1 + (LENGTH(input_string) - LENGTH(REPLACE(input_string, ',', '')))
) t;
IF EXISTS (SELECT * FROM tmp_Split_Split_Key_Value_Pair_Csv LIMIT 1) THEN
START TRANSACTION;
INSERT INTO partsltd_prod.CORE_Split_Key_Value_Pair_Csv_Temp (
guid
, id
, key_column
, value_column
)
SELECT
a_guid
, id
, key_column
, value_column
FROM tmp_Split_Split_Key_Value_Pair_Csv
;
COMMIT;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Input_Split_Key_Value_Pair_Csv;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Split_Key_Value_Pair_Csv;
IF a_debug = 1 THEN
CALL partsltd_prod.p_core_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_core_split_key_value_pair_csv (
'nipsnipsnipsnipsnipsnipsnipsnipsnips'
, '1:100,2:200,3:300,4:400' -- a_string
, 1
);
SELECT *
FROM partsltd_prod.CORE_Split_key_value_pair_csv_Temp
WHERE GUID = 'nipsnipsnipsnipsnipsnipsnipsnipsnips';
CALL partsltd_prod.p_core_clear_split_key_value_pair_csv_temp( 'nipsnipsnipsnipsnipsnipsnipsnipsnips' );
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_core_clear_split_key_value_pair_csv;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_core_clear_split_key_value_pair_csv (
IN a_guid BINARY(36)
)
BEGIN
CALL partsltd_prod.p_core_validate_guid( a_guid );
START TRANSACTION;
-- DROP TABLE IF EXISTS
DELETE FROM partsltd_prod.CORE_Split_Key_Value_Pair_Csv_Temp
WHERE GUID = a_guid
;
COMMIT;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_core_clear_split_key_value_pair_csv ( 'nips' );
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_user_eval;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_calc_user;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_ph_calc_user (
IN a_guid BINARY(36)
, IN a_ids_user TEXT
, IN a_get_inactive_user BIT
, IN a_ids_permission VARCHAR(4000)
, IN a_debug BIT
)
BEGIN
DECLARE v_has_filter_permission BIT;
DECLARE v_has_filter_user BIT;
DECLARE v_id_permission INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_ids_row_delete VARCHAR(500);
DECLARE v_code_type_error_bad_data VARCHAR(200);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_code_error_permission VARCHAR(200);
DECLARE v_id_permission_required INT;
DECLARE v_priority_access_level_required INT;
DECLARE v_priority_access_level_view INT;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_code_type_error_bad_data := (SELECT code FROM partsltd_prod.CORE_Msg_Error_Type WHERE code = 'BAD_DATA');
SET v_id_type_error_bad_data := (SELECT id_type FROM partsltd_prod.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data);
SET v_code_error_permission := (SELECT code FROM partsltd_prod.CORE_Msg_Error_Type WHERE id_type = 2);
SET v_priority_access_level_view := (SELECT priority FROM partsltd_prod.PH_Access_Level WHERE code = 'VIEW' LIMIT 1);
CALL partsltd_prod.p_core_validate_guid ( a_guid );
SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
SET a_ids_permission := TRIM(IFNULL(a_ids_permission, ''));
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_guid
, a_ids_user
, a_get_inactive_user
, a_ids_permission
, a_debug
;
END IF;
DROP TABLE IF EXISTS tmp_Calc_User;
DROP TABLE IF EXISTS tmp_User_Calc_User;
DROP TABLE IF EXISTS tmp_Split_Calc_User;
CREATE TEMPORARY TABLE tmp_Calc_User (
id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT NULL
, id_permission_required INT NOT NULL
, priority_access_level_required INT NOT NULL
, is_super_user BIT NULL
, priority_access_level_user INT NULL
, has_access BIT
);
CREATE TEMPORARY TABLE tmp_User_Calc_User (
id_user INT NOT NULL
, is_super_user BIT NOT NULL
-- , id_access_level INT
, priority_access_level INT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(50) NOT NULL
, msg VARCHAR(4000) NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Calc_User (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Calc_User;
SET v_has_filter_user = CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
SET a_ids_permission = REPLACE(a_ids_permission, '|', ',');
SET v_has_filter_permission = CASE WHEN a_ids_permission = '' THEN 0 ELSE 1 END;
-- SET v_id_access_level_view = (SELECT id_access_level FROM partsltd_prod.PH_Access_Level WHERE code = 'VIEW' LIMIT 1);
-- Permission IDs
IF NOT v_has_filter_permission THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, 'Permission ID required.'
;
ELSE
CALL partsltd_prod.p_core_split(a_guid, a_ids_permission, ',', a_debug);
INSERT INTO tmp_Split_Calc_User (
substring
, as_int
)
SELECT
substring
, CONVERT(substring, DECIMAL(10,0)) AS as_int
FROM partsltd_prod.CORE_Split_Temp
WHERE
GUID = a_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL partsltd_prod.p_core_clear_split( a_guid );
-- Invalid or inactive
IF EXISTS (
SELECT PERM.id_permission
FROM tmp_Split_Calc_User t_S
LEFT JOIN partsltd_prod.PH_Permission PERM ON t_S.as_int = PERM.id_permission
WHERE
ISNULL(t_S.as_int)
OR ISNULL(PERM.id_permission)
OR PERM.active = 0
) THEN
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 permission IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Calc_User t_S
LEFT JOIN partsltd_prod.PH_Permission PERM ON t_S.as_int = PERM.id_permission
WHERE
ISNULL(t_S.as_int)
OR ISNULL(PERM.id_permission)
OR PERM.active = 0
;
ELSE
SELECT
PERM.id_permission
, PERM.id_access_level_required
INTO
v_id_permission_required
, v_priority_access_level_required
FROM tmp_Split_Calc_User t_S
LEFT JOIN partsltd_prod.PH_Permission PERM ON t_S.as_int = PERM.id_permission
INNER JOIN partsltd_prod.PH_Access_Level AL ON PERM.id_access_level_required = AL.id_access_level
ORDER BY AL.priority ASC
LIMIT 1
;
IF ISNULL(v_id_permission_required) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, 'Valid Permission ID required.'
;
END IF;
END IF;
END IF;
DELETE FROM tmp_Split_Calc_User;
-- Users
CALL partsltd_prod.p_core_split(a_guid, a_ids_user, ',', a_debug);
INSERT INTO tmp_Split_Calc_User (
substring
, as_int
)
SELECT
substring
, CONVERT(substring, DECIMAL(10,0)) AS as_int
FROM partsltd_prod.CORE_Split_Temp
WHERE
GUID = a_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL partsltd_prod.p_core_clear_split( a_guid );
-- Invalid or inactive
IF EXISTS (SELECT U.id_user FROM tmp_Split_Calc_User t_S LEFT JOIN partsltd_prod.PH_User U ON t_S.as_int = U.id_user WHERE ISNULL(t_S.as_int) OR ISNULL(U.id_user) OR (a_get_inactive_user = 0 AND U.active = 0)) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive user IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Calc_User t_S
LEFT JOIN partsltd_prod.PH_User U ON t_S.as_int = U.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
OR (
a_get_inactive_user = 0
AND U.active = 0
)
;
ELSE
IF NOT EXISTS (SELECT * FROM tmp_Split_Calc_User) THEN
INSERT INTO tmp_Split_Calc_User (substring, as_int)
VALUES ( '', NULL );
END IF;
IF a_debug = 1 THEN
SELECT *
FROM tmp_Split_Calc_User;
END IF;
INSERT INTO tmp_User_Calc_User (
id_user
, is_super_user
, priority_access_level
)
SELECT
U.id_user
, IFNULL(U.is_super_user, 0) AS is_super_user
, IFNULL(MIN(AL_U.priority), v_priority_access_level_view) AS priority_access_level
FROM tmp_Split_Calc_User t_S
INNER JOIN partsltd_prod.PH_User U ON t_S.as_int = U.id_user
LEFT JOIN partsltd_prod.PH_User_Role_Link URL
ON U.id_user = URL.id_user
AND URL.active
LEFT JOIN partsltd_prod.PH_Role_Permission_Link RPL
ON URL.id_role = RPL.id_role
AND RPL.active
LEFT JOIN partsltd_prod.PH_Access_Level AL_U
ON RPL.id_access_level = AL_U.id_access_level
AND AL_U.active
GROUP BY U.id_user
;
INSERT INTO tmp_Calc_User (
id_user
, id_permission_required
, priority_access_level_required
, priority_access_level_user
, is_super_user
)
SELECT
t_UCU.id_user
, v_id_permission_required
, v_priority_access_level_required
, t_UCU.priority_access_level AS priority_access_level_user
, t_UCU.is_super_user AS is_super_user
FROM tmp_User_Calc_User t_UCU
;
END IF;
DELETE FROM tmp_Split_Calc_User;
-- Calculated fields
UPDATE tmp_Calc_User t_CU
SET
t_CU.has_access = (
(t_CU.is_super_user = 1)
OR (t_CU.priority_access_level_user <= t_CU.priority_access_level_required)
)
;
-- Export data to staging table
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN
START TRANSACTION;
INSERT INTO partsltd_prod.PH_Calc_User_Temp (
guid
, id_user
, id_permission_required
, priority_access_level_required
, priority_access_level_user
, is_super_user
, has_access
)
SELECT
a_guid
, t_CU.id_user
, t_CU.id_permission_required
, t_CU.priority_access_level_required
, t_CU.priority_access_level_user
, t_CU.is_super_user
, t_CU.has_access
FROM tmp_Calc_User t_CU
;
COMMIT;
END IF;
IF a_debug = 1 THEN
SELECT * FROM tmp_Msg_Error;
SELECT * FROM tmp_Calc_User;
SELECT * FROM tmp_User_Calc_User;
SELECT * FROM partsltd_prod.PH_Calc_User_Temp WHERE GUID = a_guid;
CALL partsltd_prod.p_ph_clear_calc_user ( a_guid, a_debug );
END IF;
-- Clean up
DROP TABLE IF EXISTS tmp_Calc_User;
DROP TABLE IF EXISTS tmp_User_Calc_User;
DELETE FROM tmp_Split_Calc_User;
IF a_debug = 1 THEN
CALL partsltd_prod.p_debug_timing_reporting( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_ph_calc_user (
'chips ' -- a_guid
, 1 -- a_ids_user
, 0 -- a_get_inactive_user
, '2' -- a_ids_permission
, '1' -- a_ids_access_level
, 0 -- a_debug
);
CALL partsltd_prod.p_ph_calc_user (
'chips ' -- a_guid
, 1 -- a_ids_user
, 0 -- a_get_inactive_user
, '2' -- a_ids_permission
, '1' -- a_ids_access_level
, 0 -- a_debug
);
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_clear_calc_user;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_ph_clear_calc_user (
IN a_guid BINARY(36)
, IN a_debug BIT
)
BEGIN
DECLARE v_time_start TIMESTAMP(6);
SET v_time_start := CURRENT_TIMESTAMP(6);
CALL partsltd_prod.p_core_validate_guid ( a_guid );
START TRANSACTION;
DELETE FROM partsltd_prod.PH_Calc_User_Temp
WHERE GUID = a_guid
;
COMMIT;
IF a_debug = 1 THEN
CALL partsltd_prod.p_debug_timing_reporting( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_ph_clear_calc_user (
'chips ' -- a_guid
, 1 -- debug
);
SELECT *
FROM partsltd_prod.PH_Calc_User_Temp
WHERE GUID = 'chips '
;
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_save_contact_form;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_ph_save_contact_form (
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(100);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_permission_contact_form_admin INT;
DECLARE v_id_permission_contact_form_new INT;
DECLARE v_id_change_set INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_can_admin BIT;
DECLARE v_can_create BIT;
DECLARE 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 (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(50) NOT NULL
, msg VARCHAR(4000) NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM partsltd_prod.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT *
FROM tmp_Msg_Error;
DROP TABLE IF EXISTS tmp_Msg_Error
;
END;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT id_type FROM partsltd_prod.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_contact_form_admin := (SELECT id_permission FROM partsltd_prod.PH_Permission P WHERE P.code = 'CONTACT_FORM_ADMIN' LIMIT 1);
SET v_id_permission_contact_form_new := (SELECT id_permission FROM partsltd_prod.PH_Permission P WHERE P.code = 'CONTACT_FORM_NEW' LIMIT 1);
CALL partsltd_prod.p_core_validate_guid ( a_guid );
DROP TABLE IF EXISTS tmp_Contact_Form;
CREATE TEMPORARY TABLE tmp_Contact_Form (
id_contact_form INT NOT NULL
, email VARCHAR(255) NOT NULL
, name_contact VARCHAR(255) NOT NULL
, name_company VARCHAR(255) NOT NULL
, message TEXT NOT NULL
, receive_marketing_communications BIT NOT NULL
, active BIT NOT NULL
, name_error VARCHAR(255)
, is_new BIT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(50) NOT NULL
, msg VARCHAR(4000) NOT NULL
);
-- Get data from Temp table
INSERT INTO tmp_Contact_Form (
id_contact_form
, email
, name_contact
, name_company
, message
, receive_marketing_communications
, active
, is_new
)
SELECT
CF_T.id_contact_form AS id_contact_form
, IFNULL(CF_T.email, CF.email) AS code
, IFNULL(CF_T.name_contact, CF.name_contact) AS name_contact
, IFNULL(CF_T.name_company, CF.name_company) AS name_company
, IFNULL(CF_T.message, CF.message) AS message
, COALESCE(CF_T.receive_marketing_communications, CF.receive_marketing_communications, 0) AS receive_marketing_communications
, COALESCE(CF_T.active, CF.active, 1) AS active
, CASE WHEN IFNULL(CF_T.id_contact_form, 0) < 1 THEN 1 ELSE 0 END AS is_new
FROM partsltd_prod.PH_Contact_Form_Temp CF_T
LEFT JOIN partsltd_prod.PH_Contact_Form CF ON CF_T.id_contact_form = CF.id_contact_form
WHERE CF_T.guid = a_guid
;
UPDATE tmp_Contact_Form t_CF
SET name_error = COALESCE(t_CF.email, t_CF.name_company, t_CF.name_contact, t_CF.message, '(No Contact Form)')
;
-- Validation
-- Missing mandatory fields
-- email
IF EXISTS (SELECT * FROM tmp_Contact_Form t_CF WHERE ISNULL(t_CF.email) 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 Contact Form(s) do not have an Email: ', GROUP_CONCAT(t_CF.name_error SEPARATOR ', ')) AS msg
FROM tmp_Contact_Form t_CF
WHERE ISNULL(t_CF.email)
;
END IF;
-- name_contact
IF EXISTS (SELECT * FROM tmp_Contact_Form t_CF WHERE ISNULL(t_CF.name_contact) 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 Contact Form(s) do not have a Contact Name: ', GROUP_CONCAT(t_CF.name_error SEPARATOR ', ')) AS msg
FROM tmp_Contact_Form t_CF
WHERE ISNULL(t_CF.name_contact)
;
END IF;
-- name_company
IF EXISTS (SELECT * FROM tmp_Contact_Form t_CF WHERE ISNULL(t_CF.name_company) 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 Contact Form(s) do not have a Company Name: ', GROUP_CONCAT(t_CF.name_error SEPARATOR ', ')) AS msg
FROM tmp_Contact_Form t_CF
WHERE ISNULL(t_CF.name)
;
END IF;
-- message
IF EXISTS (SELECT * FROM tmp_Contact_Form t_CF WHERE ISNULL(t_CF.message) 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 Contact Form(s) do not have a Message: ', GROUP_CONCAT(t_CF.name_error SEPARATOR ', ')) AS msg
FROM tmp_Contact_Form t_CF
WHERE ISNULL(t_CF.message)
;
END IF;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_contact_form_admin
, v_id_permission_contact_form_new
, 0 -- a_debug
;
END IF;
CALL partsltd_prod.p_ph_calc_user(
a_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_contact_form_admin
, 0 -- a_debug
);
SELECT
IFNULL(CU_T.has_access, 0)
INTO
v_can_admin
FROM partsltd_prod.PH_Calc_User_Temp CU_T
WHERE CU_T.GUID = a_guid
LIMIT 1
;
CALL partsltd_prod.p_ph_clear_calc_user(
a_guid
, 0 -- a_debug
);
CALL partsltd_prod.p_ph_calc_user(
a_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_contact_form_new
, 0 -- a_debug
);
SELECT
IFNULL(CU_T.has_access, 0)
INTO
v_can_create
FROM partsltd_prod.PH_Calc_User_Temp CU_T
WHERE CU_T.GUID = a_guid
LIMIT 1
;
CALL partsltd_prod.p_ph_clear_calc_user(
a_guid
, 0 -- a_debug
);
IF (v_can_create = 0 AND EXISTS(SELECT * FROM tmp_Contact_Form WHERE is_new = 1)) 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 create new Contact Forms.'
)
;
END IF;
IF (v_can_admin = 0 AND EXISTS(SELECT * FROM tmp_Contact_Form 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 Contact Forms.'
)
;
END IF;
IF EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT * from tmp_Contact_Form;
END IF;
DELETE FROM tmp_Contact_Form;
END IF;
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
START TRANSACTION;
INSERT INTO partsltd_prod.PH_Contact_Form_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 partsltd_prod.PH_Contact_Form CF
INNER JOIN tmp_Contact_Form t_CF
ON CF.id_contact_form = t_CF.id_contact_form
AND t_CF.is_new = 0
SET
CF.email = t_CF.email
, CF.name_contact = t_CF.name_contact
, CF.name_company = t_CF.name_company
, CF.message = t_CF.message
, CF.receive_marketing_communications = t_CF.receive_marketing_communications
, CF.active = t_CF.active
, CF.id_change_set = v_id_change_set
;
INSERT INTO partsltd_prod.PH_Contact_Form (
email
, name_contact
, name_company
, message
, receive_marketing_communications
, active
, id_user_created_by
, created_on
)
SELECT
t_CF.email AS email
, t_CF.name_contact AS name_contact
, t_CF.name_company AS name_company
, t_CF.message AS message
, t_CF.receive_marketing_communications AS receive_marketing_communications
, t_CF.active AS active
, a_id_user AS created_by
, v_time_start AS created_on
FROM tmp_Contact_Form t_CF
WHERE
t_CF.is_new = 1
AND t_CF.active = 1
;
COMMIT;
END IF;
START TRANSACTION;
DELETE FROM partsltd_prod.PH_Contact_Form_Temp
WHERE GUID = a_guid
;
COMMIT;
-- Errors
SELECT *
FROM tmp_Msg_Error t_ME
INNER JOIN partsltd_prod.CORE_Msg_Error_Type MET ON t_ME.id_type = MET.id_type
;
IF a_debug = 1 THEN
SELECT * from tmp_Contact_Form;
END IF;
DROP TEMPORARY TABLE tmp_Contact_Form;
DROP TEMPORARY TABLE tmp_Msg_Error;
IF a_debug = 1 THEN
CALL partsltd_prod.p_core_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
select
*
-- COUNT(*)
-- delete
from partsltd_prod.PH_Contact_Form_Temp
;
CALL partsltd_prod.p_ph_save_product_CFategory (
'nipples'
, (SELECT GUID FROM partsltd_prod.PH_Contact_Form_Temp ORDER BY id_temp DESC LIMIT 1)
, 1
, 1
);
select
*
-- COUNT(*)
-- delete
from partsltd_prod.PH_Contact_Form_Temp
;
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_test_save_contact_form;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_ph_test_save_contact_form ()
BEGIN
DECLARE v_guid BINARY(36);
DECLARE v_time_start TIMESTAMP(6);
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := 'nipple_ripple_chipple_spittle_pickle'; -- 123456789012345678901234567890123456
SELECT 'Start of Test';
SELECT *
FROM partsltd_prod.PH_Contact_Form
;
SELECT *
FROM partsltd_prod.PH_Contact_Form_Temp
;
START TRANSACTION;
INSERT INTO partsltd_prod.PH_Contact_Form_Temp (
id_contact_form
, email
, name_contact
, name_company
, message
, guid
, active
)
/*
VALUES (
-1 -- id_contact_form
, 'edward.middletonsmith@gmail.com' -- email
, 'Teddy' -- name_contact
, 'PARTS Ltd' -- name_company
, 'Sa dude' -- message
, v_guid
)
*/
VALUES (
-1 -- id_contact_form
, 'edward.middletonsmith@gmail.com' -- email
, 'Teddy' -- name_contact
, 'PARTS Ltd' -- name_company
, 'hegrodorf is good' -- message
, v_guid
, 1 -- active
)
;
COMMIT;
SELECT *
FROM partsltd_prod.PH_Contact_Form_Temp
-- WHERE GUID = v_guid
;
CALL partsltd_prod.p_ph_save_contact_form (
'Test save Contact Form' -- comment
, v_guid -- guid
, 3 -- 1 -- id_user
, 1 -- debug
);
SELECT *
FROM partsltd_prod.PH_Contact_Form
;
SELECT *
FROM partsltd_prod.PH_Contact_Form_Temp
;
CALL partsltd_prod.p_debug_timing_reporting ( v_time_start );
END //
DELIMITER ;
/*
SELECT 'Before Test';
SELECT *
FROM partsltd_prod.PH_Contact_Form
;
SELECT *
FROM partsltd_prod.PH_Contact_Form_Temp
;
CALL partsltd_prod.p_ph_test_save_contact_form ();
SELECT 'After Test';
SELECT *
FROM partsltd_prod.PH_Contact_Form
;
SELECT *
FROM partsltd_prod.PH_Contact_Form_Temp
;
DELETE FROM partsltd_prod.PH_Contact_Form_Temp;
DROP TABLE IF EXISTS tmp_Msg_Error;
*/
USE partsltd_prod;
DROP PROCEDURE IF EXISTS partsltd_prod.p_ph_get_many_contact_form;
DELIMITER //
CREATE PROCEDURE partsltd_prod.p_ph_get_many_contact_form (
IN a_id_user INT
, IN a_get_all_contact_form BIT
, IN a_get_inactive_contact_form BIT
, IN a_ids_contact_form VARCHAR(500)
, IN a_debug BIT
)
BEGIN
DECLARE v_has_filter_contact_form BIT;
DECLARE v_guid BINARY(36);
DECLARE v_id_permission_contact_form_view INT;
DECLARE v_id_minimum INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_can_view BIT;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := UUID();
SET v_id_permission_contact_form_view := (SELECT id_permission FROM partsltd_prod.PH_Permission WHERE code = 'CONTACT_FORM_ADMIN' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
SET a_get_all_contact_form := IFNULL(a_get_all_contact_form, 0);
SET a_get_inactive_contact_form := IFNULL(a_get_inactive_contact_form, 0);
SET a_ids_contact_form := TRIM(IFNULL(a_ids_contact_form, ''));
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_id_user
, a_get_all_contact_form
, a_get_inactive_contact_form
, a_ids_contact_form
, a_debug
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split;
DROP TEMPORARY TABLE IF EXISTS tmp_Contact_Form;
CREATE TEMPORARY TABLE tmp_Contact_Form (
id_contact_form INT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(50) NOT NULL
, msg VARCHAR(4000) NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split;
CALL partsltd_prod.p_core_validate_guid ( v_guid );
SET v_has_filter_contact_form = CASE WHEN a_ids_contact_form = '' THEN 0 ELSE 1 END;
-- Contact Forms
IF v_has_filter_contact_form = 1 THEN
CALL partsltd_prod.p_split(v_guid, a_ids_contact_form, ',', a_debug);
INSERT INTO tmp_Split (
substring
, as_int
)
SELECT
substring
, CONVERT(substring, DECIMAL(10,0)) AS as_int
FROM partsltd_prod.CORE_Split_Temp
WHERE
GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL partsltd_prod.p_clear_split_temp( v_guid );
END IF;
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF EXISTS (
SELECT *
FROM tmp_Split t_S
LEFT JOIN partsltd_prod.PH_Contact_Form CF ON t_S.as_int = CF.id_contact_form
WHERE
ISNULL(t_S.as_int)
OR ISNULL(CF.id_contact_form)
OR (
CF.active = 0
AND a_get_inactive_contact_form = 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 Contact Form IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_S
LEFT JOIN partsltd_prod.PH_Contact_Form CF ON t_S.as_int = CF.id_contact_form
WHERE
ISNULL(t_S.as_int)
OR ISNULL(CF.id_contact_form)
OR (
CF.active = 0
AND a_get_inactive_contact_form = 0
)
;
ELSE
INSERT INTO tmp_Contact_Form (
id_contact_form
)
SELECT
CF.id_contact_form
FROM tmp_Split t_S
RIGHT JOIN partsltd_prod.PH_Contact_Form CF ON t_S.as_int = CF.id_contact_form
WHERE
(
a_get_all_contact_form = 1
OR (
v_has_filter_contact_form = 1
AND NOT ISNULL(t_S.as_int)
)
)
AND (
a_get_inactive_contact_form = 1
OR CF.active = 1
)
;
END IF;
END IF;
DELETE FROM tmp_Split;
-- Permissions
IF a_debug = 1 THEN
SELECT
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_contact_form_view
, 0 -- a_debug
;
END IF;
CALL partsltd_prod.p_ph_calc_user(
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_contact_form_view
, 0 -- a_debug
);
SELECT
IFNULL(CU_T.has_access, 0)
INTO
v_can_view
FROM partsltd_prod.PH_Calc_User_Temp CU_T
WHERE CU_T.GUID = v_guid
LIMIT 1
;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Contact Forms.'
)
;
END IF;
CALL partsltd_prod.p_ph_clear_calc_user(
v_guid
, 0 -- a_debug
);
IF v_can_view = 0 THEN
IF a_debug = 1 THEN
SELECT * FROM tmp_Contact_Form;
END IF;
DELETE FROM tmp_Contact_Form;
END IF;
-- Outputs
-- Contact Forms
SELECT
t_CF.id_contact_form
, CF.email
, CF.name_contact
, CF.name_company
, CF.message
, CF.active
, v_can_view
FROM tmp_Contact_Form t_CF
INNER JOIN partsltd_prod.PH_Contact_Form CF ON t_CF.id_contact_form = CF.id_contact_form
GROUP BY t_CF.id_contact_form
ORDER BY CF.created_on DESC
;
-- Errors
SELECT *
FROM tmp_Msg_Error t_ME
INNER JOIN partsltd_prod.CORE_Msg_Error_Type MET ON t_ME.id_type = MET.id_type
;
IF a_debug = 1 AND v_can_view = 1 THEN
SELECT * FROM tmp_Contact_Form;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split;
DROP TEMPORARY TABLE IF EXISTS tmp_Contact_Form;
IF a_debug = 1 THEN
CALL partsltd_prod.p_core_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL partsltd_prod.p_ph_get_many_contact_form (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_contact_form
, 0 -- a_get_inactive_contact_form
, '' -- a_ids_contact_form
, 0 -- a_debug
);
*/
USE partsltd_prod;
-- Error Message Types
INSERT INTO partsltd_prod.CORE_Msg_Error_Type (
code
, name
, description
)
VALUES
(
'BAD_DATA'
, 'Invalid data'
, 'Rubbish data'
)
, (
'NO_PERMISSION'
, 'No permission'
, 'Not authorised'
)
, (
'MYSQL_ERROR'
, 'MySQL error'
, 'MySQL execution error.'
)
, (
'WARNING'
, 'Warning'
, 'Non-breaking error.'
)
;
-- Access Levels
INSERT INTO partsltd_prod.PH_Access_Level (
display_order
, code
, name
, priority
)
VALUES
(
1
, 'VIEW'
, 'View'
, 3
)
, (
2
, 'EDIT'
, 'Edit'
, 2
)
, (
3
, 'ADMIN'
, 'Admin'
, 1
)
;
-- Permission Groups
INSERT INTO partsltd_prod.PH_Permission_Group (
display_order
, code
, name
)
VALUES
(
0
, 'CONTACT_FORM'
, 'Contact Form'
)
, (
1
, 'USER'
, 'Admin User'
)
;
-- Permissions
INSERT INTO partsltd_prod.PH_Permission (
display_order
, code
, name
, id_permission_group
, id_access_level_required
)
VALUES
(
1
, 'CONTACT_FORM_NEW'
, 'New Contact Form'
, 1
, 3
)
, (
1
, 'CONTACT_FORM_ADMIN'
, 'Admin Contact Form'
, 1
, 3
)
, (
1
, 'CONTACT_FORM_CREATE'
, 'Create Contact Form'
, 1
, 1
)
;
-- Users
INSERT INTO partsltd_prod.PH_User (
id_user_auth0
, firstname
, surname
, email
, is_super_user
, active
)
VALUES
(
'auth0|6582b95c895d09a70ba10fef' -- id_user_auth0
, 'Teddy' -- firstname
, 'Middleton-Smith' -- surname
, 'edward.middletonsmith@gmail.com' -- email
, 1 -- is_super_user
, 1 -- active
)
, (
'auth0|672659014296b7f94a9bab45' -- id_user_auth0
, 'Tierney' -- firstname
, 'Gullen' -- surname
, 'tierneybailey13@gmail.com' -- email
, 1 -- is_super_user
, 1 -- active
)
, (
NULL -- id_user_auth0
, 'Contact Form Bot' -- firstname
, 'Bot' -- surname
, 'teddy@partsltd.co.uk' -- email
, 0 -- is_super_user
, 1 -- active
)
;
-- Roles
INSERT INTO partsltd_prod.PH_Role (
display_order
, code
, name
, id_user_created_by
)
VALUES
(
1
, 'DIRECTOR'
, 'Director'
, 1
)
, (
2
, 'USER'
, 'User'
, 1
)
;
-- Role Permission link
INSERT INTO partsltd_prod.PH_Role_Permission_Link (
id_role
, id_permission
, id_access_level
, id_user_created_by
)
VALUES
(
1
, 1
, 3
, 1
)
, (
1
, 2
, 3
, 1
)
, (
1
, 3
, 3
, 1
)
, (
2
, 1
, 1
, 1
)
, (
2
, 2
, 1
, 1
)
, (
2
, 3
, 1
, 1
)
;
-- User Role link
INSERT INTO partsltd_prod.PH_User_Role_Link (
id_user
, id_role
, id_user_created_by
)
VALUES
(
1
, 1
, 1
)
, (
2
, 2
, 1
)
, (
3
, 2
, 1
)
;
INSERT INTO partsltd_prod.PH_Contact_Form (
email
, name_contact
, name_company
, message
, id_user_created_by
)
VALUES
(
'edward.middleton-smith@gmail.com'
, 'Teddy Middleton-Smith'
, 'PARTS Ltd'
, 'Hello, I would like to enquire about your services.'
, 1
)
;
-- Error Message type
SELECT * FROM partsltd_prod.CORE_Msg_Error_Type;
-- User Change Sets
SELECT * FROM partsltd_prod.PH_User_Change_Set;
-- Access Levels
SELECT * FROM partsltd_prod.PH_Access_Level;
-- Permission Groups
SELECT * FROM partsltd_prod.PH_Permission_Group;
-- Permissions
SELECT * FROM partsltd_prod.PH_Permission;
-- Users
SELECT * FROM partsltd_prod.PH_User;
SELECT * FROM partsltd_prod.PH_User_Audit;
-- Roles
SELECT * FROM partsltd_prod.PH_Role;
SELECT * FROM partsltd_prod.PH_Role_Audit;
-- Role Permission link
SELECT * FROM partsltd_prod.PH_Role_Permission_Link;
SELECT * FROM partsltd_prod.PH_Role_Permission_Link_Audit;
-- User Role link
SELECT * FROM partsltd_prod.PH_User_Role_Link;
SELECT * FROM partsltd_prod.PH_User_Role_Link_Audit;
-- Contact Form Change Sets
SELECT * FROM partsltd_prod.PH_Contact_Form_Change_Set;
-- Contact Forms
SELECT * FROM partsltd_prod.PH_Contact_Form;
SELECT * FROM partsltd_prod.PH_Contact_Form_Audit;
SELECT * FROM partsltd_prod.PH_Contact_Form_Temp;