From 66095738e356c66c038bb89e493ed44f7b991e6e Mon Sep 17 00:00:00 2001 From: Bernd Bestel Date: Mon, 24 Sep 2018 13:02:52 +0200 Subject: [PATCH] Added product groups (this closes #55) --- controllers/StockController.php | 32 +++++++++++++- grocy.openapi.json | 3 +- localization/de.php | 14 +++++- migrations/0037.sql | 9 ++++ public/viewjs/productgroupform.js | 55 ++++++++++++++++++++++++ public/viewjs/productgroups.js | 62 +++++++++++++++++++++++++++ public/viewjs/shoppinglist.js | 7 ++- routes.php | 2 + services/DemoDataGeneratorService.php | 51 ++++++++++++---------- views/layout/default.blade.php | 6 +++ views/productform.blade.php | 10 +++++ views/productgroupform.blade.php | 40 +++++++++++++++++ views/productgroups.blade.php | 59 +++++++++++++++++++++++++ views/products.blade.php | 4 +- views/shoppinglist.blade.php | 14 ++++++ 15 files changed, 339 insertions(+), 29 deletions(-) create mode 100644 migrations/0037.sql create mode 100644 public/viewjs/productgroupform.js create mode 100644 public/viewjs/productgroups.js create mode 100644 views/productgroupform.blade.php create mode 100644 views/productgroups.blade.php diff --git a/controllers/StockController.php b/controllers/StockController.php index 18bba451..9fb222fd 100644 --- a/controllers/StockController.php +++ b/controllers/StockController.php @@ -54,7 +54,8 @@ class StockController extends BaseController 'listItems' => $this->Database->shopping_list(), 'products' => $this->Database->products()->orderBy('name'), 'quantityunits' => $this->Database->quantity_units()->orderBy('name'), - 'missingProducts' => $this->StockService->GetMissingProducts() + 'missingProducts' => $this->StockService->GetMissingProducts(), + 'productGroups' => $this->Database->product_groups()->orderBy('name') ]); } @@ -63,7 +64,8 @@ class StockController extends BaseController return $this->AppContainer->view->render($response, 'products', [ 'products' => $this->Database->products()->orderBy('name'), 'locations' => $this->Database->locations()->orderBy('name'), - 'quantityunits' => $this->Database->quantity_units()->orderBy('name') + 'quantityunits' => $this->Database->quantity_units()->orderBy('name'), + 'productGroups' => $this->Database->product_groups()->orderBy('name') ]); } @@ -74,6 +76,13 @@ class StockController extends BaseController ]); } + public function ProductGroupsList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) + { + return $this->AppContainer->view->render($response, 'productgroups', [ + 'productGroups' => $this->Database->product_groups()->orderBy('name') + ]); + } + public function QuantityUnitsList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) { return $this->AppContainer->view->render($response, 'quantityunits', [ @@ -88,6 +97,7 @@ class StockController extends BaseController return $this->AppContainer->view->render($response, 'productform', [ 'locations' => $this->Database->locations()->orderBy('name'), 'quantityunits' => $this->Database->quantity_units()->orderBy('name'), + 'productgroups' => $this->Database->product_groups()->orderBy('name'), 'mode' => 'create' ]); } @@ -97,6 +107,7 @@ class StockController extends BaseController 'product' => $this->Database->products($args['productId']), 'locations' => $this->Database->locations()->orderBy('name'), 'quantityunits' => $this->Database->quantity_units()->orderBy('name'), + 'productgroups' => $this->Database->product_groups()->orderBy('name'), 'mode' => 'edit' ]); } @@ -119,6 +130,23 @@ class StockController extends BaseController } } + public function ProductGroupEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) + { + if ($args['productGroupId'] == 'new') + { + return $this->AppContainer->view->render($response, 'productgroupform', [ + 'mode' => 'create' + ]); + } + else + { + return $this->AppContainer->view->render($response, 'productgroupform', [ + 'group' => $this->Database->product_groups($args['productGroupId']), + 'mode' => 'edit' + ]); + } + } + public function QuantityUnitEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) { if ($args['quantityunitId'] == 'new') diff --git a/grocy.openapi.json b/grocy.openapi.json index 7053969e..1566a031 100644 --- a/grocy.openapi.json +++ b/grocy.openapi.json @@ -1367,7 +1367,8 @@ "recipes", "recipes_pos", "tasks", - "task_categories" + "task_categories", + "product_groups" ] }, "StockTransactionType": { diff --git a/localization/de.php b/localization/de.php index d64d1248..bc91331d 100644 --- a/localization/de.php +++ b/localization/de.php @@ -235,6 +235,12 @@ return array( '#1 tasks are overdue to be done' => '#1 Aufgaben sind überfällig', 'Edit task category' => 'Aufgabenkategorie bearbeiten', 'Create task category' => 'Aufgabenkategorie erstellen', + 'Product groups' => 'Produktgruppen', + 'Ungrouped' => 'Ungruppiert', + 'Create product group' => 'Produktgruppe erstellen', + 'Edit product group' => 'Produktgruppe bearbeiten', + 'Product group' => 'Produktgruppe', + 'Are you sure to delete product group "#1"?' => 'Produktgruppe "#1" wirklich löschen?', //Constants 'manually' => 'Manuell', @@ -310,5 +316,11 @@ return array( 'Projects' => 'Projekte', 'Repair the garage door' => 'Garagentor reparieren', 'Fork and improve grocy' => 'grocy forken und verbessern', - 'Find a solution for what to do when I forget the door keys' => 'Eine Lösung für "Haustürschlüssel vergessen" finden' + 'Find a solution for what to do when I forget the door keys' => 'Eine Lösung für "Haustürschlüssel vergessen" finden', + 'Sweets' => 'Süßigkeiten', + 'Bakery products' => 'Bäckerei Produkte', + 'Tinned food' => 'Konservern', + 'Butchery products' => 'Metzgerei', + 'Vegetables/Fruits' => 'Obst/Gemüse', + 'Refrigerated products' => 'Kühlregal' ); diff --git a/migrations/0037.sql b/migrations/0037.sql new file mode 100644 index 00000000..c0613cf1 --- /dev/null +++ b/migrations/0037.sql @@ -0,0 +1,9 @@ +ALTER TABLE products +ADD product_group_id INTEGER; + +CREATE TABLE product_groups ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + name TEXT NOT NULL UNIQUE, + description TEXT, + row_created_timestamp DATETIME DEFAULT (datetime('now', 'localtime')) +); diff --git a/public/viewjs/productgroupform.js b/public/viewjs/productgroupform.js new file mode 100644 index 00000000..32181d74 --- /dev/null +++ b/public/viewjs/productgroupform.js @@ -0,0 +1,55 @@ +$('#save-product-group-button').on('click', function(e) +{ + e.preventDefault(); + + if (Grocy.EditMode === 'create') + { + Grocy.Api.Post('add-object/product_groups', $('#product-group-form').serializeJSON(), + function(result) + { + window.location.href = U('/productgroups'); + }, + function(xhr) + { + Grocy.FrontendHelpers.ShowGenericError('Error while saving, probably this item already exists', xhr.response) + } + ); + } + else + { + Grocy.Api.Post('edit-object/product_groups/' + Grocy.EditObjectId, $('#product-group-form').serializeJSON(), + function(result) + { + window.location.href = U('/productgroups'); + }, + function(xhr) + { + Grocy.FrontendHelpers.ShowGenericError('Error while saving, probably this item already exists', xhr.response) + } + ); + } +}); + +$('#product-group-form input').keyup(function (event) +{ + Grocy.FrontendHelpers.ValidateForm('product-group-form'); +}); + +$('#product-group-form input').keydown(function (event) +{ + if (event.keyCode === 13) //Enter + { + if (document.getElementById('product-group-form').checkValidity() === false) //There is at least one validation error + { + event.preventDefault(); + return false; + } + else + { + $('#save-product-group-button').click(); + } + } +}); + +$('#name').focus(); +Grocy.FrontendHelpers.ValidateForm('product-group-form'); diff --git a/public/viewjs/productgroups.js b/public/viewjs/productgroups.js new file mode 100644 index 00000000..0aea0a73 --- /dev/null +++ b/public/viewjs/productgroups.js @@ -0,0 +1,62 @@ +var groupsTable = $('#productgroups-table').DataTable({ + 'paginate': false, + 'order': [[1, 'asc']], + 'columnDefs': [ + { 'orderable': false, 'targets': 0 } + ], + 'language': JSON.parse(L('datatables_localization')), + 'scrollY': false, + 'colReorder': true, + 'stateSave': true, + 'stateSaveParams': function(settings, data) + { + data.search.search = ""; + } +}); + +$("#search").on("keyup", function() +{ + var value = $(this).val(); + if (value === "all") + { + value = ""; + } + + groupsTable.search(value).draw(); +}); + +$(document).on('click', '.product-group-delete-button', function(e) +{ + var objectName = $(e.currentTarget).attr('data-group-name'); + var objectId = $(e.currentTarget).attr('data-group-id'); + + bootbox.confirm({ + message: L('Are you sure to delete product group "#1"?', objectName), + buttons: { + confirm: { + label: L('Yes'), + className: 'btn-success' + }, + cancel: { + label: L('No'), + className: 'btn-danger' + } + }, + callback: function(result) + { + if (result === true) + { + Grocy.Api.Get('delete-object/product_groups/' + objectId, + function(result) + { + window.location.href = U('/productgroups'); + }, + function(xhr) + { + console.error(xhr); + } + ); + } + } + }); +}); diff --git a/public/viewjs/shoppinglist.js b/public/viewjs/shoppinglist.js index ad2877f8..05839692 100644 --- a/public/viewjs/shoppinglist.js +++ b/public/viewjs/shoppinglist.js @@ -1,8 +1,10 @@ var shoppingListTable = $('#shoppinglist-table').DataTable({ 'paginate': false, 'order': [[1, 'asc']], + "orderFixed": [[3, 'asc']], 'columnDefs': [ - { 'orderable': false, 'targets': 0 } + { 'orderable': false, 'targets': 0 }, + { 'visible': false, 'targets': 3 } ], 'language': JSON.parse(L('datatables_localization')), 'scrollY': false, @@ -11,6 +13,9 @@ 'stateSaveParams': function(settings, data) { data.search.search = ""; + }, + 'rowGroup': { + dataSrc: 3 } }); diff --git a/routes.php b/routes.php index 3e88129b..fe6c3ddb 100644 --- a/routes.php +++ b/routes.php @@ -30,6 +30,8 @@ $app->group('', function() $this->get('/location/{locationId}', '\Grocy\Controllers\StockController:LocationEditForm'); $this->get('/quantityunits', '\Grocy\Controllers\StockController:QuantityUnitsList'); $this->get('/quantityunit/{quantityunitId}', '\Grocy\Controllers\StockController:QuantityUnitEditForm'); + $this->get('/productgroups', '\Grocy\Controllers\StockController:ProductGroupsList'); + $this->get('/productgroup/{productGroupId}', '\Grocy\Controllers\StockController:ProductGroupEditForm'); $this->get('/shoppinglist', '\Grocy\Controllers\StockController:ShoppingList'); $this->get('/shoppinglistitem/{itemId}', '\Grocy\Controllers\StockController:ShoppingListItemEditForm'); diff --git a/services/DemoDataGeneratorService.php b/services/DemoDataGeneratorService.php index 59328f18..718affea 100644 --- a/services/DemoDataGeneratorService.php +++ b/services/DemoDataGeneratorService.php @@ -31,29 +31,36 @@ class DemoDataGeneratorService extends BaseService INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->Localize('Bunch')}', '{$localizationService->Localize('Bunches')}'); --7 INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->Localize('Gram')}', '{$localizationService->Localize('Grams')}'); --8 + INSERT INTO product_groups(name) VALUES ('01 {$localizationService->Localize('Sweets')}'); --1 + INSERT INTO product_groups(name) VALUES ('02 {$localizationService->Localize('Bakery products')}'); --2 + INSERT INTO product_groups(name) VALUES ('03 {$localizationService->Localize('Tinned food')}'); --3 + INSERT INTO product_groups(name) VALUES ('04 {$localizationService->Localize('Butchery products')}'); --4 + INSERT INTO product_groups(name) VALUES ('05 {$localizationService->Localize('Vegetables/Fruits')}'); --5 + INSERT INTO product_groups(name) VALUES ('06 {$localizationService->Localize('Refrigerated products')}'); --6 + DELETE FROM sqlite_sequence WHERE name = 'products'; --Just to keep IDs in order as mentioned here... - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount) VALUES ('{$localizationService->Localize('Cookies')}', 3, 3, 3, 1, 8); --1 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount) VALUES ('{$localizationService->Localize('Chocolate')}', 3, 3, 3, 1, 8); --2 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount) VALUES ('{$localizationService->Localize('Gummy bears')}', 3, 3, 3, 1, 8); --3 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount) VALUES ('{$localizationService->Localize('Crisps')}', 3, 3, 3, 1, 10); --4 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Eggs')}', 2, 3, 2, 10); --5 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Noodles')}', 3, 3, 3, 1); --6 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Pickles')}', 4,4, 4, 1); --7 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Gulash soup')}', 4, 5, 5, 1); --8 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Yogurt')}', 2, 6, 6, 1); --9 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Cheese')}', 2, 3, 3, 1); --10 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Cold cuts')}', 2, 3, 3, 1); --11 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Paprika')}', 2, 2, 2, 1); --12 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Cucumber')}', 2, 2, 2, 1); --13 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Radish')}', 2, 7, 7, 1); --14 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Tomato')}', 2, 2, 2, 1); --15 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Pizza dough')}', 3, 3, 3, 1); --16 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Sieved tomatoes')}', 4, 5, 5, 1); --17 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Salami')}', 2, 3, 3, 1); --18 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Toast')}', 4, 5, 5, 1); --19 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Minced meat')}', 2, 3, 3, 1); --20 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Flour')}', 2, 3, 3, 1); --21 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock) VALUES ('{$localizationService->Localize('Sugar')}', 3, 3, 3, 1); --22 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$localizationService->Localize('Cookies')}', 3, 3, 3, 1, 8, 1); --1 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$localizationService->Localize('Chocolate')}', 3, 3, 3, 1, 8, 1); --2 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$localizationService->Localize('Gummy bears')}', 3, 3, 3, 1, 8, 1); --3 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$localizationService->Localize('Crisps')}', 3, 3, 3, 1, 10, 1); --4 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Eggs')}', 2, 3, 2, 10, 5); --5 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Noodles')}', 3, 3, 3, 1, 6); --6 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Pickles')}', 4,4, 4, 1, 3); --7 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Gulash soup')}', 4, 5, 5, 1, 3); --8 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Yogurt')}', 2, 6, 6, 1, 6); --9 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Cheese')}', 2, 3, 3, 1, 6); --10 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Cold cuts')}', 2, 3, 3, 1, 6); --11 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Paprika')}', 2, 2, 2, 1, 5); --12 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Cucumber')}', 2, 2, 2, 1, 5); --13 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Radish')}', 2, 7, 7, 1, 5); --14 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Tomato')}', 2, 2, 2, 1, 5); --15 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Pizza dough')}', 3, 3, 3, 1, 6); --16 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Sieved tomatoes')}', 4, 5, 5, 1, 3); --17 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Salami')}', 2, 3, 3, 1, 6); --18 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Toast')}', 4, 5, 5, 1, 2); --19 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Minced meat')}', 2, 3, 3, 1, 4); --20 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Flour')}', 2, 3, 3, 1, 3); --21 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->Localize('Sugar')}', 3, 3, 3, 1, 3); --22 INSERT INTO shopping_list (note, amount) VALUES ('{$localizationService->Localize('Some good snacks')}', 1); INSERT INTO shopping_list (product_id, amount) VALUES (20, 1); diff --git a/views/layout/default.blade.php b/views/layout/default.blade.php index 6a90591e..9c7df66c 100644 --- a/views/layout/default.blade.php +++ b/views/layout/default.blade.php @@ -146,6 +146,12 @@ {{ $L('Quantity units') }} +
  • + + + {{ $L('Product groups') }} + +
  • diff --git a/views/productform.blade.php b/views/productform.blade.php index 811acfe6..9aa34a38 100644 --- a/views/productform.blade.php +++ b/views/productform.blade.php @@ -67,6 +67,16 @@ 'hint' => $L('For purchases this amount of days will be added to today for the best before date suggestion') . ' (' . $L('-1 means that this product never expires') . ')' )) +
    + + +
    +
    +
    {{ $L('A name is required') }}
    +
    + +
    + + +
    + + + + + + +@stop diff --git a/views/productgroups.blade.php b/views/productgroups.blade.php new file mode 100644 index 00000000..b0b1da9f --- /dev/null +++ b/views/productgroups.blade.php @@ -0,0 +1,59 @@ +@extends('layout.default') + +@section('title', $L('Product groups')) +@section('activeNav', 'productgroups') +@section('viewJsName', 'productgroups') + +@section('content') +
    + +
    +
    + + +
    +
    + +
    +
    + + + + + + + + + + @foreach($productGroups as $productGroup) + + + + + + @endforeach + +
    #{{ $L('Name') }}{{ $L('Description') }}
    + + + + + + + + {{ $productGroup->name }} + + {{ $productGroup->description }} +
    +
    +
    +@stop diff --git a/views/products.blade.php b/views/products.blade.php index 34f69fa1..8d4b9342 100644 --- a/views/products.blade.php +++ b/views/products.blade.php @@ -35,7 +35,7 @@ {{ $L('QU purchase') }} {{ $L('QU stock') }} {{ $L('QU factor') }} - {{ $L('Description') }} + {{ $L('Product group') }} @@ -68,7 +68,7 @@ {{ $product->qu_factor_purchase_to_stock }} - {{ $product->description }} + @if(!empty($product->product_group_id)) {{ FindObjectInArrayByPropertyValue($productGroups, 'id', $product->product_group_id)->name }} @endif @endforeach diff --git a/views/shoppinglist.blade.php b/views/shoppinglist.blade.php index 0321d69e..7753ff75 100644 --- a/views/shoppinglist.blade.php +++ b/views/shoppinglist.blade.php @@ -4,6 +4,16 @@ @section('activeNav', 'shoppinglist') @section('viewJsName', 'shoppinglist') +@push('pageScripts') + + + +@endpush + +@push('pageStyles') + +@endpush + @section('content')
    @@ -34,6 +44,7 @@ # {{ $L('Product') }} / {{ $L('Note') }} {{ $L('Amount') }} + Hiden product group @@ -53,6 +64,9 @@ {{ $listItem->amount + $listItem->amount_autoadded }} @if(!empty($listItem->product_id)){{ Pluralize($listItem->amount + $listItem->amount_autoadded, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name_plural) }}@endif + + @if(!empty(FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->product_group_id)) {{ FindObjectInArrayByPropertyValue($productGroups, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->product_group_id)->name }} @else {{ $L('Ungrouped') }} @endif + @endforeach