Feat: Home and Contact pages setup with Altcha bot protection and saving to database using alterntive layout.

This commit is contained in:
2025-07-25 19:22:17 +01:00
parent fad5336cc4
commit b76a999d01
95 changed files with 10274 additions and 2115 deletions

View File

@@ -1,32 +1,26 @@
USE demo;
DROP PROCEDURE IF EXISTS demo.p_dog_get_many_response_quality_metric;
DROP PROCEDURE IF EXISTS demo.p_ph_save_contact_form;
DELIMITER //
CREATE PROCEDURE demo.p_dog_get_many_response_quality_metric (
IN a_id_user INT
, IN a_get_all_response_quality_metric BIT
, IN a_get_inactive_response_quality_metric BIT
, IN a_ids_response_quality_metric TEXT
, IN a_names_response_quality_metric 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_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_can_view BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_guid BINARY(36);
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_view INT;
DECLARE v_id_access_level_edit INT;
DECLARE v_id_change_set INT;
DECLARE v_id_permission_contact_form_admin INT;
DECLARE v_id_permission_contact_form_new INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_can_admin BIT;
DECLARE v_can_create BIT;
DECLARE exit handler for SQLEXCEPTION
BEGIN
@@ -39,10 +33,10 @@ BEGIN
ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250) NOT NULL
, msg TEXT NOT NULL
, code VARCHAR(50) NOT NULL
, msg VARCHAR(4000) NOT NULL
);
INSERT INTO tmp_Msg_Error (
@@ -58,94 +52,138 @@ BEGIN
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 demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
SELECT *
FROM tmp_Msg_Error;
DROP TABLE IF EXISTS tmp_Msg_Error
;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := UUID();
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_id_type_error_bad_data := (SELECT id_type FROM demo.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_contact_form_admin := (SELECT id_permission FROM demo.DOG_Permission P WHERE P.code = 'CONTACT_FORM_ADMIN' LIMIT 1);
SET v_id_permission_contact_form_new := (SELECT id_permission FROM demo.DOG_Permission P WHERE P.code = 'CONTACT_FORM_CREATE' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
/*
SET a_get_all_response_quality_metric := IFNULL(a_get_all_response_quality_metric, 0);
SET a_get_inactive_response_quality_metric := IFNULL(a_get_inactive_response_quality_metric, 0);
SET a_ids_response_quality_metric := TRIM(IFNULL(a_ids_response_quality_metric, ''));
SET a_names_response_quality_metric := TRIM(IFNULL(a_names_response_quality_metric, ''));
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_get_all_response_quality_metric
, a_get_inactive_response_quality_metric
, a_ids_response_quality_metric
, a_names_response_quality_metric
, a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met
, a_debug
;
SELECT
v_id_type_error_bad_data
, v_id_type_error_no_permission
, v_guid
, v_id_permission_dog_view
, v_time_start
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric;
DROP TABLE IF EXISTS tmp_Contact_Form;
CREATE TEMPORARY TABLE tmp_Response_Quality_Metric (
id_metric INT NOT NULL
, id_unit_measurement INT
, code VARCHAR(250)
, name VARCHAR(250)
, value_min DOUBLE
, value_max DOUBLE
, active BIT
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
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 (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250) NOT NULL
, msg TEXT NOT 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 demo.PH_Contact_Form_Temp CF_T
LEFT JOIN demo.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
v_guid
a_guid
, 0 -- get_all_user
, 0 -- get_inactive_user
, a_id_user -- ids_user
@@ -156,7 +194,7 @@ 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_view -- ids_permission
, v_id_permission_contact_form_admin -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
@@ -164,7 +202,7 @@ BEGIN
END IF;
CALL demo.p_dog_calc_user(
v_guid
a_guid
, 0 -- get_all_user
, 0 -- get_inactive_user
, a_id_user -- ids_user
@@ -175,7 +213,7 @@ 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_view -- ids_permission
, v_id_permission_contact_form_admin -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
@@ -184,19 +222,83 @@ BEGIN
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
v_can_admin
FROM demo.DOG_Calc_User_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = v_guid
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
SELECT v_can_admin;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
CALL demo.p_dog_clear_calc_user(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT
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_contact_form_new -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
IF (v_can_view = 0) THEN
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_contact_form_new -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_create
FROM demo.DOG_Calc_User_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_create;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
CALL demo.p_dog_clear_calc_user(
a_guid
, 0 -- a_debug
);
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
@@ -204,186 +306,131 @@ BEGIN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view RESPONSE_QUALITY_METRIC.'
, 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 demo.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 demo.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 demo.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;
CALL demo.p_dog_clear_calc_user(
v_guid
, 0 -- a_debug
);
START TRANSACTION;
-- Call Response_Quality_Metric Calc
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_response_quality_metric -- a_get_all_response_quality_metric
, a_get_inactive_response_quality_metric -- a_get_inactive_response_quality_metric
, a_ids_response_quality_metric -- a_ids_response_quality_metric
, a_names_response_quality_metric -- a_names_response_quality_metric
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL demo.p_dog_calc_response_quality_metric (
v_guid -- a_guid
, a_id_user -- a_id_user
, a_get_all_response_quality_metric -- a_get_all_response_quality_metric
, a_get_inactive_response_quality_metric -- a_get_inactive_response_quality_metric
, a_ids_response_quality_metric -- a_ids_response_quality_metric
, a_names_response_quality_metric -- a_names_response_quality_metric
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT COUNT(*) FROM demo.DOG_Response_Quality_Metric_Temp;
SELECT * FROM demo.DOG_Response_Quality_Metric_Temp;
END IF;
INSERT INTO tmp_Response_Quality_Metric (
id_metric
, id_unit_measurement
, code
, name
, value_min
, value_max
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
RESPONSE_QUALITY_METRIC_T.id_metric
, RESPONSE_QUALITY_METRIC_T.id_unit_measurement
, RESPONSE_QUALITY_METRIC_T.code
, RESPONSE_QUALITY_METRIC_T.name
, RESPONSE_QUALITY_METRIC_T.value_min
, RESPONSE_QUALITY_METRIC_T.value_max
, RESPONSE_QUALITY_METRIC_T.active
, RESPONSE_QUALITY_METRIC_T.does_meet_id_filters
, RESPONSE_QUALITY_METRIC_T.does_meet_non_id_filters
FROM demo.DOG_Response_Quality_Metric_Temp RESPONSE_QUALITY_METRIC_T
WHERE RESPONSE_QUALITY_METRIC_T.GUID = v_guid
DELETE FROM demo.PH_Contact_Form_Temp
WHERE GUID = a_guid
;
IF a_debug = 1 THEN
SELECT COUNT(*) FROM tmp_Response_Quality_Metric;
SELECT * FROM tmp_Response_Quality_Metric;
END IF;
END IF;
COMMIT;
-- Filter outputs
IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT * FROM tmp_Response_Quality_Metric;
END IF;
DELETE FROM tmp_Response_Quality_Metric;
END IF;
-- Outputs
-- RESPONSE_QUALITY_METRIC
SELECT
t_RESPONSE_QUALITY_METRIC.id_metric
, t_RESPONSE_QUALITY_METRIC.id_unit_measurement
, UNIT_MEASUREMENT.name_singular AS name_singular_unit_measurement
, UNIT_MEASUREMENT.name_plural AS name_plural_unit_measurement
, UNIT_MEASUREMENT.symbol AS symbol_unit_measurement
, t_RESPONSE_QUALITY_METRIC.code
, t_RESPONSE_QUALITY_METRIC.name
, t_RESPONSE_QUALITY_METRIC.value_min
, t_RESPONSE_QUALITY_METRIC.value_max
, t_RESPONSE_QUALITY_METRIC.active
, t_RESPONSE_QUALITY_METRIC.does_meet_id_filters
, t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters
FROM tmp_Response_Quality_Metric t_RESPONSE_QUALITY_METRIC
LEFT JOIN demo.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON t_RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC.id_metric
LEFT JOIN demo.DOG_Unit_Measurement UNIT_MEASUREMENT ON t_RESPONSE_QUALITY_METRIC.id_unit_measurement = UNIT_MEASUREMENT.id_unit_measurement
ORDER BY t_RESPONSE_QUALITY_METRIC.name
;
-- Errors
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
SELECT *
FROM tmp_Msg_Error t_ME
INNER JOIN demo.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_Response_Quality_Metric;
END IF;
CALL demo.p_dog_clear_calc_response_quality_metric(
v_guid -- a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * from tmp_Contact_Form;
END IF;
DROP TEMPORARY TABLE tmp_Contact_Form;
DROP TEMPORARY TABLE tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric;
IF a_debug = 1 THEN
IF a_debug = 1 THEN
CALL demo.p_core_debug_timing_reporting ( v_time_start );
END IF;
END IF;
END //
DELIMITER ;
/*
select
*
-- COUNT(*)
-- delete
from demo.PH_Contact_Form_Temp
;
CALL demo.p_dog_get_many_response_quality_metric (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_response_quality_metric
, 0 -- a_get_inactive_response_quality_metric
, '' -- a_ids_response_quality_metric
, '' -- a_names_response_quality_metric
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_debug
CALL demo.p_ph_save_contact_form (
'nipples'
, (SELECT GUID FROM demo.PH_Contact_Form_Temp ORDER BY id_temp DESC LIMIT 1)
, 1
, 1
);
select
*
-- COUNT(*)
-- delete
from demo.PH_Contact_Form_Temp
;
CALL demo.p_dog_get_many_response_quality_metric (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_response_quality_metric
, 0 -- a_get_inactive_response_quality_metric
, '' -- a_ids_response_quality_metric
, 'pat,point' -- a_names_response_quality_metric
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_debug
);
*/

View File

@@ -14,6 +14,12 @@ DROP TABLE IF EXISTS parts.tmp_dog_User_Role_Link;
-- Permanent Tables
DROP TABLE IF EXISTS parts.PH_Contact_Form_Temp;
DROP TABLE IF EXISTS parts.PH_Contact_Form_Audit;
DROP TABLE IF EXISTS parts.PH_Contact_Form;
DROP TABLE IF EXISTS parts.PH_Contact_Form_Change_Set;
DROP TABLE IF EXISTS parts.DOG_Assessment_Response_Temp;
DROP TABLE IF EXISTS parts.DOG_Assessment_Response_Audit;
DROP TABLE IF EXISTS parts.DOG_Assessment_Response;
@@ -181,6 +187,11 @@ DROP TABLE IF EXISTS parts.CORE_File_Type;
DROP TABLE IF EXISTS parts.CORE_Msg_Error_Type;
-- Stored Procedures
DROP PROCEDURE IF EXISTS parts.p_ph_test_get_many_contact_form;
DROP PROCEDURE IF EXISTS parts.p_ph_get_many_contact_form;
DROP PROCEDURE IF EXISTS parts.p_ph_test_save_contact_form;
DROP PROCEDURE IF EXISTS parts.p_ph_save_contact_form;
DROP PROCEDURE IF EXISTS parts.p_dog_test_get_many_dog_command;
DROP PROCEDURE IF EXISTS parts.p_dog_test_get_many_command;
DROP PROCEDURE IF EXISTS parts.p_dog_get_many_command;

View File

@@ -1,6 +1,8 @@
USE parts;
-- DROP TABLE IF EXISTS parts.DOG_Assessment_Temp;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
@@ -17,7 +19,7 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Assessment_Temp (
, id_user_handler INT
, notes TEXT
, temperature_celcius DECIMAL(5, 2)
-- , difficulty_level DOUBLE
, difficulty_level DOUBLE
, active BIT
, does_meet_id_filters BIT

View File

@@ -0,0 +1,19 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'PH_Contact_Form_Change_Set'
;
CREATE TABLE IF NOT EXISTS parts.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_Contact_Form_Change_Set_id_user_updated_last_by
FOREIGN KEY (id_user_updated_last_by)
REFERENCES parts.DOG_User(id_user)
);

View File

@@ -0,0 +1,28 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'PH_Contact_Form'
;
CREATE TABLE IF NOT EXISTS parts.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 parts.DOG_User(id_user)
, id_change_set INT
, CONSTRAINT FK_PH_Contact_Form_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.PH_Contact_Form_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,24 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'PH_Contact_Form_Audit'
;
CREATE TABLE IF NOT EXISTS parts.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 parts.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 parts.PH_Contact_Form_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,21 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'PH_Contact_Form_Temp'
;
CREATE TABLE IF NOT EXISTS parts.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)
);

View File

@@ -0,0 +1,14 @@
USE parts;
DROP TRIGGER IF EXISTS parts.before_insert_PH_Contact_Form_Change_Set;
DELIMITER //
CREATE TRIGGER parts.before_insert_PH_Contact_Form_Change_Set
BEFORE INSERT ON parts.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 ;

View File

@@ -0,0 +1,58 @@
USE parts;
DROP TRIGGER IF EXISTS parts.before_insert_PH_Contact_Form;
DROP TRIGGER IF EXISTS parts.before_update_PH_Contact_Form;
DELIMITER //
CREATE TRIGGER parts.before_insert_PH_Contact_Form
BEFORE INSERT ON parts.PH_Contact_Form
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER parts.before_update_PH_Contact_Form
BEFORE UPDATE ON parts.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 parts.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 ;

View File

@@ -0,0 +1,552 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_dog_save_assessment;
DELIMITER //
CREATE PROCEDURE parts.p_dog_save_assessment (
IN a_comment VARCHAR(500),
IN a_guid BINARY(36),
IN a_id_user INT,
IN a_debug BIT
)
BEGIN
DECLARE v_can_admin BIT;
DECLARE v_can_create BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_access_level_edit INT;
DECLARE v_id_change_set INT;
DECLARE v_id_permission_dog_new INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE
, @errno = MYSQL_ERRNO
, @text = MESSAGE_TEXT
;
ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250)
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM parts.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET SESSION group_concat_max_len=15000;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
CALL parts.p_core_validate_guid ( a_guid );
DROP TABLE IF EXISTS tmp_Assessment_Copy;
DROP TABLE IF EXISTS tmp_Assessment;
CREATE TEMPORARY TABLE tmp_Assessment (
id_temp INT
, id_assessment INT
, id_weather INT
, id_lighting_level INT
, id_location INT
, id_user_handler INT
, notes TEXT
, temperature_celcius DECIMAL(5, 2)
, difficulty_level FLOAT
, active BIT
, is_new BIT
, name_error VARCHAR(250)
);
CREATE TEMPORARY TABLE tmp_Assessment_Copy (
id_temp INT
, id_assessment INT
, id_weather INT
, id_lighting_level INT
, id_location INT
, id_user_handler INT
, notes TEXT
, temperature_celcius DECIMAL(5, 2)
, difficulty_level FLOAT
, active BIT
, is_new BIT
, name_error VARCHAR(250)
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250)
, msg TEXT NOT NULL
);
-- Get data from Temp table
INSERT INTO tmp_Assessment (
id_temp
, id_assessment
, id_weather
, id_lighting_level
, id_location
, id_user_handler
, notes
, temperature_celcius
, difficulty_level
, active
, is_new
)
SELECT
ASSESSMENT_T.id_temp
, ASSESSMENT_T.id_assessment
, COALESCE(
ASSESSMENT_T.id_weather
, ASSESSMENT.id_weather
) AS id_weather
, COALESCE(
ASSESSMENT_T.id_lighting_level
, ASSESSMENT.id_lighting_level
) AS id_lighting_level
, COALESCE(
ASSESSMENT_T.id_location
, ASSESSMENT.id_location
) AS id_location
, COALESCE(
ASSESSMENT_T.id_user_handler
, ASSESSMENT.id_user_handler
) AS id_user_handler
, ASSESSMENT_T.notes
, ASSESSMENT_T.temperature_celcius
, ASSESSMENT_T.difficulty_level
, COALESCE(ASSESSMENT_T.active, 1) AS active
, CASE WHEN COALESCE(ASSESSMENT_T.id_assessment, 0) < 1 THEN 1 ELSE 0 END AS is_new
FROM parts.DOG_Assessment_Temp ASSESSMENT_T
LEFT JOIN parts.DOG_Assessment ASSESSMENT ON ASSESSMENT_T.id_assessment = ASSESSMENT.id_assessment
WHERE ASSESSMENT_T.guid = a_guid
;
IF a_debug = 1 THEN
SELECT 'Assessment_Temp records';
SELECT * FROM tmp_Assessment;
SELECT COUNT(*) FROM tmp_Assessment;
END IF;
-- Error names
UPDATE tmp_Assessment t_ASSESSMENT
LEFT JOIN parts.DOG_Assessment ASSESSMENT ON t_ASSESSMENT.id_assessment = ASSESSMENT.id_assessment
SET t_ASSESSMENT.name_error = CONCAT(
CONVERT(COALESCE(t_ASSESSMENT.created_on, ASSESSMENT.created_on, v_time_start), CHAR)
, CASE WHEN t_ASSESSMENT.notes IS NOT NULL THEN CONCAT(' - ', t_ASSESSMENT.notes) ELSE '' END
/*
COALESCE(WEATHER.name, '(No Weather)')
, ' - '
, COALESCE(LIGHTING_LEVEL.name, '(No Lighting Level)')
, ' - '
, COALESCE(LOCATIONS.name, '(No Location)')
, ' - '
, COALESCE(CONCAT(USER_HANDLER.firstname, ' ', USER_HANDLER.surname), '(No User Handler)')
, ' - x'
, CONVERT(COALESCE(t_ASSESSMENT.quantity, 0), CHAR)
*/
)
;
IF a_debug = 1 THEN
SELECT 'After set name_error';
SELECT * FROM tmp_Assessment;
SELECT COUNT(*) FROM tmp_Assessment;
END IF;
-- Validation
-- Missing mandatory fields
-- id_weather
IF EXISTS (
SELECT *
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN demo.DOG_Weather WEATHER ON t_ASSESSMENT.id_weather = WEATHER.id_weather
WHERE
ISNULL(t_ASSESSMENT.id_weather)
OR ISNULL(WEATHER.id_weather)
OR WEATHER.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 Weather Assessment(s) do not have a valid Weather: ', GROUP_CONCAT(t_ASSESSMENT.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN parts.DOG_Weather WEATHER ON t_ASSESSMENT.id_weather = WEATHER.id_weather
WHERE
ISNULL(t_ASSESSMENT.id_weather)
OR ISNULL(WEATHER.id_weather)
OR WEATHER.active = 0
;
END IF;
-- id_lighting_level
IF EXISTS (
SELECT *
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN demo.DOG_Lighting_Level LIGHTING_LEVEL ON t_ASSESSMENT.id_lighting_level = LIGHTING_LEVEL.id_lighting_level
WHERE
ISNULL(t_ASSESSMENT.id_lighting_level)
OR ISNULL(LIGHTING_LEVEL.id_lighting_level)
OR LIGHTING_LEVEL.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 Lighting_Level Assessment(s) do not have a valid Lighting_Level: ', GROUP_CONCAT(t_ASSESSMENT.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN parts.DOG_Lighting_Level LIGHTING_LEVEL ON t_ASSESSMENT.id_lighting_level = LIGHTING_LEVEL.id_lighting_level
WHERE
ISNULL(t_ASSESSMENT.id_lighting_level)
OR ISNULL(LIGHTING_LEVEL.id_lighting_level)
OR LIGHTING_LEVEL.active = 0
;
END IF;
-- id_location
IF EXISTS (
SELECT *
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN demo.DOG_Location LOCATION ON t_ASSESSMENT.id_location = LOCATION.id_location
WHERE
ISNULL(t_ASSESSMENT.id_location)
OR ISNULL(LOCATION.id_location)
OR LOCATION.active = 0
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('The following Dog Location Assessment(s) do not have a valid Location: ', GROUP_CONCAT(t_ASSESSMENT.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN parts.DOG_Location LOCATION ON t_ASSESSMENT.id_location = LOCATION.id_location
WHERE
ISNULL(t_ASSESSMENT.id_location)
OR ISNULL(LOCATION.id_location)
OR LOCATION.active = 0
;
END IF;
-- id_user_handler
IF EXISTS (
SELECT *
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN demo.DOG_User USER_HANDLER ON t_ASSESSMENT.id_user_handler = USER_HANDLER.id_user_handler
WHERE
ISNULL(t_ASSESSMENT.id_user_handler)
OR ISNULL(USER_HANDLER.id_user_handler)
OR USER_HANDLER.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 User_Handler Assessment(s) do not have a valid User_Handler: ', GROUP_CONCAT(t_ASSESSMENT.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment t_ASSESSMENT
LEFT JOIN parts.DOG_User USER_HANDLER ON t_ASSESSMENT.id_user_handler = USER_HANDLER.id_user_handler
WHERE
ISNULL(t_ASSESSMENT.id_user_handler)
OR ISNULL(USER_HANDLER.id_user_handler)
OR USER_HANDLER.active = 0
;
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 Assessments.'
)
;
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_Assessment;
END IF;
DELETE FROM tmp_Assessment;
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_Assessment ASSESSMENT
INNER JOIN tmp_Assessment t_ASSESSMENT
ON ASSESSMENT.id_assessment = t_ASSESSMENT.id_assessment
AND t_ASSESSMENT.is_new = 0
SET
ASSESSMENT.id_weather = t_ASSESSMENT.id_weather
, ASSESSMENT.id_lighting_level = t_ASSESSMENT.id_lighting_level
, ASSESSMENT.id_location = t_ASSESSMENT.id_location
, ASSESSMENT.id_user_handler = t_ASSESSMENT.id_user_handler
, ASSESSMENT.temperature_celcius = t_ASSESSMENT.temperature_celcius
, ASSESSMENT.difficulty_level = t_ASSESSMENT.difficulty_level
, ASSESSMENT.notes = t_ASSESSMENT.notes
, ASSESSMENT.active = t_ASSESSMENT.active
, ASSESSMENT.id_change_set = v_id_change_set
;
INSERT INTO parts.DOG_Assessment (
id_weather
, id_lighting_level
, id_location
, id_user_handler
, temperature_celcius
, difficulty_level
, notes
, active
, id_user_created_by
, created_on
)
SELECT
t_ASSESSMENT.id_weather AS id_weather
, t_ASSESSMENT.id_lighting_level AS id_lighting_level
, t_ASSESSMENT.id_location AS id_location
, t_ASSESSMENT.id_user_handler AS id_user_handler
, t_ASSESSMENT.temperature_celcius AS temperature_celcius
, t_ASSESSMENT.difficulty_level AS difficulty_level
, t_ASSESSMENT.notes AS notes
, t_ASSESSMENT.active AS active
, a_id_user AS created_by
, v_time_start AS created_on
FROM tmp_Assessment t_ASSESSMENT
WHERE
t_ASSESSMENT.is_new = 1
AND t_ASSESSMENT.active = 1
;
COMMIT;
END IF;
START TRANSACTION;
DELETE FROM parts.DOG_Assessment_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_Assessment;
END IF;
DROP TEMPORARY TABLE tmp_Assessment;
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_Assessment WHERE id_assessment > 740;
* /
delete
from parts.DOG_Assessment_Audit
where id_assessment > 768
;
delete
from parts.DOG_Assessment
where id_assessment > 768
;
delete
from parts.DOG_Assessment_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment_Temp
;
select COUNT(*)
from parts.DOG_Assessment_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment
;
select COUNT(*)
from parts.DOG_Assessment
;
INSERT INTO parts.DOG_Assessment_Temp (
id_assessment
, id_dog
, id_command
, hand_signal_description
, notes
, active
, guid
)
VALUES (
-1 -- id_assessment
, 1 -- id_dog
, 1 -- id_command
, 'Test deez noots' -- hand_signal_description
, NULL -- notes
, 1 -- active
, 'ripplesipplenippletippledipplekipple'
);
CALL parts.p_dog_save_assessment (
'nipples'
, 'ripplesipplenippletippledipplekipple'
, 1
, 1
);
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment_Temp
;
select COUNT(*)
from parts.DOG_Assessment_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment
;
select COUNT(*)
from parts.DOG_Assessment
;
*/

View File

@@ -1,693 +0,0 @@
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(250)
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM parts.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET SESSION group_concat_max_len=15000;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
CALL parts.p_core_validate_guid ( a_guid );
DROP TABLE IF EXISTS tmp_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)
);
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)
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250)
, msg TEXT NOT NULL
);
-- Get data from Temp table
INSERT INTO tmp_Dog_Command_Link (
id_temp
, id_link
, id_dog
, id_command
, hand_signal_description
, notes
, active
, is_new
)
SELECT
DOG_COMMAND_LINK_T.id_temp
, COALESCE(DOG_COMMAND_LINK.id_link, 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.hand_signal_description
, DOG_COMMAND_LINK.hand_signal_description
) AS hand_signal_description
, COALESCE(
DOG_COMMAND_LINK_T.notes
, DOG_COMMAND_LINK.notes
) AS notes
, COALESCE(DOG_COMMAND_LINK_T.active, 1) AS active
, CASE WHEN COALESCE(DOG_COMMAND_LINK.id_link, DOG_COMMAND_LINK_T.id_link, 0) < 1 THEN 1 ELSE 0 END AS is_new
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
OR (
DOG_COMMAND_LINK_T.id_dog = DOG_COMMAND_LINK.id_dog
AND DOG_COMMAND_LINK_T.id_command = DOG_COMMAND_LINK.id_command
AND (
DOG_COMMAND_LINK.hand_signal_description IS NULL
OR DOG_COMMAND_LINK_T.hand_signal_description <=> DOG_COMMAND_LINK.hand_signal_description
)
AND (
DOG_COMMAND_LINK.notes IS NULL
OR DOG_COMMAND_LINK_T.notes <=> DOG_COMMAND_LINK.notes
)
)
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
)
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
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
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
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_dog = t_DOG_COMMAND_LINK_COPY.id_dog
AND DOG_COMMAND_LINK.id_command = t_DOG_COMMAND_LINK_COPY.id_command
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 t_DOG_COMMAND_LINK_COPY.is_new = 1
UNION
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
FROM tmp_Dog_Command_Link t_DOG_COMMAND_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 ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate
FROM Combined_Links COMBINED_LINK
)
SELECT *
FROM Duplicate_Link_Row_Numbers;
END IF;
IF EXISTS (
WITH
Combined_Links AS (
SELECT
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
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_dog = t_DOG_COMMAND_LINK_COPY.id_dog
AND DOG_COMMAND_LINK.id_command = t_DOG_COMMAND_LINK_COPY.id_command
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 t_DOG_COMMAND_LINK_COPY.is_new = 1
UNION
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
FROM tmp_Dog_Command_Link t_DOG_COMMAND_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 ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate
FROM Combined_Links COMBINED_LINK
)
SELECT *
FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
WHERE DUPLICATE_LINK.index_link_as_duplicate > 1
GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
WITH
Combined_Links AS (
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
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_dog = t_DOG_COMMAND_LINK_COPY.id_dog
AND DOG_COMMAND_LINK.id_command = t_DOG_COMMAND_LINK_COPY.id_command
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 t_DOG_COMMAND_LINK_COPY.is_new = 1
UNION
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
FROM tmp_Dog_Command_Link t_DOG_COMMAND_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 ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate
FROM Combined_Links COMBINED_LINK
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Attempt to create duplicate or overwrite existing Dog Command Links on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg
FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
WHERE DUPLICATE_LINK.index_link_as_duplicate > 1
GROUP BY
DUPLICATE_LINK.id_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_Audit
where id_link > 768
;
delete
from parts.DOG_Dog_Command_Link
where id_link > 768
;
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 deez noots' -- 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
;
*/

View File

@@ -0,0 +1,672 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_dog_save_distraction;
DELIMITER //
CREATE PROCEDURE parts.p_dog_save_distraction (
IN a_comment VARCHAR(500),
IN a_guid BINARY(36),
IN a_id_user INT,
IN a_debug BIT
)
BEGIN
DECLARE v_can_admin BIT;
DECLARE v_can_create BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_access_level_edit INT;
DECLARE v_id_change_set INT;
DECLARE v_id_permission_dog_new INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE
, @errno = MYSQL_ERRNO
, @text = MESSAGE_TEXT
;
ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250)
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM parts.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET SESSION group_concat_max_len=15000;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
CALL parts.p_core_validate_guid ( a_guid );
DROP TABLE IF EXISTS tmp_Distraction_Copy;
DROP TABLE IF EXISTS tmp_Distraction;
CREATE TEMPORARY TABLE tmp_Distraction (
id_temp INT
, id_distraction INT
, id_assessment INT
, id_distraction_type INT
, id_intensity_level_emotional INT
, id_intensity_level_scent INT
, id_intensity_level_sight INT
, id_intensity_level_sound INT
, id_intensity_level_touch INT
, quantity INT
, proximity_metres FLOAT
, notes TEXT
, active BIT
, is_new BIT
, name_error VARCHAR(250)
);
CREATE TEMPORARY TABLE tmp_Distraction_Copy (
id_temp INT
, id_distraction INT
, id_assessment INT
, id_distraction_type INT
, id_intensity_level_emotional INT
, id_intensity_level_scent INT
, id_intensity_level_sight INT
, id_intensity_level_sound INT
, id_intensity_level_touch INT
, quantity INT
, proximity_metres FLOAT
, notes TEXT
, active BIT
, is_new BIT
, name_error VARCHAR(250)
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250)
, msg TEXT NOT NULL
);
-- Get data from Temp table
INSERT INTO tmp_Distraction (
id_temp
, id_distraction
, id_assessment
, id_distraction_type
, id_intensity_level_emotional
, id_intensity_level_scent
, id_intensity_level_sight
, id_intensity_level_sound
, id_intensity_level_touch
, quantity
, proximity_metres
, notes
, active
, is_new
)
SELECT
DISTRACTION_T.id_temp
, DISTRACTION_T.id_distraction
, COALESCE(
DISTRACTION_T.id_assessment
, DISTRACTION.id_assessment
) AS id_assessment
, COALESCE(
DISTRACTION_T.id_distraction_type
, DISTRACTION.id_distraction_type
) AS id_distraction_type
, COALESCE(
DISTRACTION_T.id_intensity_level_emotional
, DISTRACTION.id_intensity_level_emotional
) AS id_intensity_level_emotional
, COALESCE(
DISTRACTION_T.id_intensity_level_scent
, DISTRACTION.id_intensity_level_scent
) AS id_intensity_level_scent
, COALESCE(
DISTRACTION_T.id_intensity_level_sight
, DISTRACTION.id_intensity_level_sight
) AS id_intensity_level_sight
, COALESCE(
DISTRACTION_T.id_intensity_level_sound
, DISTRACTION.id_intensity_level_sound
) AS id_intensity_level_sound
, COALESCE(
DISTRACTION_T.id_intensity_level_touch
, DISTRACTION.id_intensity_level_touch
) AS id_intensity_level_touch
, DISTRACTION_T.quantity
, DISTRACTION_T.proximity_metres
, DISTRACTION_T.notes
, COALESCE(DISTRACTION_T.active, 1) AS active
, CASE WHEN COALESCE(DISTRACTION_T.id_distraction, 0) < 1 THEN 1 ELSE 0 END AS is_new
FROM parts.DOG_Distraction_Temp DISTRACTION_T
LEFT JOIN parts.DOG_Distraction DISTRACTION ON DISTRACTION_T.id_distraction = DISTRACTION.id_distraction
WHERE DISTRACTION_T.guid = a_guid
;
IF a_debug = 1 THEN
SELECT 'Distraction_Temp records';
SELECT * FROM tmp_Distraction;
SELECT COUNT(*) FROM tmp_Distraction;
END IF;
-- Error names
UPDATE tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Distraction_Type DISTRACTION_TYPE ON t_DISTRACTION.id_distraction_type = DISTRACTION_TYPE.id_type
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_EMOTIONAL ON t_DISTRACTION.id_intensity_level_emotional = DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.id_intensity_level
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SCENT ON t_DISTRACTION.id_intensity_level_scent = DISTRACTION_INTENSITY_LEVEL_SCENT.id_intensity_level
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SIGHT ON t_DISTRACTION.id_intensity_level_sight = DISTRACTION_INTENSITY_LEVEL_SIGHT.id_intensity_level
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SOUND ON t_DISTRACTION.id_intensity_level_sound = DISTRACTION_INTENSITY_LEVEL_SOUND.id_intensity_level
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_TOUCH ON t_DISTRACTION.id_intensity_level_touch = DISTRACTION_INTENSITY_LEVEL_TOUCH.id_intensity_level
SET t_DISTRACTION.name_error = CONCAT(
/*
CONVERT(COALESCE(t_DISTRACTION.created_on, DISTRACTION.created_on, v_time_start), CHAR)
, CASE WHEN t_DISTRACTION.notes IS NOT NULL THEN CONCAT(' - ', t_DISTRACTION.notes) ELSE '' END
*/
COALESCE(DISTRACTION_TYPE.name, '(No Distraction Type)')
, ' - '
, COALESCE(DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.name, '(No Distraction Intensity Level Emotional)')
, ' - '
, COALESCE(DISTRACTION_INTENSITY_LEVEL_SCENT.name, '(No Distraction Intensity Level Scent)')
, ' - '
, COALESCE(DISTRACTION_INTENSITY_LEVEL_SCENT.name, '(No Distraction Intensity Level Sight)')
, ' - '
, COALESCE(DISTRACTION_INTENSITY_LEVEL_SCENT.name, '(No Distraction Intensity Level Sound)')
, ' - '
, COALESCE(DISTRACTION_INTENSITY_LEVEL_SCENT.name, '(No Distraction Intensity Level Touch)')
, ' - x'
, CONVERT(COALESCE(t_ASSESSMENT.quantity, 0), CHAR)
)
;
IF a_debug = 1 THEN
SELECT 'After set name_error';
SELECT * FROM tmp_Distraction;
SELECT COUNT(*) FROM tmp_Distraction;
END IF;
-- Validation
-- Missing mandatory fields
-- id_assessment
IF EXISTS (
SELECT *
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN demo.DOG_Assessment ASSESSMENT ON t_DISTRACTION.id_assessment = ASSESSMENT.id_assessment
WHERE
ISNULL(t_DISTRACTION.id_assessment)
OR ISNULL(ASSESSMENT.id_assessment)
OR ASSESSMENT.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 Assessment Distraction(s) do not have a valid Assessment: ', GROUP_CONCAT(t_DISTRACTION.name_error SEPARATOR ', ')) AS msg
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Assessment ASSESSMENT ON t_DISTRACTION.id_assessment = ASSESSMENT.id_assessment
WHERE
ISNULL(t_DISTRACTION.id_assessment)
OR ISNULL(ASSESSMENT.id_assessment)
OR ASSESSMENT.active = 0
;
END IF;
-- id_distraction_type
IF EXISTS (
SELECT *
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN demo.DOG_Distraction_Type DISTRACTION_TYPE ON t_DISTRACTION.id_distraction_type = DISTRACTION_TYPE.id_distraction_type
WHERE
ISNULL(t_DISTRACTION.id_distraction_type)
OR ISNULL(DISTRACTION_TYPE.id_distraction_type)
OR DISTRACTION_TYPE.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 Distraction_Type Distraction(s) do not have a valid Distraction_Type: ', GROUP_CONCAT(t_DISTRACTION.name_error SEPARATOR ', ')) AS msg
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Distraction_Type DISTRACTION_TYPE ON t_DISTRACTION.id_distraction_type = DISTRACTION_TYPE.id_distraction_type
WHERE
ISNULL(t_DISTRACTION.id_distraction_type)
OR ISNULL(DISTRACTION_TYPE.id_distraction_type)
OR DISTRACTION_TYPE.active = 0
;
END IF;
-- id_intensity_level_emotional
IF EXISTS (
SELECT *
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN demo.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_EMOTIONAL ON t_DISTRACTION.id_intensity_level_emotional = DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.id_intensity_level_emotional
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_emotional)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.id_intensity_level_emotional)
OR DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.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 Distraction(s) do not have a valid Distraction_Intensity_Level_Emotional: ', GROUP_CONCAT(t_DISTRACTION.name_error SEPARATOR ', ')) AS msg
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_EMOTIONAL ON t_DISTRACTION.id_intensity_level_emotional = DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.id_intensity_level_emotional
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_emotional)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.id_intensity_level_emotional)
OR DISTRACTION_INTENSITY_LEVEL_EMOTIONAL.active = 0
;
END IF;
-- id_intensity_level_scent
IF EXISTS (
SELECT *
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN demo.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SCENT ON t_DISTRACTION.id_intensity_level_scent = DISTRACTION_INTENSITY_LEVEL_SCENT.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_scent)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_SCENT.id_intensity_level_scent)
OR DISTRACTION_INTENSITY_LEVEL_SCENT.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 Distraction(s) do not have a valid Intensity Level Scent: ', GROUP_CONCAT(t_DISTRACTION.name_error SEPARATOR ', ')) AS msg
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SCENT ON t_DISTRACTION.id_intensity_level_scent = DISTRACTION_INTENSITY_LEVEL_SCENT.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_scent)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_SCENT.id_intensity_level_scent)
OR DISTRACTION_INTENSITY_LEVEL_SCENT.active = 0
;
END IF;
-- id_intensity_level_sight
IF EXISTS (
SELECT *
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN demo.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SIGHT ON t_DISTRACTION.id_intensity_level_sight = DISTRACTION_INTENSITY_LEVEL_SIGHT.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_sight)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_SIGHT.id_intensity_level_sight)
OR DISTRACTION_INTENSITY_LEVEL_SIGHT.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 Distraction(s) do not have a valid Intensity Level Sight: ', GROUP_CONCAT(t_DISTRACTION.name_error SEPARATOR ', ')) AS msg
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SIGHT ON t_DISTRACTION.id_intensity_level_sight = DISTRACTION_INTENSITY_LEVEL_SIGHT.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_sight)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_SIGHT.id_intensity_level_sight)
OR DISTRACTION_INTENSITY_LEVEL_SIGHT.active = 0
;
END IF;
-- id_intensity_level_sound
IF EXISTS (
SELECT *
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN demo.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SOUND ON t_DISTRACTION.id_intensity_level_sound = DISTRACTION_INTENSITY_LEVEL_SOUND.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_sound)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_SOUND.id_intensity_level_sound)
OR DISTRACTION_INTENSITY_LEVEL_SOUND.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 Distraction(s) do not have a valid Intensity Level Sound: ', GROUP_CONCAT(t_DISTRACTION.name_error SEPARATOR ', ')) AS msg
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_SOUND ON t_DISTRACTION.id_intensity_level_sound = DISTRACTION_INTENSITY_LEVEL_SOUND.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_sound)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_SOUND.id_intensity_level_sound)
OR DISTRACTION_INTENSITY_LEVEL_SOUND.active = 0
;
END IF;
-- id_intensity_level_touch
IF EXISTS (
SELECT *
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN demo.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_TOUCH ON t_DISTRACTION.id_intensity_level_touch = DISTRACTION_INTENSITY_LEVEL_TOUCH.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_touch)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_TOUCH.id_intensity_level_touch)
OR DISTRACTION_INTENSITY_LEVEL_TOUCH.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 Distraction(s) do not have a valid Intensity Level Touch: ', GROUP_CONCAT(t_DISTRACTION.name_error SEPARATOR ', ')) AS msg
FROM tmp_Distraction t_DISTRACTION
LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL_TOUCH ON t_DISTRACTION.id_intensity_level_touch = DISTRACTION_INTENSITY_LEVEL_TOUCH.id_intensity_level
WHERE
ISNULL(t_DISTRACTION.id_intensity_level_touch)
OR ISNULL(DISTRACTION_INTENSITY_LEVEL_TOUCH.id_intensity_level_touch)
OR DISTRACTION_INTENSITY_LEVEL_TOUCH.active = 0
;
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 Distractions.'
)
;
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_Distraction;
END IF;
DELETE FROM tmp_Distraction;
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_Distraction DISTRACTION
INNER JOIN tmp_Distraction t_DISTRACTION
ON DISTRACTION.id_distraction = t_DISTRACTION.id_distraction
AND t_DISTRACTION.is_new = 0
SET
DISTRACTION.id_assessment = t_DISTRACTION.id_assessment
, DISTRACTION.id_distraction_type = t_DISTRACTION.id_distraction_type
, DISTRACTION.id_intensity_level_emotional = t_DISTRACTION.id_intensity_level_emotional
, DISTRACTION.id_intensity_level_scent = t_DISTRACTION.id_intensity_level_scent
, DISTRACTION.id_intensity_level_sight = t_DISTRACTION.id_intensity_level_sight
, DISTRACTION.id_intensity_level_sound = t_DISTRACTION.id_intensity_level_sound
, DISTRACTION.id_intensity_level_touch = t_DISTRACTION.id_intensity_level_touch
, DISTRACTION.quantity = t_DISTRACTION.quantity
, DISTRACTION.proximity_metres = t_DISTRACTION.proximity_metres
, DISTRACTION.notes = t_DISTRACTION.notes
, DISTRACTION.active = t_DISTRACTION.active
, DISTRACTION.id_change_set = v_id_change_set
;
INSERT INTO parts.DOG_Distraction (
id_assessment
, id_distraction_type
, id_intensity_level_emotional
, id_intensity_level_scent
, id_intensity_level_sight
, id_intensity_level_sound
, id_intensity_level_touch
, quantity
, proximity_metres
, notes
, active
, id_user_created_by
, created_on
)
SELECT
t_DISTRACTION.id_assessment AS id_assessment
, t_DISTRACTION.id_distraction_type AS id_distraction_type
, t_DISTRACTION.id_intensity_level_emotional AS id_intensity_level_emotional
, t_DISTRACTION.id_intensity_level_scent AS id_intensity_level_scent
, t_DISTRACTION.id_intensity_level_sight AS id_intensity_level_sight
, t_DISTRACTION.id_intensity_level_sound AS id_intensity_level_sound
, t_DISTRACTION.id_intensity_level_touch AS id_intensity_level_touch
, t_DISTRACTION.quantity AS quantity
, t_DISTRACTION.proximity_metres AS proximity_metres
, t_DISTRACTION.notes AS notes
, t_DISTRACTION.active AS active
, a_id_user AS created_by
, v_time_start AS created_on
FROM tmp_Distraction t_DISTRACTION
WHERE
t_DISTRACTION.is_new = 1
AND t_DISTRACTION.active = 1
;
COMMIT;
END IF;
START TRANSACTION;
DELETE FROM parts.DOG_Distraction_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_Distraction;
END IF;
DROP TEMPORARY TABLE tmp_Distraction;
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_Distraction WHERE id_distraction > 740;
* /
delete
from parts.DOG_Distraction_Audit
where id_distraction > 768
;
delete
from parts.DOG_Distraction
where id_distraction > 768
;
delete
from parts.DOG_Distraction_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Distraction_Temp
;
select COUNT(*)
from parts.DOG_Distraction_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Distraction
;
select COUNT(*)
from parts.DOG_Distraction
;
INSERT INTO parts.DOG_Distraction_Temp (
id_distraction
, id_dog
, id_command
, hand_signal_description
, notes
, active
, guid
)
VALUES (
-1 -- id_distraction
, 1 -- id_dog
, 1 -- id_command
, 'Test deez noots' -- hand_signal_description
, NULL -- notes
, 1 -- active
, 'ripplesipplenippletippledipplekipple'
);
CALL parts.p_dog_save_distraction (
'nipples'
, 'ripplesipplenippletippledipplekipple'
, 1
, 1
);
select
*
-- COUNT(*)
-- delete
from parts.DOG_Distraction_Temp
;
select COUNT(*)
from parts.DOG_Distraction_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Distraction
;
select COUNT(*)
from parts.DOG_Distraction
;
*/

View File

@@ -0,0 +1,672 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_dog_save_assessment_command_modality_link;
DELIMITER //
CREATE PROCEDURE parts.p_dog_save_assessment_command_modality_link (
IN a_comment VARCHAR(500),
IN a_guid BINARY(36),
IN a_id_user INT,
IN a_debug BIT
)
BEGIN
DECLARE v_can_admin BIT;
DECLARE v_can_create BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_access_level_edit INT;
DECLARE v_id_change_set INT;
DECLARE v_id_permission_dog_new INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE
, @errno = MYSQL_ERRNO
, @text = MESSAGE_TEXT
;
ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250)
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
MET.id_type
, @errno
, @text
FROM parts.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
SELECT
t_ERROR.id_error
, t_ERROR.id_type
, t_ERROR.code
, ERROR_TYPE.name
, ERROR_TYPE.description
, ERROR_TYPE.is_breaking_error
, ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour
, t_ERROR.msg
FROM tmp_Msg_Error t_ERROR
INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET SESSION group_concat_max_len=15000;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
CALL parts.p_core_validate_guid ( a_guid );
DROP TABLE IF EXISTS tmp_Assessment_Command_Modality_Link_Copy;
DROP TABLE IF EXISTS tmp_Assessment_Command_Modality_Link;
CREATE TEMPORARY TABLE tmp_Assessment_Command_Modality_Link (
id_temp INT
, id_link INT
, id_assessment INT
, id_command INT
, id_command_modality INT
, id_bribe INT
, distance_from_handler FLOAT
, is_in_sight_of_handler BIT
, is_in_scent_range_of_handler BIT
, is_in_hearing_range_of_handler BIT
, is_on_lead BIT
, trial_count INT
, active BIT
, is_new BIT
, name_error VARCHAR(250)
);
CREATE TEMPORARY TABLE tmp_Assessment_Command_Modality_Link_Copy (
id_temp INT
, id_link INT
, id_assessment INT
, id_command INT
, id_command_modality INT
, id_bribe INT
, id_distance_from_handler INT
, id_is_in_sight_of_handler INT
, id_is_in_scent_range_of_handler INT
, is_in_hearing_range_of_handler INT
, is_on_lead FLOAT
, trial_count TEXT
, active BIT
, is_new BIT
, name_error VARCHAR(250)
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(250)
, msg TEXT NOT NULL
);
-- Get data from Temp table
INSERT INTO tmp_Assessment_Command_Modality_Link (
id_temp
, id_link
, id_assessment
, id_command
, id_command_modality
, id_bribe
, id_distance_from_handler
, id_is_in_sight_of_handler
, id_is_in_scent_range_of_handler
, is_in_hearing_range_of_handler
, is_on_lead
, trial_count
, active
, is_new
)
SELECT
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_temp
, ASSESSMENT_COMMAND_MODALITY_LINK_T.id_link
, COALESCE(
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_assessment
, ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment
) AS id_assessment
, COALESCE(
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_command
, ASSESSMENT_COMMAND_MODALITY_LINK.id_command
) AS id_command
, COALESCE(
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_command_modality
, ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality
) AS id_command_modality
, COALESCE(
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_bribe
, ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe
) AS id_bribe
, COALESCE(
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_distance_from_handler
, ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler
) AS id_distance_from_handler
, COALESCE(
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_is_in_sight_of_handler
, ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler
) AS id_is_in_sight_of_handler
, COALESCE(
ASSESSMENT_COMMAND_MODALITY_LINK_T.id_is_in_scent_range_of_handler
, ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler
) AS id_is_in_scent_range_of_handler
, ASSESSMENT_COMMAND_MODALITY_LINK_T.is_in_hearing_range_of_handler
, ASSESSMENT_COMMAND_MODALITY_LINK_T.is_on_lead
, ASSESSMENT_COMMAND_MODALITY_LINK_T.trial_count
, COALESCE(ASSESSMENT_COMMAND_MODALITY_LINK_T.active, 1) AS active
, CASE WHEN COALESCE(ASSESSMENT_COMMAND_MODALITY_LINK_T.id_link, 0) < 1 THEN 1 ELSE 0 END AS is_new
FROM parts.DOG_Assessment_Command_Modality_Link_Temp ASSESSMENT_COMMAND_MODALITY_LINK_T
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK ON ASSESSMENT_COMMAND_MODALITY_LINK_T.id_link = ASSESSMENT_COMMAND_MODALITY_LINK.id_link
WHERE ASSESSMENT_COMMAND_MODALITY_LINK_T.guid = a_guid
;
IF a_debug = 1 THEN
SELECT 'Assessment_Command_Modality_Link_Temp records';
SELECT * FROM tmp_Assessment_Command_Modality_Link;
SELECT COUNT(*) FROM tmp_Assessment_Command_Modality_Link;
END IF;
-- Error names
UPDATE tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment_Command_Modality_Command ASSESSMENT_COMMAND_MODALITY_COMMAND ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command = ASSESSMENT_COMMAND_MODALITY_COMMAND.id_type
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality = ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.id_intensity_level
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe = ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.id_intensity_level
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler = ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER.id_intensity_level
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler = ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER.id_intensity_level
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler = ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER.id_intensity_level
SET t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error = CONCAT(
/*
CONVERT(COALESCE(t_ASSESSMENT_COMMAND_MODALITY_LINK.created_on, ASSESSMENT_COMMAND_MODALITY_LINK.created_on, v_time_start), CHAR)
, CASE WHEN t_ASSESSMENT_COMMAND_MODALITY_LINK.trial_count IS NOT NULL THEN CONCAT(' - ', t_ASSESSMENT_COMMAND_MODALITY_LINK.trial_count) ELSE '' END
*/
COALESCE(ASSESSMENT_COMMAND_MODALITY_COMMAND.name, '(No Assessment_Command_Modality_Link Type)')
, ' - '
, COALESCE(ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.name, '(No Assessment_Command_Modality_Link Intensity Level Emotional)')
, ' - '
, COALESCE(ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.name, '(No Assessment_Command_Modality_Link Intensity Level Scent)')
, ' - '
, COALESCE(ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.name, '(No Assessment_Command_Modality_Link Intensity Level Sight)')
, ' - '
, COALESCE(ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.name, '(No Assessment_Command_Modality_Link Intensity Level Sound)')
, ' - '
, COALESCE(ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.name, '(No Assessment_Command_Modality_Link Intensity Level Touch)')
, ' - x'
, CONVERT(COALESCE(t_ASSESSMENT.is_in_hearing_range_of_handler, 0), CHAR)
)
;
IF a_debug = 1 THEN
SELECT 'After set name_error';
SELECT * FROM tmp_Assessment_Command_Modality_Link;
SELECT COUNT(*) FROM tmp_Assessment_Command_Modality_Link;
END IF;
-- Validation
-- Missing mandatory fields
-- id_assessment
IF EXISTS (
SELECT *
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN demo.DOG_Assessment ASSESSMENT ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment = ASSESSMENT.id_assessment
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment)
OR ISNULL(ASSESSMENT.id_assessment)
OR ASSESSMENT.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 Assessment Assessment_Command_Modality_Link(s) do not have a valid Assessment: ', GROUP_CONCAT(t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment ASSESSMENT ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment = ASSESSMENT.id_assessment
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment)
OR ISNULL(ASSESSMENT.id_assessment)
OR ASSESSMENT.active = 0
;
END IF;
-- id_command
IF EXISTS (
SELECT *
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN demo.DOG_Assessment_Command_Modality_Command ASSESSMENT_COMMAND_MODALITY_COMMAND ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command = ASSESSMENT_COMMAND_MODALITY_COMMAND.id_command
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_COMMAND.id_command)
OR ASSESSMENT_COMMAND_MODALITY_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 Assessment_Command_Modality_Command Assessment_Command_Modality_Link(s) do not have a valid Assessment_Command_Modality_Command: ', GROUP_CONCAT(t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment_Command_Modality_Command ASSESSMENT_COMMAND_MODALITY_COMMAND ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command = ASSESSMENT_COMMAND_MODALITY_COMMAND.id_command
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_COMMAND.id_command)
OR ASSESSMENT_COMMAND_MODALITY_COMMAND.active = 0
;
END IF;
-- id_command_modality
IF EXISTS (
SELECT *
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN demo.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality = ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.id_command_modality
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.id_command_modality)
OR ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.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 Assessment_Command_Modality_Link(s) do not have a valid Assessment_Command_Modality_Link_Command_Modality: ', GROUP_CONCAT(t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality = ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.id_command_modality
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.id_command_modality)
OR ASSESSMENT_COMMAND_MODALITY_LINK_COMMAND_MODALITY.active = 0
;
END IF;
-- id_bribe
IF EXISTS (
SELECT *
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN demo.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe = ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.id_bribe)
OR ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.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 Assessment_Command_Modality_Link(s) do not have a valid Intensity Level Scent: ', GROUP_CONCAT(t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe = ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.id_bribe)
OR ASSESSMENT_COMMAND_MODALITY_LINK_BRIBE.active = 0
;
END IF;
-- id_distance_from_handler
IF EXISTS (
SELECT *
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN demo.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler = ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER.id_distance_from_handler)
OR ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER.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 Assessment_Command_Modality_Link(s) do not have a valid Intensity Level Sight: ', GROUP_CONCAT(t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler = ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER.id_distance_from_handler)
OR ASSESSMENT_COMMAND_MODALITY_LINK_DISTANCE_FROM_HANDLER.active = 0
;
END IF;
-- id_is_in_sight_of_handler
IF EXISTS (
SELECT *
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN demo.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler = ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER.id_is_in_sight_of_handler)
OR ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER.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 Assessment_Command_Modality_Link(s) do not have a valid Intensity Level Sound: ', GROUP_CONCAT(t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler = ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER.id_is_in_sight_of_handler)
OR ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SIGHT_OF_HANDLER.active = 0
;
END IF;
-- id_is_in_scent_range_of_handler
IF EXISTS (
SELECT *
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN demo.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler = ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER.id_is_in_scent_range_of_handler)
OR ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER.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 Assessment_Command_Modality_Link(s) do not have a valid Intensity Level Touch: ', GROUP_CONCAT(t_ASSESSMENT_COMMAND_MODALITY_LINK.name_error SEPARATOR ', ')) AS msg
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
LEFT JOIN parts.DOG_Assessment_Command_Modality_Link_Intensity_Level ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler = ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER.id_intensity_level
WHERE
ISNULL(t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler)
OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER.id_is_in_scent_range_of_handler)
OR ASSESSMENT_COMMAND_MODALITY_LINK_IS_IN_SCENT_RANGE_OF_HANDLER.active = 0
;
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 Assessment_Command_Modality_Links.'
)
;
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_Assessment_Command_Modality_Link;
END IF;
DELETE FROM tmp_Assessment_Command_Modality_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_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK
INNER JOIN tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
ON ASSESSMENT_COMMAND_MODALITY_LINK.id_link = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_link
AND t_ASSESSMENT_COMMAND_MODALITY_LINK.is_new = 0
SET
ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment
, ASSESSMENT_COMMAND_MODALITY_LINK.id_command = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command
, ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality
, ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe
, ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler
, ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler
, ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler
, ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler = t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler
, ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead = t_ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead
, ASSESSMENT_COMMAND_MODALITY_LINK.trial_count = t_ASSESSMENT_COMMAND_MODALITY_LINK.trial_count
, ASSESSMENT_COMMAND_MODALITY_LINK.active = t_ASSESSMENT_COMMAND_MODALITY_LINK.active
, ASSESSMENT_COMMAND_MODALITY_LINK.id_change_set = v_id_change_set
;
INSERT INTO parts.DOG_Assessment_Command_Modality_Link (
id_assessment
, id_command
, id_command_modality
, id_bribe
, id_distance_from_handler
, id_is_in_sight_of_handler
, id_is_in_scent_range_of_handler
, is_in_hearing_range_of_handler
, is_on_lead
, trial_count
, active
, id_user_created_by
, created_on
)
SELECT
t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment AS id_assessment
, t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command AS id_command
, t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality AS id_command_modality
, t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe AS id_bribe
, t_ASSESSMENT_COMMAND_MODALITY_LINK.id_distance_from_handler AS id_distance_from_handler
, t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_sight_of_handler AS id_is_in_sight_of_handler
, t_ASSESSMENT_COMMAND_MODALITY_LINK.id_is_in_scent_range_of_handler AS id_is_in_scent_range_of_handler
, t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler AS is_in_hearing_range_of_handler
, t_ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead AS is_on_lead
, t_ASSESSMENT_COMMAND_MODALITY_LINK.trial_count AS trial_count
, t_ASSESSMENT_COMMAND_MODALITY_LINK.active AS active
, a_id_user AS created_by
, v_time_start AS created_on
FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK
WHERE
t_ASSESSMENT_COMMAND_MODALITY_LINK.is_new = 1
AND t_ASSESSMENT_COMMAND_MODALITY_LINK.active = 1
;
COMMIT;
END IF;
START TRANSACTION;
DELETE FROM parts.DOG_Assessment_Command_Modality_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_Assessment_Command_Modality_Link;
END IF;
DROP TEMPORARY TABLE tmp_Assessment_Command_Modality_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_Assessment_Command_Modality_Link WHERE id_link > 740;
* /
delete
from parts.DOG_Assessment_Command_Modality_Link_Audit
where id_link > 768
;
delete
from parts.DOG_Assessment_Command_Modality_Link
where id_link > 768
;
delete
from parts.DOG_Assessment_Command_Modality_Link_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment_Command_Modality_Link_Temp
;
select COUNT(*)
from parts.DOG_Assessment_Command_Modality_Link_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment_Command_Modality_Link
;
select COUNT(*)
from parts.DOG_Assessment_Command_Modality_Link
;
INSERT INTO parts.DOG_Assessment_Command_Modality_Link_Temp (
id_link
, id_dog
, id_command
, hand_signal_description
, trial_count
, active
, guid
)
VALUES (
-1 -- id_link
, 1 -- id_dog
, 1 -- id_command
, 'Test deez noots' -- hand_signal_description
, NULL -- trial_count
, 1 -- active
, 'ripplesipplenippletippledipplekipple'
);
CALL parts.p_dog_save_assessment_command_modality_link (
'nipples'
, 'ripplesipplenippletippledipplekipple'
, 1
, 1
);
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment_Command_Modality_Link_Temp
;
select COUNT(*)
from parts.DOG_Assessment_Command_Modality_Link_Temp
;
select
*
-- COUNT(*)
-- delete
from parts.DOG_Assessment_Command_Modality_Link
;
select COUNT(*)
from parts.DOG_Assessment_Command_Modality_Link
;
*/

View File

@@ -0,0 +1,436 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_ph_save_contact_form;
DELIMITER //
CREATE PROCEDURE parts.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_access_level_view INT;
DECLARE v_id_access_level_edit INT;
DECLARE v_id_change_set INT;
DECLARE v_id_permission_contact_form_admin INT;
DECLARE v_id_permission_contact_form_new INT;
DECLARE v_id_type_error_bad_data 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 parts.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 parts.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 parts.DOG_Permission P WHERE P.code = 'CONTACT_FORM_ADMIN' LIMIT 1);
SET v_id_permission_contact_form_new := (SELECT id_permission FROM parts.DOG_Permission P WHERE P.code = 'CONTACT_FORM_CREATE' LIMIT 1);
CALL parts.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 parts.PH_Contact_Form_Temp CF_T
LEFT JOIN parts.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
, 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_contact_form_admin -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL parts.p_dog_calc_user(
a_guid
, 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_contact_form_admin -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_admin
FROM parts.DOG_Calc_User_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_admin;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
CALL parts.p_dog_clear_calc_user(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT
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_contact_form_new -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL parts.p_dog_calc_user(
a_guid
, 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_contact_form_new -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_create
FROM parts.DOG_Calc_User_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_create;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
CALL parts.p_dog_clear_calc_user(
a_guid
, 0 -- a_debug
);
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 parts.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 parts.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 parts.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 parts.PH_Contact_Form_Temp
WHERE GUID = a_guid
;
COMMIT;
-- Errors
SELECT *
FROM tmp_Msg_Error t_ME
INNER JOIN parts.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 parts.p_core_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
select
*
-- COUNT(*)
-- delete
from parts.PH_Contact_Form_Temp
;
CALL parts.p_ph_save_contact_form (
'nipples'
, (SELECT GUID FROM parts.PH_Contact_Form_Temp ORDER BY id_temp DESC LIMIT 1)
, 1
, 1
);
select
*
-- COUNT(*)
-- delete
from parts.PH_Contact_Form_Temp
;
*/

View File

@@ -0,0 +1,277 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_ph_get_many_contact_form;
DELIMITER //
CREATE PROCEDURE parts.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_access_level_admin INT;
DECLARE v_id_permission_contact_form_admin 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_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_permission_contact_form_admin := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.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 parts.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 parts.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 parts.CORE_Split_Temp
WHERE
GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL parts.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 parts.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 parts.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 parts.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
, 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_contact_form_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL parts.p_dog_calc_user(
v_guid
, 0 -- get_all_user
, 0 -- get_inactive_user
, a_id_user -- ids_user
, '' -- a_auth0_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_id_permission_contact_form_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM parts.DOG_Calc_User_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = v_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Contact Forms.'
)
;
IF a_debug = 1 THEN
SELECT * FROM tmp_Contact_Form;
END IF;
DELETE FROM tmp_Contact_Form;
END IF;
CALL parts.p_dog_clear_calc_user(
v_guid
, 0 -- a_debug
);
-- 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 parts.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 parts.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 parts.p_core_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;
/*
CALL parts.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
);
*/

View File

@@ -99,7 +99,12 @@ VALUES
, (
1
, 'USER'
, 'Admin User'
, 'User'
)
, (
2
, 'PROJECT_HUB'
, 'Project Hub'
)
;
@@ -154,6 +159,20 @@ VALUES
, 2
, 2
)
, (
1
, 'CONTACT_FORM_ADMIN'
, 'Admin Contact Form'
, 3
, 3
)
, (
1
, 'CONTACT_FORM_CREATE'
, 'Create Contact Form'
, 3
, 4
)
;
-- Users
@@ -265,6 +284,18 @@ VALUES
, 6
, 3
, 1
)
, (
1
, 7
, 3
, 1
)
, (
1
, 8
, 3
, 1
)
, (
2
@@ -302,6 +333,18 @@ VALUES
, 1
, 1
)
, (
2
, 7
, 4
, 1
)
, (
2
, 8
, 1
, 1
)
;
-- User Role link

View File

@@ -0,0 +1,108 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_ph_test_save_contact_form;
DELIMITER //
CREATE PROCEDURE parts.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 parts.PH_Contact_Form
;
SELECT *
FROM parts.PH_Contact_Form_Temp
;
START TRANSACTION;
INSERT INTO parts.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 parts.PH_Contact_Form_Temp
-- WHERE GUID = v_guid
;
CALL parts.p_ph_save_contact_form (
'Test save Contact Form' -- comment
, v_guid -- guid
, 3 -- 1 -- id_user
, 1 -- debug
);
SELECT *
FROM parts.PH_Contact_Form
;
SELECT *
FROM parts.PH_Contact_Form_Temp
;
CALL parts.p_debug_timing_reporting ( v_time_start );
END //
DELIMITER ;
/*
SELECT 'Before Test';
SELECT *
FROM parts.PH_Contact_Form
;
SELECT *
FROM parts.PH_Contact_Form_Temp
;
CALL parts.p_ph_test_save_contact_form ();
SELECT 'After Test';
SELECT *
FROM parts.PH_Contact_Form
;
SELECT *
FROM parts.PH_Contact_Form_Temp
;
DELETE FROM parts.PH_Contact_Form_Temp;
DROP TABLE IF EXISTS tmp_Msg_Error;
*/