Fix: 1. Save proc architecture update for records saved with subrecords / linked records, such as Order has Items. \n 2. Style improvements for Product Category, Product, Product Permutation pages.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,7 @@ DROP TABLE IF EXISTS tmp_Shop_Order;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Product;
|
||||
DROP TABLE IF EXISTS tmp_Product;
|
||||
DROP TABLE IF EXISTS tmp_Product_Permutation;
|
||||
DROP TABLE IF EXISTS tmp_Permutation_Variation_Link;
|
||||
DROP TABLE IF EXISTS tmp_Permutation;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Product_p_shop_calc_user;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Product_p_Shop_Calc_User;
|
||||
@@ -51,6 +52,7 @@ DROP TABLE IF EXISTS tmp_Manufacturing_Purchase_Order;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Customer;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Customer_Sale_Order_Product_Link;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Customer_Sale_Order;
|
||||
DROP TABLE IF EXISTS tmp_Get_Variation_From_Csv_Variations;
|
||||
|
||||
|
||||
# Delete old tables
|
||||
@@ -165,6 +167,7 @@ DROP TABLE IF EXISTS Shop_Product_Currency_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Product_Variation_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Variation_Link;
|
||||
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link_Temp;
|
||||
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link;
|
||||
|
||||
@@ -304,6 +307,8 @@ DROP PROCEDURE IF EXISTS p_shop_save_product_variation;
|
||||
DROP PROCEDURE IF EXISTS p_shop_save_product_variation_test;
|
||||
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 FUNCTION IF EXISTS fn_shop_get_product_variations_from_id_csv_list;
|
||||
DROP FUNCTION IF EXISTS fn_shop_get_product_permutation_variations_csv;
|
||||
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;
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Category_Temp';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Category_Temp (
|
||||
id_category INT NOT NULL
|
||||
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_category INT NOT NULL
|
||||
, code VARCHAR(50) NOT NULL
|
||||
, name VARCHAR(255) NOT NULL
|
||||
, description VARCHAR(4000) NULL
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Temp';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Temp (
|
||||
id_product INT NOT NULL
|
||||
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_product INT NOT NULL
|
||||
, name VARCHAR(255) NOT NULL
|
||||
, id_category INT NOT NULL
|
||||
, has_variations BIT NOT NULL
|
||||
|
||||
@@ -7,6 +7,7 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Permutation (
|
||||
id_permutation INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_permutation_temp INT NOT NULL,
|
||||
id_product INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
|
||||
@@ -6,8 +6,10 @@
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Permutation_Temp';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Temp (
|
||||
id_permutation INT NOT NULL
|
||||
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_permutation INT NOT NULL
|
||||
, id_product INT NOT NULL
|
||||
, csv_id_pairs_variation VARCHAR(4000) NULL
|
||||
, description VARCHAR(4000) NOT NULL
|
||||
, cost_local_VAT_excl FLOAT NULL
|
||||
, cost_local_VAT_incl FLOAT NULL
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
# Product Permutation Variation Link
|
||||
|
||||
-- DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link_Temp;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Permutation_Variation_Link_Temp';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Variation_Link_Temp (
|
||||
id_temp INT NOT NULL AUTO_INCREMENT PRIMARY KEY
|
||||
, id_link INT NOT NULL
|
||||
, id_permutation INT NOT NULL
|
||||
, id_variation INT NOT NULL
|
||||
, active BIT NOT NULL
|
||||
, display_order INT NOT NULL
|
||||
, GUID BINARY(36) NOT NULL
|
||||
);
|
||||
@@ -23,6 +23,8 @@ CREATE TRIGGER before_update_Shop_Product_Permutation
|
||||
BEFORE UPDATE ON Shop_Product_Permutation
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE v_msg VARCHAR(4000);
|
||||
|
||||
IF OLD.id_change_set <=> NEW.id_change_set THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
|
||||
@@ -40,8 +42,10 @@ BEGIN
|
||||
NEW.id_unit_measurement_interval_expiration_unsealed IS NULL
|
||||
OR NEW.id_unit_measurement_interval_expiration_unsealed NOT IN (SELECT id_unit_measurement FROM Shop_Unit_Measurement WHERE is_unit_of_time = 1)
|
||||
)) THEN
|
||||
SET v_msg := CONCAT('Unsealed expiration interval ID must be a unit of time. Invalid value: ', CAST(NEW.id_unit_measurement_interval_expiration_unsealed AS CHAR));
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = 'Unsealed expiration interval ID must be a unit of time.';
|
||||
SET MESSAGE_TEXT = v_msg
|
||||
;
|
||||
END IF;
|
||||
|
||||
INSERT INTO Shop_Product_Permutation_Audit (
|
||||
|
||||
@@ -1,49 +1,44 @@
|
||||
|
||||
DROP FUNCTION IF EXISTS fn_shop_get_product_permutation_variations_csv;
|
||||
DROP FUNCTION IF EXISTS fn_shop_get_product_permutation_name;
|
||||
|
||||
DELIMITER //
|
||||
|
||||
CREATE FUNCTION fn_shop_get_product_permutation_variations_csv(id_product_permutation INT)
|
||||
CREATE FUNCTION fn_shop_get_product_permutation_name(id_product_permutation INT)
|
||||
RETURNS VARCHAR(4000)
|
||||
DETERMINISTIC
|
||||
BEGIN
|
||||
DECLARE csv VARCHAR(4000);
|
||||
DECLARE name VARCHAR(4000);
|
||||
|
||||
SET csv := (
|
||||
SET name := (
|
||||
SELECT
|
||||
CASE WHEN P.has_variations = 0 THEN
|
||||
''
|
||||
ELSE
|
||||
GROUP_CONCAT(
|
||||
CONCAT(
|
||||
PV.id_type
|
||||
, ':'
|
||||
, PV.id_variation
|
||||
)
|
||||
SEPARATOR ','
|
||||
)
|
||||
END
|
||||
FROM partsltd_prod.Shop_Product_Permutation PP
|
||||
LEFT JOIN partsltd_prod.Shop_Product P ON PP.id_product = P.id_product
|
||||
LEFT JOIN partsltd_prod.Shop_Product_Permutation_Variation_Link PPVL ON PP.id_permutation = PPVL.id_permutation
|
||||
LEFT JOIN partsltd_prod.Shop_Variation PV ON PPVL.id_variation = PV.id_variation
|
||||
LEFT JOIN partsltd_prod.Shop_Variation_Type PVT ON PV.id_type = PVT.id_type
|
||||
CONCAT(
|
||||
IFNULL(PC.name, '(No Category)')
|
||||
, ' - '
|
||||
, IFNULL(P.name, '(No Product)')
|
||||
, CASE WHEN P.has_variations = 1 THEN
|
||||
CONCAT(' - ', GROUP_CONCAT(CONCAT(VT.name, ': ', V.name) SEPARATOR ', '))
|
||||
ELSE '' END
|
||||
)
|
||||
FROM Shop_Product_Permutation PP
|
||||
LEFT JOIN Shop_Product P ON PP.id_product = P.id_product
|
||||
LEFT JOIN Shop_Product_Category PC ON P.id_category = PC.id_category
|
||||
LEFT JOIN Shop_Product_Permutation_Variation_Link PPVL ON PP.id_permutation = PPVL.id_permutation
|
||||
LEFT JOIN Shop_Variation V ON PPVL.id_variation = V.id_variation
|
||||
LEFT JOIN Shop_Variation_Type VT ON V.id_type = VT.id_type
|
||||
WHERE PP.id_permutation = id_product_permutation
|
||||
GROUP BY P.id_product, P.has_variations, PVT.display_order, PVT.name, PV.display_order, PV.name
|
||||
GROUP BY PC.id_category, PC.name, P.id_product, P.name, P.has_variations, VT.display_order, VT.name, V.display_order, V.name
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
RETURN csv;
|
||||
RETURN name;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
/*
|
||||
SELECT
|
||||
fn_shop_get_product_permutation_variations_csv(
|
||||
fn_shop_get_product_permutation_name(
|
||||
3 -- id_product_permutation
|
||||
)
|
||||
, fn_shop_get_product_permutation_variations_csv(
|
||||
1 -- id_product_permutation
|
||||
)
|
||||
;
|
||||
/*
|
||||
*/
|
||||
@@ -0,0 +1,102 @@
|
||||
|
||||
DROP FUNCTION IF EXISTS fn_shop_get_product_variations_from_id_csv_list;
|
||||
|
||||
DELIMITER //
|
||||
|
||||
CREATE FUNCTION fn_shop_get_product_variations_from_id_csv_list (
|
||||
a_id_permutation INT
|
||||
, a_variation_csv TEXT
|
||||
, a_guid BINARY(36)
|
||||
)
|
||||
RETURNS INT
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
DECLARE v_csv_pairs VARCHAR(4000);
|
||||
DECLARE v_current_pair VARCHAR(50);
|
||||
DECLARE v_id_variation_type INT;
|
||||
DECLARE v_id_variation INT;
|
||||
DECLARE v_rank_counter INT;
|
||||
|
||||
CALL p_validate_guid( a_guid );
|
||||
|
||||
SET v_csv_pairs := a_variation_csv;
|
||||
SET v_rank_counter := 1;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Get_Variation_From_Csv_Variations;
|
||||
CREATE TEMPORARY TABLE tmp_Get_Variation_From_Csv_Variations (
|
||||
id_variation_type INT NULL
|
||||
, id_variation INT NOT NULL
|
||||
);
|
||||
|
||||
WHILE LENGTH(v_csv_pairs) > 0 DO
|
||||
IF LOCATE(',', v_csv_pairs) > 0 THEN
|
||||
SET v_current_pair := SUBSTRING_INDEX(v_csv_pairs, ',', 1);
|
||||
SET v_csv_pairs := SUBSTRING(v_csv_pairs, LOCATE(',', v_csv_pairs) + 1);
|
||||
ELSE
|
||||
SET v_current_pair := v_csv_pairs;
|
||||
SET v_csv_pairs := '';
|
||||
END IF;
|
||||
|
||||
SET v_id_variation_type := SUBSTRING_INDEX(v_current_pair, ':', 1);
|
||||
SET v_id_variation := SUBSTRING_INDEX(v_current_pair, ':', -1);
|
||||
|
||||
IF NOT ISNULL(v_id_variation) THEN
|
||||
INSERT INTO tmp_Get_Variation_From_Csv_Variations (
|
||||
id_variation_type
|
||||
, id_variation
|
||||
)
|
||||
SELECT
|
||||
v_id_variation_type AS id_variation_type
|
||||
, v_id_variation AS id_variation
|
||||
;
|
||||
|
||||
SET v_rank_counter := v_rank_counter + 1;
|
||||
END IF;
|
||||
END WHILE;
|
||||
|
||||
INSERT INTO partsltd_prod.Shop_Product_Permutation_Variation_Link_Temp (
|
||||
id_link
|
||||
, id_permutation
|
||||
, id_variation
|
||||
, display_order
|
||||
, active
|
||||
, GUID
|
||||
)
|
||||
SELECT
|
||||
IFNULL(PPVL.id_link, -v_rank_counter) AS id_link
|
||||
, a_id_permutation
|
||||
, t_V.id_variation
|
||||
, v_rank_counter AS display_order
|
||||
, 1 AS active
|
||||
, a_guid
|
||||
FROM tmp_Get_Variation_From_Csv_Variations t_V
|
||||
LEFT JOIN partsltd_prod.Shop_Product_Permutation_Variation_Link PPVL ON t_V.id_variation = PPVL.id_variation
|
||||
;
|
||||
|
||||
DROP TEMPORARY TABLE tmp_Get_Variation_From_Csv_Variations;
|
||||
|
||||
RETURN v_rank_counter;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
SELECT
|
||||
partsltd_prod.fn_shop_get_product_variations_from_id_csv_list(
|
||||
1 -- a_id_permutation
|
||||
, '1:1' -- a_variation_csv
|
||||
, 'NIPPLENIPPLENIPPLENIPPLENIPPLENIPPLE' -- a_guid
|
||||
)
|
||||
;
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link_Temp
|
||||
WHERE GUID = 'NIPPLENIPPLENIPPLENIPPLENIPPLENIPPLE'
|
||||
;
|
||||
DELETE
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link_Temp
|
||||
WHERE GUID = 'NIPPLENIPPLENIPPLENIPPLENIPPLENIPPLE'
|
||||
;
|
||||
*/
|
||||
@@ -0,0 +1,49 @@
|
||||
|
||||
DROP FUNCTION IF EXISTS fn_shop_get_product_permutation_variations_csv;
|
||||
|
||||
DELIMITER //
|
||||
|
||||
CREATE FUNCTION fn_shop_get_product_permutation_variations_csv(id_product_permutation INT)
|
||||
RETURNS VARCHAR(4000)
|
||||
DETERMINISTIC
|
||||
BEGIN
|
||||
DECLARE csv VARCHAR(4000);
|
||||
|
||||
SET csv := (
|
||||
SELECT
|
||||
CASE WHEN P.has_variations = 0 THEN
|
||||
''
|
||||
ELSE
|
||||
GROUP_CONCAT(
|
||||
CONCAT(
|
||||
PV.id_type
|
||||
, ':'
|
||||
, PV.id_variation
|
||||
)
|
||||
SEPARATOR ','
|
||||
)
|
||||
END
|
||||
FROM partsltd_prod.Shop_Product_Permutation PP
|
||||
LEFT JOIN partsltd_prod.Shop_Product P ON PP.id_product = P.id_product
|
||||
LEFT JOIN partsltd_prod.Shop_Product_Permutation_Variation_Link PPVL ON PP.id_permutation = PPVL.id_permutation
|
||||
LEFT JOIN partsltd_prod.Shop_Variation PV ON PPVL.id_variation = PV.id_variation
|
||||
LEFT JOIN partsltd_prod.Shop_Variation_Type PVT ON PV.id_type = PVT.id_type
|
||||
WHERE PP.id_permutation = id_product_permutation
|
||||
GROUP BY P.id_product, P.has_variations, PVT.display_order, PVT.name, PV.display_order, PV.name
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
RETURN csv;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
SELECT
|
||||
fn_shop_get_product_permutation_variations_csv(
|
||||
3 -- id_product_permutation
|
||||
)
|
||||
, fn_shop_get_product_permutation_variations_csv(
|
||||
1 -- id_product_permutation
|
||||
)
|
||||
;
|
||||
/*
|
||||
*/
|
||||
@@ -67,11 +67,14 @@ BEGIN
|
||||
|
||||
CALL p_validate_guid ( a_guid );
|
||||
|
||||
DROP TABLE IF EXISTS tmp_Permutation;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Permutation_Variation_Link;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Permutation;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_Permutation (
|
||||
id_permutation INT NOT NULL
|
||||
, id_permutation_temp INT NOT NULL
|
||||
, id_product INT NOT NULL
|
||||
, csv_id_pairs_variation VARCHAR(4000) NULL
|
||||
, description VARCHAR(4000) NOT NULL
|
||||
, cost_local_VAT_excl FLOAT NULL
|
||||
, cost_local_VAT_incl FLOAT NULL
|
||||
@@ -97,6 +100,15 @@ BEGIN
|
||||
, name_error VARCHAR(255) NOT NULL
|
||||
, is_new BIT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_Permutation_Variation_Link (
|
||||
id_link INT NOT NULL
|
||||
, id_permutation INT NOT NULL
|
||||
, id_variation INT NOT NULL
|
||||
, active BIT NOT NULL
|
||||
, display_order INT NOT NULL
|
||||
, is_new BIT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
|
||||
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
@@ -109,7 +121,9 @@ BEGIN
|
||||
-- Get data from Temp table
|
||||
INSERT INTO tmp_Permutation (
|
||||
id_permutation
|
||||
, id_permutation_temp
|
||||
, id_product
|
||||
, csv_id_pairs_variation
|
||||
, description
|
||||
, cost_local_VAT_excl
|
||||
, cost_local_VAT_incl
|
||||
@@ -134,7 +148,9 @@ BEGIN
|
||||
)
|
||||
SELECT
|
||||
PP_T.id_permutation
|
||||
, PP_T.id_permutation
|
||||
, IFNULL(PP_T.id_product, PP.id_product) AS id_product
|
||||
, PP_T.csv_id_pairs_variation
|
||||
, IFNULL(PP_T.description, PP.description) AS description
|
||||
, IFNULL(PP_T.cost_local_VAT_excl, PP.cost_local_VAT_excl) AS cost_local_VAT_excl
|
||||
, IFNULL(PP_T.cost_local_VAT_incl, PP.cost_local_VAT_incl) AS cost_local_VAT_incl
|
||||
@@ -161,6 +177,46 @@ BEGIN
|
||||
WHERE PP_T.guid = a_guid
|
||||
;
|
||||
|
||||
SELECT
|
||||
partsltd_prod.fn_shop_get_product_variations_from_id_csv_list(
|
||||
t_PP.id_permutation -- a_id_permutation
|
||||
, t_PP.csv_id_pairs_variation -- a_variation_csv
|
||||
, a_guid -- a_guid
|
||||
)
|
||||
FROM tmp_Permutation t_PP
|
||||
WHERE NOT ISNULL(t_PP.csv_id_pairs_variation)
|
||||
;
|
||||
|
||||
INSERT INTO tmp_Permutation_Variation_Link (
|
||||
id_link
|
||||
, id_permutation
|
||||
, id_variation
|
||||
, display_order
|
||||
, active
|
||||
, is_new
|
||||
)
|
||||
SELECT
|
||||
PPVL_T.id_link
|
||||
, PPVL_T.id_permutation
|
||||
, PPVL_T.id_variation
|
||||
, PPVL_T.display_order
|
||||
, NOT ISNULL(PPVL_T.id_link) AS active
|
||||
, IFNULL(PPVL_T.id_link, 0) < 1 AS is_new
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link_Temp PPVL_T
|
||||
LEFT JOIN partsltd_prod.Shop_Product_Permutation_Variation_Link PPVL ON PPVL_T.id_link = PPVL.id_variation
|
||||
LEFT JOIN tmp_Permutation t_PP ON PPVL_T.id_permutation = t_PP.id_permutation
|
||||
WHERE PPVL_T.GUID = a_guid
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT *
|
||||
FROM tmp_Permutation
|
||||
;
|
||||
SELECT *
|
||||
FROM tmp_Permutation_Variation_Link
|
||||
;
|
||||
END IF;
|
||||
|
||||
-- Validation
|
||||
-- Missing mandatory fields
|
||||
-- id_product
|
||||
@@ -224,8 +280,6 @@ BEGIN
|
||||
;
|
||||
END IF;
|
||||
|
||||
SELECT 'NIPS';
|
||||
|
||||
-- latency_manufacture
|
||||
IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.latency_manufacture) LIMIT 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
@@ -376,6 +430,17 @@ BEGIN
|
||||
, t_P.can_admin = UE_T.can_admin
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Calc_User_Temp
|
||||
WHERE GUID = a_guid
|
||||
;
|
||||
SELECT *
|
||||
FROM tmp_Permutation t_PP
|
||||
LEFT JOIN Shop_Product P ON t_PP.id_product = P.id_product
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL p_shop_clear_calc_user(
|
||||
a_guid
|
||||
, 0 -- a_debug
|
||||
@@ -392,20 +457,84 @@ BEGIN
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following product permutation(s) do not have product edit permission: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_Permutation t_P
|
||||
WHERE ISNULL(t_P.can_edit)
|
||||
WHERE
|
||||
ISNULL(t_P.can_edit)
|
||||
;
|
||||
END IF;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link_Temp
|
||||
WHERE GUID = a_guid
|
||||
;
|
||||
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();
|
||||
|
||||
INSERT INTO Shop_Product_Permutation (
|
||||
id_permutation_temp
|
||||
, id_product
|
||||
, description
|
||||
, cost_local_VAT_excl
|
||||
, cost_local_VAT_incl
|
||||
, id_currency_cost
|
||||
, profit_local_min
|
||||
, latency_manufacture
|
||||
, 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
|
||||
, created_by
|
||||
, created_on
|
||||
, id_change_set
|
||||
)
|
||||
SELECT
|
||||
t_P.id_permutation
|
||||
, t_P.id_product AS id_product
|
||||
, t_P.description AS description
|
||||
, t_P.cost_local_VAT_excl AS cost_local_VAT_excl
|
||||
, t_P.cost_local_VAT_incl AS cost_local_VAT_incl
|
||||
, t_P.id_currency_cost AS id_currency_cost
|
||||
, t_P.profit_local_min AS profit_local_min
|
||||
, t_P.latency_manufacture AS latency_manufacture
|
||||
, t_P.id_unit_measurement_quantity AS id_unit_measurement_quantity
|
||||
, t_P.count_unit_measurement_per_quantity_step AS count_unit_measurement_per_quantity_step
|
||||
, t_P.quantity_min AS quantity_min
|
||||
, t_P.quantity_max AS quantity_max
|
||||
, t_P.quantity_stock AS quantity_stock
|
||||
, t_P.is_subscription AS is_subscription
|
||||
, t_P.id_unit_measurement_interval_recurrence AS id_unit_measurement_interval_recurrence
|
||||
, t_P.count_interval_recurrence AS count_interval_recurrence
|
||||
, t_P.id_stripe_product AS id_stripe_product
|
||||
, t_P.does_expire_faster_once_unsealed AS does_expire_faster_once_unsealed
|
||||
, t_P.id_unit_measurement_interval_expiration_unsealed AS id_unit_measurement_interval_expiration_unsealed
|
||||
, t_P.count_interval_expiration_unsealed AS count_interval_expiration_unsealed
|
||||
, t_P.active AS active
|
||||
, a_id_user AS created_by
|
||||
, v_time_start AS created_on
|
||||
, v_id_change_set AS id_change_set
|
||||
FROM tmp_Permutation t_P
|
||||
WHERE
|
||||
is_new = 1
|
||||
AND active = 1
|
||||
;
|
||||
|
||||
UPDATE Shop_Product_Permutation PP
|
||||
INNER JOIN tmp_Permutation t_P ON PP.id_permutation = t_P.id_permutation
|
||||
SET
|
||||
@@ -431,66 +560,60 @@ BEGIN
|
||||
, PP.active = t_P.active
|
||||
, PP.id_change_set = v_id_change_set
|
||||
;
|
||||
|
||||
UPDATE tmp_Permutation t_PP
|
||||
INNER JOIN partsltd_prod.Shop_Product_Permutation PP
|
||||
ON t_PP.id_permutation_temp = PP.id_permutation_temp
|
||||
AND PP.id_change_set = v_id_change_set
|
||||
SET
|
||||
t_PP.id_permutation = PP.id_permutation
|
||||
;
|
||||
UPDATE tmp_Permutation_Variation_Link t_PPVL
|
||||
INNER JOIN tmp_Permutation t_PP ON t_PPVL.id_permutation = t_PP.id_permutation_temp
|
||||
SET
|
||||
t_PPVL.id_permutation = t_PP.id_permutation
|
||||
;
|
||||
|
||||
INSERT INTO partsltd_prod.Shop_Product_Permutation_Variation_Link (
|
||||
id_permutation
|
||||
, id_variation
|
||||
, display_order
|
||||
, active
|
||||
)
|
||||
SELECT
|
||||
t_PPVL.id_permutation
|
||||
, t_PPVL.id_variation
|
||||
, t_PPVL.display_order
|
||||
, t_PPVL.active
|
||||
FROM tmp_Permutation_Variation_Link t_PPVL
|
||||
WHERE
|
||||
t_PPVL.is_new = 1
|
||||
AND t_PPVL.active = 1
|
||||
;
|
||||
|
||||
UPDATE partsltd_prod.Shop_Product_Permutation_Variation_Link PPVL
|
||||
INNER JOIN tmp_Permutation_Variation_Link t_PPVL
|
||||
ON PPVL.id_link = t_PPVL.id_link
|
||||
AND t_PPVL.is_new = 1
|
||||
SET
|
||||
PPVL.id_permutation = t_PPVL.id_permutation
|
||||
, PPVL.id_variation = t_PPVL.id_variation
|
||||
, PPVL.display_order = t_PPVL.display_order
|
||||
, PPVL.active = t_PPVL.active
|
||||
, PPVL.id_change_set = v_id_change_set
|
||||
;
|
||||
END IF;
|
||||
|
||||
INSERT INTO Shop_Product_Permutation (
|
||||
id_product
|
||||
, description
|
||||
, cost_local_VAT_excl
|
||||
, cost_local_VAT_incl
|
||||
, id_currency_cost
|
||||
, profit_local_min
|
||||
, latency_manufacture
|
||||
, 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
|
||||
, created_by
|
||||
, created_on
|
||||
)
|
||||
SELECT
|
||||
t_P.id_product AS id_product
|
||||
, t_P.description AS description
|
||||
, t_P.cost_local_VAT_excl AS cost_local_VAT_excl
|
||||
, t_P.cost_local_VAT_incl AS cost_local_VAT_incl
|
||||
, t_P.id_currency_cost AS id_currency_cost
|
||||
, t_P.profit_local_min AS profit_local_min
|
||||
, t_P.latency_manufacture AS latency_manufacture
|
||||
, t_P.id_unit_measurement_quantity AS id_unit_measurement_quantity
|
||||
, t_P.count_unit_measurement_per_quantity_step AS count_unit_measurement_per_quantity_step
|
||||
, t_P.quantity_min AS quantity_min
|
||||
, t_P.quantity_max AS quantity_max
|
||||
, t_P.quantity_stock AS quantity_stock
|
||||
, t_P.is_subscription AS is_subscription
|
||||
, t_P.id_unit_measurement_interval_recurrence AS id_unit_measurement_interval_recurrence
|
||||
, t_P.count_interval_recurrence AS count_interval_recurrence
|
||||
, t_P.id_stripe_product AS id_stripe_product
|
||||
, t_P.does_expire_faster_once_unsealed AS does_expire_faster_once_unsealed
|
||||
, t_P.id_unit_measurement_interval_expiration_unsealed AS id_unit_measurement_interval_expiration_unsealed
|
||||
, t_P.count_interval_expiration_unsealed AS count_interval_expiration_unsealed
|
||||
, t_P.active AS active
|
||||
, a_id_user AS created_by
|
||||
, v_time_start AS created_on
|
||||
FROM tmp_Permutation t_P
|
||||
WHERE
|
||||
is_new = 1
|
||||
AND active = 1
|
||||
;
|
||||
|
||||
DELETE FROM Shop_Product_Permutation_Temp
|
||||
WHERE GUID = a_guid;
|
||||
|
||||
COMMIT;
|
||||
END IF;
|
||||
WHERE GUID = a_guid
|
||||
;
|
||||
|
||||
DELETE FROM partsltd_prod.Shop_Product_Permutation_Variation_Link_Temp
|
||||
WHERE GUID = a_guid
|
||||
;
|
||||
|
||||
COMMIT;
|
||||
|
||||
# Errors
|
||||
SELECT *
|
||||
@@ -499,9 +622,11 @@ BEGIN
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * from tmp_Permutation;
|
||||
SELECT * FROM tmp_Permutation;
|
||||
SELECT * FROM tmp_Permutation_Variation_Link;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE tmp_Permutation_Variation_Link;
|
||||
DROP TEMPORARY TABLE tmp_Permutation;
|
||||
DROP TEMPORARY TABLE tmp_Msg_Error;
|
||||
|
||||
@@ -590,5 +715,7 @@ DELETE FROM Shop_Product_Permutation_Temp
|
||||
WHERE id_permutation = 1;
|
||||
|
||||
|
||||
select * from shop_unit_measurement;
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -18,6 +18,9 @@ BEGIN
|
||||
FROM partsltd_prod.Shop_Product_Permutation
|
||||
;
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link
|
||||
;
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Temp
|
||||
;
|
||||
|
||||
@@ -26,6 +29,7 @@ BEGIN
|
||||
INSERT INTO partsltd_prod.Shop_Product_Permutation_Temp (
|
||||
id_permutation
|
||||
, id_product
|
||||
, csv_id_pairs_variation
|
||||
, description
|
||||
, cost_local_VAT_excl
|
||||
, cost_local_VAT_incl
|
||||
@@ -48,10 +52,11 @@ BEGIN
|
||||
, guid
|
||||
)
|
||||
VALUES
|
||||
/* Test 1 - Insert */
|
||||
/* Test 1 - Insert
|
||||
(
|
||||
-1 -- id_permutation
|
||||
, 5 -- id_product
|
||||
, '' -- csv_id_pairs_variation
|
||||
, 'Hair clip' -- description
|
||||
, NULL -- cost_local_VAT_excl
|
||||
, NULL -- cost_local_VAT_incl
|
||||
@@ -73,6 +78,7 @@ BEGIN
|
||||
, 1 -- active
|
||||
, v_guid
|
||||
)
|
||||
*/
|
||||
/* Test 2 - Update
|
||||
(
|
||||
4 -- id_product
|
||||
@@ -85,6 +91,32 @@ BEGIN
|
||||
, v_guid
|
||||
)
|
||||
*/
|
||||
/* Test 3 - Insert with Variations */
|
||||
(
|
||||
-1 -- id_permutation
|
||||
, 1 -- id_product
|
||||
, '1:3' -- csv_id_pairs_variation
|
||||
, 'Test with variations' -- description
|
||||
, NULL -- cost_local_VAT_excl
|
||||
, NULL -- cost_local_VAT_incl
|
||||
, 1 -- id_currency_cost
|
||||
, NULL -- profit_local_min
|
||||
, 1 -- latency_manufacture
|
||||
, 3 -- id_unit_measurement_quantity
|
||||
, 1 -- count_unit_measurement_per_quantity_step
|
||||
, 0 -- quantity_min
|
||||
, 0 -- quantity_max
|
||||
, 2 -- quantity_stock
|
||||
, FALSE -- is_subscription
|
||||
, NULL -- id_unit_measurement_interval_recurrence
|
||||
, NULL -- count_interval_recurrence
|
||||
, NULL -- id_stripe_product
|
||||
, TRUE -- does_expire_faster_once_unsealed
|
||||
, 8 -- id_unit_measurement_interval_expiration_unsealed
|
||||
, 2 -- count_interval_expiration_unsealed
|
||||
, 1 -- active
|
||||
, v_guid
|
||||
)
|
||||
;
|
||||
|
||||
COMMIT;
|
||||
@@ -105,6 +137,9 @@ BEGIN
|
||||
FROM partsltd_prod.Shop_Product_Permutation
|
||||
;
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link
|
||||
;
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Temp
|
||||
;
|
||||
|
||||
@@ -112,6 +147,7 @@ BEGIN
|
||||
END //
|
||||
DELIMITER ;;
|
||||
|
||||
/*
|
||||
CALL partsltd_prod.p_shop_save_product_permutation_test ();
|
||||
|
||||
DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp;
|
||||
@@ -119,7 +155,17 @@ DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp;
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
|
||||
|
||||
/*
|
||||
SELECT * FROM partsltd_prod.Shop_Product
|
||||
Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_product_permutation`, CONSTRAINT `FK_Shop_Product_Permutation_id_product` FOREIGN KEY (`id_product`) REFERENCES `shop_product` (`id_product`) ON UPDATE RESTRICT)
|
||||
DELETE FROM partsltd_prod.Shop_Product_Permutation_Variation_Link
|
||||
WHERE id_link >= 3
|
||||
;
|
||||
DELETE FROM partsltd_prod.Shop_Product_Permutation
|
||||
WHERE id_permutation >= 7
|
||||
;
|
||||
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Product_Permutation_Variation_Link_Temp
|
||||
;
|
||||
SELECT *
|
||||
FROM partsltd_prod.Shop_Variation
|
||||
;
|
||||
*/
|
||||
@@ -683,7 +683,9 @@ BEGIN
|
||||
|
||||
|
||||
UPDATE tmp_Supplier_Purchase_Order t_SPO
|
||||
INNER JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON t_SPO.id_order_temp = SPO.id_order_temp
|
||||
INNER JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO
|
||||
ON t_SPO.id_order_temp = SPO.id_order_temp
|
||||
AND SPO.id_change_set = v_id_change_set
|
||||
SET
|
||||
t_SPO.id_order = SPO.id_order
|
||||
WHERE t_SPO.is_new = 1
|
||||
|
||||
@@ -58,7 +58,6 @@ BEGIN
|
||||
WHERE id_order = 6
|
||||
*/
|
||||
;
|
||||
/*
|
||||
INSERT INTO partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link_Temp (
|
||||
id_link
|
||||
, id_order
|
||||
@@ -73,8 +72,7 @@ BEGIN
|
||||
, cost_total_local_VAT_incl
|
||||
, GUID
|
||||
)
|
||||
;
|
||||
/ Test 1 - Insert
|
||||
/* Test 1 - Insert */
|
||||
VALUES (
|
||||
-1
|
||||
, -1
|
||||
@@ -89,7 +87,6 @@ BEGIN
|
||||
, 6
|
||||
, v_guid
|
||||
)
|
||||
*/
|
||||
/* Test 2 - Update
|
||||
SELECT
|
||||
id_link
|
||||
@@ -107,7 +104,7 @@ BEGIN
|
||||
FROM partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link
|
||||
WHERE id_order = 6
|
||||
*/
|
||||
|
||||
;
|
||||
|
||||
COMMIT;
|
||||
|
||||
|
||||
@@ -146,4 +146,5 @@ DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp;
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
|
||||
select * from partsltd_prod.Shop_User;
|
||||
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'partsltd_prod.t_MPOPL.name_error' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
|
||||
*/
|
||||
@@ -581,13 +581,14 @@ BEGIN
|
||||
END IF;
|
||||
|
||||
-- Duplicates
|
||||
/*
|
||||
IF EXISTS (
|
||||
SELECT
|
||||
id_permutation
|
||||
, name_error
|
||||
t_MPOPL.id_permutation
|
||||
, t_MPOPL.name_error
|
||||
, COUNT(*)
|
||||
FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL
|
||||
GROUP BY id_permutation
|
||||
GROUP BY t_MPOPL.id_permutation, t_MPOPL.name_error
|
||||
HAVING COUNT(*) > 1
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
@@ -599,15 +600,16 @@ BEGIN
|
||||
CONCAT('Duplicate records: ', GROUP_CONCAT(t_MPOPLC.name_error SEPARATOR ', '))
|
||||
FROM (
|
||||
SELECT
|
||||
id_permutation
|
||||
, name_error
|
||||
, COUNT(*)
|
||||
t_MPOPL.id_permutation
|
||||
, t_MPOPL.name_error
|
||||
, COUNT(*)
|
||||
FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL
|
||||
GROUP BY id_permutation
|
||||
GROUP BY t_MPOPL.id_permutation, t_MPOPL.name_error
|
||||
HAVING COUNT(*) > 1
|
||||
) t_MPOPLC
|
||||
;
|
||||
END IF;
|
||||
*/
|
||||
-- Empty Manufacturing Purchase Order
|
||||
IF EXISTS ( SELECT * FROM tmp_Manufacturing_Purchase_Order t_MPO LEFT JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON t_MPO.id_order = t_MPOPL.id_order WHERE ISNULL(t_MPOPL.id_order) ) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
@@ -829,7 +831,9 @@ BEGIN
|
||||
;
|
||||
|
||||
UPDATE tmp_Manufacturing_Purchase_Order t_MPO
|
||||
INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON t_MPO.id_order_temp = MPO.id_order_temp
|
||||
INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO
|
||||
ON t_MPO.id_order_temp = MPO.id_order_temp
|
||||
AND MPO.id_change_set = v_id_change_set
|
||||
SET
|
||||
t_MPO.id_order = MPO.id_order
|
||||
WHERE t_MPO.is_new = 1
|
||||
|
||||
@@ -282,7 +282,7 @@ BEGIN
|
||||
VALUES (
|
||||
v_id_type_error_no_permission
|
||||
, v_code_type_error_no_permission
|
||||
, CONCAT('You do not have view permissions for ', IFNULL((SELECT IFNULL(name, '(No Permission Name)') FROM partsltd_prod.Shop_Permission WHERE id_permission LIKE CONCAT('%', v_ids_permission_manufacturing_purchase_order, '%') LIMIT 1), '(No Permissions Found)'))
|
||||
, CONCAT('You do not have view permissions for ', IFNULL((SELECT IFNULL(name, '(No Permission Name)') FROM partsltd_prod.Shop_Permission WHERE FIND_IN_SET(id_permission, v_ids_permission_manufacturing_purchase_order) > 0 LIMIT 1), '(No Permissions Found)'))
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
|
||||
@@ -363,6 +363,7 @@ VALUES
|
||||
# Product Permutations
|
||||
INSERT INTO Shop_Product_Permutation (
|
||||
-- display_order,
|
||||
id_permutation_temp,
|
||||
id_product,
|
||||
description,
|
||||
cost_local_VAT_excl,
|
||||
@@ -387,7 +388,8 @@ INSERT INTO Shop_Product_Permutation (
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
-- 1,
|
||||
-- 1,
|
||||
-1,
|
||||
1,
|
||||
'Good Red',
|
||||
5,
|
||||
@@ -412,6 +414,7 @@ VALUES
|
||||
),
|
||||
(
|
||||
-- 2,
|
||||
-2,
|
||||
1,
|
||||
'Good Blue',
|
||||
6,
|
||||
@@ -436,6 +439,7 @@ VALUES
|
||||
),
|
||||
(
|
||||
-- 3,
|
||||
-3,
|
||||
2,
|
||||
'Test product describes good',
|
||||
10,
|
||||
@@ -460,6 +464,7 @@ VALUES
|
||||
),
|
||||
(
|
||||
-- 4,
|
||||
-4,
|
||||
3,
|
||||
'Phone describes good',
|
||||
10,
|
||||
@@ -484,6 +489,7 @@ VALUES
|
||||
),
|
||||
(
|
||||
-- 5,
|
||||
-5,
|
||||
4,
|
||||
'Laptop describes good',
|
||||
10,
|
||||
@@ -508,6 +514,7 @@ VALUES
|
||||
),
|
||||
(
|
||||
-- 6,
|
||||
-6,
|
||||
5,
|
||||
'Smart watch describes good',
|
||||
10,
|
||||
@@ -548,6 +555,9 @@ INSERT INTO Shop_Variation (
|
||||
VALUES
|
||||
(1, 1, 'RED', 'Red', NULL, NULL)
|
||||
, (2, 1, 'BLUE', 'Blue', NULL, NULL)
|
||||
, (3, 1, 'GREEN', 'Green', NULL, NULL)
|
||||
, (4, 1, 'White', 'White', NULL, NULL)
|
||||
, (5, 1, 'BLACK', 'Black', NULL, NULL)
|
||||
, (1, 2, '400ml', '400 millilitres', 6, 400)
|
||||
, (2, 2, '400g', '400 grams', 4, 400)
|
||||
, (3, 2, '410g', '410 grams', 4, 410)
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
1214_tbl_Shop_Variation_Temp.sql
|
||||
1215_tbl_Shop_Product_Permutation_Variation_Link.sql
|
||||
1216_tbl_Shop_Product_Permutation_Variation_Link_Audit.sql
|
||||
1217_tbl_Shop_Product_Permutation_Variation_Link_Temp.sql
|
||||
1218_tbl_Shop_Stock_Item.sql
|
||||
1219_tbl_Shop_Stock_Item_Audit.sql
|
||||
1220_tbl_Shop_Stock_Item_Temp.sql
|
||||
@@ -172,6 +173,7 @@
|
||||
6004_p_clear_split_key_value_pair_csv_temp.sql
|
||||
6206_fn_shop_get_product_permutation_name.sql
|
||||
6210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql
|
||||
6211_fn_shop_get_product_variations_from_id_csv_list.sql
|
||||
6500_p_shop_calc_user.sql
|
||||
6501_p_shop_clear_calc_user.sql
|
||||
7003_p_shop_get_many_access_level.sql
|
||||
Reference in New Issue
Block a user