| | 55 | * Системот ја пресметува енергетската вредност на записот, земајќи една порција од секој прикачен рецепт. |
| | 56 | {{{ |
| | 57 | UPDATE intake_planner ip |
| | 58 | SET kcal = ROUND(COALESCE(( |
| | 59 | SELECT SUM(r.kcal_sum / r.servings) |
| | 60 | FROM intake_planner_save_to_list_post sp |
| | 61 | JOIN post p ON p.id = sp.post_id |
| | 62 | JOIN recipe r ON r.id = p.recipe_id |
| | 63 | WHERE sp.planner_id = ip.id |
| | 64 | ), 0), 2) |
| | 65 | WHERE ip.id = :planner_id; |
| | 66 | }}} |
| | 67 | === UseCaseA03 – Креирање листа за пазарење од рецепти |
| | 68 | * Актер кој го иницира: Редовен корисник |
| | 69 | * Други актери: Нема |
| | 70 | **Опис:** Корисникот креира листа за пазарење со додавање на цели рецепти одеднаш и додавање на поединечни производи дополнително. Системот ја пресметува вкупната енергетска вредност на сè што е додадено на листата. |
| | 71 | * Корисникот ја избира опцијата „Нова листа за пазарење“. |
| | 72 | * Системот прикажува форма со следните полиња: |
| | 73 | 1. Датум и време |
| | 74 | 2. Забелешки |
| | 75 | 3. Рецепти за додавање во целост |
| | 76 | 4. Поединечни состојки со количина за купување |
| | 77 | * Корисникот ги внесува податоците и ја испраќа формата. |
| | 78 | * Системот ја внесува листата. |
| | 79 | {{{ |
| | 80 | INSERT INTO grocery_list (date_time, notes, is_bought, kcal, user_email) |
| | 81 | VALUES (:date_time, :notes, FALSE, 0, :user_email) |
| | 82 | RETURNING id; |
| | 83 | }}} |
| | 84 | * Системот го додава секој избран рецепт во целост. |
| | 85 | {{{ |
| | 86 | INSERT INTO grocery_list_bulk_add_ingredient (list_id, recipe_id) |
| | 87 | VALUES (:list_id, :recipe_id); |
| | 88 | }}} |
| | 89 | * Системот ја додава секоја поединечно избрана состојка. |
| | 90 | {{{ |
| | 91 | INSERT INTO grocery_list_single_add_ingredient (list_id, ingredient_name, buy_quantity) |
| | 92 | VALUES (:list_id, :ingredient_name, :buy_quantity); |
| | 93 | }}} |
| | 94 | * Системот ја пресметува вкупната енергетска вредност на листата. |
| | 95 | {{{ |
| | 96 | UPDATE grocery_list g |
| | 97 | SET kcal = ROUND( |
| | 98 | COALESCE((SELECT SUM(r.kcal_sum) |
| | 99 | FROM grocery_list_bulk_add_ingredient b |
| | 100 | JOIN recipe r ON r.id = b.recipe_id |
| | 101 | WHERE b.list_id = g.id), 0) |
| | 102 | + COALESCE((SELECT SUM(i.kcal * s.buy_quantity / 100.0) |
| | 103 | FROM grocery_list_single_add_ingredient s |
| | 104 | JOIN ingredient i ON i.name = s.ingredient_name |
| | 105 | WHERE s.list_id = g.id), 0) |
| | 106 | , 2) |
| | 107 | WHERE g.id = :list_id; |
| | 108 | }}} |
| | 109 | * Системот ја прикажува обединетата листа за пазарење, групирана според категоријата на состојките. |
| | 110 | {{{ |
| | 111 | SELECT i.type, i.name, SUM(x.quantity) AS total_grams |
| | 112 | FROM ( |
| | 113 | SELECT rci.ingredient_name AS name, rci.ingredient_quantity AS quantity |
| | 114 | FROM grocery_list_bulk_add_ingredient b |
| | 115 | JOIN recipe_contains_ingredient rci ON rci.recipe_id = b.recipe_id |
| | 116 | WHERE b.list_id = :list_id |
| | 117 | UNION ALL |
| | 118 | SELECT s.ingredient_name, s.buy_quantity |
| | 119 | FROM grocery_list_single_add_ingredient s |
| | 120 | WHERE s.list_id = :list_id |
| | 121 | ) AS x |
| | 122 | JOIN ingredient i ON i.name = x.name |
| | 123 | GROUP BY i.type, i.name |
| | 124 | ORDER BY i.type, i.name; |
| | 125 | }}} |
| | 126 | * Корисникот ја означува листата како купена по завршувањето на пазарењето. |
| | 127 | {{{ |
| | 128 | UPDATE grocery_list |
| | 129 | SET is_bought = TRUE |
| | 130 | WHERE id = :list_id AND user_email = :user_email; |
| | 131 | }}} |
| | 132 | |
| | 133 | |
| | 134 | |
| | 135 | |
| | 136 | |