Fix is_aggregate_amount always 0 on stock_current (#1127)

* Fix is_aggregate_amount always 0

* Restore performance indexes from #927

Co-authored-by: Bernd Bestel <bernd@berrnd.de>
This commit is contained in:
fipwmaqzufheoxq92ebc 2020-11-14 16:41:45 +01:00 committed by GitHub
parent 1d6e279b07
commit 491b74efa8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View File

@ -1,3 +1,33 @@
CREATE INDEX ix_products_performance1 ON products (
parent_product_id
);
CREATE INDEX ix_products_performance2 ON products (
CASE WHEN parent_product_id IS NULL THEN id ELSE parent_product_id END,
active
);
CREATE INDEX ix_stock_performance1 ON stock (
product_id,
open,
best_before_date,
amount
);
DROP VIEW products_resolved;
CREATE VIEW products_resolved
AS
SELECT
CASE
WHEN p.parent_product_id IS NULL THEN
p.id
ELSE
p.parent_product_id
END AS parent_product_id,
p.id as sub_product_id
FROM products p
WHERE p.active = 1;
DROP VIEW stock_missing_products_including_opened; DROP VIEW stock_missing_products_including_opened;
CREATE VIEW stock_missing_products_including_opened CREATE VIEW stock_missing_products_including_opened
AS AS

View File

@ -9,7 +9,7 @@ SELECT
MIN(s.best_before_date) AS best_before_date, MIN(s.best_before_date) AS best_before_date,
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id = pr.parent_product_id AND open = 1), 0) AS amount_opened, IFNULL((SELECT SUM(amount) FROM stock WHERE product_id = pr.parent_product_id AND open = 1), 0) AS amount_opened,
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id IN (SELECT sub_product_id FROM products_resolved WHERE parent_product_id = pr.parent_product_id) AND open = 1), 0) * IFNULL(qucr.factor, 1) AS amount_opened_aggregated, IFNULL((SELECT SUM(amount) FROM stock WHERE product_id IN (SELECT sub_product_id FROM products_resolved WHERE parent_product_id = pr.parent_product_id) AND open = 1), 0) * IFNULL(qucr.factor, 1) AS amount_opened_aggregated,
CASE WHEN p_sub.parent_product_id IS NOT NULL THEN 1 ELSE 0 END AS is_aggregated_amount CASE WHEN COUNT(p_sub.parent_product_id) > 0 THEN 1 ELSE 0 END AS is_aggregated_amount
FROM products_resolved pr FROM products_resolved pr
JOIN stock s JOIN stock s
ON pr.sub_product_id = s.product_id ON pr.sub_product_id = s.product_id