From 2fbd559105626b65746d0f213bc6a864ebbfcd53 Mon Sep 17 00:00:00 2001 From: Bernd Bestel Date: Mon, 22 Aug 2022 23:46:47 +0200 Subject: [PATCH] Fixed qu_id_stock change handling related to the products own amount properties (fixes #1975) --- changelog/69_UNRELEASED_xxxx-xx-xx.md | 1 + migrations/0198.sql | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 migrations/0198.sql diff --git a/changelog/69_UNRELEASED_xxxx-xx-xx.md b/changelog/69_UNRELEASED_xxxx-xx-xx.md index 379db8fe..d0ec3d4a 100644 --- a/changelog/69_UNRELEASED_xxxx-xx-xx.md +++ b/changelog/69_UNRELEASED_xxxx-xx-xx.md @@ -15,6 +15,7 @@ - Fixed that the status button counters on the stock overview page ("X products are overdue" and so on) included products which have the option `Never show on stock overview` enabled - Fixed that adding Userfields to existing stock entries was not possible (only editing existing Userfield values, e.g. added during purchase or inventory, was possible) - Fixed that it was not possible to change a products stock QU, when the needed unit conversion (old QU => new QU) was only defined globally (means on QU level) or by the products "Factor purchase to stock quantity unit" +- Fixed that when changing a products stock QU, the products "Quick consume mount", "Energy (kcal)" and "Tare weight" wasn't updated according to the corresponding unit conversion factor ### Shopping list diff --git a/migrations/0198.sql b/migrations/0198.sql new file mode 100644 index 00000000..68af8eb1 --- /dev/null +++ b/migrations/0198.sql @@ -0,0 +1,11 @@ +CREATE TRIGGER cascade_change_qu_id_stock2 AFTER UPDATE ON products WHEN NEW.qu_id_stock != OLD.qu_id_stock +BEGIN + -- See also the trigger "cascade_change_qu_id_stock BEFORE UPDATE ON products" + -- This here applies the needed changes to the products table itself only AFTER the udpate + + UPDATE products + SET quick_consume_amount = quick_consume_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), + calories = calories / 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), + tare_weight = tare_weight * 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) + WHERE id = NEW.id; +END;