diff --git a/migrations/0105.sql b/migrations/0105.sql index 284248ac..7ab17f23 100644 --- a/migrations/0105.sql +++ b/migrations/0105.sql @@ -1,77 +1,65 @@ -DROP VIEW IF EXISTS stock_current_overview_opened; -CREATE VIEW IF NOT EXISTS stock_current_overview_opened +CREATE VIEW uihelper_stock_current_overview_including_opened AS -SELECT id, - stock_current.amount_opened AS amount_opened, - p.tare_weight AS tare_weight, - p.enable_tare_weight_handling AS enable_tare_weight_handling, - stock_current.amount AS amount, - stock_current.product_id AS product_id, - stock_current.best_before_date AS best_before_date, - EXISTS(SELECT id - FROM (stock_missing_products_including_opened) - WHERE id = stock_current.product_id) AS product_missing, - (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name, - (SELECT name_plural - FROM quantity_units - WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name_plural, - p.name AS product_name, - (SELECT name - FROM product_groups - WHERE product_groups.id = product_group_id) AS product_group_name, - EXISTS(SELECT * FROM shopping_list WHERE shopping_list.product_id = stock_current.product_id) AS on_shopping_list, - stock_current.factor_purchase_amount AS factor_purchase_amount, - (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name, - (SELECT name_plural - FROM quantity_units - WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name_plural, - is_aggregated_amount, - amount_opened_aggregated +SELECT + p.id, + sc.amount_opened AS amount_opened, + p.tare_weight AS tare_weight, + p.enable_tare_weight_handling AS enable_tare_weight_handling, + sc.amount AS amount, + sc.product_id AS product_id, + sc.best_before_date AS best_before_date, + EXISTS(SELECT id FROM stock_missing_products_including_opened WHERE id = sc.product_id) AS product_missing, + (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name, + (SELECT name_plural FROM quantity_units WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name_plural, + p.name AS product_name, + (SELECT name FROM product_groups WHERE product_groups.id = product_group_id) AS product_group_name, + EXISTS(SELECT * FROM shopping_list WHERE shopping_list.product_id = sc.product_id) AS on_shopping_list, + sc.factor_purchase_amount AS factor_purchase_amount, + (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name, + (SELECT name_plural FROM quantity_units WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name_plural, + sc.is_aggregated_amount, + sc.amount_opened_aggregated FROM ( - SELECT * - FROM stock_current - WHERE best_before_date IS NOT NULL - UNION - SELECT id, 0, 0, 0, 0, null, 0, 0, 0 - FROM stock_missing_products_including_opened - WHERE id NOT IN (SELECT product_id FROM stock_current) - ) AS stock_current - LEFT JOIN products p ON stock_current.product_id = p.id; -DROP VIEW IF EXISTS stock_current_overview; + SELECT * + FROM stock_current + WHERE best_before_date IS NOT NULL + UNION + SELECT id, 0, 0, 0, 0, null, 0, 0, 0 + FROM stock_missing_products_including_opened + WHERE id NOT IN (SELECT product_id FROM stock_current) + ) sc +LEFT JOIN products p + ON sc.product_id = p.id; -CREATE VIEW IF NOT EXISTS stock_current_overview +CREATE VIEW uihelper_stock_current_overview AS -SELECT id, - stock_current.amount_opened AS amount_opened, - p.tare_weight AS tare_weight, - p.enable_tare_weight_handling AS enable_tare_weight_handling, - stock_current.amount AS amount, - stock_current.product_id AS product_id, - stock_current.best_before_date AS best_before_date, - EXISTS(SELECT id FROM (stock_missing_products) WHERE id = stock_current.product_id) AS product_missing, - (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name, - (SELECT name_plural - FROM quantity_units - WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name_plural, - p.name AS product_name, - (SELECT name - FROM product_groups - WHERE product_groups.id = product_group_id) AS product_group_name, - EXISTS(SELECT * FROM shopping_list WHERE shopping_list.product_id = stock_current.product_id) AS on_shopping_list, - stock_current.factor_purchase_amount AS factor_purchase_amount, - (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name, - (SELECT name_plural - FROM quantity_units - WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name_plural, - is_aggregated_amount, - amount_opened_aggregated +SELECT + p.id, + sc.amount_opened AS amount_opened, + p.tare_weight AS tare_weight, + p.enable_tare_weight_handling AS enable_tare_weight_handling, + sc.amount AS amount, + sc.product_id AS product_id, + sc.best_before_date AS best_before_date, + EXISTS(SELECT id FROM stock_missing_products_including_opened WHERE id = sc.product_id) AS product_missing, + (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name, + (SELECT name_plural FROM quantity_units WHERE quantity_units.id = p.qu_id_stock) AS qu_unit_name_plural, + p.name AS product_name, + (SELECT name FROM product_groups WHERE product_groups.id = product_group_id) AS product_group_name, + EXISTS(SELECT * FROM shopping_list WHERE shopping_list.product_id = sc.product_id) AS on_shopping_list, + sc.factor_purchase_amount AS factor_purchase_amount, + (SELECT name FROM quantity_units WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name, + (SELECT name_plural FROM quantity_units WHERE quantity_units.id = p.qu_id_purchase) AS qu_purchase_unit_name_plural, + sc.is_aggregated_amount, + sc.amount_opened_aggregated FROM ( - SELECT * - FROM stock_current - WHERE best_before_date IS NOT NULL - UNION - SELECT id, 0, 0, 0, 0, null, 0, 0, 0 - FROM stock_missing_products - WHERE id NOT IN (SELECT product_id FROM stock_current) - ) AS stock_current - LEFT JOIN products p ON stock_current.product_id = p.id; \ No newline at end of file + SELECT * + FROM stock_current + WHERE best_before_date IS NOT NULL + UNION + SELECT id, 0, 0, 0, 0, null, 0, 0, 0 + FROM stock_missing_products + WHERE id NOT IN (SELECT product_id FROM stock_current) + ) sc +LEFT JOIN products p + ON sc.product_id = p.id; diff --git a/migrations/0106.sql b/migrations/0106.sql index 41b95194..753cece3 100644 --- a/migrations/0106.sql +++ b/migrations/0106.sql @@ -1,31 +1,29 @@ -DROP INDEX IF EXISTS _index_products_parents; -DROP INDEX IF EXISTS _index_stock_products_amount; +CREATE INDEX ix_products_performance1 ON products ( + parent_product_id +); -CREATE INDEX _index_products_parents ON products (parent_product_id); -CREATE INDEX _index_stock_products_amount ON stock (product_id, open, best_before_date, amount); +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 INDEX IF EXISTS _index_product_parents_2; -CREATE INDEX _index_product_parents_2 - ON products ( - /* see products_resolved */ - CASE WHEN parent_product_id IS NULL THEN id ELSE parent_product_id END, - active - ); - -/* -Old version is in 0103.sql -*/ 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 active = 1; - +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; diff --git a/services/StockService.php b/services/StockService.php index e9e77286..ae499507 100644 --- a/services/StockService.php +++ b/services/StockService.php @@ -17,9 +17,9 @@ class StockService extends BaseService public function GetCurrentStockOverview() { if (!GROCY_FEATURE_SETTING_STOCK_COUNT_OPENED_PRODUCTS_AGAINST_MINIMUM_STOCK_AMOUNT) { - return $this->getDatabase()->stock_current_overview(); + return $this->getDatabase()->uihelper_stock_current_overview(); } else { - return $this->getDatabase()->stock_current_overview_opened(); + return $this->getDatabase()->uihelper_stock_current_overview_including_opened(); } }