mirror of
https://github.com/grocy/grocy.git
synced 2025-04-29 01:32:38 +00:00
First draft for printable location content sheets (references #341)
This commit is contained in:
parent
d6e9dc1b59
commit
28716ed96c
@ -262,4 +262,14 @@ class StockController extends BaseController
|
||||
'quantityunits' => $this->Database->quantity_units()->orderBy('name')
|
||||
]);
|
||||
}
|
||||
|
||||
public function LocationContentSheet(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||
{
|
||||
return $this->AppContainer->view->render($response, 'locationcontentsheet', [
|
||||
'products' => $this->Database->products()->orderBy('name'),
|
||||
'quantityunits' => $this->Database->quantity_units()->orderBy('name'),
|
||||
'locations' => $this->Database->locations()->orderBy('name'),
|
||||
'currentStockLocationContent' => $this->StockService->GetCurrentStockLocationContent()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -1292,3 +1292,9 @@ msgstr ""
|
||||
|
||||
msgid "When enabled the chore can never be overdue, the due date will shift forward each day when due"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "Location Content Sheet"
|
||||
msgstr ""
|
||||
|
12
migrations/0079.sql
Normal file
12
migrations/0079.sql
Normal file
@ -0,0 +1,12 @@
|
||||
CREATE VIEW stock_current_location_content
|
||||
AS
|
||||
SELECT
|
||||
IFNULL(s.location_id, p.location_id) AS location_id,
|
||||
s.product_id,
|
||||
SUM(s.amount) AS amount,
|
||||
MIN(s.best_before_date) AS best_before_date,
|
||||
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id = s.product_id AND location_id = s.location_id AND open = 1), 0) AS amount_opened
|
||||
FROM stock s
|
||||
JOIN products p
|
||||
ON s.product_id = p.id
|
||||
GROUP BY IFNULL(s.location_id, p.location_id), s.product_id;
|
@ -41,6 +41,7 @@ $app->group('', function()
|
||||
$this->get('/productgroups', '\Grocy\Controllers\StockController:ProductGroupsList');
|
||||
$this->get('/productgroup/{productGroupId}', '\Grocy\Controllers\StockController:ProductGroupEditForm');
|
||||
$this->get('/stockjournal', '\Grocy\Controllers\StockController:Journal');
|
||||
$this->get('/locationcontentsheet', '\Grocy\Controllers\StockController:LocationContentSheet');
|
||||
}
|
||||
|
||||
// Shopping list routes
|
||||
|
@ -20,6 +20,12 @@ class StockService extends BaseService
|
||||
return $this->DatabaseService->ExecuteDbQuery($sql)->fetchAll(\PDO::FETCH_OBJ);
|
||||
}
|
||||
|
||||
public function GetCurrentStockLocationContent()
|
||||
{
|
||||
$sql = 'SELECT * FROM stock_current_location_content';
|
||||
return $this->DatabaseService->ExecuteDbQuery($sql)->fetchAll(\PDO::FETCH_OBJ);
|
||||
}
|
||||
|
||||
public function GetCurrentStockLocations()
|
||||
{
|
||||
$sql = 'SELECT * FROM stock_current_locations';
|
||||
|
56
views/locationcontentsheet.blade.php
Normal file
56
views/locationcontentsheet.blade.php
Normal file
@ -0,0 +1,56 @@
|
||||
@extends('layout.default')
|
||||
|
||||
@section('title', $__t('Location Content Sheet'))
|
||||
|
||||
@push('pageStyles')
|
||||
<style>
|
||||
@media print
|
||||
{
|
||||
.page {
|
||||
page-break-after: always !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<h1 class="d-print-none">
|
||||
<a class="btn btn-outline-dark responsive-button" href="javascript:window.print();">
|
||||
<i class="fas fa-print"></i> {{ $__t('Print') }}
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
@foreach($locations as $location)
|
||||
<div class="page">
|
||||
<h1>{{ $location->name }}</h1>
|
||||
@php $currentStockEntriesForLocation = FindAllObjectsInArrayByPropertyValue($currentStockLocationContent, 'location_id', $location->id); @endphp
|
||||
<div class="row w-50">
|
||||
<div class="col">
|
||||
<table class="table table-sm table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ $__t('Product') }}</th>
|
||||
<th>{{ $__t('Amount') }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($currentStockEntriesForLocation as $currentStockEntry)
|
||||
<tr>
|
||||
<td>
|
||||
{{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }}
|
||||
</td>
|
||||
<td>
|
||||
<span>{{ $currentStockEntry->amount }}</span> <span id="product-{{ $currentStockEntry->product_id }}-qu-name">{{ $__n($currentStockEntry->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name_plural) }}</span>
|
||||
<span class="small font-italic">@if($currentStockEntry->amount_opened > 0){{ $__t('%s opened', $currentStockEntry->amount_opened) }}@endif</span>
|
||||
</td>
|
||||
<td class="fit-content">____________________</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@stop
|
Loading…
x
Reference in New Issue
Block a user