Reuse the existing product_price_history view

This commit is contained in:
Bernd Bestel 2023-04-01 15:39:44 +02:00
parent 132dfb8e6b
commit 6cfee78b95
No known key found for this signature in database
GPG Key ID: 71BD34C0D4891300
3 changed files with 53 additions and 34 deletions

View File

@ -6,42 +6,58 @@ class StockReportsController extends BaseController
{
public function Spendings(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
{
if (isset($request->getQueryParams()['start_date']) and isset($request->getQueryParams()['end_date']))
if (isset($request->getQueryParams()['start_date']) && isset($request->getQueryParams()['end_date']) && IsIsoDate($request->getQueryParams()['start_date']) && IsIsoDate($request->getQueryParams()['end_date']))
{
$startDate = $request->getQueryParams()['start_date'];
$endDate = $request->getQueryParams()['end_date'];
$where = "purchased_date >= '$startDate' AND purchased_date <= '$endDate'";
$where = "pph.purchased_date BETWEEN '$startDate' AND '$endDate'";
}
else
{
// Default this month
$where = "purchased_date >= DATE(DATE('now', 'localtime'), 'start of month')";
// Default to this month
$where = "pph.purchased_date >= DATE(DATE('now', 'localtime'), 'start of month')";
}
if (isset($request->getQueryParams()['byGroup']))
{
$sql = "
SELECT product_group_id as id, product_group as name, sum(quantity * price) as total
FROM product_purchase_history
SELECT
pg.id AS id,
pg.name AS name,
SUM(pph.amount * pph.price) AS total
FROM product_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 product_group
ORDER BY product_group
GROUP BY pg.id
ORDER BY pg.NAME COLLATE NOCASE
";
}
else
{
if (isset($request->getQueryParams()['product_group']) and $request->getQueryParams()['product_group'] != 'all')
{
$where = $where . ' AND product_group_id = ' . $request->getQueryParams()['product_group'];
$where .= ' AND pg.id = ' . $request->getQueryParams()['product_group'];
}
$sql = "
SELECT product_id as id, product_name as name, product_group_id as group_id, product_group as group_name, sum(quantity * price) as total
FROM product_purchase_history
SELECT
p.id AS id,
p.name AS name,
pg.id AS group_id,
pg.name AS group_name,
SUM(pph.amount * pph.price) AS total
FROM product_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 product_name
ORDER BY product_name
GROUP BY p.id
ORDER BY p.NAME COLLATE NOCASE
";
}

View File

@ -1,20 +1,25 @@
CREATE VIEW product_purchase_history
DROP VIEW product_price_history;
CREATE VIEW product_price_history
AS
SELECT
1 AS id, -- Dummy, LessQL needs an id column
p.id AS product_id,
p.name AS product_name,
g.id AS product_group_id,
g.name AS product_group,
s.amount AS quantity,
s.price AS price,
s.purchased_date AS purchased_date
FROM product_groups g
JOIN products p
ON p.product_group_id = g.id
JOIN stock_log s
ON s.product_id = p.id
WHERE s.transaction_type = 'purchase'
AND s.undone = 0
AND s.price IS NOT NULL
ORDER BY p.name ASC;
sl.product_id AS id, -- Dummy, LessQL needs an id column
sl.product_id,
sl.price,
sl.amount,
sl.purchased_date,
sl.shopping_location_id
FROM stock_log sl
WHERE sl.transaction_type IN ('purchase', 'inventory-correction', 'stock-edit-new')
AND sl.undone = 0
AND IFNULL(sl.price, 0) > 0
AND IFNULL(sl.amount, 0) > 0
AND sl.id NOT IN (
-- These are edited purchase and inventory-correction rows
SELECT sl_origin.id
FROM stock_log sl_origin
JOIN stock_log sl_edit
ON sl_origin.stock_id = sl_edit.stock_id
AND sl_edit.transaction_type = 'stock-edit-new'
AND sl_edit.id > sl_origin.id
WHERE sl_origin.transaction_type IN ('purchase', 'inventory-correction')
);

View File

@ -76,9 +76,7 @@
id="product-group-filter">
<option value="all">{{ $__t('All') }}</option>
@foreach($productGroups as $productGroup)
<option @if($selectedGroup==$productGroup->id)
selected="selected"
@endif
<option @if($productGroup->id == $selectedGroup) selected="selected" @endif
value="{{ $productGroup->id }}">{{ $productGroup->name }}</option>
@endforeach
</select>