1521 lines
45 KiB
SQL
1521 lines
45 KiB
SQL
/* Store */
|
|
|
|
|
|
|
|
# Delete old tables
|
|
DROP TABLE IF EXISTS Shop_Product_Delivery_Region_Link_Audit;
|
|
DROP TABLE IF EXISTS Shop_Product_Delivery_Region_Link;
|
|
|
|
DROP TABLE IF EXISTS Shop_Delivery_Region_Audit;
|
|
DROP TABLE IF EXISTS Shop_Delivery_Region;
|
|
|
|
DROP TABLE IF EXISTS Shop_Delivery_Option_Audit;
|
|
DROP TABLE IF EXISTS Shop_Delivery_Option;
|
|
|
|
DROP TABLE IF EXISTS Shop_Delivery_Option_Type_Audit;
|
|
DROP TABLE IF EXISTS Shop_Delivery_Option_Type;
|
|
|
|
DROP TABLE IF EXISTS Shop_Product_Image_Link_Audit;
|
|
DROP TABLE IF EXISTS Shop_Product_Image_Link;
|
|
|
|
DROP TABLE IF EXISTS Shop_Image_Audit;
|
|
DROP TABLE IF EXISTS Shop_Image;
|
|
|
|
DROP TABLE IF EXISTS Shop_Image_Type_Audit;
|
|
DROP TABLE IF EXISTS Shop_Image_Type;
|
|
|
|
DROP TABLE IF EXISTS Shop_Product_Variation_Link_Audit;
|
|
DROP TABLE IF EXISTS Shop_Product_Variation_Link;
|
|
|
|
DROP TABLE IF EXISTS Shop_Variation_Audit;
|
|
DROP TABLE IF EXISTS Shop_Variation;
|
|
|
|
DROP TABLE IF EXISTS Shop_Variation_Type_Audit;
|
|
DROP TABLE IF EXISTS Shop_Variation_Type;
|
|
|
|
DROP TABLE IF EXISTS Shop_Product_Audit;
|
|
DROP TABLE IF EXISTS Shop_Product;
|
|
|
|
DROP TABLE IF EXISTS Shop_Interval_Recurrence_Audit;
|
|
DROP TABLE IF EXISTS Shop_Interval_Recurrence;
|
|
|
|
DROP TABLE IF EXISTS Shop_Product_Category_Audit;
|
|
DROP TABLE IF EXISTS Shop_Product_Category;
|
|
|
|
DROP TABLE IF EXISTS Shop_General_Audit;
|
|
DROP TABLE IF EXISTS Shop_General;
|
|
|
|
DROP TABLE IF EXISTS File_Type_Audit;
|
|
DROP TABLE IF EXISTS File_Type;
|
|
|
|
DROP TABLE IF EXISTS Shop_Product_Change_Set;
|
|
|
|
|
|
|
|
# Product Change Sets
|
|
CREATE TABLE Shop_Product_Change_Set (
|
|
id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
comment VARCHAR(500),
|
|
updated_last_on DATETIME,
|
|
updated_last_by VARCHAR(100)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Product_Change_Set
|
|
BEFORE INSERT ON Shop_Product_Change_Set
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF NEW.updated_last_on <=> NULL THEN
|
|
SET NEW.updated_last_on = NOW();
|
|
END IF;
|
|
IF NEW.updated_last_by <=> NULL THEN
|
|
SET NEW.updated_last_by = CURRENT_USER();
|
|
END IF;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
SELECT * FROM Shop_Product_Change_Set;
|
|
|
|
|
|
|
|
# File Types
|
|
CREATE TABLE File_Type (
|
|
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(50),
|
|
name VARCHAR(100),
|
|
extension VARCHAR(50),
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
updated_last_on DATETIME,
|
|
updated_last_by VARCHAR(100)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_File_Type
|
|
BEFORE INSERT ON File_Type
|
|
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 ;;
|
|
|
|
CREATE TABLE File_Type_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_type INT NOT NULL,
|
|
CONSTRAINT FK_File_Type_Audit_id_type
|
|
FOREIGN KEY (id_type)
|
|
REFERENCES File_Type(id_type)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
updated_last_on DATETIME,
|
|
updated_last_by VARCHAR(100)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_File_Type_Audit
|
|
BEFORE INSERT ON File_Type_Audit
|
|
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_File_Type_Audit
|
|
BEFORE UPDATE ON File_Type_Audit
|
|
FOR EACH ROW
|
|
BEGIN
|
|
SET NEW.updated_last_on = NOW();
|
|
SET NEW.updated_last_by = CURRENT_USER();
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_File_Type
|
|
BEFORE UPDATE ON File_Type
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO File_Type_Audit (
|
|
id_type,
|
|
name_field,
|
|
value_prev,
|
|
value_new
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_type, 'code', OLD.code, NEW.code
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_type, 'name', OLD.name, NEW.name
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed extension
|
|
SELECT NEW.id_type, 'extension', CONVERT(OLD.extension, CHAR), CONVERT(NEW.extension, CHAR)
|
|
WHERE NOT OLD.extension <=> NEW.extension
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO File_Type (
|
|
code, name, extension
|
|
)
|
|
VALUES
|
|
('JPEG', 'Joint Photographic Export Group', 'jpg'),
|
|
('PNG', 'Portable Network Graphic', 'png'),
|
|
('GIF', 'GIF', 'gif'),
|
|
('MPEG-4', 'Multimedia Photographic Export Group 4', 'mp4')
|
|
;
|
|
|
|
SELECT * FROM File_Type;
|
|
SELECT * FROM File_Type_Audit;
|
|
|
|
|
|
|
|
# Generic / shared properties
|
|
CREATE TABLE Shop_General (
|
|
id_general INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
quantity_max FLOAT,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_General_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_General
|
|
BEFORE INSERT ON Shop_General
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_General_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_general INT NOT NULL,
|
|
CONSTRAINT FK_Shop_General_Audit_id_general
|
|
FOREIGN KEY (id_general)
|
|
REFERENCES Shop_General(id_general)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_General_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_General
|
|
BEFORE UPDATE ON Shop_General
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_General_Audit (
|
|
id_general,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed quantity max
|
|
SELECT NEW.id_general, 'quantity_max', CONVERT(OLD.quantity_max, CHAR), CONVERT(NEW.quantity_max, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.quantity_max <=> NEW.quantity_max
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_General (
|
|
quantity_max
|
|
)
|
|
VALUES (
|
|
10
|
|
);
|
|
|
|
SELECT * FROM Shop_General;
|
|
SELECT * FROM Shop_General_Audit;
|
|
|
|
|
|
|
|
# Categories
|
|
CREATE TABLE Shop_Product_Category (
|
|
id_category INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(50),
|
|
name VARCHAR(255),
|
|
description VARCHAR(4000),
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Product_Category_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Product_Category
|
|
BEFORE INSERT ON Shop_Product_Category
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Product_Category_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_category INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Category_Audit_id_category
|
|
FOREIGN KEY (id_category)
|
|
REFERENCES Shop_Product_Category(id_category)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Category_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Product_Category
|
|
BEFORE UPDATE ON Shop_Product_Category
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Product_Category_Audit (
|
|
id_category,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_category, 'code', OLD.code, NEW.code, NEW.id_change_set
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_category, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed description
|
|
SELECT NEW.id_category, 'description', OLD.description, NEW.description, NEW.id_change_set
|
|
WHERE NOT OLD.description <=> NEW.description
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_category, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_category, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.display_order <=> NEW.display_order
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Product_Category (
|
|
display_order,
|
|
code,
|
|
name,
|
|
description
|
|
)
|
|
VALUES (
|
|
1,
|
|
'MISC',
|
|
'Miscellaneous',
|
|
'Not category allocated products'
|
|
);
|
|
|
|
SELECT * FROM Shop_Product_Category;
|
|
SELECT * FROM Shop_Product_Category_Audit;
|
|
|
|
|
|
|
|
# Recurrence Interval
|
|
CREATE TABLE Shop_Interval_Recurrence (
|
|
id_interval INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(50),
|
|
name VARCHAR(255),
|
|
name_plural VARCHAR(256),
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Interval_Recurrence_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Interval_Recurrence
|
|
BEFORE INSERT ON Shop_Interval_Recurrence
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Interval_Recurrence_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_interval INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Interval_Recurrence_Audit_id_interval
|
|
FOREIGN KEY (id_interval)
|
|
REFERENCES Shop_Interval_Recurrence(id_interval)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(256),
|
|
value_new VARCHAR(256),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Interval_Recurrence_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Interval_Recurrence
|
|
BEFORE UPDATE ON Shop_Interval_Recurrence
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Interval_Recurrence_Audit (
|
|
id_interval,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_interval, 'code', OLD.code, NEW.code, NEW.id_change_set
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_interval, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed name_plural
|
|
SELECT NEW.id_interval, 'name_plural', OLD.name_plural, NEW.name_plural, NEW.id_change_set
|
|
WHERE NOT OLD.name_plural <=> NEW.name_plural
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Interval_Recurrence (
|
|
code, name, name_plural
|
|
)
|
|
VALUES
|
|
('WEEK', 'Week', 'Weeks'),
|
|
('MONTH', 'Month', 'Months'),
|
|
('YEAR', 'Year', 'Years')
|
|
;
|
|
|
|
SELECT * FROM Shop_Interval_Recurrence;
|
|
SELECT * FROM Shop_Interval_Recurrence_Audit;
|
|
|
|
|
|
|
|
# Products
|
|
CREATE TABLE Shop_Product (
|
|
id_product INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255),
|
|
description VARCHAR(4000),
|
|
price_GBP FLOAT,
|
|
id_category INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_id_category
|
|
FOREIGN KEY (id_category)
|
|
REFERENCES Shop_Product_Category(id_category)
|
|
ON UPDATE RESTRICT,
|
|
latency_manuf INT NOT NULL DEFAULT 14,
|
|
quantity_min FLOAT NOT NULL DEFAULT 1,
|
|
quantity_max FLOAT NOT NULL DEFAULT 1, # @_quantity_max,
|
|
quantity_step FLOAT NOT NULL DEFAULT 1,
|
|
quantity_stock FLOAT NOT NULL DEFAULT 0,
|
|
is_subscription BIT NOT NULL DEFAULT 0,
|
|
id_unit_measurement_interval_recurrence INT,
|
|
CONSTRAINT FK_Shop_Product_id_unit_measurement_interval_recurrence
|
|
FOREIGN KEY (id_unit_measurement_interval_recurrence)
|
|
REFERENCES Shop_Interval_Recurrence(id_interval),
|
|
count_interval_recurrence INT,
|
|
id_stripe_product VARCHAR(100),
|
|
id_stripe_price VARCHAR(100),
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Product_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Product
|
|
BEFORE INSERT ON Shop_Product
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Product_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_product INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Audit_id_product
|
|
FOREIGN KEY (id_product)
|
|
REFERENCES Shop_Product(id_product)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Product
|
|
BEFORE UPDATE ON Shop_Product
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Product_Audit (
|
|
id_product,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed name
|
|
SELECT NEW.id_product, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed description
|
|
SELECT NEW.id_product, 'description', OLD.description, NEW.description, NEW.id_change_set
|
|
WHERE NOT OLD.description <=> NEW.description
|
|
UNION
|
|
# Changed price_GBP
|
|
SELECT NEW.id_product, 'price_GBP', CONVERT(OLD.price_GBP, CHAR), CONVERT(NEW.price_GBP, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.price_GBP <=> NEW.price_GBP
|
|
UNION
|
|
# Changed id_category
|
|
SELECT NEW.id_product, 'id_category', CONVERT(OLD.id_category, CHAR), CONVERT(NEW.id_category, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_category <=> NEW.id_category
|
|
UNION
|
|
# Changed latency_manuf
|
|
SELECT NEW.id_product, 'latency_manuf', CONVERT(OLD.latency_manuf, CHAR), CONVERT(NEW.latency_manuf, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.latency_manuf <=> NEW.latency_manuf
|
|
UNION
|
|
# Changed quantity_min
|
|
SELECT NEW.id_product, 'quantity_min', CONVERT(OLD.quantity_min, CHAR), CONVERT(NEW.quantity_min, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.quantity_min <=> NEW.quantity_min
|
|
UNION
|
|
# Changed quantity_max
|
|
SELECT NEW.id_product, 'quantity_max', CONVERT(OLD.quantity_max, CHAR), CONVERT(NEW.quantity_max, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.quantity_max <=> NEW.quantity_max
|
|
UNION
|
|
# Changed quantity_step
|
|
SELECT NEW.id_product, 'quantity_step', CONVERT(OLD.quantity_step, CHAR), CONVERT(NEW.quantity_step, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.quantity_step <=> NEW.quantity_step
|
|
UNION
|
|
# Changed quantity_stock
|
|
SELECT NEW.id_product, 'quantity_stock', CONVERT(OLD.quantity_stock, CHAR), CONVERT(NEW.quantity_stock, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.quantity_stock <=> NEW.quantity_stock
|
|
UNION
|
|
# Changed is_subscription
|
|
SELECT NEW.id_product, 'is_subscription', CONVERT(CONVERT(OLD.is_subscription, SIGNED), CHAR), CONVERT(CONVERT(NEW.is_subscription, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.is_subscription <=> NEW.is_subscription
|
|
UNION
|
|
# Changed id_unit_measurement_interval_recurrence
|
|
SELECT NEW.id_product, 'id_unit_measurement_interval_recurrence', CONVERT(OLD.id_unit_measurement_interval_recurrence, CHAR), CONVERT(NEW.id_unit_measurement_interval_recurrence, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_unit_measurement_interval_recurrence <=> NEW.id_unit_measurement_interval_recurrence
|
|
UNION
|
|
# Changed count_interval_recurrence
|
|
SELECT NEW.id_product, 'count_interval_recurrence', CONVERT(OLD.count_interval_recurrence, CHAR), CONVERT(NEW.count_interval_recurrence, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.count_interval_recurrence <=> NEW.count_interval_recurrence
|
|
UNION
|
|
# Changed id_stripe_product
|
|
SELECT NEW.id_product, 'id_stripe_product', OLD.id_stripe_product, NEW.id_stripe_product, NEW.id_change_set
|
|
WHERE NOT OLD.id_stripe_product <=> NEW.id_stripe_product
|
|
UNION
|
|
# Changed id_stripe_price
|
|
SELECT NEW.id_product, 'id_stripe_price', OLD.id_stripe_price, NEW.id_stripe_price, NEW.id_change_set
|
|
WHERE NOT OLD.id_stripe_price <=> NEW.id_stripe_price
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_product, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_product, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.display_order <=> NEW.display_order
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Product (
|
|
display_order,
|
|
name,
|
|
description,
|
|
price_GBP,
|
|
id_category,
|
|
latency_manuf,
|
|
quantity_stock,
|
|
id_stripe_product,
|
|
id_stripe_price
|
|
)
|
|
VALUES (
|
|
1,
|
|
'Braille Keyboard Translator',
|
|
'Translate text into 3D Braille keyboard.',
|
|
25,
|
|
1,
|
|
14,
|
|
99,
|
|
'prod_PB0NUOSEs06ymG',
|
|
'price_1OMeN9L7BuLKjoMpyMY6Aae4'
|
|
);
|
|
|
|
SELECT * FROM Shop_Product;
|
|
SELECT * FROM Shop_Product_Audit;
|
|
|
|
|
|
|
|
# Variation Types
|
|
CREATE TABLE Shop_Variation_Type (
|
|
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(50),
|
|
name VARCHAR(255),
|
|
name_plural VARCHAR(256),
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Variation_Type_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Variation_Type
|
|
BEFORE INSERT ON Shop_Variation_Type
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Variation_Type_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_type INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Variation_Type_Audit_id_type
|
|
FOREIGN KEY (id_type)
|
|
REFERENCES Shop_Variation_Type(id_type)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Variation_Type_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Variation_Type
|
|
BEFORE UPDATE ON Shop_Variation_Type
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Variation_Type_Audit (
|
|
id_type,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_type, 'code', OLD.code, NEW.code, NEW.id_change_set
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_type, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed name_plural
|
|
SELECT NEW.id_type, 'name_plural', OLD.name_plural, NEW.name_plural, NEW.id_change_set
|
|
WHERE NOT OLD.name_plural <=> NEW.name_plural
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_type, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_type, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.display_order <=> NEW.display_order)
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Variation_Type (
|
|
display_order, code, name, name_plural
|
|
)
|
|
VALUES
|
|
(1, 'COLOUR', 'Colour', 'Colours')
|
|
;
|
|
|
|
SELECT * FROM Shop_Variation_Type;
|
|
SELECT * FROM Shop_Variation_Type_Audit;
|
|
|
|
|
|
|
|
# Variations
|
|
CREATE TABLE Shop_Variation (
|
|
id_variation INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_type INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Variation_id_type
|
|
FOREIGN KEY (id_type)
|
|
REFERENCES Shop_Variation_Type(id_type)
|
|
ON UPDATE RESTRICT,
|
|
code VARCHAR(50),
|
|
name VARCHAR(255),
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Variation_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Variation
|
|
BEFORE INSERT ON Shop_Variation
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Variation_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_variation INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Variation_Audit_id_variation
|
|
FOREIGN KEY (id_variation)
|
|
REFERENCES Shop_Variation(id_variation)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Variation_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Variation
|
|
BEFORE UPDATE ON Shop_Variation
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Variation_Audit (
|
|
id_variation,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_variation, 'code', OLD.code, NEW.code, NEW.id_change_set
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_variation, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_variation, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_variation, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.display_order <=> NEW.display_order)
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Variation (
|
|
display_order, id_type, code, name
|
|
)
|
|
VALUES
|
|
(1, 1, 'RED', 'Red')
|
|
;
|
|
|
|
SELECT * FROM Shop_Variation_Type;
|
|
SELECT * FROM Shop_Variation_Type_Audit;
|
|
|
|
|
|
|
|
# Product Variation Link
|
|
CREATE TABLE Shop_Product_Variation_Link (
|
|
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_product INT,
|
|
CONSTRAINT FK_Shop_Product_Variation_Link_id_product
|
|
FOREIGN KEY (id_product)
|
|
REFERENCES Shop_Product(id_product)
|
|
ON UPDATE RESTRICT,
|
|
id_variation INT,
|
|
CONSTRAINT FK_Shop_Product_Variation_Link_id_variation
|
|
FOREIGN KEY (id_variation)
|
|
REFERENCES Shop_Variation(id_variation)
|
|
ON UPDATE RESTRICT,
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Product_Variation_Link_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Product_Variation_Link
|
|
BEFORE INSERT ON Shop_Product_Variation_Link
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF NEW.created_on <=> NULL THEN
|
|
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
|
|
END IF;
|
|
IF NEW.created_by <=> NULL THEN
|
|
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM Shop_User WHERE firstname = CURRENT_USER()), -1));
|
|
END IF;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
CREATE TABLE Shop_Product_Variation_Link_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_link INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Variation_Link_Audit_id_link
|
|
FOREIGN KEY (id_link)
|
|
REFERENCES Shop_Product_Variation_Link(id_link)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Variation_Link_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
ON UPDATE RESTRICT
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Product_Variation_Link
|
|
BEFORE UPDATE ON Shop_Product_Variation_Link
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Product_Variation_Link_Audit (
|
|
id_link,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed id_product
|
|
SELECT NEW.id_link, 'id_product', OLD.id_product, NEW.id_product, NEW.id_change_set
|
|
WHERE NOT OLD.id_product <=> NEW.id_product
|
|
UNION
|
|
# Changed id_variation
|
|
SELECT NEW.id_link, 'id_variation', OLD.id_variation, NEW.id_variation, NEW.id_change_set
|
|
WHERE NOT OLD.id_variation <=> NEW.id_variation
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_link, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_link, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.display_order <=> NEW.display_order)
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Product_Variation_Link (
|
|
display_order, id_product, id_variation
|
|
)
|
|
VALUES
|
|
(1, 1, 1)
|
|
;
|
|
|
|
SELECT * FROM Shop_Product_Variation_Link;
|
|
SELECT * FROM Shop_Product_Variation_Link_Audit;
|
|
|
|
|
|
|
|
# Image Types
|
|
CREATE TABLE Shop_Image_Type (
|
|
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(50),
|
|
name VARCHAR(255),
|
|
name_plural VARCHAR(256),
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Image_Type_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Image_Type
|
|
BEFORE INSERT ON Shop_Image_Type
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Image_Type_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_type INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Image_Type_Audit_id_type
|
|
FOREIGN KEY (id_type)
|
|
REFERENCES Shop_Image_Type(id_type)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Image_Type_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Image_Type
|
|
BEFORE UPDATE ON Shop_Image_Type
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Image_Type_Audit (
|
|
id_type,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_type, 'code', OLD.code, NEW.code, NEW.id_change_set
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_type, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed name_plural
|
|
SELECT NEW.id_type, 'name_plural', OLD.name_plural, NEW.name_plural, NEW.id_change_set
|
|
WHERE NOT OLD.name_plural <=> NEW.name_plural
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_type, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_type, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.display_order <=> NEW.display_order)
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Image_Type (
|
|
display_order, code, name, name_plural
|
|
)
|
|
VALUES
|
|
(1, 'FULL', 'Full Quality Image', 'Full Quality Images'),
|
|
(1, 'LOW', 'Low Quality Image', 'Low Quality Images'),
|
|
(1, 'THUMBNAIL', 'Thumbnail Image', 'Thumbnail Images')
|
|
;
|
|
|
|
SELECT * FROM Shop_Image_Type;
|
|
SELECT * FROM Shop_Image_Type_Audit;
|
|
|
|
|
|
|
|
# Images
|
|
CREATE TABLE Shop_Image (
|
|
id_image INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_type INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Image_id_type
|
|
FOREIGN KEY (id_type)
|
|
REFERENCES Shop_Image_Type(id_type),
|
|
id_product INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Image_id_product
|
|
FOREIGN KEY (id_product)
|
|
REFERENCES Shop_Product(id_product),
|
|
url VARCHAR(255),
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Image_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Image
|
|
BEFORE INSERT ON Shop_Image
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Image_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_image INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Image_Audit_id_image
|
|
FOREIGN KEY (id_image)
|
|
REFERENCES Shop_Image(id_image),
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Image_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Image
|
|
BEFORE UPDATE ON Shop_Image
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Image_Audit (
|
|
id_image,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed id_type
|
|
SELECT NEW.id_image, 'id_type', CONVERT(OLD.id_type, CHAR), CONVERT(NEW.id_type, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_type <=> NEW.id_type
|
|
UNION
|
|
# Changed id_product
|
|
SELECT NEW.id_image, 'id_product', CONVERT(OLD.id_product, CHAR), CONVERT(NEW.id_product, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_product <=> NEW.id_product
|
|
UNION
|
|
# Changed url
|
|
SELECT NEW.id_image, 'url', OLD.url, NEW.url, NEW.id_change_set
|
|
WHERE NOT OLD.url <=> NEW.url
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_image, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_image, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.display_order <=> NEW.display_order)
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Image (
|
|
display_order, id_product, id_type, url
|
|
)
|
|
VALUES
|
|
(1, 1, 1, 'www.porn.co.uk')
|
|
;
|
|
|
|
SELECT * FROM Shop_Image;
|
|
SELECT * FROM Shop_Image_Audit;
|
|
|
|
|
|
/*
|
|
# Product Image Link
|
|
CREATE TABLE Shop_Product_Image_Link (
|
|
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_product INT,
|
|
CONSTRAINT FK_Shop_Product_Image_Link_id_product
|
|
FOREIGN KEY (id_product)
|
|
REFERENCES Shop_Product(id_product)
|
|
ON UPDATE RESTRICT,
|
|
id_image INT,
|
|
CONSTRAINT FK_Shop_Product_Image_Link_id_image
|
|
FOREIGN KEY (id_image)
|
|
REFERENCES Shop_Image(id_image)
|
|
ON UPDATE RESTRICT,
|
|
active BIT NOT NULL DEFAULT 1,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Product_Image_Link_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Product_Image_Link
|
|
BEFORE INSERT ON Shop_Product_Image_Link
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF NEW.created_on <=> NULL THEN
|
|
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
|
|
END IF;
|
|
IF NEW.created_by <=> NULL THEN
|
|
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM Shop_User WHERE firstname = CURRENT_USER()), -1));
|
|
END IF;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
CREATE TABLE Shop_Product_Image_Link_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_link INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Image_Link_Audit_id_link
|
|
FOREIGN KEY (id_link)
|
|
REFERENCES Shop_Product_Image_Link(id_link)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Image_Link_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
ON UPDATE RESTRICT
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Product_Image_Link
|
|
BEFORE UPDATE ON Shop_Product_Image_Link
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Product_Image_Link_Audit (
|
|
id_link,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
VALUES (
|
|
( # Changed id_product
|
|
SELECT NEW.id_link, 'id_product', OLD.id_product, NEW.id_product, NEW.id_change_set
|
|
WHERE NOT OLD.id_product <=> NEW.id_product
|
|
),
|
|
( # Changed id_variation
|
|
SELECT NEW.id_link, 'id_image', OLD.id_image, NEW.id_image, NEW.id_change_set
|
|
WHERE NOT OLD.id_image <=> NEW.id_image
|
|
),
|
|
( # Changed active
|
|
SELECT NEW.id_link, 'active', OLD.active, NEW.active, NEW.id_change_set
|
|
WHERE NOT OLD.active <=> NEW.active
|
|
)
|
|
);
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Product_Image_Link (
|
|
id_product, id_image
|
|
)
|
|
VALUES
|
|
(1, 1)
|
|
;
|
|
|
|
SELECT * FROM Shop_Product_Image_Link;
|
|
SELECT * FROM Shop_Product_Image_Link_Audit;
|
|
*/
|
|
|
|
|
|
# Delivery Option Types
|
|
CREATE TABLE Shop_Delivery_Option_Type (
|
|
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(50) NOT NULL,
|
|
name VARCHAR(100) NOT NULL,
|
|
latency_delivery_min INT NOT NULL,
|
|
latency_delivery_max INT NOT NULL,
|
|
quantity_min INT NOT NULL,
|
|
quantity_max INT NOT NULL,
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Delivery_Option_Type_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Delivery_Option_Type
|
|
BEFORE INSERT ON Shop_Delivery_Option_Type
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Delivery_Option_Type_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_type INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Delivery_Option_Type_Audit_id_type
|
|
FOREIGN KEY (id_type)
|
|
REFERENCES Shop_Delivery_Option_Type(id_type)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Delivery_Option_Type_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Delivery_Option_Type
|
|
BEFORE UPDATE ON Shop_Delivery_Option_Type
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Delivery_Option_Type_Audit (
|
|
id_type,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_type, 'code', OLD.code, NEW.code, NEW.id_change_set
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_type, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed latency_delivery_min
|
|
SELECT NEW.id_type, 'latency_delivery_min', CONVERT(OLD.latency_delivery_min, CHAR), CONVERT(NEW.latency_delivery_min, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.latency_delivery_min <=> NEW.latency_delivery_min
|
|
UNION
|
|
# Changed latency_delivery_max
|
|
SELECT NEW.id_type, 'latency_delivery_max', CONVERT(OLD.latency_delivery_max, CHAR), CONVERT(NEW.latency_delivery_max, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.latency_delivery_max <=> NEW.latency_delivery_max
|
|
UNION
|
|
# Changed quantity_min
|
|
SELECT NEW.id_type, 'quantity_min', CONVERT(OLD.quantity_min, CHAR), CONVERT(NEW.quantity_min, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.quantity_min <=> NEW.quantity_min
|
|
UNION
|
|
# Changed quantity_max
|
|
SELECT NEW.id_type, 'quantity_max', CONVERT(OLD.quantity_max, CHAR), CONVERT(NEW.quantity_max, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.quantity_max <=> NEW.quantity_max
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_type, 'active', CONVERT(OLD.active, CHAR), CONVERT(NEW.active, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.active <=> NEW.active
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_type, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.display_order <=> NEW.display_order
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Delivery_Option_Type (
|
|
display_order, code, name, latency_delivery_min, latency_delivery_max, quantity_min, quantity_max
|
|
)
|
|
VALUES
|
|
(1, 'COLLECT', 'Collection', 0, 0, 0, 1),
|
|
(2, 'SIGNED_1', 'First Class Signed-For', 2, 4, 0, 1)
|
|
;
|
|
|
|
SELECT * FROM Shop_Delivery_Option_Type;
|
|
SELECT * FROM Shop_Delivery_Option_Type_Audit;
|
|
|
|
|
|
|
|
# Delivery Option
|
|
CREATE TABLE Shop_Delivery_Option (
|
|
id_option INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_product INT,
|
|
CONSTRAINT FK_Shop_Delivery_Option_id_product
|
|
FOREIGN KEY (id_product)
|
|
REFERENCES Shop_Product(id_product)
|
|
ON UPDATE RESTRICT,
|
|
id_delivery_type INT,
|
|
CONSTRAINT FK_Shop_Delivery_Option_id_delivery_type
|
|
FOREIGN KEY (id_delivery_type)
|
|
REFERENCES Shop_Delivery_Option_Type(id_type)
|
|
ON UPDATE RESTRICT,
|
|
price_GBP FLOAT NOT NULL,
|
|
active BIT NOT NULL DEFAULT 1,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Delivery_Option_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Delivery_Option
|
|
BEFORE INSERT ON Shop_Delivery_Option
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF NEW.created_on <=> NULL THEN
|
|
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
|
|
END IF;
|
|
IF NEW.created_by <=> NULL THEN
|
|
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM Shop_User WHERE firstname = CURRENT_USER()), -1));
|
|
END IF;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
CREATE TABLE Shop_Delivery_Option_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_option INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Delivery_Option_Audit_id_option
|
|
FOREIGN KEY (id_option)
|
|
REFERENCES Shop_Delivery_Option(id_option)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Delivery_Option_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
ON UPDATE RESTRICT
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Delivery_Option
|
|
BEFORE UPDATE ON Shop_Delivery_Option
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Delivery_Option_Audit (
|
|
id_option,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed id_product
|
|
SELECT NEW.id_option, 'id_product', CONVERT(OLD.id_product, CHAR), CONVERT(NEW.id_product, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_product <=> NEW.id_product
|
|
UNION
|
|
# Changed id_delivery_type
|
|
SELECT NEW.id_option, 'id_delivery_type', CONVERT(OLD.id_delivery_type, CHAR), CONVERT(NEW.id_delivery_type, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_delivery_type <=> NEW.id_delivery_type
|
|
UNION
|
|
# Changed price_GBP
|
|
SELECT NEW.id_option, 'price_GBP', CONVERT(OLD.price_GBP, CHAR), CONVERT(NEW.price_GBP, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.price_GBP <=> NEW.price_GBP
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_option, '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 ;;
|
|
|
|
INSERT INTO Shop_Delivery_Option (
|
|
id_product, id_delivery_type, price_GBP
|
|
)
|
|
VALUES
|
|
(1, 1, 5)
|
|
;
|
|
|
|
SELECT * FROM Shop_Delivery_Option;
|
|
SELECT * FROM Shop_Delivery_Option_Audit;
|
|
|
|
|
|
|
|
# Delivery Regions
|
|
CREATE TABLE Shop_Delivery_Region (
|
|
id_region INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(50) NOT NULL,
|
|
name VARCHAR(200) NOT NULL,
|
|
active BIT NOT NULL DEFAULT 1,
|
|
display_order INT NOT NULL,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Delivery_Region_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Delivery_Region
|
|
BEFORE INSERT ON Shop_Delivery_Region
|
|
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 ;;
|
|
|
|
CREATE TABLE Shop_Delivery_Region_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_region INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Delivery_Region_Audit_id_region
|
|
FOREIGN KEY (id_region)
|
|
REFERENCES Shop_Delivery_Region(id_region)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Delivery_Region_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Delivery_Region
|
|
BEFORE UPDATE ON Shop_Delivery_Region
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Delivery_Region_Audit (
|
|
id_region,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed code
|
|
SELECT NEW.id_region, 'code', OLD.code, NEW.code, NEW.id_change_set
|
|
WHERE NOT OLD.code <=> NEW.code
|
|
UNION
|
|
# Changed name
|
|
SELECT NEW.id_region, 'name', OLD.name, NEW.name, NEW.id_change_set
|
|
WHERE NOT OLD.name <=> NEW.name
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_region, 'active', CONVERT(OLD.active, CHAR), CONVERT(NEW.active, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.active <=> NEW.active
|
|
UNION
|
|
# Changed display_order
|
|
SELECT NEW.id_region, 'display_order', CONVERT(OLD.display_order, CHAR), CONVERT(NEW.display_order, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.display_order <=> NEW.display_order
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Delivery_Region (
|
|
display_order, code, name
|
|
)
|
|
VALUES
|
|
(1, 'UK', 'United Kingdom')
|
|
;
|
|
|
|
SELECT * FROM Shop_Delivery_Region;
|
|
SELECT * FROM Shop_Delivery_Region_Audit;
|
|
|
|
|
|
|
|
# Product Delivery Option Link
|
|
CREATE TABLE Shop_Product_Delivery_Region_Link (
|
|
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_product INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Delivery_Region_Link_id_product
|
|
FOREIGN KEY (id_product)
|
|
REFERENCES Shop_Product(id_product)
|
|
ON UPDATE RESTRICT,
|
|
id_region INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Delivery_Region_Link_id_region
|
|
FOREIGN KEY (id_region)
|
|
REFERENCES Shop_Delivery_Region(id_region)
|
|
ON UPDATE RESTRICT,
|
|
active BIT NOT NULL DEFAULT 1,
|
|
created_on DATETIME,
|
|
created_by INT,
|
|
id_change_set INT,
|
|
CONSTRAINT FK_Shop_Product_Delivery_Region_Link_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_insert_Shop_Product_Delivery_Region_Link
|
|
BEFORE INSERT ON Shop_Product_Delivery_Region_Link
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF NEW.created_on <=> NULL THEN
|
|
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
|
|
END IF;
|
|
IF NEW.created_by <=> NULL THEN
|
|
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM Shop_User WHERE firstname = CURRENT_USER()), -1));
|
|
END IF;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
CREATE TABLE Shop_Product_Delivery_Region_Link_Audit (
|
|
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
id_link INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Delivery_Region_Link_Audit_id_link
|
|
FOREIGN KEY (id_link)
|
|
REFERENCES Shop_Product_Delivery_Region_Link(id_link)
|
|
ON UPDATE RESTRICT,
|
|
name_field VARCHAR(50),
|
|
value_prev VARCHAR(500),
|
|
value_new VARCHAR(500),
|
|
id_change_set INT NOT NULL,
|
|
CONSTRAINT FK_Shop_Product_Delivery_Region_Link_Audit_id_change_set
|
|
FOREIGN KEY (id_change_set)
|
|
REFERENCES Shop_Product_Change_Set(id_change_set)
|
|
ON UPDATE RESTRICT
|
|
);
|
|
|
|
DELIMITER //
|
|
CREATE TRIGGER before_update_Shop_Product_Delivery_Region_Link
|
|
BEFORE UPDATE ON Shop_Product_Delivery_Region_Link
|
|
FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO Shop_Product_Delivery_Region_Link_Audit (
|
|
id_link,
|
|
name_field,
|
|
value_prev,
|
|
value_new,
|
|
id_change_set
|
|
)
|
|
# Changed id_product
|
|
SELECT NEW.id_link, 'id_product', CONVERT(OLD.id_product, CHAR), CONVERT(NEW.id_product, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_product <=> NEW.id_product
|
|
UNION
|
|
# Changed id_region
|
|
SELECT NEW.id_link, 'id_region', CONVERT(OLD.id_region, CHAR), CONVERT(NEW.id_region, CHAR), NEW.id_change_set
|
|
WHERE NOT OLD.id_region <=> NEW.id_region
|
|
UNION
|
|
# Changed active
|
|
SELECT NEW.id_link, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
|
|
WHERE NOT (OLD.active <=> NEW.active)
|
|
;
|
|
END //
|
|
DELIMITER ;;
|
|
|
|
INSERT INTO Shop_Product_Delivery_Region_Link (
|
|
id_product, id_region
|
|
)
|
|
VALUES
|
|
(1, 1)
|
|
;
|
|
|
|
SELECT * FROM Shop_Product_Delivery_Region_Link;
|
|
SELECT * FROM Shop_Product_Delivery_Region_Link_Audit;
|