diff --git a/changelog/72_UNRELEASED_xxxx-xx-xx.md b/changelog/72_UNRELEASED_xxxx-xx-xx.md index e195e950..9ef9b7bd 100644 --- a/changelog/72_UNRELEASED_xxxx-xx-xx.md +++ b/changelog/72_UNRELEASED_xxxx-xx-xx.md @@ -10,6 +10,7 @@ ### Stock +- The stock report "Spendings" now also supports grouping by stores - Fixed that the "Mark this stock entry as open"-button on the stock entries page opened always one unit instead of the whole stock entry - Fixed that edited stock entries were not considered in some cases (affecting the product's average price and the stock reports) diff --git a/controllers/StockReportsController.php b/controllers/StockReportsController.php index 975c4b21..a9a694a5 100644 --- a/controllers/StockReportsController.php +++ b/controllers/StockReportsController.php @@ -21,29 +21,17 @@ class StockReportsController extends BaseController $where = "pph.purchased_date >= DATE(DATE('now', 'localtime'), 'start of month')"; } - - if (isset($request->getQueryParams()['byGroup'])) + $groupBy = 'product'; + if (isset($request->getQueryParams()['group-by']) && in_array($request->getQueryParams()['group-by'], ['product', 'productgroup', 'store'])) { - $sql = " - SELECT - pg.id AS id, - pg.name AS name, - SUM(pph.amount * pph.price) AS total - FROM products_price_history pph - JOIN products p - ON pph.product_id = p.id - JOIN product_groups pg - ON p.product_group_id = pg.id - WHERE $where - GROUP BY pg.id - ORDER BY pg.NAME COLLATE NOCASE - "; + $groupBy = $request->getQueryParams()['group-by']; } - else + + if ($groupBy == 'product') { - if (isset($request->getQueryParams()['product_group']) and $request->getQueryParams()['product_group'] != 'all') + if (isset($request->getQueryParams()['product-group']) and $request->getQueryParams()['product-group'] != 'all') { - $where .= ' AND pg.id = ' . $request->getQueryParams()['product_group']; + $where .= ' AND pg.id = ' . $request->getQueryParams()['product-group']; } $sql = " @@ -59,16 +47,50 @@ class StockReportsController extends BaseController JOIN product_groups pg ON p.product_group_id = pg.id WHERE $where - GROUP BY p.id - ORDER BY p.NAME COLLATE NOCASE + GROUP BY p.id, p.name, pg.id, pg.name + ORDER BY p.name COLLATE NOCASE + "; + } + elseif ($groupBy == 'productgroup') + { + $sql = " + SELECT + pg.id AS id, + pg.name AS name, + SUM(pph.amount * pph.price) AS total + FROM products_price_history pph + JOIN products p + ON pph.product_id = p.id + JOIN product_groups pg + ON p.product_group_id = pg.id + WHERE $where + GROUP BY pg.id, pg.name + ORDER BY pg.name COLLATE NOCASE + "; + } + elseif ($groupBy == 'store') + { + $sql = " + SELECT + sl.id AS id, + sl.name AS name, + SUM(pph.amount * pph.price) AS total + FROM products_price_history pph + JOIN products p + ON pph.product_id = p.id + LEFT JOIN shopping_locations sl + ON pph.shopping_location_id = sl.id + WHERE $where + GROUP BY sl.id, sl.name + ORDER BY sl.NAME COLLATE NOCASE "; } return $this->renderPage($response, 'stockreportspendings', [ 'metrics' => $this->getDatabaseService()->ExecuteDbQuery($sql)->fetchAll(\PDO::FETCH_OBJ), 'productGroups' => $this->getDatabase()->product_groups()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'), - 'selectedGroup' => isset($request->getQueryParams()['product_group']) ? $request->getQueryParams()['product_group'] : null, - 'byGroup' => isset($request->getQueryParams()['byGroup']) ? $request->getQueryParams()['byGroup'] : null + 'selectedGroup' => isset($request->getQueryParams()['product-group']) ? $request->getQueryParams()['product-group'] : null, + 'groupBy' => $groupBy ]); } } diff --git a/public/viewjs/stockreportspendings.js b/public/viewjs/stockreportspendings.js index 9fb33f07..57b72fdd 100644 --- a/public/viewjs/stockreportspendings.js +++ b/public/viewjs/stockreportspendings.js @@ -134,12 +134,12 @@ $("#clear-filter-button").on("click", function() { RemoveUriParam("start_date"); RemoveUriParam("end_date"); - RemoveUriParam("product_group"); + RemoveUriParam("product-group"); window.location.reload(); }); $("#product-group-filter").on("change", function() { - UpdateUriParam("product_group", $(this).val()); + UpdateUriParam("product-group", $(this).val()); window.location.reload(); }); diff --git a/views/stockreportspendings.blade.php b/views/stockreportspendings.blade.php index 8f95f17b..ba0fef94 100644 --- a/views/stockreportspendings.blade.php +++ b/views/stockreportspendings.blade.php @@ -27,18 +27,22 @@
@@ -60,7 +64,7 @@ value="" /> - @if(!$byGroup) + @if($groupBy == 'product')