diff --git a/composer.lock b/composer.lock
index 8c8a809b..c8704d8b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,7 +1,7 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "c1bc4c17739e9d0ee8b33628f6d4b9a4",
@@ -159,28 +159,28 @@
},
{
"name": "illuminate/container",
- "version": "v5.7.11",
+ "version": "v5.8.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/container.git",
- "reference": "4c90c3d3ba88e52da152e885d24c9f891a2ec545"
+ "reference": "2b390ea16656162a7c1a5f2ad547b4de917324bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/container/zipball/4c90c3d3ba88e52da152e885d24c9f891a2ec545",
- "reference": "4c90c3d3ba88e52da152e885d24c9f891a2ec545",
+ "url": "https://api.github.com/repos/illuminate/container/zipball/2b390ea16656162a7c1a5f2ad547b4de917324bf",
+ "reference": "2b390ea16656162a7c1a5f2ad547b4de917324bf",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.7.*",
- "illuminate/support": "5.7.*",
+ "illuminate/contracts": "5.8.*",
+ "illuminate/support": "5.8.*",
"php": "^7.1.3",
"psr/container": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.7-dev"
+ "dev-master": "5.8-dev"
}
},
"autoload": {
@@ -200,20 +200,20 @@
],
"description": "The Illuminate Container package.",
"homepage": "https://laravel.com",
- "time": "2018-10-18T03:39:45+00:00"
+ "time": "2019-02-23T13:57:12+00:00"
},
{
"name": "illuminate/contracts",
- "version": "v5.7.11",
+ "version": "v5.8.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/contracts.git",
- "reference": "64df81d3382d876f1c1d3d5481d89c93b61b8279"
+ "reference": "3e3a9a654adbf798e05491a5dbf90112df1effde"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/contracts/zipball/64df81d3382d876f1c1d3d5481d89c93b61b8279",
- "reference": "64df81d3382d876f1c1d3d5481d89c93b61b8279",
+ "url": "https://api.github.com/repos/illuminate/contracts/zipball/3e3a9a654adbf798e05491a5dbf90112df1effde",
+ "reference": "3e3a9a654adbf798e05491a5dbf90112df1effde",
"shasum": ""
},
"require": {
@@ -224,7 +224,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.7-dev"
+ "dev-master": "5.8-dev"
}
},
"autoload": {
@@ -244,32 +244,32 @@
],
"description": "The Illuminate Contracts package.",
"homepage": "https://laravel.com",
- "time": "2018-10-08T13:34:14+00:00"
+ "time": "2019-02-18T18:37:54+00:00"
},
{
"name": "illuminate/events",
- "version": "v5.7.11",
+ "version": "v5.8.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/events.git",
- "reference": "a8e5e3d601ad7f3571428176a578ddf03ce649d8"
+ "reference": "a85d7c273bc4e3357000c5fc4812374598515de3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/events/zipball/a8e5e3d601ad7f3571428176a578ddf03ce649d8",
- "reference": "a8e5e3d601ad7f3571428176a578ddf03ce649d8",
+ "url": "https://api.github.com/repos/illuminate/events/zipball/a85d7c273bc4e3357000c5fc4812374598515de3",
+ "reference": "a85d7c273bc4e3357000c5fc4812374598515de3",
"shasum": ""
},
"require": {
- "illuminate/container": "5.7.*",
- "illuminate/contracts": "5.7.*",
- "illuminate/support": "5.7.*",
+ "illuminate/container": "5.8.*",
+ "illuminate/contracts": "5.8.*",
+ "illuminate/support": "5.8.*",
"php": "^7.1.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.7-dev"
+ "dev-master": "5.8-dev"
}
},
"autoload": {
@@ -289,27 +289,27 @@
],
"description": "The Illuminate Events package.",
"homepage": "https://laravel.com",
- "time": "2018-10-06T18:48:42+00:00"
+ "time": "2019-02-18T18:37:54+00:00"
},
{
"name": "illuminate/filesystem",
- "version": "v5.7.11",
+ "version": "v5.8.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/filesystem.git",
- "reference": "cbb5650be36d7370f7ae5f039d2143952fa58f51"
+ "reference": "8aef3ed5028eea80fa20287b776d6ec8e7eafbba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/filesystem/zipball/cbb5650be36d7370f7ae5f039d2143952fa58f51",
- "reference": "cbb5650be36d7370f7ae5f039d2143952fa58f51",
+ "url": "https://api.github.com/repos/illuminate/filesystem/zipball/8aef3ed5028eea80fa20287b776d6ec8e7eafbba",
+ "reference": "8aef3ed5028eea80fa20287b776d6ec8e7eafbba",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.7.*",
- "illuminate/support": "5.7.*",
+ "illuminate/contracts": "5.8.*",
+ "illuminate/support": "5.8.*",
"php": "^7.1.3",
- "symfony/finder": "^4.1"
+ "symfony/finder": "^4.2"
},
"suggest": {
"league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.0).",
@@ -321,7 +321,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.7-dev"
+ "dev-master": "5.8-dev"
}
},
"autoload": {
@@ -341,43 +341,45 @@
],
"description": "The Illuminate Filesystem package.",
"homepage": "https://laravel.com",
- "time": "2018-10-24T12:49:16+00:00"
+ "time": "2019-02-18T18:37:54+00:00"
},
{
"name": "illuminate/support",
- "version": "v5.7.11",
+ "version": "v5.8.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/support.git",
- "reference": "45bfc0cd080c51946f61c04e324c2b4c6df58a9d"
+ "reference": "013cfab5d44c530b56d70cc9ccb891c8b25ebbce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/support/zipball/45bfc0cd080c51946f61c04e324c2b4c6df58a9d",
- "reference": "45bfc0cd080c51946f61c04e324c2b4c6df58a9d",
+ "url": "https://api.github.com/repos/illuminate/support/zipball/013cfab5d44c530b56d70cc9ccb891c8b25ebbce",
+ "reference": "013cfab5d44c530b56d70cc9ccb891c8b25ebbce",
"shasum": ""
},
"require": {
"doctrine/inflector": "^1.1",
+ "ext-json": "*",
"ext-mbstring": "*",
- "illuminate/contracts": "5.7.*",
- "nesbot/carbon": "^1.26.3",
+ "illuminate/contracts": "5.8.*",
+ "nesbot/carbon": "^1.26.3 || ^2.0",
"php": "^7.1.3"
},
"conflict": {
"tightenco/collect": "<5.5.33"
},
"suggest": {
- "illuminate/filesystem": "Required to use the composer class (5.7.*).",
+ "illuminate/filesystem": "Required to use the composer class (5.8.*).",
"moontoast/math": "Required to use ordered UUIDs (^1.1).",
"ramsey/uuid": "Required to use Str::uuid() (^3.7).",
- "symfony/process": "Required to use the composer class (^4.1).",
- "symfony/var-dumper": "Required to use the dd function (^4.1)."
+ "symfony/process": "Required to use the composer class (^4.2).",
+ "symfony/var-dumper": "Required to use the dd function (^4.2).",
+ "vlucas/phpdotenv": "Required to use the env helper (^3.3)."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.7-dev"
+ "dev-master": "5.8-dev"
}
},
"autoload": {
@@ -400,35 +402,36 @@
],
"description": "The Illuminate Support package.",
"homepage": "https://laravel.com",
- "time": "2018-10-22T17:36:06+00:00"
+ "time": "2019-02-27T14:00:44+00:00"
},
{
"name": "illuminate/view",
- "version": "v5.7.11",
+ "version": "v5.8.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/view.git",
- "reference": "97dbb6910aa5df5a7414877da89b7520f4260a58"
+ "reference": "33818dc7b783f3afbeea9b0b09455c8cc89aa899"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/illuminate/view/zipball/97dbb6910aa5df5a7414877da89b7520f4260a58",
- "reference": "97dbb6910aa5df5a7414877da89b7520f4260a58",
+ "url": "https://api.github.com/repos/illuminate/view/zipball/33818dc7b783f3afbeea9b0b09455c8cc89aa899",
+ "reference": "33818dc7b783f3afbeea9b0b09455c8cc89aa899",
"shasum": ""
},
"require": {
- "illuminate/container": "5.7.*",
- "illuminate/contracts": "5.7.*",
- "illuminate/events": "5.7.*",
- "illuminate/filesystem": "5.7.*",
- "illuminate/support": "5.7.*",
+ "ext-json": "*",
+ "illuminate/container": "5.8.*",
+ "illuminate/contracts": "5.8.*",
+ "illuminate/events": "5.8.*",
+ "illuminate/filesystem": "5.8.*",
+ "illuminate/support": "5.8.*",
"php": "^7.1.3",
- "symfony/debug": "^4.1"
+ "symfony/debug": "^4.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.7-dev"
+ "dev-master": "5.8-dev"
}
},
"autoload": {
@@ -448,7 +451,7 @@
],
"description": "The Illuminate View package.",
"homepage": "https://laravel.com",
- "time": "2018-10-11T15:32:19+00:00"
+ "time": "2019-02-27T12:03:43+00:00"
},
{
"name": "morris/lessql",
@@ -555,28 +558,30 @@
},
{
"name": "nesbot/carbon",
- "version": "1.36.1",
+ "version": "2.14.2",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983"
+ "reference": "a1f4f9abcde8241ce33bf5090896e9c16d0b4232"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
- "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a1f4f9abcde8241ce33bf5090896e9c16d0b4232",
+ "reference": "a1f4f9abcde8241ce33bf5090896e9c16d0b4232",
"shasum": ""
},
"require": {
- "php": ">=5.3.9",
- "symfony/translation": "~2.6 || ~3.0 || ~4.0"
+ "ext-json": "*",
+ "php": "^7.1.8 || ^8.0",
+ "symfony/translation": "^3.4 || ^4.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7"
- },
- "suggest": {
- "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.",
- "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors."
+ "friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
+ "kylekatarnls/multi-tester": "^0.1",
+ "phpmd/phpmd": "^2.6",
+ "phpstan/phpstan": "^0.10.8",
+ "phpunit/phpunit": "^7.5 || ^8.0",
+ "squizlabs/php_codesniffer": "^3.4"
},
"type": "library",
"extra": {
@@ -588,7 +593,7 @@
},
"autoload": {
"psr-4": {
- "": "src/"
+ "Carbon\\": "src/Carbon/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -609,7 +614,7 @@
"datetime",
"time"
],
- "time": "2018-11-22T18:23:02+00:00"
+ "time": "2019-02-28T09:07:12+00:00"
},
{
"name": "nikic/fast-route",
@@ -902,16 +907,16 @@
},
{
"name": "psr/http-server-middleware",
- "version": "1.0.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-server-middleware.git",
- "reference": "ea17eb1fb2c8df6db919cc578451a8013c6a0ae5"
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/ea17eb1fb2c8df6db919cc578451a8013c6a0ae5",
- "reference": "ea17eb1fb2c8df6db919cc578451a8013c6a0ae5",
+ "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5",
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5",
"shasum": ""
},
"require": {
@@ -951,7 +956,7 @@
"request",
"response"
],
- "time": "2018-01-22T17:08:31+00:00"
+ "time": "2018-10-30T17:12:04+00:00"
},
{
"name": "psr/log",
@@ -1100,16 +1105,16 @@
},
{
"name": "slim/slim",
- "version": "3.11.0",
+ "version": "3.12.0",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim.git",
- "reference": "d378e70431e78ee92ee32ddde61ecc72edf5dc0a"
+ "reference": "f4947cc900b6e51cbfda58b9f1247bca2f76f9f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/Slim/zipball/d378e70431e78ee92ee32ddde61ecc72edf5dc0a",
- "reference": "d378e70431e78ee92ee32ddde61ecc72edf5dc0a",
+ "url": "https://api.github.com/repos/slimphp/Slim/zipball/f4947cc900b6e51cbfda58b9f1247bca2f76f9f0",
+ "reference": "f4947cc900b6e51cbfda58b9f1247bca2f76f9f0",
"shasum": ""
},
"require": {
@@ -1167,20 +1172,88 @@
"micro",
"router"
],
- "time": "2018-09-16T10:54:21+00:00"
+ "time": "2019-01-15T13:21:25+00:00"
},
{
- "name": "symfony/debug",
- "version": "v4.1.7",
+ "name": "symfony/contracts",
+ "version": "v1.0.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/debug.git",
- "reference": "19090917b848a799cbae4800abf740fe4eb71c1d"
+ "url": "https://github.com/symfony/contracts.git",
+ "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/19090917b848a799cbae4800abf740fe4eb71c1d",
- "reference": "19090917b848a799cbae4800abf740fe4eb71c1d",
+ "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf",
+ "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3"
+ },
+ "require-dev": {
+ "psr/cache": "^1.0",
+ "psr/container": "^1.0"
+ },
+ "suggest": {
+ "psr/cache": "When using the Cache contracts",
+ "psr/container": "When using the Service contracts",
+ "symfony/cache-contracts-implementation": "",
+ "symfony/service-contracts-implementation": "",
+ "symfony/translation-contracts-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\": ""
+ },
+ "exclude-from-classmap": [
+ "**/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A set of abstractions extracted out of the Symfony components",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "time": "2018-12-05T08:06:11+00:00"
+ },
+ {
+ "name": "symfony/debug",
+ "version": "v4.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/debug.git",
+ "reference": "de73f48977b8eaf7ce22814d66e43a1662cc864f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/de73f48977b8eaf7ce22814d66e43a1662cc864f",
+ "reference": "de73f48977b8eaf7ce22814d66e43a1662cc864f",
"shasum": ""
},
"require": {
@@ -1196,7 +1269,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.1-dev"
+ "dev-master": "4.2-dev"
}
},
"autoload": {
@@ -1223,20 +1296,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2018-10-31T09:09:42+00:00"
+ "time": "2019-03-03T18:11:24+00:00"
},
{
"name": "symfony/finder",
- "version": "v4.1.7",
+ "version": "v4.2.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "1f17195b44543017a9c9b2d437c670627e96ad06"
+ "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06",
- "reference": "1f17195b44543017a9c9b2d437c670627e96ad06",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/267b7002c1b70ea80db0833c3afe05f0fbde580a",
+ "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a",
"shasum": ""
},
"require": {
@@ -1245,7 +1318,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.1-dev"
+ "dev-master": "4.2-dev"
}
},
"autoload": {
@@ -1272,7 +1345,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2018-10-03T08:47:56+00:00"
+ "time": "2019-02-23T15:42:05+00:00"
},
{
"name": "symfony/polyfill-mbstring",
@@ -1335,20 +1408,21 @@
},
{
"name": "symfony/translation",
- "version": "v4.1.7",
+ "version": "v4.2.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c"
+ "reference": "748464177a77011f8f4cdd076773862ce4915f8f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c",
- "reference": "aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/748464177a77011f8f4cdd076773862ce4915f8f",
+ "reference": "748464177a77011f8f4cdd076773862ce4915f8f",
"shasum": ""
},
"require": {
"php": "^7.1.3",
+ "symfony/contracts": "^1.0.2",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
@@ -1356,6 +1430,9 @@
"symfony/dependency-injection": "<3.4",
"symfony/yaml": "<3.4"
},
+ "provide": {
+ "symfony/translation-contracts-implementation": "1.0"
+ },
"require-dev": {
"psr/log": "~1.0",
"symfony/config": "~3.4|~4.0",
@@ -1373,7 +1450,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.1-dev"
+ "dev-master": "4.2-dev"
}
},
"autoload": {
@@ -1400,7 +1477,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2018-10-28T18:38:52+00:00"
+ "time": "2019-02-27T03:31:50+00:00"
},
{
"name": "tuupola/callable-handler",
diff --git a/grocy.openapi.json b/grocy.openapi.json
index 75e2a2d9..164db3e4 100644
--- a/grocy.openapi.json
+++ b/grocy.openapi.json
@@ -2052,6 +2052,9 @@
"last_price": {
"type": "number",
"format": "double"
+ },
+ "location": {
+ "$ref": "#/components/schemas/Location"
}
}
},
diff --git a/localization/en/strings.php b/localization/en/strings.php
index a751f9c6..a4402e71 100644
--- a/localization/en/strings.php
+++ b/localization/en/strings.php
@@ -259,7 +259,6 @@ return array(
'Product picture' => 'Product picture',
'No file selected' => 'No file selected',
'If you don\'t select a file, the current picture will not be altered' => 'If you don\'t select a file, the current picture will not be altered',
- 'Current picture' => 'Current picture',
'Delete' => 'Delete',
'The current picture will be deleted when you save the product' => 'The current picture will be deleted when you save the product',
'Select file' => 'Select file',
@@ -273,7 +272,6 @@ return array(
'Edit equipment' => 'Edit equipment',
'Create equipment' => 'Create equipment',
'If you don\'t select a file, the current instruction manual will not be altered' => 'If you don\'t select a file, the current instruction manual will not be altered',
- 'Current instruction manual' => 'Current instruction manual',
'No instruction manual available' => 'No instruction manual available',
'The current instruction manual will be deleted when you save the equipment' => 'The current instruction manual will be deleted when you save the equipment',
'No picture available' => 'No picture available',
diff --git a/package.json b/package.json
index 4a8d3d7c..15754d1c 100644
--- a/package.json
+++ b/package.json
@@ -3,32 +3,32 @@
"private": true,
"dependencies": {
"@danielfarrell/bootstrap-combobox": "https://github.com/berrnd/bootstrap-combobox.git#master",
- "@fortawesome/fontawesome-free": "^5.1.0",
+ "@fortawesome/fontawesome-free": "^5.7.2",
"TagManager": "https://github.com/max-favilli/tagmanager.git#3.0.2",
"bootbox": "https://github.com/makeusabrew/bootbox.git#v5.x",
- "bootstrap": "^4.1.1",
- "chart.js": "^2.7.2",
+ "bootstrap": "^4.3.1",
+ "chart.js": "^2.7.3",
"datatables.net": "^1.10.19",
"datatables.net-bs4": "^1.10.19",
"datatables.net-colreorder": "^1.5.1",
"datatables.net-colreorder-bs4": "^1.5.1",
"datatables.net-responsive": "^2.2.3",
"datatables.net-responsive-bs4": "^2.2.3",
- "datatables.net-rowgroup": "^1.0.4",
+ "datatables.net-rowgroup": "^1.1.0",
"datatables.net-rowgroup-bs4": "^1.0.4",
"datatables.net-select": "^1.2.7",
"datatables.net-select-bs4": "^1.2.7",
- "fullcalendar": "^3.9.0",
+ "fullcalendar": "^3.10.0",
"jquery": "^3.3.1",
- "jquery-serializejson": "^2.8.1",
+ "jquery-serializejson": "^2.9.0",
"jquery-ui-dist": "^1.12.1",
- "moment": "^2.22.2",
+ "moment": "^2.24.0",
"startbootstrap-sb-admin": "^4.0.0",
- "summernote": "^0.8.10",
- "swagger-ui-dist": "^3.17.3",
+ "summernote": "^0.8.11",
+ "swagger-ui-dist": "^3.21.0",
"tagmanager": "https://github.com/max-favilli/tagmanager.git#3.0.2",
"tempusdominus-bootstrap-4": "https://github.com/berrnd/tempusdominus-bootstrap-4.git#master",
- "timeago": "^1.6.3",
+ "timeago": "^1.6.5",
"toastr": "^2.1.4"
}
}
diff --git a/public/viewjs/batteries.js b/public/viewjs/batteries.js
index 020bfe20..35edccf4 100644
--- a/public/viewjs/batteries.js
+++ b/public/viewjs/batteries.js
@@ -19,6 +19,7 @@
}
});
$('#batteries-table tbody').removeClass("d-none");
+batteriesTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/batteriesjournal.js b/public/viewjs/batteriesjournal.js
index fbfddefb..167578b9 100644
--- a/public/viewjs/batteriesjournal.js
+++ b/public/viewjs/batteriesjournal.js
@@ -19,6 +19,7 @@
}
});
$('#batteries-journal-table tbody').removeClass("d-none");
+batteriesJournalTable.columns.adjust().draw();
$("#battery-filter").on("change", function()
{
diff --git a/public/viewjs/batteriesoverview.js b/public/viewjs/batteriesoverview.js
index 54f30d2c..6ca403b0 100644
--- a/public/viewjs/batteriesoverview.js
+++ b/public/viewjs/batteriesoverview.js
@@ -19,6 +19,7 @@
}
});
$('#batteries-overview-table tbody').removeClass("d-none");
+batteriesOverviewTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/batterytracking.js b/public/viewjs/batterytracking.js
index 002b66d8..6fe88df1 100644
--- a/public/viewjs/batterytracking.js
+++ b/public/viewjs/batterytracking.js
@@ -61,6 +61,7 @@ $('#battery_id').val('');
$('#battery_id_text_input').focus();
$('#battery_id_text_input').val('');
$('#battery_id_text_input').trigger('change');
+Grocy.Components.DateTimePicker.GetInputElement().trigger('input');
Grocy.FrontendHelpers.ValidateForm('batterytracking-form');
$('#batterytracking-form input').keyup(function (event)
diff --git a/public/viewjs/choreform.js b/public/viewjs/choreform.js
index 67860df6..d1298eea 100644
--- a/public/viewjs/choreform.js
+++ b/public/viewjs/choreform.js
@@ -60,6 +60,11 @@ $('#chore-form input').keydown(function(event)
$('#name').focus();
Grocy.FrontendHelpers.ValidateForm('chore-form');
+setTimeout(function()
+{
+ $(".input-group-chore-period-type").trigger("change");
+}, 100);
+
$('.input-group-chore-period-type').on('change', function(e)
{
var periodType = $('#period_type').val();
diff --git a/public/viewjs/chores.js b/public/viewjs/chores.js
index cbf91a0f..2a1e6ca0 100644
--- a/public/viewjs/chores.js
+++ b/public/viewjs/chores.js
@@ -1,4 +1,4 @@
-var choresTable = $('#chores-table').DataTable({
+var choresTable = $('#chores-table').DataTable({
'paginate': false,
'order': [[1, 'asc']],
'columnDefs': [
@@ -19,6 +19,7 @@
}
});
$('#chores-table tbody').removeClass("d-none");
+choresTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/choresjournal.js b/public/viewjs/choresjournal.js
index 257a392a..731ef26d 100644
--- a/public/viewjs/choresjournal.js
+++ b/public/viewjs/choresjournal.js
@@ -19,6 +19,7 @@
}
});
$('#chores-journal-table tbody').removeClass("d-none");
+choresJournalTable.columns.adjust().draw();
$("#chore-filter").on("change", function()
{
diff --git a/public/viewjs/choresoverview.js b/public/viewjs/choresoverview.js
index a48698b8..a71bc599 100644
--- a/public/viewjs/choresoverview.js
+++ b/public/viewjs/choresoverview.js
@@ -19,6 +19,7 @@
}
});
$('#chores-overview-table tbody').removeClass("d-none");
+choresOverviewTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/choretracking.js b/public/viewjs/choretracking.js
index 15b7132d..9776dd58 100644
--- a/public/viewjs/choretracking.js
+++ b/public/viewjs/choretracking.js
@@ -58,9 +58,10 @@ $('.combobox').combobox({
$('#chore_id_text_input').focus();
$('#chore_id_text_input').trigger('change');
+Grocy.Components.DateTimePicker.GetInputElement().trigger('input');
Grocy.FrontendHelpers.ValidateForm('choretracking-form');
-$('#choretracking-form input').keyup(function (event)
+$('#choretracking-form input').keyup(function(event)
{
Grocy.FrontendHelpers.ValidateForm('choretracking-form');
});
diff --git a/public/viewjs/components/locationpicker.js b/public/viewjs/components/locationpicker.js
new file mode 100644
index 00000000..dcb4fdb6
--- /dev/null
+++ b/public/viewjs/components/locationpicker.js
@@ -0,0 +1,68 @@
+Grocy.Components.LocationPicker = { };
+
+Grocy.Components.LocationPicker.GetPicker = function()
+{
+ return $('#location_id');
+}
+
+Grocy.Components.LocationPicker.GetInputElement = function()
+{
+ return $('#location_id_text_input');
+}
+
+Grocy.Components.LocationPicker.GetValue = function()
+{
+ return $('#location_id').val();
+}
+
+Grocy.Components.LocationPicker.SetValue = function(value)
+{
+ Grocy.Components.LocationPicker.GetInputElement().val(value);
+ Grocy.Components.LocationPicker.GetInputElement().trigger('change');
+}
+
+Grocy.Components.LocationPicker.SetId = function(value)
+{
+ Grocy.Components.LocationPicker.GetPicker().val(value);
+ Grocy.Components.LocationPicker.GetPicker().data('combobox').refresh();
+ Grocy.Components.LocationPicker.GetInputElement().trigger('change');
+}
+
+Grocy.Components.LocationPicker.Clear = function()
+{
+ Grocy.Components.LocationPicker.SetValue('');
+ Grocy.Components.LocationPicker.SetId(null);
+}
+
+$('.location-combobox').combobox({
+ appendId: '_text_input',
+ bsVersion: '4',
+ clearIfNoMatch: true
+});
+
+var prefillByName = Grocy.Components.LocationPicker.GetPicker().parent().data('prefill-by-name').toString();
+if (typeof prefillByName !== "undefined")
+{
+ possibleOptionElement = $("#location_id option:contains('" + prefillByName + "')").first();
+
+ if (possibleOptionElement.length > 0)
+ {
+ $('#location_id').val(possibleOptionElement.val());
+ $('#location_id').data('combobox').refresh();
+ $('#location_id').trigger('change');
+
+ var nextInputElement = $(Grocy.Components.LocationPicker.GetPicker().parent().data('next-input-selector').toString());
+ nextInputElement.focus();
+ }
+}
+
+var prefillById = Grocy.Components.LocationPicker.GetPicker().parent().data('prefill-by-id').toString();
+if (typeof prefillById !== "undefined")
+{
+ $('#location_id').val(prefillById);
+ $('#location_id').data('combobox').refresh();
+ $('#location_id').trigger('change');
+
+ var nextInputElement = $(Grocy.Components.LocationPicker.GetPicker().parent().data('next-input-selector').toString());
+ nextInputElement.focus();
+}
diff --git a/public/viewjs/components/productpicker.js b/public/viewjs/components/productpicker.js
index 2323c1e9..5e451c1d 100644
--- a/public/viewjs/components/productpicker.js
+++ b/public/viewjs/components/productpicker.js
@@ -21,6 +21,19 @@ Grocy.Components.ProductPicker.SetValue = function(value)
Grocy.Components.ProductPicker.GetInputElement().trigger('change');
}
+Grocy.Components.ProductPicker.SetId = function(value)
+{
+ Grocy.Components.ProductPicker.GetPicker().val(value);
+ Grocy.Components.ProductPicker.GetPicker().data('combobox').refresh();
+ Grocy.Components.ProductPicker.GetInputElement().trigger('change');
+}
+
+Grocy.Components.ProductPicker.Clear = function()
+{
+ Grocy.Components.ProductPicker.SetValue('');
+ Grocy.Components.ProductPicker.SetId(null);
+}
+
Grocy.Components.ProductPicker.InProductAddWorkflow = function()
{
return typeof GetUriParam('createdproduct') !== "undefined" || typeof GetUriParam('product') !== "undefined";
diff --git a/public/viewjs/components/recipepicker.js b/public/viewjs/components/recipepicker.js
index 296bf0ee..2096f88f 100644
--- a/public/viewjs/components/recipepicker.js
+++ b/public/viewjs/components/recipepicker.js
@@ -21,6 +21,19 @@ Grocy.Components.RecipePicker.SetValue = function(value)
Grocy.Components.RecipePicker.GetInputElement().trigger('change');
}
+Grocy.Components.RecipePicker.SetId = function(value)
+{
+ Grocy.Components.RecipePicker.GetPicker().val(value);
+ Grocy.Components.RecipePicker.GetPicker().data('combobox').refresh();
+ Grocy.Components.RecipePicker.GetInputElement().trigger('change');
+}
+
+Grocy.Components.RecipePicker.Clear = function()
+{
+ Grocy.Components.RecipePicker.SetValue('');
+ Grocy.Components.RecipePicker.SetId(null);
+}
+
$('.recipe-combobox').combobox({
appendId: '_text_input',
bsVersion: '4',
diff --git a/public/viewjs/components/userpicker.js b/public/viewjs/components/userpicker.js
index cca792b1..5fdeb997 100644
--- a/public/viewjs/components/userpicker.js
+++ b/public/viewjs/components/userpicker.js
@@ -21,6 +21,19 @@ Grocy.Components.UserPicker.SetValue = function(value)
Grocy.Components.UserPicker.GetInputElement().trigger('change');
}
+Grocy.Components.UserPicker.SetId = function(value)
+{
+ Grocy.Components.UserPicker.GetPicker().val(value);
+ Grocy.Components.UserPicker.GetPicker().data('combobox').refresh();
+ Grocy.Components.UserPicker.GetInputElement().trigger('change');
+}
+
+Grocy.Components.UserPicker.Clear = function()
+{
+ Grocy.Components.UserPicker.SetValue('');
+ Grocy.Components.UserPicker.SetId(null);
+}
+
$('.user-combobox').combobox({
appendId: '_text_input',
bsVersion: '4'
diff --git a/public/viewjs/consume.js b/public/viewjs/consume.js
index 4491dcd8..ab0c06f6 100644
--- a/public/viewjs/consume.js
+++ b/public/viewjs/consume.js
@@ -42,10 +42,10 @@
toastr.success(L('Removed #1 #2 of #3 from stock', jsonForm.amount, Pluralize(jsonForm.amount, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural), productDetails.product.name) + '
' + L("Undo") + '');
$('#amount').val(1);
- Grocy.Components.ProductPicker.SetValue('');
+ Grocy.Components.ProductPicker.Clear();
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_RECIPES)
{
- Grocy.Components.RecipePicker.SetValue('');
+ Grocy.Components.RecipePicker.Clear();
}
Grocy.Components.ProductPicker.GetInputElement().focus();
Grocy.FrontendHelpers.ValidateForm('consume-form');
@@ -103,7 +103,7 @@ $('#save-mark-as-open-button').on('click', function(e)
toastr.success(L('Marked #1 #2 of #3 as opened', jsonForm.amount, Pluralize(jsonForm.amount, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural), productDetails.product.name) + '
' + L("Undo") + '');
$('#amount').val(1);
- Grocy.Components.ProductPicker.SetValue('');
+ Grocy.Components.ProductPicker.Clear();
Grocy.Components.ProductPicker.GetInputElement().focus();
Grocy.FrontendHelpers.ValidateForm('consume-form');
},
@@ -157,7 +157,7 @@ Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
if ((productDetails.stock_amount || 0) === 0)
{
- Grocy.Components.ProductPicker.SetValue('');
+ Grocy.Components.ProductPicker.Clear();
Grocy.FrontendHelpers.ValidateForm('consume-form');
Grocy.Components.ProductPicker.ShowCustomError(L('This product is not in stock'));
Grocy.Components.ProductPicker.GetInputElement().focus();
diff --git a/public/viewjs/equipment.js b/public/viewjs/equipment.js
index ad181a5e..6cd35d48 100644
--- a/public/viewjs/equipment.js
+++ b/public/viewjs/equipment.js
@@ -22,6 +22,7 @@
}
});
$('#equipment-table tbody').removeClass("d-none");
+equipmentTable.columns.adjust().draw();
equipmentTable.on('select', function(e, dt, type, indexes)
{
diff --git a/public/viewjs/locations.js b/public/viewjs/locations.js
index 4aab7341..99843538 100644
--- a/public/viewjs/locations.js
+++ b/public/viewjs/locations.js
@@ -19,6 +19,7 @@
}
});
$('#locations-table tbody').removeClass("d-none");
+locationsTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/manageapikeys.js b/public/viewjs/manageapikeys.js
index 4adc5457..6a346f38 100644
--- a/public/viewjs/manageapikeys.js
+++ b/public/viewjs/manageapikeys.js
@@ -19,6 +19,7 @@
}
});
$('#apikeys-table tbody').removeClass("d-none");
+apiKeysTable.columns.adjust().draw();
var createdApiKeyId = GetUriParam('CreatedApiKeyId');
if (createdApiKeyId !== undefined)
diff --git a/public/viewjs/productgroups.js b/public/viewjs/productgroups.js
index 02501675..e7501659 100644
--- a/public/viewjs/productgroups.js
+++ b/public/viewjs/productgroups.js
@@ -19,6 +19,7 @@
}
});
$('#productgroups-table tbody').removeClass("d-none");
+groupsTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/products.js b/public/viewjs/products.js
index 48db6ae6..41c32a86 100644
--- a/public/viewjs/products.js
+++ b/public/viewjs/products.js
@@ -19,6 +19,7 @@
}
});
$('#products-table tbody').removeClass("d-none");
+productsTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/purchase.js b/public/viewjs/purchase.js
index 8d30d36c..017bd7ef 100644
--- a/public/viewjs/purchase.js
+++ b/public/viewjs/purchase.js
@@ -20,7 +20,7 @@
jsonData.amount = amount;
jsonData.best_before_date = Grocy.Components.DateTimePicker.GetValue();
jsonData.price = price;
- jsonData.location_id = jsonForm.location_id;
+ jsonData.location_id = Grocy.Components.LocationPicker.GetValue();
Grocy.Api.Post('stock/products/' + jsonForm.product_id + '/add', jsonData,
function(result)
@@ -66,7 +66,7 @@
toastr.success(successMessage);
$('#amount').val(0);
$('#price').val('');
- $('#location_id').val('');
+ Grocy.Components.LocationPicker.Clear();
Grocy.Components.DateTimePicker.Clear();
Grocy.Components.ProductPicker.SetValue('');
Grocy.Components.ProductPicker.GetInputElement().focus();
@@ -101,7 +101,7 @@ Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
{
$('#amount_qu_unit').text(productDetails.quantity_unit_purchase.name);
$('#price').val(productDetails.last_price);
- $('#location_id').val(productDetails.product.location_id);
+ Grocy.Components.LocationPicker.SetId(productDetails.location.id);
if (productDetails.product.allow_partial_units_in_stock == 1)
{
diff --git a/public/viewjs/quantityunits.js b/public/viewjs/quantityunits.js
index 8e49829a..846f097a 100644
--- a/public/viewjs/quantityunits.js
+++ b/public/viewjs/quantityunits.js
@@ -19,6 +19,7 @@
}
});
$('#quantityunits-table tbody').removeClass("d-none");
+quantityUnitsTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/recipeform.js b/public/viewjs/recipeform.js
index 2460c817..4eea4642 100644
--- a/public/viewjs/recipeform.js
+++ b/public/viewjs/recipeform.js
@@ -84,6 +84,7 @@ var recipesPosTables = $('#recipes-pos-table').DataTable({
}
});
$('#recipes-pos-table tbody').removeClass("d-none");
+recipesPosTables.columns.adjust().draw();
var recipesIncludesTables = $('#recipes-includes-table').DataTable({
'paginate': false,
@@ -106,6 +107,7 @@ var recipesIncludesTables = $('#recipes-includes-table').DataTable({
}
});
$('#recipes-includes-table tbody').removeClass("d-none");
+recipesIncludesTables.columns.adjust().draw();
Grocy.FrontendHelpers.ValidateForm('recipe-form');
$("#name").focus();
diff --git a/public/viewjs/recipes.js b/public/viewjs/recipes.js
index e97e6ffa..ec3643b6 100644
--- a/public/viewjs/recipes.js
+++ b/public/viewjs/recipes.js
@@ -24,6 +24,7 @@
}
});
$('#recipes-table tbody').removeClass("d-none");
+recipesTables.columns.adjust().draw();
var rowSelect = GetUriParam("row");
if (typeof rowSelect !== "undefined")
diff --git a/public/viewjs/shoppinglist.js b/public/viewjs/shoppinglist.js
index 849ab8c7..3d737a39 100644
--- a/public/viewjs/shoppinglist.js
+++ b/public/viewjs/shoppinglist.js
@@ -24,6 +24,7 @@
}
});
$('#shoppinglist-table tbody').removeClass("d-none");
+shoppingListTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/stockjournal.js b/public/viewjs/stockjournal.js
index 98967b29..bd747b64 100644
--- a/public/viewjs/stockjournal.js
+++ b/public/viewjs/stockjournal.js
@@ -19,6 +19,7 @@
}
});
$('#stock-journal-table tbody').removeClass("d-none");
+stockJournalTable.columns.adjust().draw();
$("#product-filter").on("change", function()
{
diff --git a/public/viewjs/stockoverview.js b/public/viewjs/stockoverview.js
index 888bffbf..48a9e50a 100644
--- a/public/viewjs/stockoverview.js
+++ b/public/viewjs/stockoverview.js
@@ -22,6 +22,7 @@
}
});
$('#stock-overview-table tbody').removeClass("d-none");
+stockOverviewTable.columns.adjust().draw();
$("#location-filter").on("change", function()
{
diff --git a/public/viewjs/taskcategories.js b/public/viewjs/taskcategories.js
index 5db4c11b..7538692c 100644
--- a/public/viewjs/taskcategories.js
+++ b/public/viewjs/taskcategories.js
@@ -19,6 +19,7 @@
}
});
$('#taskcategories-table tbody').removeClass("d-none");
+categoriesTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/taskform.js b/public/viewjs/taskform.js
index db99bdd1..cfaa3422 100644
--- a/public/viewjs/taskform.js
+++ b/public/viewjs/taskform.js
@@ -62,4 +62,5 @@ $('#task-form input').keydown(function(event)
});
$('#name').focus();
+Grocy.Components.DateTimePicker.GetInputElement().trigger('input');
Grocy.FrontendHelpers.ValidateForm('task-form');
diff --git a/public/viewjs/tasks.js b/public/viewjs/tasks.js
index e7084240..413f2ce3 100644
--- a/public/viewjs/tasks.js
+++ b/public/viewjs/tasks.js
@@ -23,6 +23,7 @@
}
});
$('#tasks-table tbody').removeClass("d-none");
+tasksTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/public/viewjs/users.js b/public/viewjs/users.js
index f2114188..d1ee0b4d 100644
--- a/public/viewjs/users.js
+++ b/public/viewjs/users.js
@@ -19,6 +19,7 @@
}
});
$('#users-table tbody').removeClass("d-none");
+usersTable.columns.adjust().draw();
$("#search").on("keyup", function()
{
diff --git a/services/StockService.php b/services/StockService.php
index 7965d6c1..843fedc5 100644
--- a/services/StockService.php
+++ b/services/StockService.php
@@ -66,6 +66,7 @@ class StockService extends BaseService
$nextBestBeforeDate = $this->Database->stock()->where('product_id', $productId)->min('best_before_date');
$quPurchase = $this->Database->quantity_units($product->qu_id_purchase);
$quStock = $this->Database->quantity_units($product->qu_id_stock);
+ $location = $this->Database->locations($product->location_id);
$lastPrice = null;
$lastLogRow = $this->Database->stock_log()->where('product_id = :1 AND transaction_type = :2 AND undone = 0', $productId, self::TRANSACTION_TYPE_PURCHASE)->orderBy('row_created_timestamp', 'DESC')->limit(1)->fetch();
@@ -83,7 +84,8 @@ class StockService extends BaseService
'quantity_unit_purchase' => $quPurchase,
'quantity_unit_stock' => $quStock,
'last_price' => $lastPrice,
- 'next_best_before_date' => $nextBestBeforeDate
+ 'next_best_before_date' => $nextBestBeforeDate,
+ 'location' => $location
);
}
diff --git a/views/batteriesjournal.blade.php b/views/batteriesjournal.blade.php
index 11f901cc..8c348b4f 100644
--- a/views/batteriesjournal.blade.php
+++ b/views/batteriesjournal.blade.php
@@ -12,6 +12,10 @@
{{ $L('If you don\'t select a file, the current instruction manual will not be altered') }}
{{ $L('If you don\'t select a file, the current picture will not be altered') }}
{{ $L('If you don\'t select a file, the current picture will not be altered') }}