feat(UI): Stock Items page added with getting, filtering, and saving data.

This commit is contained in:
2024-10-13 19:40:25 +01:00
parent 8e1651d9d7
commit fdcf448bb1
187 changed files with 5939 additions and 8825 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -41,6 +41,8 @@ DROP TABLE IF EXISTS tmp_Shop_Customer_Sale_Order;
# Delete old tables
DROP TABLE IF EXISTS Split_Temp;
DROP TABLE IF EXISTS Split_Key_Value_Pair_Csv_Temp;
DROP TABLE IF EXISTS Split_Key_Value_Pair_Temp;
DROP TABLE IF EXISTS Shop_User_Eval_Temp;
DROP TABLE IF EXISTS Shop_Calc_User_Temp;
@@ -87,8 +89,8 @@ DROP TABLE IF EXISTS Shop_User_Order_Status;
DROP TABLE IF EXISTS Shop_User_Basket_Audit;
DROP TABLE IF EXISTS Shop_User_Basket;
DROP TABLE IF EXISTS Shop_Address_Audit;
DROP TABLE IF EXISTS Shop_Address;
DROP TABLE IF EXISTS Shop_User_Address_Audit;
DROP TABLE IF EXISTS Shop_User_Address;
DROP TABLE IF EXISTS Shop_User_Role_Link_Audit;
DROP TABLE IF EXISTS Shop_User_Role_Link;
@@ -190,6 +192,9 @@ DROP TABLE IF EXISTS Shop_Plant_Temp;
DROP TABLE IF EXISTS Shop_Plant_Audit;
DROP TABLE IF EXISTS Shop_Plant;
DROP TABLE IF EXISTS Shop_Address_Audit;
DROP TABLE IF EXISTS Shop_Address;
DROP TABLE IF EXISTS Shop_Delivery_Region_Branch_Audit;
DROP TABLE IF EXISTS Shop_Delivery_Region_Branch;
DROP TABLE IF EXISTS Shop_Region_Branch_Temp;
@@ -232,6 +237,9 @@ DROP TABLE IF EXISTS Shop_Product_Change_Set;
-- Procedures
DROP PROCEDURE IF EXISTS p_split;
DROP PROCEDURE IF EXISTS p_clear_split_temp;
DROP PROCEDURE IF EXISTS p_split_key_value_pair_csv;
DROP PROCEDURE IF EXISTS p_clear_split_key_value_csv_temp;
DROP PROCEDURE IF EXISTS p_clear_split_key_value_pair_csv_temp;
DROP PROCEDURE IF EXISTS p_debug_timing_reporting;
DROP PROCEDURE IF EXISTS p_validate_guid;
@@ -248,12 +256,15 @@ DROP PROCEDURE IF EXISTS p_shop_get_many_access_level;
DROP PROCEDURE IF EXISTS p_shop_get_many_unit_measurement;
DROP PROCEDURE IF EXISTS p_shop_get_many_region;
DROP PROCEDURE IF EXISTS p_shop_get_many_plant;
DROP PROCEDURE IF EXISTS p_shop_get_many_storage_location;
DROP PROCEDURE IF EXISTS p_shop_get_many_currency;
DROP PROCEDURE IF EXISTS p_shop_save_category;
DROP PROCEDURE IF EXISTS p_shop_save_product_category;
DROP PROCEDURE IF EXISTS p_shop_save_product_category_test;
DROP PROCEDURE IF EXISTS p_shop_save_product;
DROP PROCEDURE IF EXISTS p_shop_save_product_test;
DROP PROCEDURE IF EXISTS p_shop_calc_product_permutation;
DROP PROCEDURE IF EXISTS p_shop_clear_calc_product_permutation;
DROP PROCEDURE IF EXISTS p_shop_get_many_product;
@@ -261,6 +272,9 @@ DROP PROCEDURE IF EXISTS p_shop_get_many_stripe_product_new;
DROP PROCEDURE IF EXISTS p_shop_save_permutation;
DROP PROCEDURE IF EXISTS p_shop_save_product_permutation;
DROP PROCEDURE IF EXISTS p_shop_get_many_product_variation;
DROP FUNCTION IF EXISTS fn_shop_get_id_product_permutation_from_variation_csv_list;
DROP PROCEDURE IF EXISTS p_shop_save_stock_item;
DROP PROCEDURE IF EXISTS p_shop_save_stock_item_test;
DROP PROCEDURE IF EXISTS p_shop_get_many_stock_item;
DROP PROCEDURE IF EXISTS p_shop_get_many_product_price_and_discount_and_delivery_option;
DROP PROCEDURE IF EXISTS p_shop_get_many_product_price_and_discount_and_delivery_option;

View File

@@ -0,0 +1,13 @@
# Split Key Value Pair CSV Staging
-- USE partsltd_prod;
-- DROP TABLE IF EXISTS Split_Temp;
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Split_Key_Value_Pair_Csv_Temp';
CREATE TABLE Split_Key_Value_Pair_Csv_Temp (
guid BINARY(36) NOT NULL
, id INT NOT NULL
, key_column VARCHAR(4000) NULL
, value_column VARCHAR(4000) NULL
);

View File

@@ -1,8 +1,6 @@
# Regions
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Region';
CREATE TABLE IF NOT EXISTS Shop_Region (

View File

@@ -0,0 +1,22 @@
# Addresses
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Address';
CREATE TABLE Shop_Address (
id_address INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_region INT NOT NULL,
postcode VARCHAR(20) NOT NULL,
address_line_1 VARCHAR(256) NOT NULL,
address_line_2 VARCHAR(256) NOT NULL,
city VARCHAR(256) NOT NULL,
county VARCHAR(256) NOT NULL,
active BIT NOT NULL DEFAULT 1,
created_on TIMESTAMP,
created_by INT,
id_change_set INT,
CONSTRAINT FK_Shop_Address_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);

View File

@@ -1,8 +1,6 @@
# Plant
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Plant';
CREATE TABLE IF NOT EXISTS Shop_Plant (
@@ -10,6 +8,9 @@ CREATE TABLE IF NOT EXISTS Shop_Plant (
code VARCHAR(50) NOT NULL,
name VARCHAR(500) NOT NULL,
id_address INT NOT NULL,
CONSTRAINT FK_Shop_Plant_id_address
FOREIGN KEY (id_address)
REFERENCES Shop_Address(id_address),
id_user_manager INT NOT NULL,
active BIT NOT NULL DEFAULT 1,
created_on TIMESTAMP,

View File

@@ -6,10 +6,11 @@
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Plant_Temp';
CREATE TABLE IF NOT EXISTS Shop_Plant_Temp (
id_plant INT NOT NULL PRIMARY KEY,
code VARCHAR(50) NOT NULL,
name VARCHAR(500) NOT NULL,
id_address INT NOT NULL,
id_user_manager INT NOT NULL,
active BIT NOT NULL DEFAULT 1
id_plant INT NOT NULL PRIMARY KEY
, code VARCHAR(50) NOT NULL
, name VARCHAR(500) NOT NULL
, id_address INT NOT NULL
, id_user_manager INT NOT NULL
, active BIT NOT NULL DEFAULT 1
, guid BINARY(36) NOT NULL
);

View File

@@ -1,7 +1,7 @@
# Stock Stock Item
-- DROP TABLE IF EXISTS Shop_Stock_Item;
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Stock_Item';
@@ -11,8 +11,8 @@ CREATE TABLE IF NOT EXISTS Shop_Stock_Item (
CONSTRAINT FK_Shop_Stock_Item_id_permutation
FOREIGN KEY (id_permutation)
REFERENCES Shop_Product_Permutation(id_permutation),
date_purchased TIMESTAMP NOT NULL,
date_received TIMESTAMP NULL,
date_purchased DATETIME NOT NULL,
date_received DATETIME NULL,
id_location_storage INT NOT NULL,
CONSTRAINT FK_Shop_Stock_Item_id_location_storage
FOREIGN KEY (id_location_storage)
@@ -21,15 +21,15 @@ CREATE TABLE IF NOT EXISTS Shop_Stock_Item (
CONSTRAINT FK_Shop_Stock_Item_id_currency
FOREIGN KEY (id_currency_cost)
REFERENCES Shop_Currency(id_currency),
cost_local_VAT_incl FLOAT NOT NULL,
cost_local_VAT_excl FLOAT NOT NULL,
cost_local_VAT_incl FLOAT NULL,
cost_local_VAT_excl FLOAT NULL,
is_sealed BIT NOT NULL DEFAULT 1,
date_unsealed TIMESTAMP NULL,
date_expiration TIMESTAMP NOT NULL,
date_unsealed DATETIME NULL,
date_expiration DATETIME NOT NULL,
is_consumed BIT NOT NULL DEFAULT 0,
date_consumed TIMESTAMP NULL,
date_consumed DATETIME NULL,
active BIT NOT NULL DEFAULT 1,
created_on TIMESTAMP,
created_on DATETIME,
created_by INT,
id_change_set INT,
CONSTRAINT FK_Shop_Stock_Item_id_change_set

View File

@@ -1,22 +1,27 @@
# Stock Stock Item Temp
DROP TABLE IF EXISTS Shop_Stock_Item_Temp;
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Stock_Item_Temp';
CREATE TABLE IF NOT EXISTS Shop_Stock_Item_Temp (
id_stock INT NOT NULL PRIMARY KEY,
id_permutation INT NOT NULL,
date_purchased TIMESTAMP NOT NULL,
id_location_storage INT NOT NULL,
id_currency INT NOT NULL,
cost_local_VAT_incl FLOAT NOT NULL,
cost_local_VAT_excl FLOAT NOT NULL,
is_sealed BIT NOT NULL DEFAULT 1,
date_unsealed TIMESTAMP NULL,
date_expiration TIMESTAMP NULL,
is_consumed BIT NOT NULL DEFAULT 0,
date_consumed TIMESTAMP NULL,
active BIT NOT NULL DEFAULT 1
id_stock INT NULL
-- , id_category INT NULL
, id_product INT NOT NULL
, id_permutation INT NULL
, id_pairs_variations VARCHAR(4000) NULL
, date_purchased DATETIME NOT NULL
, date_received DATETIME NULL
, id_location_storage INT NOT NULL
, id_currency_cost INT NOT NULL
, cost_local_VAT_incl FLOAT NOT NULL
, cost_local_VAT_excl FLOAT NOT NULL
, is_sealed BIT NOT NULL
, date_unsealed DATETIME NULL
, date_expiration DATETIME NULL
, is_consumed BIT NOT NULL
, date_consumed DATETIME NULL
, active BIT NOT NULL
, guid BINARY(36) NOT NULL
);

View File

@@ -1,12 +1,10 @@
# Addresses
# User Addresses
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_User_Address';
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Address';
CREATE TABLE Shop_Address (
id_address INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CREATE TABLE Shop_User_Address (
id_user_address INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_user INT NOT NULL,
CONSTRAINT FK_Shop_Address_id_user
FOREIGN KEY (id_user)
@@ -17,15 +15,15 @@ CREATE TABLE Shop_Address (
name_full VARCHAR(255) NOT NULL,
phone_number VARCHAR(20) NOT NULL,
postcode VARCHAR(20) NOT NULL,
address_line_1 VARCHAR(100) NOT NULL,
address_line_2 VARCHAR(100) NOT NULL,
city VARCHAR(50) NOT NULL,
county VARCHAR(100) NOT NULL,
address_line_1 VARCHAR(256) NOT NULL,
address_line_2 VARCHAR(256) NOT NULL,
city VARCHAR(256) NOT NULL,
county VARCHAR(256) NOT NULL,
active BIT NOT NULL DEFAULT 1,
created_on TIMESTAMP,
created_by INT,
id_change_set INT,
CONSTRAINT FK_Shop_Address_id_change_set
CONSTRAINT FK_Shop_User_Address_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,21 @@
# Address Audits
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_User_Address_Audit';
CREATE TABLE IF NOT EXISTS Shop_User_Address_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_user_address INT NOT NULL,
CONSTRAINT FK_Shop_User_Address_Audit_id_address
FOREIGN KEY (id_user_address)
REFERENCES Shop_User_Address(id_user_address)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_User_Address_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);

View File

@@ -39,14 +39,6 @@ BEGIN
SELECT NEW.id_address, 'id_region', OLD.id_region, NEW.id_region, NEW.id_change_set
WHERE NOT OLD.id_region <=> NEW.id_region
UNION
# Changed name_full
SELECT NEW.id_address, 'name_full', OLD.name_full, NEW.name_full, NEW.id_change_set
WHERE NOT OLD.name_full <=> NEW.name_full
UNION
# Changed phone_number
SELECT NEW.id_address, 'phone_number', OLD.phone_number, NEW.phone_number, NEW.id_change_set
WHERE NOT OLD.phone_number <=> NEW.phone_number
UNION
# Changed postcode
SELECT NEW.id_address, 'postcode', OLD.postcode, NEW.postcode, NEW.id_change_set
WHERE NOT OLD.postcode <=> NEW.postcode

View File

@@ -0,0 +1,75 @@
# Shop Address
DROP TRIGGER IF EXISTS before_insert_Shop_User_Address;
DROP TRIGGER IF EXISTS before_update_Shop_User_Address;
DELIMITER //
CREATE TRIGGER before_insert_Shop_User_Address
BEFORE INSERT ON Shop_User_Address
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM Shop_User WHERE firstname = CURRENT_USER()), -1));
END //
DELIMITER ;;
DELIMITER //
CREATE TRIGGER before_update_Shop_User_Address
BEFORE UPDATE ON Shop_User_Address
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 Shop_User_Address_Audit (
id_user_address,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed region
SELECT NEW.id_user_address, 'id_region', OLD.id_region, NEW.id_region, NEW.id_change_set
WHERE NOT OLD.id_region <=> NEW.id_region
UNION
# Changed name_full
SELECT NEW.id_user_address, 'name_full', OLD.name_full, NEW.name_full, NEW.id_change_set
WHERE NOT OLD.name_full <=> NEW.name_full
UNION
# Changed phone_number
SELECT NEW.id_user_address, 'phone_number', OLD.phone_number, NEW.phone_number, NEW.id_change_set
WHERE NOT OLD.phone_number <=> NEW.phone_number
UNION
# Changed postcode
SELECT NEW.id_user_address, 'postcode', OLD.postcode, NEW.postcode, NEW.id_change_set
WHERE NOT OLD.postcode <=> NEW.postcode
UNION
# Changed address_line_1
SELECT NEW.id_user_address, 'address_line_1', OLD.address_line_1, NEW.address_line_1, NEW.id_change_set
WHERE NOT OLD.address_line_1 <=> NEW.address_line_1
UNION
# Changed address_line_2
SELECT NEW.id_user_address, 'address_line_2', OLD.address_line_2, NEW.address_line_2, NEW.id_change_set
WHERE NOT OLD.address_line_2 <=> NEW.address_line_2
UNION
# Changed city
SELECT NEW.id_user_address, 'city', OLD.city, NEW.city, NEW.id_change_set
WHERE NOT OLD.city <=> NEW.city
UNION
# Changed county
SELECT NEW.id_user_address, 'county', OLD.county, NEW.county, NEW.id_change_set
WHERE NOT OLD.county <=> NEW.county
UNION
# Changed active
SELECT NEW.id_user_address, '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

@@ -78,6 +78,8 @@ BEGIN
COMMIT;
END IF;
DROP TABLE IF EXISTS tmp_Split_Split;
IF a_debug = 1 THEN
CALL p_debug_timing_reporting ( v_time_start );
END IF;

View File

@@ -0,0 +1,108 @@
DROP PROCEDURE IF EXISTS p_split_key_value_pair_csv;
DELIMITER //
CREATE PROCEDURE p_split_key_value_pair_csv (
IN a_guid BINARY(36)
, IN a_string LONGTEXT
, IN a_debug BIT
)
BEGIN
DECLARE v_has_string BIT;
DECLARE v_current_item VARCHAR(4000);
DECLARE v_time_start TIMESTAMP(6);
SET v_time_start := CURRENT_TIMESTAMP(6);
SET a_string := IFNULL(a_string, '');
SET a_debug := IFNULL(a_debug, 0);
SET v_has_string = CASE WHEN a_string = '' THEN 0 ELSE 1 END;
IF a_debug = 1 THEN
SELECT
a_guid
, a_string
, a_debug
;
END IF;
CALL p_validate_guid ( a_guid );
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Input;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Split;
CREATE TEMPORARY TABLE tmp_Split_Input (
input_string TEXT
);
CREATE TEMPORARY TABLE tmp_Split_Split (
id INT AUTO_INCREMENT PRIMARY KEY
, key_column VARCHAR(4000)
, value_column VARCHAR(4000)
);
INSERT INTO tmp_Split_Input (
input_string
)
VALUES (
a_string
);
INSERT INTO tmp_Split_Split (key_column, value_column)
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(t.pair, ':', 1), ',', -1) AS key_column,
SUBSTRING_INDEX(t.pair, ':', -1) AS value_column
FROM (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(input_string, ',', n), ',', -1) pair
FROM temp_input
CROSS JOIN (
SELECT a.N + b.N * 10 + 1 n
FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) numbers
WHERE n <= 1 + (LENGTH(input_string) - LENGTH(REPLACE(input_string, ',', '')))
) t;
IF EXISTS (SELECT * FROM tmp_Split_Split LIMIT 1) THEN
START TRANSACTION;
INSERT INTO Split_Key_Value_Pair_Csv_Temp (
guid
, id
, key_column
, value_column
)
SELECT
a_guid
, id
, key_column
, value_column
FROM tmp_Split_Split
;
COMMIT;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Input;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Split;
IF a_debug = 1 THEN
CALL p_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;;
/*
CALL p_split_key_value_pair_csv (
'nipsnipsnipsnipsnipsnipsnipsnipsnips'
, '1:100,2:200,3:300,4:400' # a_string
, 1
);
SELECT *
FROM Split_key_value_pair_csv_Temp
WHERE GUID = 'nipsnipsnipsnipsnipsnipsnipsnipsnips';
CALL p_clear_split_key_value_pair_csv_temp( 'nipsnipsnipsnipsnipsnipsnipsnipsnips' );
*/

View File

@@ -0,0 +1,29 @@
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_clear_split_key_value_pair_csv_temp;
DELIMITER //
CREATE PROCEDURE p_clear_split_key_value_pair_csv_temp (
IN a_guid BINARY(36)
)
BEGIN
CALL p_validate_guid( a_guid );
START TRANSACTION;
-- DROP TABLE IF EXISTS
DELETE FROM Split_Key_Value_Pair_Csv_Temp
WHERE GUID = a_guid
;
COMMIT;
END //
DELIMITER ;;
/*
CALL p_clear_split_key_value_pair_csv_temp ( 'nipsnipsnipsnipsnipsnipsnipsnipsnips' );
*/

View File

@@ -0,0 +1,36 @@
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_shop_get_many_plant;
DELIMITER //
CREATE PROCEDURE p_shop_get_many_plant (
IN a_get_inactive_plant BIT
)
BEGIN
SET a_get_inactive_plant = IFNULL(a_get_inactive_plant, 0);
SELECT
P.id_plant
, P.id_address
, A.id_region
, P.id_user_manager
, P.code
, P.name
, P.active
FROM Shop_Plant P
INNER JOIN Shop_Address A ON P.id_address = A.id_address
WHERE
a_get_inactive_plant = 1
OR P.active = 1
;
END //
DELIMITER ;;
/*
CALL p_shop_get_many_plant (
0 # a_get_inactive_plant
);
*/

View File

@@ -0,0 +1,37 @@
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_shop_get_many_storage_location;
DELIMITER //
CREATE PROCEDURE p_shop_get_many_storage_location (
IN a_get_inactive_storage_location BIT
)
BEGIN
SET a_get_inactive_storage_location = IFNULL(a_get_inactive_storage_location, 0);
SELECT
SL.id_storage_location
, P.id_plant
, P.id_address
, A.id_region
, SL.code
, SL.name
, P.active
FROM Shop_Storage_Location SL
INNER JOIN Shop_Plant P ON SL.id_plant = P.id_plant
INNER JOIN Shop_Address A ON P.id_address = A.id_address
WHERE
a_get_inactive_storage_location = 1
OR SL.active = 1
;
END //
DELIMITER ;;
/*
CALL p_shop_get_many_storage_location (
0 # a_get_inactive_storage_location
);
*/

View File

@@ -37,7 +37,7 @@ BEGIN
4 -- id_product
, 1 -- id_category
, 'Laptops' -- name
, 1 -- has_variations
, 0 -- has_variations
, 2 -- id_access_level_required
, 2 -- display_order
, 1 -- active
@@ -69,10 +69,10 @@ BEGIN
END //
DELIMITER ;;
/*
CALL partsltd_prod.p_shop_save_product_test ();
DELETE FROM partsltd_prod.Shop_Product_Temp;
/*
DROP TABLE IF EXISTS tmp_Msg_Error;
*/

View File

@@ -464,6 +464,7 @@ END //
DELIMITER ;;
/*
CALL partsltd_prod.p_shop_get_many_product (
1 #'auth0|6582b95c895d09a70ba10fef', # a_id_user
@@ -483,7 +484,6 @@ CALL partsltd_prod.p_shop_get_many_product (
, 0 # a_debug
);
/*
select * FROM partsltd_prod.Shop_Calc_User_Temp;
select * FROM partsltd_prod.Shop_Product_Category;

View File

@@ -0,0 +1,221 @@
DROP FUNCTION IF EXISTS fn_shop_get_id_product_permutation_from_variation_csv_list;
DELIMITER //
CREATE FUNCTION fn_shop_get_id_product_permutation_from_variation_csv_list (
a_id_product INT
, a_variation_csv TEXT
)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE v_id_permutation INT;
DECLARE done INT DEFAULT FALSE;
DECLARE v_id_variation_type INT;
DECLARE v_id_variation INT;
DECLARE v_id_permutation_tmp INT;
DECLARE cur CURSOR FOR
SELECT
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(t.pair, ':', 1), ',', -1) AS UNSIGNED) AS id_variation_type,
CAST(SUBSTRING_INDEX(t.pair, ':', -1) AS UNSIGNED) AS id_variation
FROM (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(a_variation_csv, ',', n), ',', -1) pair
FROM (
SELECT a.N + b.N * 10 + 1 n
FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) numbers
WHERE n <= 1 + (LENGTH(a_variation_csv) - LENGTH(REPLACE(a_variation_csv, ',', '')))
) t;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET v_id_permutation = NULL;
OPEN cur;
read_loop: LOOP
FETCH cur INTO v_id_variation_type, v_id_variation;
IF done THEN
LEAVE read_loop;
END IF;
IF v_id_permutation IS NULL THEN
-- First iteration: find initial v_id_permutations
SELECT PPVL.id_permutation INTO v_id_permutation
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link PPVL
INNER JOIN partsltd_prod.Shop_Product_Permutation PP ON PPVL.id_permutation = PP.id_permutation
INNER JOIN partsltd_prod.Shop_Variation PV ON PPVL.id_variation = PV.id_variation
WHERE 1=1
AND PP.id_product = a_id_product
AND PPVL.id_variation = v_id_variation
AND PV.id_type = v_id_variation_type
;
ELSE
-- Subsequent iterations: narrow down the v_id_permutation
SELECT PPVL.id_permutation INTO v_id_permutation_tmp
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link PPVL
INNER JOIN partsltd_prod.Shop_Product_Permutation PP ON PPVL.id_permutation = PP.id_permutation
INNER JOIN partsltd_prod.Shop_Variation PV ON PPVL.id_variation = PV.id_variation
WHERE 1=1
AND PP.id_product = a_id_product
AND PPVL.v_id_permutation = v_id_permutation
AND PPVL.id_variation = v_id_variation
AND PV.id_type = v_id_variation_type
;
IF v_id_permutation_tmp IS NULL THEN
-- If no match found, exit the loop
SET v_id_permutation := NULL;
LEAVE read_loop;
ELSE
SET v_id_permutation := v_id_permutation_tmp;
END IF;
END IF;
END LOOP;
CLOSE cur;
RETURN v_id_permutation;
END //
DELIMITER ;
/*
SELECT fn_shop_get_id_product_permutation_from_variation_csv_list ( 1, '1:1' ) AS id_permutation;
SELECT fn_shop_get_id_product_permutation_from_variation_csv_list ( 3, '' ) AS id_permutation;
*/
/*
-- Update the table using the function
UPDATE product_permutation_input
SET v_id_permutation = find_v_id_permutation(variation_csv)
WHERE v_id_permutation IS NULL;
*/
/*
select * from partsltd_prod.Shop_Variation
DROP PROCEDURE IF EXISTS p_shop_get_id_product_permutation_from_variation_csv_list;
DELIMITER //
CREATE PROCEDURE p_shop_get_id_product_permutation_from_variation_csv_list (
IN a_guid BINARY(36)
, IN a_debug BIT
)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE v_id INT;
DECLARE v_row_id INT;
DECLARE v_variation_csv TEXT;
DECLARE v_id_permutation INT;
DECLARE v_time_start TIMESTAMP(6);
-- Cursor to iterate through unprocessed rows
DECLARE cur CURSOR FOR
SELECT id, session_guid, row_id, variation_csv
FROM product_permutation_input
WHERE v_id_permutation IS NULL;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_guid
, a_debug
;
END IF;
CALL p_validate_guid ( a_guid );
OPEN cur;
read_loop: LOOP
FETCH cur INTO v_id, v_session_guid, v_row_id, v_variation_csv;
IF done THEN
LEAVE read_loop;
END IF;
-- Find matching v_id_permutation
SET v_id_permutation = NULL;
SELECT ppvl.v_id_permutation INTO v_id_permutation
FROM (
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(t.pair, ':', 1), ',', -1) AS id_variation_type,
SUBSTRING_INDEX(t.pair, ':', -1) AS id_variation
FROM (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(v_variation_csv, ',', numbers.n), ',', -1) pair
FROM (
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 -- add more if needed
) numbers
WHERE CHAR_LENGTH(v_variation_csv) - CHAR_LENGTH(REPLACE(v_variation_csv, ',', '')) >= numbers.n - 1
) t
) parsed
INNER JOIN product_permutation_variation_link ppvl
ON parsed.id_variation_type = ppvl.id_variation_type
AND parsed.id_variation = ppvl.id_variation
GROUP BY ppvl.v_id_permutation
HAVING COUNT(*) = (LENGTH(v_variation_csv) - LENGTH(REPLACE(v_variation_csv, ',', '')) + 1)
LIMIT 1;
-- Update the v_id_permutation in the input table
UPDATE product_permutation_input
SET v_id_permutation = v_id_permutation
WHERE id = v_id;
END LOOP;
CLOSE cur;
IF EXISTS ( SELECT * FROM Shop_Get_Id_Product_Permutation_From_Variation_Csv_List_Temp WHERE GUID = a_guid LIMIT 1 ) THEN
IF EXISTS (SELECT * FROM tmp_Split_Split LIMIT 1) THEN
START TRANSACTION;
INSERT INTO Split_Key_Value_Pair_Csv_Temp (
guid
, id
, key_column
, value_column
)
SELECT
a_guid
, id
, key_column
, value_column
FROM tmp_Split_Split
;
COMMIT;
END IF;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Input;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Split;
IF a_debug = 1 THEN
CALL p_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;;
*/
/*
CALL p_shop_get_id_product_permutation_from_variation_csv_list (
'nipsnipsnipsnipsnipsnipsnipsnipsnips'
, '1:100,2:200,3:300,4:400' # a_string
, 1
);
SELECT *
FROM Split_key_value_pair_csv_Temp
WHERE GUID = 'nipsnipsnipsnipsnipsnipsnipsnipsnips';
CALL p_clear_split_key_value_pair_csv_temp( 'nipsnipsnipsnipsnipsnipsnipsnipsnips' );
*/

View File

@@ -622,6 +622,7 @@ BEGIN
select * from tmp_Stock_Item;
select * from tmp_Permutation;
select * from tmp_Location_Storage;
select * from Shop_Storage_Location;
select * from tmp_Plant_Storage;
select * from tmp_Region_Storage;
*/
@@ -636,14 +637,19 @@ BEGIN
P.id_category,
t_SI.id_location_storage,
t_PS.id_plant,
t_RS.id_region,
PLANT.id_address AS id_address_plant,
t_RS.id_region AS id_region_plant,
SL.code AS code_storage_location,
SL.name AS name_storage_location,
PLANT.code AS code_plant,
PLANT.name AS name_plant,
SI.id_currency_cost,
CURRENCY.symbol AS symbol_currency_cost,
CURRENCY.code AS code_currency_cost,
SI.cost_local_VAT_excl,
SI.cost_local_VAT_incl,
SI.date_purchased,
SI.date_received,
SI.cost_local_VAT_incl,
SI.cost_local_VAT_excl,
SI.is_sealed,
SI.date_unsealed,
SI.date_expiration,
@@ -722,6 +728,7 @@ END //
DELIMITER ;;
/*
CALL p_shop_get_many_stock_item (
1, # a_id_user
1, # a_get_all_product_permutation
@@ -750,7 +757,6 @@ CALL p_shop_get_many_stock_item (
, 0 # a_debug
);
/*
DROP TABLE IF EXISTS tmp_Msg_Error;

View File

@@ -0,0 +1,646 @@
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_shop_save_stock_item;
DELIMITER //
CREATE PROCEDURE p_shop_save_stock_item (
IN a_comment VARCHAR(500)
, IN a_guid BINARY(36)
, IN a_id_user INT
, IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_permission_product INT;
DECLARE v_ids_product_permission LONGTEXT;
DECLARE v_id_change_set INT;
DECLARE v_id_access_level_edit INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_time_expire DATETIME;
DECLARE exit handler for SQLEXCEPTION
BEGIN
-- Get diagnostic information
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE
, @errno = MYSQL_ERRNO
, @text = MESSAGE_TEXT
;
-- Rollback the transaction
ROLLBACK;
-- Select the error information
-- SELECT 'Error' AS status, @errno AS error_code, @sqlstate AS sql_state, @text AS message;
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
NULL
, @errno
, @text
;
SELECT *
FROM tmp_Msg_Error;
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_time_expire := DATE_ADD(v_time_start, INTERVAL 1000 YEAR);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1);
SET a_guid := IFNULL(a_guid, UUID());
DROP TEMPORARY TABLE IF EXISTS tmp_Stock_Item;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
CREATE TEMPORARY TABLE tmp_Stock_Item (
id_stock INT NOT NULL
, id_category INT NULL
, id_product INT NOT NULL
, id_permutation INT NULL
, id_pairs_variations VARCHAR(4000) NULL
, has_variations BIT NULL
, date_purchased DATETIME NOT NULL
, date_received DATETIME NULL
, id_location_storage INT NOT NULL
, id_currency_cost INT NOT NULL
, cost_local_VAT_incl FLOAT NOT NULL
, cost_local_VAT_excl FLOAT NOT NULL
, is_sealed BIT NOT NULL
, date_unsealed DATETIME NULL
, date_expiration DATETIME NOT NULL
, is_consumed BIT NOT NULL
, date_consumed DATETIME NULL
, active BIT NOT NULL
, can_view BIT NULL
, can_edit BIT NULL
, can_admin BIT NULL
, name_error VARCHAR(1000) NULL
, 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_Stock_Item (
id_stock
-- , id_category
, id_product
, id_permutation
, id_pairs_variations
, has_variations
, date_purchased
, date_received
, id_location_storage
, id_currency_cost
, cost_local_VAT_incl
, cost_local_VAT_excl
, is_sealed
, date_unsealed
, date_expiration
, is_consumed
, date_consumed
, active
# , name_error
, is_new
)
SELECT
SI_T.id_stock
-- , IFNULL(SI_T.id_category, P.id_category) AS id_category
, IFNULL(IFNULL(SI_T.id_product, PP.id_product), 0) AS id_product
, IFNULL(IFNULL(SI_T.id_permutation, SI.id_permutation), 0) AS id_permutation
, TRIM(IFNULL(SI_T.id_pairs_variations, ''))
, CASE WHEN TRIM(IFNULL(SI_T.id_pairs_variations, '')) = '' THEN 0 ELSE 1 END AS has_variations
, IFNULL(IFNULL(SI_T.date_purchased, SI.date_purchased), v_time_start) AS date_purchased
, IFNULL(SI_T.date_received, SI.date_received) AS date_received
, IFNULL(IFNULL(SI_T.id_location_storage, SI.id_location_storage), 0) AS id_location_storage
, IFNULL(IFNULL(SI_T.id_currency_cost, SI.id_currency_cost), 0) AS id_currency_cost
, IFNULL(SI_T.cost_local_VAT_incl, SI.cost_local_VAT_incl) AS cost_local_VAT_incl
, IFNULL(SI_T.cost_local_VAT_excl, SI.cost_local_VAT_excl) AS cost_local_VAT_excl
, IFNULL(IFNULL(SI_T.is_sealed, SI.is_sealed), 1) AS is_sealed
, IFNULL(SI_T.date_unsealed, SI.date_unsealed) AS date_unsealed
, IFNULL(IFNULL(SI_T.date_expiration, SI.date_expiration), v_time_expire) AS date_expiration
, IFNULL(IFNULL(SI_T.is_consumed, SI.is_consumed), 0) AS is_consumed
, IFNULL(SI_T.date_consumed, SI.date_consumed) AS date_consumed
, IFNULL(IFNULL(SI_T.active, SI.active), 1) AS active
# , fn_shop_get_product_permutation_name(SI_T.id_permutation)
, CASE WHEN IFNULL(SI_T.id_stock, 0) < 1 THEN 1 ELSE 0 END AS is_new
FROM partsltd_prod.Shop_Stock_Item_Temp SI_T
LEFT JOIN partsltd_prod.Shop_Stock_Item SI ON SI_T.id_stock = SI.id_stock
LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON SI_T.id_permutation = PP.id_permutation
-- LEFT JOIN Shop_Product P ON PP.id_product = P.id_product
WHERE SI_T.guid = a_guid
;
-- Missing Permutation IDs for setting new permutation for stock item
-- With variations
UPDATE tmp_Stock_Item t_SI
INNER JOIN partsltd_prod.Shop_Product P ON t_SI.id_product = P.id_product
SET t_SI.id_permutation = IFNULL(fn_shop_get_id_product_permutation_from_variation_csv_list ( t_SI.id_product, t_SI.id_pairs_variations ), 0)
WHERE 1=1
AND t_SI.id_permutation = 0
AND t_SI.has_variations = 1
;
-- Without variations
UPDATE tmp_Stock_Item t_SI
-- INNER JOIN Shop_Product P ON t_SI.id_product = P.id_product
INNER JOIN partsltd_prod.Shop_Product_Permutation PP ON t_SI.id_product = PP.id_product
SET t_SI.id_permutation = IFNULL(PP.id_permutation, 0)
WHERE 1=1
AND t_SI.id_permutation = 0
AND t_SI.has_variations = 0
;
-- Add stock item error names
UPDATE tmp_Stock_Item t_SI
INNER JOIN partsltd_prod.Shop_Product P ON t_SI.id_product = P.id_product
INNER JOIN partsltd_prod.Shop_Product_Category PC ON P.id_category = PC.id_category
-- INNER JOIN Shop_Product_Permutation PP ON t_SI.id_product = PP.id_product
SET t_SI.name_error = CONCAT(
PC.name,
' - ',
P.name,
' - ',
CASE WHEN IFNULL(t_SI.id_permutation, 0) = 0 THEN '(No permutation)' ELSE fn_shop_get_product_permutation_name ( t_SI.id_permutation ) END
)
;
IF a_debug = 1 THEN
sElect * from tmp_Stock_Item;
END IF;
-- Validation
-- Missing mandatory fields
-- id_product
IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE t_SI.id_product = 0 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 stock item(s) do not have a product: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE t_SI.id_product = 0
;
END IF;
-- id_permutation
IF EXISTS (
SELECT *
FROM tmp_Stock_Item t_SI
LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_SI.id_permutation = PP.id_permutation
WHERE 1=1
AND (
t_SI.id_permutation = 0
OR PP.active = 0
)
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('A valid permutation could not be found for the variations selected for the following stock item(s): ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_SI.id_permutation = PP.id_permutation
WHERE 1=1
AND (
t_SI.id_permutation = 0
OR PP.active = 0
)
;
END IF;
-- date_purchased
IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE ISNULL(t_SI.date_purchased) 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 stock item(s) do not have an purchase date: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE ISNULL(t_SI.date_purchased)
;
END IF;
-- id_location_storage
IF EXISTS (
SELECT *
FROM tmp_Stock_Item t_SI
INNER JOIN partsltd_prod.Shop_Storage_Location SL
ON t_SI.id_location_storage = SL.id_location
AND SL.active = 1
WHERE ISNULL(SL.id_location)
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 stock item(s) do not have a valid storage location: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
INNER JOIN partsltd_prod.Shop_Storage_Location SL
ON t_SI.id_location_storage = SL.id_location
AND SL.active = 1
WHERE ISNULL(SL.id_location)
;
END IF;
-- id_currency_cost
IF EXISTS (
SELECT *
FROM tmp_Stock_Item t_SI
INNER JOIN partsltd_prod.Shop_Currency C
ON t_SI.id_currency_cost = C.id_currency
AND C.active = 1
WHERE ISNULL(C.id_currency)
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 stock item(s) do not have a valid cost currency: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
INNER JOIN partsltd_prod.Shop_Currency C
ON t_SI.id_currency_cost = C.id_currency
AND C.active = 1
WHERE ISNULL(C.id_currency)
;
END IF;
-- cost_local_VAT_excl
IF EXISTS (
SELECT *
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND (
ISNULL(t_SI.cost_local_VAT_excl)
OR t_SI.cost_local_VAT_excl < 0
)
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 stock item(s) do not have a valid cost excluding VAT: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND (
ISNULL(t_SI.cost_local_VAT_excl)
OR t_SI.cost_local_VAT_excl < 0
)
;
END IF;
-- cost_local_VAT_incl
IF EXISTS (
SELECT *
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND (
ISNULL(t_SI.cost_local_VAT_incl)
OR t_SI.cost_local_VAT_incl < 0
)
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 stock item(s) do not have a valid cost including VAT: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND (
ISNULL(t_SI.cost_local_VAT_incl)
OR t_SI.cost_local_VAT_incl < t_SI.cost_local_VAT_excl
)
;
END IF;
-- date_received
IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE NOT ISNULL(t_SI.date_received) AND t_SI.date_received < t_SI.date_purchased 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 stock item(s) do not have a valid received date: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND NOT ISNULL(t_SI.date_received)
AND t_SI.date_received < t_SI.date_purchased
;
END IF;
-- date_unsealed
IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE NOT ISNULL(t_SI.date_unsealed) AND t_SI.date_unsealed < t_SI.date_purchased 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 stock item(s) do not have a valid unsealed date: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND NOT ISNULL(t_SI.date_received)
AND t_SI.date_received < t_SI.date_purchased
;
END IF;
-- date_expiration
IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE NOT ISNULL(t_SI.date_expiration) AND t_SI.date_expiration < t_SI.date_purchased 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 stock item(s) do not have a valid expiration date: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND NOT ISNULL(t_SI.date_expiration)
AND t_SI.date_expiration < t_SI.date_purchased
;
END IF;
-- date_consumed
IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE NOT ISNULL(t_SI.date_consumed) AND t_SI.date_consumed < t_SI.date_purchased 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 stock item(s) do not have a valid consumed date: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE 1=1
AND NOT ISNULL(t_SI.date_consumed)
AND t_SI.date_consumed < t_SI.date_purchased
;
END IF;
-- Permissions
SET v_ids_product_permission := ( SELECT GROUP_CONCAT(t_SI.id_product SEPARATOR ',') FROM tmp_Stock_Item t_SI );
IF NOT ISNULL(v_ids_product_permission) THEN
SET v_id_permission_product = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_PRODUCT' LIMIT 1);
CALL p_shop_calc_user(
a_guid
, a_id_user
, FALSE -- a_get_inactive_users
, v_id_permission_product
, v_id_access_level_edit
, v_ids_product_permission
, 0 -- a_debug
);
UPDATE tmp_Stock_Item t_SI
INNER JOIN Shop_Product P ON t_SI.id_product = P.id_product
INNER JOIN Shop_Calc_User_Temp UE_T
ON P.id_product = UE_T.id_product
AND UE_T.GUID = a_guid
SET
t_SI.can_view = UE_T.can_view
, t_SI.can_edit = UE_T.can_edit
, t_SI.can_admin = UE_T.can_admin
;
CALL p_shop_clear_calc_user(
a_guid
, 0 -- a_debug
);
IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE IFNULL(t_SI.can_edit, 0) = 0 LIMIT 1) THEN
INSERT INTO tmp_Msg_Error (
guid
, id_type
, code
, msg
)
SELECT
a_guid AS GUID
, v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('The following stock item(s) do not have product edit permission: ', GROUP_CONCAT(IFNULL(t_SI.name_error, 'NULL') SEPARATOR ', ')) AS msg
FROM tmp_Stock_Item t_SI
WHERE IFNULL(t_SI.can_edit, 0) = 0
;
END IF;
END IF;
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
START TRANSACTION;
IF NOT ISNULL(v_ids_product_permission) THEN
INSERT INTO Shop_Product_Change_Set ( comment )
VALUES ( a_comment )
;
SET v_id_change_set := LAST_INSERT_ID();
-- select * from partsltd_prod.Shop_Stock_Item
UPDATE partsltd_prod.Shop_Stock_Item SI
INNER JOIN tmp_Stock_Item t_SI
ON SI.id_stock = t_SI.id_stock
SET
SI.id_permutation = t_SI.id_permutation
, SI.date_purchased = t_SI.date_purchased
, SI.date_received = t_SI.date_received
, SI.id_location_storage = t_SI.id_location_storage
, SI.id_currency_cost = t_SI.id_currency_cost
, SI.cost_local_VAT_excl = t_SI.cost_local_VAT_excl
, SI.cost_local_VAT_incl = t_SI.cost_local_VAT_incl
, SI.is_sealed = t_SI.is_sealed
, SI.date_unsealed = t_SI.date_unsealed
, SI.date_expiration = t_SI.date_expiration
, SI.is_consumed = t_SI.is_consumed
, SI.date_consumed = t_SI.date_consumed
, SI.active = t_SI.active
, SI.id_change_set = v_id_change_set
;
END IF;
INSERT INTO partsltd_prod.Shop_Stock_Item (
id_permutation
, date_purchased
, date_received
, id_location_storage
, id_currency_cost
, cost_local_VAT_excl
, cost_local_VAT_incl
, is_sealed
, date_unsealed
, date_expiration
, is_consumed
, date_consumed
, active
, created_by
, created_on
)
SELECT
t_SI.id_permutation
, t_SI.date_purchased
, t_SI.date_received
, t_SI.id_location_storage
, t_SI.id_currency_cost
, t_SI.cost_local_VAT_excl
, t_SI.cost_local_VAT_incl
, t_SI.is_sealed
, t_SI.date_unsealed
, t_SI.date_expiration
, t_SI.is_consumed
, t_SI.date_consumed
, t_SI.active
, a_id_user AS created_by
, v_time_start AS created_on
FROM tmp_Stock_Item t_SI
WHERE
is_new = 1
AND active = 1
;
DELETE FROM partsltd_prod.Shop_Stock_Item_Temp
WHERE GUID = a_guid;
COMMIT;
END IF;
SELECT * FROM tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Stock_Item;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
END //
DELIMITER ;;
/*
DELETE FROM Shop_Product_Permutation_Temp
WHERE id_permutation = 1
;
INSERT INTO Shop_Product_Permutation_Temp (
id_permutation,
id_product,
description,
cost_local,
id_currency_cost,
profit_local_min,
latency_manufacture_days,
id_unit_measurement_quantity,
count_unit_measurement_per_quantity_step,
quantity_min,
quantity_max,
quantity_stock,
is_subscription,
id_unit_measurement_interval_recurrence,
count_interval_recurrence,
id_stripe_product,
does_expire_faster_once_unsealed,
id_unit_measurement_interval_expiration_unsealed,
count_interval_expiration_unsealed,
active,
guid
)
VALUES
(
1 -- id_permutation,
, 1 -- id_product,
, 'Good Reddy Teddy' -- description,
, 5.0 -- cost_local,
, 1 -- id_currency_cost,
, 3.0 -- profit_local_min,
, 14 -- latency_manufacture_days,
, 1 -- id_unit_measurement_quantity,
, 1.0 -- count_unit_measurement_quantity,
, 3.0 -- quantity_min,
, 99.0 -- quantity_max,
, 1.0 -- quantity_stock,
, False -- is_subscription,
, null -- id_unit_measurement_interval_recurrence,
, null -- count_interval_recurrence,
, null -- id_stripe_product,
, False -- does_expire_faster_once_unsealed,
, null -- id_unit_measurement_interval_expiration_unsealed,
, null -- count_interval_expiration_unsealed,
, True -- active,
, 'NIPS' -- guid
)
;
select 'Shop_Product_Permutation_Temp before call';
SELECT * FROM Shop_Product_Permutation_Temp;
SELECT 'Shop_Product_Permutation before call' AS result_name;
select * FROM Shop_Product_Permutation;
CALL p_shop_save_product_permutation (
1, -- 'auth0|6582b95c895d09a70ba10fef', # a_id_user
'Initial data', # a_comment
'NIPS' # a_guid
);
SELECT 'Shop_Product_Permutation_Temp after call' AS result_name;
select * FROM Shop_Product_Permutation_Temp;
SELECT 'Shop_Product_Permutation after call' AS result_name;
select * FROM Shop_Product_Permutation;
DELETE FROM Shop_Product_Permutation_Temp
WHERE id_permutation = 1;
*/

View File

@@ -0,0 +1,101 @@
-- Clear previous proc
DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_stock_item_test;
DELIMITER //
CREATE PROCEDURE p_shop_save_stock_item_test ()
BEGIN
DECLARE v_guid BINARY(36);
DECLARE v_time_start TIMESTAMP(6);
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := 'nips';
SELECT *
FROM partsltd_prod.Shop_Stock_Item
;
SELECT *
FROM partsltd_prod.Shop_Stock_Item_Temp
;
START TRANSACTION;
INSERT INTO partsltd_prod.Shop_Stock_Item_Temp (
id_stock
-- id_category
, id_product
, id_permutation
, id_pairs_variations
-- , has_variations
, date_purchased
, date_received
, id_location_storage
, id_currency_cost
, cost_local_VAT_excl
, cost_local_VAT_incl
, is_sealed
, date_unsealed
, date_expiration
, is_consumed
, date_consumed
, active
, guid
)
VALUES (
-1 -- id_stock
-- 1 -- id_category
, 4 -- id_product
, NULL -- id_permutation
, NULL -- id_pairs_variations
-- , FALSE -- 0 -- has_variations
, '2025-09-05 00:00' -- date_purchased
, NULL -- date_received
, 1 -- id_location_storage
, 1 -- id_currency_cost
, 10 -- cost_local_VAT_excl
, 12 -- cost_local_VAT_incl
, 1 -- is_sealed
, NULL -- date_unsealed
, NULL -- date_expiration
, FALSE -- 0 -- is_consumed
, NULL -- date_consumed
, 1 -- active
, v_guid
);
COMMIT;
SELECT *
FROM partsltd_prod.Shop_Stock_Item_Temp
WHERE GUID = v_guid
;
CALL partsltd_prod.p_shop_save_Stock_Item (
'Test save Stock_Item' -- comment
, v_guid -- guid
, 1 -- id_user
, 0 -- debug
);
SELECT *
FROM partsltd_prod.Shop_Stock_Item
;
SELECT *
FROM partsltd_prod.Shop_Stock_Item_Temp
;
CALL partsltd_prod.p_debug_timing_reporting ( v_time_start );
END //
DELIMITER ;;
CALL partsltd_prod.p_shop_save_stock_item_test ();
DELETE FROM partsltd_prod.Shop_Stock_Item_Temp;
/*
update shop_product p set p.has_variations = 0 where id_product = 4
DROP TABLE IF EXISTS tmp_Msg_Error;
*/

View File

@@ -1,7 +1,5 @@
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_get_many_user;
@@ -15,48 +13,81 @@ CREATE PROCEDURE p_get_many_user (
, IN a_get_first_user_only BIT
, IN a_ids_user LONGTEXT
, IN a_ids_user_auth0 LONGTEXT
, IN a_debug BIT
)
BEGIN
DECLARE v_id_access_level_admin INT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_permission_store_admin INT;
DECLARE v_id_permission_user INT;
DECLARE v_id_permission_user_admin INT;
DECLARE v_ids_permission_required VARCHAR(4000);
DECLARE v_now TIMESTAMP;
DECLARE v_id_minimum INT;
DECLARE v_code_error_data VARCHAR(50);
DECLARE v_id_type_error_data INT;
DECLARE v_code_error_bad_data VARCHAR(50);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_has_filter_user BIT;
DECLARE v_has_filter_user_auth0 BIT;
DECLARE v_guid BINARY(36);
DECLARE v_rank_max INT;
DECLARE v_time_start TIMESTAMP(6);
SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := UUID();
SET v_id_access_level_view := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_id_permission_store_admin := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_ADMIN' LIMIT 1);
SET v_id_permission_user := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_USER' LIMIT 1);
SET v_id_permission_user_admin := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_USER_ADMIN' LIMIT 1);
SET v_code_error_data := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1);
SET v_id_type_error_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1);
SET v_id_access_level_admin := (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'ADMIN' LIMIT 1);
SET v_id_access_level_view := (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'VIEW' LIMIT 1);
SET v_id_permission_store_admin := (SELECT id_permission FROM partsltd_prod.Shop_Permission WHERE code = 'STORE_ADMIN' LIMIT 1);
SET v_id_permission_user := (SELECT id_permission FROM partsltd_prod.Shop_Permission WHERE code = 'STORE_USER' LIMIT 1);
SET v_id_permission_user_admin := (SELECT id_permission FROM partsltd_prod.Shop_Permission WHERE code = 'STORE_USER_ADMIN' LIMIT 1);
SET v_code_error_bad_data := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1);
SET v_id_type_error_bad_data := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_error_bad_data LIMIT 1);
SET v_ids_permission_required := CONCAT(v_id_permission_user, ',', v_id_permission_user_admin, ',', v_id_permission_store_admin);
SET a_get_all_user := IFNULL(a_get_all_user, 1);
SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
SET a_get_first_user_only := IFNULL(a_get_first_user_only, 0);
SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
SET a_ids_user_auth0 := TRIM(IFNULL(a_ids_user_auth0, ''));
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_id_user
, a_id_user_auth0
, a_get_all_user
, a_get_inactive_user
, a_get_first_user_only
, a_ids_user
, a_ids_user_auth0
, a_debug
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
CREATE TEMPORARY TABLE tmp_User (
id_user INT NOT NULL,
rank_user INT NULL
id_user INT NULL
, rank_user INT NULL
, can_admin_store BIT NULL
, can_admin_user BIT NULL
);
CREATE TEMPORARY TABLE tmp_Msg_Error (
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
guid BINARY(36) NOT NULL,
-- guid BINARY(36) NOT NULL,
id_type INT NOT 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
);
IF ISNULL(a_id_user) AND NOT ISNULL(a_id_user_auth0) THEN
SET a_id_user := (SELECT U.id_user FROM Shop_User U WHERE U.id_user_auth0 LIKE CONCAT('%', a_id_user_auth0, '%') LIMIT 1);
SET a_id_user := (SELECT U.id_user FROM partsltd_prod.Shop_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1); -- LIKE CONCAT('%', a_id_user_auth0, '%') LIMIT 1);
END IF;
IF ISNULL(a_id_user) THEN
@@ -68,150 +99,352 @@ BEGIN
)
VALUES (
v_guid,
v_id_type_error_data,
v_code_error_data,
v_id_type_error_bad_data,
v_code_error_bad_data,
CONCAT('User ID required for authorisation.')
)
;
END IF;
SET v_has_filter_user := CASE WHEN a_ids_user = '' AND a_ids_user_auth0= '' THEN 0 ELSE 1 END;
SET v_has_filter_user := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END;
SET v_has_filter_user_auth0 := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END;
IF v_has_filter_user THEN
INSERT INTO tmp_User (
id_user
-- , active
, rank_user
)
SELECT
DISTINCT U.id_user
-- S.active
, RANK() OVER (ORDER BY id_user ASC) AS rank_user
FROM Shop_User U
WHERE 1=1
AND (
FIND_IN_SET(U.id_user, a_ids_user) > 0
OR FIND_IN_SET(U.id_user_auth0, a_ids_user_auth0) > 0
)
AND (
a_get_inactive_user
OR U.active
)
/*Shop_Calc_User_Temp UE_T
WHERE 1=1
AND UE_T.guid = v_guid
AND UE_T.active = 1
*/
IF a_debug = 1 THEN
SELECT
v_has_filter_user
, v_has_filter_user_auth0
;
IF a_get_first_user_only THEN
DELETE t_U
FROM tmp_User t_U
WHERE t_U.rank_user > 1
;
END IF;
END IF;
-- Permissions
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
-- SELECT v_guid, a_id_user, false, v_id_permission_product, v_id_access_level_view, v_ids_permutation_permission;
-- select * from Shop_Calc_User_Temp;
-- User IDs
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user = 1) THEN
CALL partsltd_prod.p_split(v_guid, a_ids_user, ',', FALSE);
CALL p_shop_calc_user(
v_guid, -- guid
a_id_user, -- ids_user
FALSE, -- get_inactive_user
CONCAT(v_id_permission_user, ',', v_id_permission_user_admin, ',', v_id_permission_store_admin), -- ids_permission
v_id_access_level_view, -- ids_access_level
'' -- ids_product
DELETE FROM tmp_Split;
INSERT INTO tmp_Split (
substring
, as_int
)
SELECT
substring
, CONVERT(substring, DECIMAL(10,0)) AS as_int
FROM partsltd_prod.Split_Temp
WHERE 1=1
AND GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL partsltd_prod.p_clear_split_temp( v_guid );
END IF;
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user = 1) THEN
IF EXISTS (
SELECT *
FROM tmp_Split t_S
LEFT JOIN partsltd_prod.Shop_User U ON t_S.as_int = U.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
) THEN
INSERT INTO tmp_Msg_Error (
-- guid,
id_type,
code,
msg
)
SELECT
-- v_guid,
v_id_type_error_bad_data,
v_code_error_bad_data,
CONCAT('Invalid or inactive User IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_S
LEFT JOIN partsltd_prod.Shop_User U ON t_S.as_int = U.id_user
WHERE
ISNULL(t_S.as_int)
OR ISNULL(U.id_user)
;
ELSE
INSERT INTO tmp_User (
id_user
, rank_user
)
SELECT
U.id_user
, RANK() OVER (ORDER BY U.id_user DESC) AS rank_user
FROM tmp_Split t_S
RIGHT JOIN partsltd_prod.Shop_User U ON t_S.as_int = U.id_user
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user = 1
AND NOT ISNULL(t_S.as_int)
)
)
AND (
a_get_inactive_user = 1
OR U.active = 1
)
;
END IF;
END IF;
-- Auth0 User IDs
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user_auth0 = 1) THEN
CALL partsltd_prod.p_split(v_guid, a_ids_user_auth0, ',', FALSE);
DELETE FROM tmp_Split;
INSERT INTO tmp_Split (
substring
)
SELECT
substring
FROM partsltd_prod.Split_Temp
WHERE 1=1
AND GUID = v_guid
AND NOT ISNULL(substring)
AND substring != ''
;
CALL partsltd_prod.p_clear_split_temp( v_guid );
END IF;
IF (NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) AND v_has_filter_user_auth0 = 1) THEN
IF EXISTS (
SELECT *
FROM tmp_Split t_S
LEFT JOIN partsltd_prod.Shop_User U ON t_S.substring = U.id_user_auth0
WHERE
ISNULL(t_S.substring)
OR ISNULL(U.id_user_auth0)
) THEN
INSERT INTO tmp_Msg_Error (
-- guid,
id_type,
code,
msg
)
SELECT
-- v_guid,
v_id_type_error_bad_data,
v_code_error_bad_data,
CONCAT('Invalid or inactive Auth0 User IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split t_S
LEFT JOIN partsltd_prod.Shop_User U ON t_S.substring = U.id_user_auth0
WHERE
ISNULL(t_S.substring)
OR ISNULL(U.id_user_auth0)
;
ELSE
SET v_rank_max := IFNULL((SELECT rank_user FROM tmp_User ORDER BY rank_user DESC LIMIT 1), 0);
INSERT INTO tmp_User (
id_user
, rank_user
)
SELECT
U.id_user
, v_rank_max + (RANK() OVER (ORDER BY U.id_user DESC)) AS rank_user
FROM tmp_Split t_S
RIGHT JOIN partsltd_prod.Shop_User U ON t_S.substring = U.id_user_auth0
WHERE
(
a_get_all_user = 1
OR (
v_has_filter_user_auth0 = 1
AND NOT ISNULL(t_S.substring)
)
)
AND (
a_get_inactive_user = 1
OR U.active = 1
)
;
END IF;
END IF;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_get_first_user_only THEN
DELETE t_U
FROM tmp_User t_U
WHERE t_U.rank_user > 1
;
END IF;
END IF;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
-- Can admin store
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_store_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_debug
;
SELECT * FROM partsltd_prod.Shop_Calc_User_Temp;
END IF;
CALL partsltd_prod.p_shop_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_store_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_debug
);
-- select * from Shop_Calc_User_Temp;
IF a_debug = 1 THEN
SELECT * FROM partsltd_prod.Shop_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN partsltd_prod.Shop_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_store = CUT.can_admin
;
CALL partsltd_prod.p_shop_clear_calc_user( v_guid, FALSE );
END IF;
-- Can admin user
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_debug
;
SELECT * FROM partsltd_prod.Shop_Calc_User_Temp;
END IF;
CALL partsltd_prod.p_shop_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, '' -- ids_product
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM partsltd_prod.Shop_Calc_User_Temp WHERE GUID = v_guid;
END IF;
UPDATE tmp_User t_U
INNER JOIN partsltd_prod.Shop_Calc_User_Temp CUT
ON CUT.GUID = v_guid
AND t_U.id_user = CUT.id_user
SET t_U.can_admin_user = CUT.can_admin
;
CALL partsltd_prod.p_shop_clear_calc_user( v_guid, FALSE );
END IF;
-- Permissions
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, '' -- ids_product
, 0 -- a_debug
;
SELECT * FROM partsltd_prod.Shop_Calc_User_Temp;
END IF;
CALL partsltd_prod.p_shop_calc_user(
v_guid -- guid
, a_id_user -- ids_user
, FALSE -- get_inactive_user
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, '' -- ids_product
, 0 -- a_debug
);
IF a_debug = 1 THEN
SELECT * FROM partsltd_prod.Shop_Calc_User_Temp WHERE GUID = v_guid;
END IF;
IF NOT EXISTS (
SELECT can_view
FROM Shop_Calc_User_Temp UE_T
FROM partsltd_prod.Shop_Calc_User_Temp CUT
WHERE 1=1
AND UE_T.GUID = v_guid
AND UE_T.id_permission_required = v_id_permission_user
AND CUT.GUID = v_guid
AND can_view = 1
-- AND FIND_IN_SET(v_ids_permission_required, CUT.id_permission_required) > 0
) THEN
INSERT INTO tmp_Msg_Error (
guid,
id_type,
code,
msg
)
VALUES (
v_guid,
v_id_type_error_data,
v_code_error_data,
CONCAT('You do not have view permissions for ', (SELECT name FROM Shop_Permission WHERE id_permission = v_id_permission_user LIMIT 1))
v_id_type_error_bad_data,
v_code_error_bad_data,
-- CONCAT('You do not have view permissions for ', (SELECT name FROM partsltd_prod.Shop_Permission WHERE id_permission = v_id_permission_user LIMIT 1))
-- CONCAT('You do not have view permissions for ', (SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM partsltd_prod.Shop_Permission WHERE FIND_IN_SET(v_id_permission_user, id_permission) > 0))
CONCAT('You do not have view permissions for ', (SELECT name FROM partsltd_prod.Shop_Permission P INNER JOIN partsltd_prod.Shop_Calc_User_Temp CUT ON P.id_permission = CUT.id_permission_required WHERE GUID = v_guid AND IFNULL(can_view, 0) = 0 LIMIT 1)) -- WHERE IFNULL(CUT.can_view, 0) = 0
)
;
ELSE
-- INSERT INTO
SET a_debug := a_debug;
END IF;
CALL partsltd_prod.p_shop_clear_calc_user( v_guid, FALSE );
END IF;
-- Returns
/* NULL record required for flask sql_alchemy to detect result set
IF EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = v_guid) THEN
/* NULL record required for flask sql_alchemy to detect result set */
IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN
DELETE FROM tmp_User;
INSERT INTO tmp_User ( id_user )
VALUES ( NULL );
END IF;
*/
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = v_guid) THEN
SELECT
U.id_user
, U.id_user_auth0
, U.firstname
, U.surname
, U.email
, U.is_email_verified
, U.id_currency_default
, U.id_region_default
, U.is_included_VAT_default
, U.is_super_user
, UE_T_STORE.can_admin_store AS can_admin_store
, UE_T_USER.can_admin_user AS can_admin_user
FROM tmp_User t_U
INNER JOIN Shop_User U ON t_U.id_user = U.id_user
INNER JOIN (
SELECT
id_user
, id_permission_required
, can_admin AS can_admin_store
FROM Shop_Calc_User_Temp UE_T_STORE
WHERE 1=1
AND UE_T_STORE.guid = v_guid
AND UE_T_STORE.id_permission_required = v_id_permission_store_admin
) UE_T_STORE ON t_U.id_user = UE_T_STORE.id_user
INNER JOIN (
SELECT
id_user
, id_permission_required
, can_admin AS can_admin_user
FROM Shop_Calc_User_Temp UE_T_USER
WHERE 1=1
AND UE_T_USER.guid = v_guid
AND UE_T_USER.id_permission_required = v_id_permission_user_admin
) UE_T_USER ON t_U.id_user = UE_T_USER.id_user
;
ELSE
SELECT
NULL AS id_user
, NULL AS id_user_auth0
, NULL AS firstname
, NULL AS surname
, NULL AS email
, NULL AS is_email_verified
, NULL AS id_currency_default
, NULL AS id_region_default
, NULL AS is_included_VAT_default
, NULL AS is_super_user
, NULL AS can_admin_store
, NULL AS can_admin_user
;
END IF;
SELECT
U.id_user
, U.id_user_auth0
, U.firstname
, U.surname
, U.email
, U.is_email_verified
, U.id_currency_default
, U.id_region_default
, U.is_included_VAT_default
, U.is_super_user
, t_U.can_admin_store
, t_U.can_admin_user
FROM tmp_User t_U
INNER JOIN partsltd_prod.Shop_User U ON t_U.id_user = U.id_user
;
# Errors
SELECT
@@ -221,27 +454,33 @@ BEGIN
MET.name,
MET.description
FROM tmp_Msg_Error t_ME
INNER JOIN Shop_Msg_Error_Type MET
INNER JOIN partsltd_prod.Shop_Msg_Error_Type MET
ON t_ME.id_type = MET.id_type
WHERE guid = v_guid
;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
-- Clean up
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
/*
DELETE FROM Shop_Calc_User_Temp
DELETE FROM partsltd_prod.Shop_Calc_User_Temp
WHERE GUID = v_guid;
*/
CALL p_shop_clear_calc_user(v_guid);
IF a_debug = 1 THEN
CALL partsltd_prod.p_debug_timing_reporting ( v_time_start );
END IF;
END //
DELIMITER ;;
/*
CALL p_get_many_user (
NULL # a_id_user
, 'auth0|6582b95c895d09a70ba10fef' # a_id_user_auth0
@@ -249,13 +488,15 @@ CALL p_get_many_user (
, 0 # a_get_inactive_user
, 0 # a_get_first_user_only
, NULL # a_ids_user
, 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0 # ' --
, 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0
, 1 -- a_debug
);
select * from Shop_Calc_User_Temp;
delete from Shop_Calc_User_Temp;
select * FROM partsltd_prod.Shop_Calc_User_Temp;
delete FROM partsltd_prod.Shop_Calc_User_Temp;
SELECT *
FROM SHOP_USER;
FROM partsltd_prod.Shop_USER;
CALL p_get_many_user(
NULL -- :a_id_user,

View File

@@ -86,6 +86,14 @@ VALUES
;
*/
# Addresses
INSERT INTO Shop_Address (
id_region, postcode, address_line_1, address_line_2, city, county
)
VALUES (
1, 'CV22 6DN', '53 Alfred Green Close', '', 'Rugby', 'Warwickshire'
);
# Plants
INSERT INTO Shop_Plant (
code, name, id_address, id_user_manager
@@ -552,7 +560,10 @@ VALUES
(4, 'SALES_AND_PURCHASING', 'Sales and Purchasing'),
(5, 'MANUFACTURING', 'Manufacturing')
;
/*
select * from Shop_Permission
select * from Shop_Role_Permission_Link
*/
# Permissions
INSERT INTO Shop_Permission (
display_order, code, name, id_permission_group, id_access_level_required
@@ -627,8 +638,8 @@ VALUES
(1, 1)
;
# Addresses
INSERT INTO Shop_Address (
# User Addresses
INSERT INTO Shop_User_Address (
id_user, id_region, name_full, phone_number, postcode, address_line_1, address_line_2, city, county
)
SELECT U.id_user, 1, CONCAT(U.firstname, ' ', U.surname), '07375 571430', 'CV22 6DN', '53 Alfred Green Close', '', 'Rugby', 'Warwickshire'
@@ -697,7 +708,7 @@ INSERT INTO Shop_Supplier (
, id_currency
)
VALUES
('Malt Kiln Farm Shop', NULL, NULL, 2, '01788 832640', NULL, 'farmshop@maltkilnfarmshop.co.uk', 'https://www.maltkilnfarmshop.co.uk/', 1)
('Malt Kiln Farm Shop', NULL, NULL, 1, '01788 832640', NULL, 'farmshop@maltkilnfarmshop.co.uk', 'https://www.maltkilnfarmshop.co.uk/', 1)
;
/*

View File

@@ -1,6 +1,6 @@
/*
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
@@ -24,4 +24,7 @@ FROM
WHERE
TABLE_SCHEMA = 'PARTS'
-- AND TABLE_NAME = 'your_table_name'
;
;
*/

View File

@@ -2,6 +2,7 @@
1000_tbl_Shop_Product_Change_Set.sql
1000_tbl_Split_Temp.sql
1001_tbl_Shop_User_Change_Set.sql
1001_tbl_Split_Key_Value_Pair_Csv_Temp.sql
1002_tbl_Shop_Sales_And_Purchasing_Change_Set.sql
1003_tbl_Shop_Access_Level.sql
1004_tbl_Shop_Access_Level_Audit.sql
@@ -18,7 +19,9 @@
1103_tbl_Shop_Region_Branch.sql
1104_tbl_Shop_Region_Branch_Audit.sql
1105_tbl_Shop_Region_Branch_Temp.sql
1106_tbl_Shop_Address.sql
1106_tbl_Shop_Plant.sql
1107_tbl_Shop_Address_Audit.sql
1107_tbl_Shop_Plant_Audit.sql
1108_tbl_Shop_Plant_Temp.sql
1109_tbl_Shop_Storage_Location.sql
@@ -67,9 +70,7 @@
1233_tbl_Shop_Discount.sql
1234_tbl_Shop_Discount_Audit.sql
1236_tbl_Shop_Discount_Region_Currency_Link.sql
1236_tbl_Shop_Product_Currency_Region_Link.sql
1237_tbl_Shop_Discount_Region_Currency_Link_Audit.sql
1237_tbl_Shop_Product_Currency_Region_Link_Audit.sql
1300_tbl_Shop_Permission_Group.sql
1301_tbl_Shop_Permission_Group_Audit.sql
1303_tbl_Shop_Permission.sql
@@ -82,8 +83,8 @@
1313_tbl_Shop_User_Audit.sql
1315_tbl_Shop_User_Role_Link.sql
1316_tbl_Shop_User_Role_Link_Audit.sql
1318_tbl_Shop_Address.sql
1319_tbl_Shop_Address_Audit.sql
1318_tbl_Shop_User_Address.sql
1319_tbl_Shop_User_Address_Audit.sql
1321_tbl_Shop_User_Basket.sql
1322_tbl_Shop_User_Basket_Audit.sql
1397_tbl_Shop_Order_Status.sql
@@ -118,6 +119,7 @@
3014_tri_Shop_Image_Type.sql
3100_tri_Shop_Region.sql
3103_tri_Shop_Region_Branch.sql
3106_tri_Shop_Address.sql
3109_tri_Shop_Storage_Location.sql
3115_tri_Shop_Currency.sql
3118_tri_Shop_Tax_Or_Surcharge.sql
@@ -140,7 +142,7 @@
3309_tri_Shop_Role_Permission_Link.sql
3312_tri_Shop_User.sql
3315_tri_Shop_User_Role_Link.sql
3318_tri_Shop_Address.sql
3318_tri_Shop_User_Address.sql
3321_tri_Shop_User_Basket.sql
3324_tri_Shop_User_Order_Status.sql
3400_tri_Shop_Supplier.sql
@@ -157,24 +159,31 @@
6000_p_split.sql
6001_p_clear_split_temp.sql
6001_p_validate_guid.sql
6003_p_split_key_value_pair_csv.sql
6004_p_clear_split_key_value_pair_csv_temp.sql
6206_fn_shop_get_product_permutation_name.sql
6500_p_shop_calc_user.sql
6501_p_shop_clear_calc_user.sql
7003_p_shop_get_many_access_level.sql
7101_p_shop_get_many_region.sql
7106_p_shop_get_many_plant.sql
7109_p_shop_get_many_storage_location.sql
7116_p_shop_get_many_currency.sql
7122_p_shop_get_many_unit_measurement.sql
7200_p_shop_save_product_category.sql
7200_p_shop_save_product_category_test.sql
7202_p_shop_clear_calc_product_permutation.sql
7203_p_shop_save_product.sql
7203_p_shop_save_product_test.sql
7204_p_shop_calc_product_permutation.sql
7204_p_shop_get_many_product.sql
7205_p_shop_get_many_stripe_product_new.sql
7206_p_shop_save_permutation.sql
7206_p_shop_save_product_permutation.sql
7210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql
7210_p_shop_get_many_product_variation.sql
7219_p_shop_get_many_stock_item.sql
7220_p_shop_save_stock_item.sql
7220_p_shop_save_stock_item_test.sql
7221_p_get_many_shop_product_price_and_discount_and_delivery_option.sql
7223_p_shop_get_many_stripe_price_new.sql
7312_p_shop_save_user.sql
@@ -193,4 +202,3 @@
9000_populate.sql
9001_view.sql
9010_anal.sql
DEPRECATED