2022-08-22 19:53:58 +02:00
DROP TRIGGER cascade_change_qu_id_stock ;
CREATE TRIGGER cascade_change_qu_id_stock BEFORE UPDATE ON products WHEN NEW . qu_id_stock ! = OLD . qu_id_stock
BEGIN
-- All amounts anywhere are related to the products stock QU,
-- so apply the appropriate unit conversion to all amounts everywhere on change
-- (and enforce that such a conversion need to exist when the product was once added to stock)
SELECT CASE WHEN ( (
SELECT 1
FROM quantity_unit_conversions_resolved
WHERE product_id = NEW . id
AND from_qu_id = OLD . qu_id_stock
AND to_qu_id = NEW . qu_id_stock
) ISNULL )
AND
( (
SELECT 1
FROM stock_log
WHERE product_id = NEW . id
AND NEW . qu_id_stock ! = OLD . qu_id_stock
2025-08-03 23:14:33 +02:00
) NOTNULL ) THEN RAISE ( ABORT , ' qu_id_stock can only be changed when a corresponding QU conversion (old QU => new QU) exists when the product was once added to stock ' ) END ;
2022-08-22 19:53:58 +02:00
UPDATE chores
2022-08-22 20:11:57 +02:00
SET product_amount = product_amount * IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 )
2022-08-22 19:53:58 +02:00
WHERE product_id = NEW . id ;
UPDATE meal_plan
2022-08-22 20:11:57 +02:00
SET product_amount = product_amount * IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 )
2022-08-22 19:53:58 +02:00
WHERE type = ' product '
AND product_id = NEW . id ;
UPDATE recipes_pos
2022-08-22 20:11:57 +02:00
SET amount = amount * IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 )
2022-08-22 19:53:58 +02:00
WHERE product_id = NEW . id ;
UPDATE shopping_list
2022-08-22 20:11:57 +02:00
SET amount = amount * IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 )
2022-08-22 19:53:58 +02:00
WHERE product_id = NEW . id
AND product_id IS NOT NULL ;
UPDATE stock
2022-08-22 20:11:57 +02:00
SET amount = amount * IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 ) ,
price = price / IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 )
2022-08-22 19:53:58 +02:00
WHERE product_id = NEW . id ;
UPDATE stock_log
2022-08-22 20:11:57 +02:00
SET amount = amount * IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 ) ,
price = price / IFNULL ( ( SELECT factor FROM quantity_unit_conversions_resolved WHERE product_id = NEW . id AND from_qu_id = OLD . qu_id_stock AND to_qu_id = NEW . qu_id_stock LIMIT 1 ) , 1 . 0 )
2022-08-22 19:53:58 +02:00
WHERE product_id = NEW . id ;
END ;