mirror of
https://github.com/grocy/grocy.git
synced 2026-04-04 20:06:16 +02:00
Applied code style
This commit is contained in:
parent
d3e2003dee
commit
d723c44e63
|
|
@ -517,11 +517,11 @@ class StockController extends BaseController
|
||||||
|
|
||||||
public function StockMetricsPurchases(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
public function StockMetricsPurchases(\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']) and isset($request->getQueryParams()['end_date']))
|
||||||
{
|
{
|
||||||
$start_date = $request->getQueryParams()['start_date'];
|
$startDate = $request->getQueryParams()['start_date'];
|
||||||
$end_date = $request->getQueryParams()['end_date'];
|
$endDate = $request->getQueryParams()['end_date'];
|
||||||
$where = "purchased_date >= '$start_date' AND purchased_date <= '$end_date'";
|
$where = "purchased_date >= '$startDate' AND purchased_date <= '$endDate'";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -535,14 +535,14 @@ class StockController extends BaseController
|
||||||
$sql = "
|
$sql = "
|
||||||
SELECT product_group_id as id, product_group as name, sum(quantity * price) as total
|
SELECT product_group_id as id, product_group as name, sum(quantity * price) as total
|
||||||
FROM product_purchase_history
|
FROM product_purchase_history
|
||||||
where $where
|
WHERE $where
|
||||||
GROUP BY product_group
|
GROUP BY product_group
|
||||||
ORDER BY product_group
|
ORDER BY product_group
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
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 = $where . ' AND product_group_id = ' . $request->getQueryParams()['product_group'];
|
$where = $where . ' AND product_group_id = ' . $request->getQueryParams()['product_group'];
|
||||||
}
|
}
|
||||||
|
|
@ -559,7 +559,7 @@ class StockController extends BaseController
|
||||||
return $this->renderPage($response, 'stockmetricspurchases', [
|
return $this->renderPage($response, 'stockmetricspurchases', [
|
||||||
'metrics' => $this->getDatabaseService()->ExecuteDbQuery($sql)->fetchAll(\PDO::FETCH_OBJ),
|
'metrics' => $this->getDatabaseService()->ExecuteDbQuery($sql)->fetchAll(\PDO::FETCH_OBJ),
|
||||||
'productGroups' => $this->getDatabase()->product_groups()->orderBy('name', 'COLLATE NOCASE'),
|
'productGroups' => $this->getDatabase()->product_groups()->orderBy('name', 'COLLATE NOCASE'),
|
||||||
'selectedGroup' => isset($request->getQueryParams()['product_group']) ? $request->getQueryParams()['product_group'] : null,
|
'selectedGroup' => isset($request->getQueryParams()['product_group']) ? $request->getQueryParams()['product_group'] : null,
|
||||||
'byGroup' => isset($request->getQueryParams()['byGroup']) ? $request->getQueryParams()['byGroup'] : null
|
'byGroup' => isset($request->getQueryParams()['byGroup']) ? $request->getQueryParams()['byGroup'] : null
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,23 +2,19 @@ CREATE VIEW product_purchase_history
|
||||||
AS
|
AS
|
||||||
SELECT
|
SELECT
|
||||||
1 AS id, -- Dummy, LessQL needs an id column
|
1 AS id, -- Dummy, LessQL needs an id column
|
||||||
p.id as product_id,
|
p.id AS product_id,
|
||||||
p.name as product_name,
|
p.name AS product_name,
|
||||||
g.id as product_group_id,
|
g.id AS product_group_id,
|
||||||
g.name as product_group,
|
g.name AS product_group,
|
||||||
s.amount as quantity,
|
s.amount AS quantity,
|
||||||
s.price as price,
|
s.price AS price,
|
||||||
s.purchased_date as purchased_date
|
s.purchased_date AS purchased_date
|
||||||
FROM
|
FROM product_groups g
|
||||||
product_groups as g
|
JOIN products p
|
||||||
INNER JOIN products as p
|
|
||||||
ON p.product_group_id = g.id
|
ON p.product_group_id = g.id
|
||||||
INNER JOIN stock_log as s
|
JOIN stock_log s
|
||||||
ON s.product_id = p.id
|
ON s.product_id = p.id
|
||||||
WHERE
|
WHERE s.transaction_type = 'purchase'
|
||||||
s.transaction_type = 'purchase'
|
AND s.undone = 0
|
||||||
AND
|
AND s.price IS NOT NULL
|
||||||
s.undone = 0
|
ORDER BY p.name ASC;
|
||||||
AND
|
|
||||||
s.price is not null
|
|
||||||
ORDER BY p.name ASC
|
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,40 @@
|
||||||
/*
|
|
||||||
* Metrics Javascript
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Charting */
|
/* Charting */
|
||||||
var labels = [];
|
var labels = [];
|
||||||
var data = [];
|
var data = [];
|
||||||
var totalAmount = 0;
|
var totalAmount = 0;
|
||||||
$("#metrics-table tbody tr").each(function () {
|
$("#metrics-table tbody tr").each(function()
|
||||||
|
{
|
||||||
var self = $(this);
|
var self = $(this);
|
||||||
labels.push(self.find("td:eq(0)").attr('data-chart-label'));
|
labels.push(self.find("td:eq(0)").attr("data-chart-label"));
|
||||||
var itemTotalRaw = parseFloat(self.find("td:eq(1)").attr('data-chart-value'));
|
var itemTotalRaw = Number.parseFloat(self.find("td:eq(1)").attr("data-chart-value"));
|
||||||
var itemTotal = parseFloat((Math.round(itemTotalRaw * 100) / 100).toFixed(2));
|
var itemTotal = Number.parseFloat((Math.round(itemTotalRaw * 100) / 100).toFixed(2));
|
||||||
data.push(itemTotal);
|
data.push(itemTotal);
|
||||||
totalAmount = (parseFloat(totalAmount) + parseFloat(itemTotal));
|
totalAmount = (Number.parseFloat(totalAmount) + Number.parseFloat(itemTotal));
|
||||||
});
|
});
|
||||||
totalAmount = totalAmount.toLocaleString(undefined, { style: "currency", currency: Grocy.Currency });
|
totalAmount = totalAmount.toLocaleString(undefined, { style: "currency", currency: Grocy.Currency });
|
||||||
|
|
||||||
var backgroundColorChoices=['#6C747C',
|
var backgroundColorChoices = [
|
||||||
'#BFB8A4',
|
"#6C747C",
|
||||||
'#BFADA4',
|
"#BFB8A4",
|
||||||
'#4F575E',
|
"#BFADA4",
|
||||||
'#918B78',
|
"#4F575E",
|
||||||
'#343A40',
|
"#918B78",
|
||||||
'#635E4F',
|
"#343A40",
|
||||||
'#63554F',
|
"#635E4F",
|
||||||
'#1A1F24',
|
"#63554F",
|
||||||
'#383426',
|
"#1A1F24",
|
||||||
'#382C26',
|
"#383426",
|
||||||
'#121B25',
|
"#382C26",
|
||||||
'#383119',
|
"#121B25",
|
||||||
'#382319']
|
"#383119",
|
||||||
var backgroundColors=[];
|
"#382319"
|
||||||
|
]
|
||||||
|
var backgroundColors = [];
|
||||||
var colorChoiceIndex = 0;
|
var colorChoiceIndex = 0;
|
||||||
for(let i=0;i<data.length;i++){
|
for (i = 0; i < data.length; i++)
|
||||||
if ((i + 1) == (backgroundColorChoices.length)){
|
{
|
||||||
|
if ((i + 1) == (backgroundColorChoices.length))
|
||||||
|
{
|
||||||
// restart background color choices
|
// restart background color choices
|
||||||
colorChoiceIndex = 1;
|
colorChoiceIndex = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -41,105 +42,110 @@ for(let i=0;i<data.length;i++){
|
||||||
colorChoiceIndex++;
|
colorChoiceIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
var metricsChart = new Chart('metrics-chart', {
|
var metricsChart = new Chart("metrics-chart", {
|
||||||
type: 'outlabeledDoughnut',
|
"type": "outlabeledDoughnut",
|
||||||
options: {
|
"options": {
|
||||||
legend: {
|
"legend": {
|
||||||
display: false
|
"display": false
|
||||||
},
|
},
|
||||||
tooltips: {
|
"tooltips": {
|
||||||
enabled: false
|
"enabled": false
|
||||||
},
|
},
|
||||||
tooltips: {enabled: false},
|
"tooltips": { enabled: false },
|
||||||
plugins: {
|
"plugins": {
|
||||||
outlabels: {
|
"outlabels": {
|
||||||
text: '%l %p',
|
"text": "%l %p",
|
||||||
backgroundColor: "#343a40",
|
"backgroundColor": "#343a40",
|
||||||
color: 'white',
|
"color": "white",
|
||||||
stretch: 45,
|
"stretch": 45,
|
||||||
font: {
|
"font": {
|
||||||
resizable: true,
|
"resizable": true,
|
||||||
minSize: 12,
|
"minSize": 12,
|
||||||
maxSize: 18
|
"maxSize": 18
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
doughnutlabel: {
|
"doughnutlabel": {
|
||||||
labels: [
|
"labels": [
|
||||||
{
|
{
|
||||||
text: totalAmount,
|
"text": totalAmount,
|
||||||
font: {
|
"font": {
|
||||||
size: 24,
|
"size": 24,
|
||||||
weight: 'bold',
|
"weight": "bold"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: __t("Total"),
|
"text": __t("Total")
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: {
|
"data": {
|
||||||
labels: labels,
|
"labels": labels,
|
||||||
datasets: [{
|
"datasets": [{
|
||||||
data: data,
|
"data": data,
|
||||||
backgroundColor: backgroundColors
|
"backgroundColor": backgroundColors
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/* DataTables */
|
/* DataTables */
|
||||||
var metricsTable = $('#metrics-table').DataTable({
|
var metricsTable = $("#metrics-table").DataTable({
|
||||||
"columnDefs": [
|
"columnDefs": [
|
||||||
{ "type": "num", "targets": 1 }
|
{ "type": "num", "targets": 1 }
|
||||||
]
|
].concat($.fn.dataTable.defaults.columnDefs)
|
||||||
});
|
});
|
||||||
$('#metrics-table tbody').removeClass("d-none");
|
$("#metrics-table tbody").removeClass("d-none");
|
||||||
metricsTable.columns.adjust().draw();
|
metricsTable.columns.adjust().draw();
|
||||||
|
|
||||||
/* DateRangePicker */
|
/* DateRangePicker */
|
||||||
const urlParams = new URLSearchParams(window.location.search);
|
var startDate = moment().startOf("month").format("YYYY-MM-DD");
|
||||||
|
var endDate = moment().endOf("month").format("YYYY-MM-DD");
|
||||||
|
|
||||||
var start_date = moment().startOf("month").format('YYYY-MM-DD');
|
if (GetUriParam("start_date"))
|
||||||
var end_date = moment().endOf("month").format('YYYY-MM-DD');
|
{
|
||||||
|
startDate = moment(GetUriParam("start_date"));
|
||||||
|
}
|
||||||
|
if (GetUriParam("end_date"))
|
||||||
|
{
|
||||||
|
endDate = moment(GetUriParam("end_date"));
|
||||||
|
}
|
||||||
|
|
||||||
if (urlParams.get('start_date')) start_date = moment(urlParams.get('start_date')) ;
|
var ranges = {};
|
||||||
if (urlParams.get('end_date')) end_date = moment(urlParams.get('end_date'));
|
ranges[__t("Today")] = [moment(), moment()];
|
||||||
|
ranges[__t("Yesterday")] = [moment().subtract(1, "days"), moment().subtract(1, "days")];
|
||||||
|
ranges[__t("Last 7 Days")] = [moment().subtract(6, "days"), moment()];
|
||||||
|
ranges[__t("Last 14 Days")] = [moment().subtract(13, "days"), moment()];
|
||||||
|
ranges[__t("Last 30 Days")] = [moment().subtract(29, "days"), moment()];
|
||||||
|
ranges[__t("This Month")] = [moment().startOf("month"), moment().endOf("month")];
|
||||||
|
ranges[__t("Last Month")] = [moment().subtract(1, "month").startOf("month"), moment().subtract(1, "month").endOf("month")];
|
||||||
|
ranges[__t("This Year")] = [moment().startOf("year"), moment().endOf("year")];
|
||||||
|
ranges[__t("Last Year")] = [moment().subtract(1, "year").startOf("year"), moment().subtract(1, "year").endOf("year")];
|
||||||
|
|
||||||
var _ranges = {}
|
$("#daterange-filter").daterangepicker({
|
||||||
_ranges[__t("Today")] = [moment(), moment()]
|
"showDropdowns": true,
|
||||||
_ranges[__t("Yesterday")] = [moment().subtract(1, 'days'), moment().subtract(1, 'days')]
|
"startDate": startDate,
|
||||||
_ranges[__t("Last 7 Days")] = [moment().subtract(6, 'days'), moment()],
|
"endDate": endDate,
|
||||||
_ranges[__t("Last 14 Days")] = [moment().subtract(13, 'days'), moment()],
|
"showWeekNumbers": Grocy.CalendarShowWeekNumbers,
|
||||||
_ranges[__t("Last 30 Days")] = [moment().subtract(29, 'days'), moment()],
|
"locale": {
|
||||||
_ranges[__t("This Month")] = [moment().startOf('month'), moment().endOf('month')],
|
"format": "YYYY-MM-DD",
|
||||||
_ranges[__t("Last Month")] = [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
|
|
||||||
_ranges[__t("This Year")] = [moment().startOf('year'), moment().endOf('year')],
|
|
||||||
_ranges[__t("Last Year")] = [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year').endOf('year')]
|
|
||||||
|
|
||||||
$('#daterange-filter').daterangepicker({
|
|
||||||
showDropdowns: true,
|
|
||||||
startDate: start_date,
|
|
||||||
endDate: end_date,
|
|
||||||
showWeekNumbers: Grocy.CalendarShowWeekNumbers,
|
|
||||||
locale: {
|
|
||||||
"format": 'YYYY-MM-DD',
|
|
||||||
"firstDay": Grocy.CalendarFirstDayOfWeek
|
"firstDay": Grocy.CalendarFirstDayOfWeek
|
||||||
},
|
},
|
||||||
applyLabel: __t("Apply"),
|
"applyLabel": __t("Apply"),
|
||||||
cancelLabel: __t("Cancel"),
|
"cancelLabel": __t("Cancel"),
|
||||||
customRangeLabel: __t("Custom Range"),
|
"customRangeLabel": __t("Custom Range"),
|
||||||
ranges: _ranges
|
"ranges": ranges
|
||||||
}, function(start, end, label) {
|
}, function(start, end, label)
|
||||||
UpdateUriParam("start_date", start.format('YYYY-MM-DD'));
|
{
|
||||||
UpdateUriParam("end_date", end.format('YYYY-MM-DD'))
|
UpdateUriParam("start_date", start.format("YYYY-MM-DD"));
|
||||||
|
UpdateUriParam("end_date", end.format("YYYY-MM-DD"))
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#daterange-filter').on('cancel.daterangepicker', function(ev, picker)
|
$("#daterange-filter").on("cancel.daterangepicker", function(ev, picker)
|
||||||
{
|
{
|
||||||
$(this).val(start_date + ' - ' + end_date);
|
$(this).val(start_date + " - " + end_date);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#clear-filter-button").on("click", function()
|
$("#clear-filter-button").on("click", function()
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@
|
||||||
<link href="{{ $U('/node_modules/bootstrap-select/dist/css/bootstrap-select.min.css?v=', true) }}{{ $version }}"
|
<link href="{{ $U('/node_modules/bootstrap-select/dist/css/bootstrap-select.min.css?v=', true) }}{{ $version }}"
|
||||||
rel="stylesheet">
|
rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/daterangepicker/daterangepicker.css?v=', true) }}{{ $version }}"
|
<link href="{{ $U('/node_modules/daterangepicker/daterangepicker.css?v=', true) }}{{ $version }}"
|
||||||
rel="stylesheet">
|
rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/@fontsource/noto-sans/latin.css?v=', true) }}{{ $version }}"
|
<link href="{{ $U('/node_modules/@fontsource/noto-sans/latin.css?v=', true) }}{{ $version }}"
|
||||||
rel="stylesheet">
|
rel="stylesheet">
|
||||||
<link href="{{ $U('/css/grocy.css?v=', true) }}{{ $version }}"
|
<link href="{{ $U('/css/grocy.css?v=', true) }}{{ $version }}"
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,12 @@
|
||||||
@section('activeNav', 'stockmetricspurchases')
|
@section('activeNav', 'stockmetricspurchases')
|
||||||
|
|
||||||
@once
|
@once
|
||||||
@push('componentScripts')
|
@push('componentScripts')
|
||||||
<script src="{{ $U('/node_modules/chart.js/dist/Chart.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/chart.js/dist/Chart.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/chartjs-plugin-doughnutlabel/dist/chartjs-plugin-doughnutlabel.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/chartjs-plugin-doughnutlabel/dist/chartjs-plugin-doughnutlabel.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/chartjs-plugin-piechart-outlabels/dist/chartjs-plugin-piechart-outlabels.js?v=', true) }}{{ $version}}"></script>
|
<script src="{{ $U('/node_modules/chartjs-plugin-piechart-outlabels/dist/chartjs-plugin-piechart-outlabels.js?v=', true) }}{{ $version}}"></script>
|
||||||
<script src="{{ $U('/viewjs/metrics.js', true) }}?v={{ $version }}"></script>
|
<script src="{{ $U('/viewjs/metrics.js', true) }}?v={{ $version }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
@endonce
|
@endonce
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
|
@ -20,26 +20,26 @@
|
||||||
@yield('title')
|
@yield('title')
|
||||||
</h2>
|
</h2>
|
||||||
<h2 class="mb-0 mr-auto order-3 order-md-1 width-xs-sm-100">
|
<h2 class="mb-0 mr-auto order-3 order-md-1 width-xs-sm-100">
|
||||||
<span id="info-current-stock"
|
<span id="info-current-stock"
|
||||||
class="text-muted small"></span>
|
class="text-muted small"></span>
|
||||||
</h2>
|
</h2>
|
||||||
<button class="btn btn-outline-dark d-md-none mt-2 float-right order-1 order-md-3"
|
<button class="btn btn-outline-dark d-md-none mt-2 float-right order-1 order-md-3"
|
||||||
type="button"
|
type="button"
|
||||||
data-toggle="collapse"
|
data-toggle="collapse"
|
||||||
data-target="#related-links">
|
data-target="#related-links">
|
||||||
<i class="fa-solid fa-ellipsis-v"></i>
|
<i class="fa-solid fa-ellipsis-v"></i>
|
||||||
</button>
|
</button>
|
||||||
<div class="related-links collapse d-md-flex order-2 width-xs-sm-100"
|
<div class="related-links collapse d-md-flex order-2 width-xs-sm-100"
|
||||||
id="related-links">
|
id="related-links">
|
||||||
<a class="btn btn-outline-dark responsive-button @if(!$byGroup) active @endif m-1 mt-md-0 mb-md-0 float-right"
|
<a class="btn btn-outline-dark responsive-button @if(!$byGroup) active @endif m-1 mt-md-0 mb-md-0 float-right"
|
||||||
href="{{ $U('/stockmetricspurchases') }}">
|
href="{{ $U('/stockmetricspurchases') }}">
|
||||||
{{ $__t('by Product') }}
|
{{ $__t('by Product') }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="related-links collapse d-md-flex order-2 width-xs-sm-100"
|
<div class="related-links collapse d-md-flex order-2 width-xs-sm-100"
|
||||||
id="related-links">
|
id="related-links">
|
||||||
<a class="btn btn-outline-dark responsive-button @if($byGroup) active @endif m-1 mt-md-0 mb-md-0 float-right"
|
<a class="btn btn-outline-dark responsive-button @if($byGroup) active @endif m-1 mt-md-0 mb-md-0 float-right"
|
||||||
href="{{ $U('/stockmetricspurchases?byGroup=true') }}">
|
href="{{ $U('/stockmetricspurchases?byGroup=true') }}">
|
||||||
{{ $__t('by Group') }}
|
{{ $__t('by Group') }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -50,40 +50,44 @@
|
||||||
<hr class="my-2">
|
<hr class="my-2">
|
||||||
|
|
||||||
<div class="row collapse d-md-flex"
|
<div class="row collapse d-md-flex"
|
||||||
id="table-filter-row">
|
id="table-filter-row">
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4">
|
<div class="col-sm-12 col-md-6 col-xl-4">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa-solid fa-clock"></i> {{ $__t('Date range') }}</span>
|
<span class="input-group-text"><i class="fa-solid fa-clock"></i> {{ $__t('Date range') }}</span>
|
||||||
<input type="text" name="date-filter" id="daterange-filter" class="custom-control custom-select" value="" />
|
<input type="text"
|
||||||
|
name="date-filter"
|
||||||
|
id="daterange-filter"
|
||||||
|
class="custom-control custom-select"
|
||||||
|
value="" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@if(!$byGroup)
|
@if(!$byGroup)
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4">
|
<div class="col-sm-12 col-md-6 col-xl-4">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa-solid fa-filter"></i> {{ $__t('Product group') }}</span>
|
<span class="input-group-text"><i class="fa-solid fa-filter"></i> {{ $__t('Product group') }}</span>
|
||||||
</div>
|
|
||||||
<select class="custom-control custom-select"
|
|
||||||
id="product-group-filter">
|
|
||||||
<option value="all">{{ $__t('All') }}</option>
|
|
||||||
@foreach($productGroups as $productGroup)
|
|
||||||
<option @if($selectedGroup == $productGroup->id)
|
|
||||||
selected="selected"
|
|
||||||
@endif
|
|
||||||
value="{{ $productGroup->id }}">{{ $productGroup->name }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
</div>
|
||||||
|
<select class="custom-control custom-select"
|
||||||
|
id="product-group-filter">
|
||||||
|
<option value="all">{{ $__t('All') }}</option>
|
||||||
|
@foreach($productGroups as $productGroup)
|
||||||
|
<option @if($selectedGroup==$productGroup->id)
|
||||||
|
selected="selected"
|
||||||
|
@endif
|
||||||
|
value="{{ $productGroup->id }}">{{ $productGroup->name }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="float-right mt-1">
|
<div class="float-right mt-1">
|
||||||
<button id="clear-filter-button"
|
<button id="clear-filter-button"
|
||||||
class="btn btn-sm btn-outline-info"
|
class="btn btn-sm btn-outline-info"
|
||||||
data-toggle="tooltip"
|
data-toggle="tooltip"
|
||||||
title="{{ $__t('Clear filter') }}">
|
title="{{ $__t('Clear filter') }}">
|
||||||
<i class="fa-solid fa-filter-circle-xmark"></i>
|
<i class="fa-solid fa-filter-circle-xmark"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -91,37 +95,39 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mt-2">
|
<div class="row mt-2">
|
||||||
<div id="chart-wrapper" class="col-sm-12 col-md-12 col-xl-12">
|
<div id="chart-wrapper"
|
||||||
|
class="col-sm-12 col-md-12 col-xl-12">
|
||||||
<canvas id="metrics-chart"></canvas>
|
<canvas id="metrics-chart"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 col-md-12 col-xl-12">
|
<div class="col-sm-12 col-md-12 col-xl-12">
|
||||||
<table id="metrics-table"
|
<table id="metrics-table"
|
||||||
class="table table-sm table-striped nowrap w-100">
|
class="table table-sm table-striped nowrap w-100">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ $__t('Name') }}</th>
|
<th>{{ $__t('Name') }}</th>
|
||||||
<th>{{ $__t('Total') }}</th>
|
<th>{{ $__t('Total') }}</th>
|
||||||
@if(!$byGroup)
|
@if(!$byGroup)
|
||||||
<th>{{ $__t('Product group') }}</th>
|
<th>{{ $__t('Product group') }}</th>
|
||||||
@endif
|
@endif
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="d-none">
|
<tbody class="d-none">
|
||||||
@foreach($metrics as $metric)
|
@foreach($metrics as $metric)
|
||||||
<tr>
|
<tr>
|
||||||
<td data-chart-label="{{ $metric->name }}">
|
<td data-chart-label="{{ $metric->name }}">
|
||||||
{{ $metric->name }}
|
{{ $metric->name }}
|
||||||
</td>
|
</td>
|
||||||
<td data-chart-value="{{ $metric->total }}" data-order="{{ $metric->total }}">
|
<td data-chart-value="{{ $metric->total }}"
|
||||||
|
data-order="{{ $metric->total }}">
|
||||||
<span class="locale-number locale-number-currency">{{ $metric->total }}</span>
|
<span class="locale-number locale-number-currency">{{ $metric->total }}</span>
|
||||||
</td>
|
</td>
|
||||||
@if(!$byGroup)
|
@if(!$byGroup)
|
||||||
<td>
|
<td>
|
||||||
{{ $metric->group_name }}
|
{{ $metric->group_name }}
|
||||||
</td>
|
</td>
|
||||||
@endif
|
@endif
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@
|
||||||
{{ $__t('Stock entries') }}
|
{{ $__t('Stock entries') }}
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-outline-dark responsive-button m-1 mt-md-0 mb-md-0 float-right"
|
<a class="btn btn-outline-dark responsive-button m-1 mt-md-0 mb-md-0 float-right"
|
||||||
href="{{ $U('/stockmetricspurchases') }}">
|
href="{{ $U('/stockmetricspurchases') }}">
|
||||||
{{ $__t('Metrics') }}
|
{{ $__t('Metrics') }}
|
||||||
</a>
|
</a>
|
||||||
@if(GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING)
|
@if(GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user