diff --git a/controllers/RecipesController.php b/controllers/RecipesController.php index c78698ed..39672f0e 100644 --- a/controllers/RecipesController.php +++ b/controllers/RecipesController.php @@ -56,7 +56,7 @@ class RecipesController extends BaseController 'fullcalendarEventSources' => $events, 'recipes' => $recipes, 'internalRecipes' => $this->getDatabase()->recipes()->where("id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)")->fetchAll(), - 'recipesResolved' => $this->getRecipesService()->GetRecipesResolved2("recipe_id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)"), + 'recipesResolved' => $this->getRecipesService()->GetRecipesResolved("recipe_id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)"), 'products' => $this->getDatabase()->products()->orderBy('name', 'COLLATE NOCASE'), 'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'), 'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(), diff --git a/migrations/0158.sql b/migrations/0158.sql new file mode 100644 index 00000000..f0084d58 --- /dev/null +++ b/migrations/0158.sql @@ -0,0 +1,28 @@ +CREATE VIEW recipes_missing_product_counts +AS +SELECT + recipe_id, + COUNT(*) AS missing_products_count +FROM recipes_pos_resolved +WHERE need_fulfilled = 0 +GROUP BY recipe_id; + +DROP VIEW recipes_resolved; +CREATE VIEW recipes_resolved +AS +SELECT + 1 AS id, -- Dummy, LessQL needs an id column + r.id AS recipe_id, + IFNULL(MIN(rpr.need_fulfilled), 1) AS need_fulfilled, + IFNULL(MIN(rpr.need_fulfilled_with_shopping_list), 1) AS need_fulfilled_with_shopping_list, + IFNULL(rmpc.missing_products_count, 0) AS missing_products_count, + IFNULL(SUM(rpr.costs), 0) AS costs, + IFNULL(SUM(rpr.calories), 0) AS calories +FROM recipes r +LEFT JOIN recipes_pos_resolved rpr + ON r.id = rpr.recipe_id +LEFT JOIN recipes_missing_product_counts rmpc + ON r.id = rmpc.recipe_id +GROUP BY r.id; + +DROP VIEW recipes_resolved2; diff --git a/services/RecipesService.php b/services/RecipesService.php index b98b689c..caccb355 100644 --- a/services/RecipesService.php +++ b/services/RecipesService.php @@ -99,19 +99,6 @@ class RecipesService extends BaseService } } - // The same as GetRecipesResolved but without the column "missing_products_count" to improve performance when this is not needed - public function GetRecipesResolved2($customWhere = null): Result - { - if ($customWhere == null) - { - return $this->getDatabase()->recipes_resolved2(); - } - else - { - return $this->getDatabase()->recipes_resolved2()->where($customWhere); - } - } - public function CopyRecipe($recipeId) { if (!$this->RecipeExists($recipeId))