mirror of
https://github.com/grocy/grocy.git
synced 2025-08-19 03:40:10 +00:00
(More or less) finish upgrading to Bootstrap 4
This commit is contained in:
@@ -4,7 +4,7 @@ if %projectPath:~-1%==\ set projectPath=%projectPath:~0,-1%
|
|||||||
set releasePath=%projectPath%\.release
|
set releasePath=%projectPath%\.release
|
||||||
mkdir "%releasePath%"
|
mkdir "%releasePath%"
|
||||||
|
|
||||||
for /f "tokens=*" %%a in ('type version.txt') do set version=%%a
|
for /f "tokens=*" %%a in ('build_tools\jq.exe .Version version.json --raw-output') do set version=%%a
|
||||||
|
|
||||||
del "%releasePath%\grocy_%version%.zip"
|
del "%releasePath%\grocy_%version%.zip"
|
||||||
"build_tools\7za.exe" a -r "%releasePath%\grocy_%version%.zip" "%projectPath%\*" -xr!.* -xr!build_tools -xr!build.bat -xr!composer.json -xr!composer.lock -xr!package.json -xr!yarn.lock -xr!publication_assets
|
"build_tools\7za.exe" a -r "%releasePath%\grocy_%version%.zip" "%projectPath%\*" -xr!.* -xr!build_tools -xr!build.bat -xr!composer.json -xr!composer.lock -xr!package.json -xr!yarn.lock -xr!publication_assets
|
||||||
|
BIN
build_tools/jq.exe
Normal file
BIN
build_tools/jq.exe
Normal file
Binary file not shown.
@@ -131,6 +131,7 @@ return array(
|
|||||||
'Track execution of habit #1' => 'Erfasse eine Ausführung von #1',
|
'Track execution of habit #1' => 'Erfasse eine Ausführung von #1',
|
||||||
'Filter by location' => 'Nach Standort filtern',
|
'Filter by location' => 'Nach Standort filtern',
|
||||||
'Search' => 'Suche',
|
'Search' => 'Suche',
|
||||||
|
'Not logged in' => 'Nicht angemeldet',
|
||||||
|
|
||||||
//Constants
|
//Constants
|
||||||
'manually' => 'Manuell',
|
'manually' => 'Manuell',
|
||||||
|
@@ -3,14 +3,15 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bootstrap": "^4.1.1",
|
"bootstrap": "^4.1.1",
|
||||||
|
"startbootstrap-sb-admin": "^4.0.0",
|
||||||
"jquery": "^3.3.1",
|
"jquery": "^3.3.1",
|
||||||
"font-awesome": "^4.7.0",
|
"font-awesome": "^4.7.0",
|
||||||
"bootbox": "^4.4.0",
|
"bootbox": "https://github.com/makeusabrew/bootbox.git#v5.x",
|
||||||
"jquery-serializejson": "^2.8.1",
|
"jquery-serializejson": "^2.8.1",
|
||||||
"bootstrap-validator": "^0.11.9",
|
"bootstrap-validator": "^0.11.9",
|
||||||
"bootstrap-datepicker": "^1.8.0",
|
"bootstrap-datepicker": "^1.8.0",
|
||||||
"moment": "^2.18.1",
|
"moment": "^2.18.1",
|
||||||
"@danielfarrell/bootstrap-combobox": "^1.1.8",
|
"@danielfarrell/bootstrap-combobox": "https://github.com/pallidus-fintech/bootstrap-combobox.git#enhance/boostrap_4",
|
||||||
"datatables.net": "^1.10.19",
|
"datatables.net": "^1.10.19",
|
||||||
"datatables.net-bs4": "^1.10.19",
|
"datatables.net-bs4": "^1.10.19",
|
||||||
"datatables.net-responsive": "^2.2.3",
|
"datatables.net-responsive": "^2.2.3",
|
||||||
@@ -18,7 +19,7 @@
|
|||||||
"timeago": "^1.6.1",
|
"timeago": "^1.6.1",
|
||||||
"toastr": "^2.1.3",
|
"toastr": "^2.1.3",
|
||||||
"tagmanager": "https://github.com/max-favilli/tagmanager.git#3.0.2",
|
"tagmanager": "https://github.com/max-favilli/tagmanager.git#3.0.2",
|
||||||
"eonasdan-bootstrap-datetimepicker": "^4.17.47",
|
"tempusdominus-bootstrap-4": "^5.0.1",
|
||||||
"swagger-ui-dist": "^3.13.4",
|
"swagger-ui-dist": "^3.13.4",
|
||||||
"jquery-ui-dist": "^1.12.1",
|
"jquery-ui-dist": "^1.12.1",
|
||||||
"bootstrap-side-navbar": "https://github.com/samrayner/bootstrap-side-navbar.git#1.0.1"
|
"bootstrap-side-navbar": "https://github.com/samrayner/bootstrap-side-navbar.git#1.0.1"
|
||||||
|
@@ -1,112 +1,26 @@
|
|||||||
body {
|
/* Main style customizations */
|
||||||
|
body {
|
||||||
font-family: 'Noto Sans', sans-serif;
|
font-family: 'Noto Sans', sans-serif;
|
||||||
font-size: 0.85rem
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#top-nav {
|
.content-text {
|
||||||
background-color: #e5e5e5;
|
font-size: 0.85rem;
|
||||||
border-bottom: 2px solid;
|
|
||||||
border-color: #d6d6d6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-brand {
|
|
||||||
font-weight: bold;
|
|
||||||
letter-spacing: -5px;
|
|
||||||
font-size: 2.2em;
|
|
||||||
color: #0b024c !important;
|
|
||||||
margin-left: 0 !important;
|
|
||||||
padding-left: 5px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebar {
|
|
||||||
background-color: #e5e5e5;
|
|
||||||
border-right: 2px solid #d6d6d6;
|
|
||||||
max-width: 260px;
|
|
||||||
border-left: 0;
|
|
||||||
overflow-y: auto;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebar > ul > a > li {
|
|
||||||
background-color: #e5e5e5;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
|
||||||
#navbar-mobile {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-copyright {
|
|
||||||
padding-bottom: 100px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav > li {
|
|
||||||
padding-right: 20px;
|
|
||||||
padding-left: 20px;
|
|
||||||
transition: all 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav > li:hover {
|
|
||||||
box-shadow: inset 5px 0 0 #337ab7;
|
|
||||||
transition: all 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav > li:focus {
|
|
||||||
box-shadow: inset 5px 0 0 #ab2230;
|
|
||||||
transition: all 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav > .active,
|
|
||||||
.sidebar-nav > .active:hover,
|
|
||||||
.sidebar-nav > .active:focus {
|
|
||||||
background-color: #d6d6d6;
|
|
||||||
box-shadow: inset 5px 0 0 #ab2230;
|
|
||||||
transition: all 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav > li.disabled > a,
|
|
||||||
.nav-link-navbar {
|
|
||||||
color: #7d7d7d;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-copyright {
|
|
||||||
color: #a7a7a7;
|
|
||||||
font-size: 11px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-copyright > li > a {
|
|
||||||
padding-top: 0 !important;
|
|
||||||
padding-bottom: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#top-nav .navbar-nav > .open > a {
|
|
||||||
background-color: #d6d6d6 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropdown-item > li > a:hover,
|
|
||||||
.dropdown-item > li > a:focus,
|
|
||||||
.dropdown-item:active {
|
|
||||||
background-color: #e5e5e5 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.well {
|
|
||||||
background-color: #e5e5e5;
|
|
||||||
padding-right: 25px;
|
|
||||||
padding-left: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td {
|
|
||||||
vertical-align: middle !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.responsive-button {
|
.responsive-button {
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.discrete-link {
|
.no-real-button {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeago-contextual {
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.discrete-link {
|
||||||
color: inherit !important;
|
color: inherit !important;
|
||||||
transition: all 0.3s !important;
|
transition: all 0.3s !important;
|
||||||
}
|
}
|
||||||
@@ -114,70 +28,114 @@ td {
|
|||||||
a.discrete-link:hover {
|
a.discrete-link:hover {
|
||||||
color: #337ab7 !important;
|
color: #337ab7 !important;
|
||||||
text-decoration: none !important;
|
text-decoration: none !important;
|
||||||
transition: all 0.3s !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a.discrete-link:focus {
|
a.discrete-link:focus {
|
||||||
color: #ab2230 !important;
|
color: #ab2230 !important;
|
||||||
text-decoration: none !important;
|
text-decoration: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
border: 2px solid;
|
||||||
|
border-color: #d6d6d6;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
background-color: #e5e5e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation style customizations */
|
||||||
|
#mainNav {
|
||||||
|
background-color: #e5e5e5 !important;
|
||||||
|
border-bottom: 2px solid !important;
|
||||||
|
border-color: #d6d6d6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-sidenav {
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-sidenav,
|
||||||
|
.sidenav-second-level {
|
||||||
|
background-color: #e5e5e5 !important;
|
||||||
|
border-top: 2px solid !important;
|
||||||
|
border-right: 2px solid !important;
|
||||||
|
border-color: #d6d6d6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav .dropdown-menu {
|
||||||
|
background-color: #e5e5e5 !important;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav .dropdown-divider {
|
||||||
|
border-top: 2px solid !important;
|
||||||
|
border-color: #d6d6d6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidenav-toggler {
|
||||||
|
background-color: #d6d6d6 !important;
|
||||||
|
border-right: 2px solid !important;
|
||||||
|
border-color: #d6d6d6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-sidenav > li,
|
||||||
|
.sidenav-second-level > li {
|
||||||
transition: all 0.3s !important;
|
transition: all 0.3s !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-sidenav > li:hover,
|
||||||
|
.sidenav-second-level > li:hover,
|
||||||
|
.navbar-nav .dropdown-item:hover {
|
||||||
|
box-shadow: inset 5px 0 0 #337ab7 !important;
|
||||||
|
background-color: #d6d6d6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-sidenav > li > a:focus,
|
||||||
|
.sidenav-second-level > li > a:focus,
|
||||||
|
.navbar-nav .dropdown-item:focus {
|
||||||
|
box-shadow: inset 5px 0 0 #ab2230 !important;
|
||||||
|
background-color: #d6d6d6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active-page {
|
||||||
|
box-shadow: inset 5px 0 0 #ab2230 !important;
|
||||||
|
background-color: #d6d6d6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Third party component customizations - DataTables */
|
||||||
|
td {
|
||||||
|
vertical-align: middle !important;
|
||||||
|
}
|
||||||
|
|
||||||
.table td.fit-content,
|
.table td.fit-content,
|
||||||
.table th.fit-content {
|
.table th.fit-content {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
width: 1%;
|
width: 1%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dataTables_info,
|
.dataTables_filter,
|
||||||
.dataTables_length,
|
.dataTables_info {
|
||||||
.dataTables_filter {
|
display: none;
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeago-contextual {
|
|
||||||
font-style: italic;
|
|
||||||
font-size: 0.8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.disabled,
|
|
||||||
.no-real-button {
|
|
||||||
pointer-events: none;
|
|
||||||
margin-top: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.discrete-content-separator-2x {
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.warning-bg {
|
|
||||||
background-color: #fcf8e3 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error-bg {
|
|
||||||
background-color: #f2dede !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-bg {
|
|
||||||
background-color: #afd9ee !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Third party component customizations - toastr */
|
||||||
#toast-container > div {
|
#toast-container > div {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
filter: alpha(opacity=100);
|
filter: alpha(opacity=100);
|
||||||
}
|
}
|
||||||
|
|
||||||
.toast-success {
|
.toast-success {
|
||||||
background-color: #4c994c;
|
background-color: #28a745;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast-error {
|
||||||
|
background-color: #dc3545;
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container > div {
|
#toast-container > div {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dataTables_filter,
|
|
||||||
.dataTables_info {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
20
public/img/grocy_icon.svg
Normal file
20
public/img/grocy_icon.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="60.000000pt" height="93.000000pt" viewBox="0 0 60.000000 93.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<metadata>
|
||||||
|
Created by potrace 1.15, written by Peter Selinger 2001-2017
|
||||||
|
</metadata>
|
||||||
|
<g transform="translate(0.000000,93.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#0b024c" stroke="none">
|
||||||
|
<path d="M165 905 c-52 -18 -109 -82 -132 -148 -14 -39 -18 -82 -18 -172 0
|
||||||
|
-104 3 -127 23 -170 43 -94 114 -144 205 -145 59 0 112 21 156 63 l33 32 -7
|
||||||
|
-75 c-10 -96 -17 -116 -57 -140 -43 -26 -130 -26 -233 0 -43 11 -80 20 -82 20
|
||||||
|
-2 0 -3 -30 -1 -67 l3 -68 50 -13 c28 -8 100 -14 160 -15 172 -1 255 38 304
|
||||||
|
142 l26 56 3 353 4 352 -75 0 -75 0 -7 -40 -7 -40 -36 31 c-67 59 -150 75
|
||||||
|
-237 44z m206 -141 c45 -23 62 -72 62 -180 1 -112 -18 -152 -79 -172 -125 -42
|
||||||
|
-201 80 -163 260 21 96 97 135 180 92z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1002 B |
33
public/img/grocy_logo.svg
Normal file
33
public/img/grocy_logo.svg
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="242.000000pt" height="93.000000pt" viewBox="0 0 242.000000 93.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<metadata>
|
||||||
|
Created by potrace 1.15, written by Peter Selinger 2001-2017
|
||||||
|
</metadata>
|
||||||
|
<g transform="translate(0.000000,93.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#0b024c" stroke="none">
|
||||||
|
<path d="M165 905 c-52 -18 -109 -82 -132 -148 -14 -39 -18 -82 -18 -172 0
|
||||||
|
-104 3 -127 23 -170 43 -94 114 -144 205 -145 59 0 112 21 156 63 l33 32 -7
|
||||||
|
-75 c-10 -96 -17 -116 -57 -140 -43 -26 -130 -26 -233 0 -43 11 -80 20 -82 20
|
||||||
|
-2 0 -3 -30 -1 -67 l3 -68 50 -13 c28 -8 100 -14 160 -15 121 -1 183 14 244
|
||||||
|
60 36 28 81 112 81 155 0 54 6 58 90 58 l78 0 4 193 c3 180 4 194 25 223 20
|
||||||
|
28 99 72 110 61 2 -3 -1 -24 -6 -48 -6 -24 -11 -79 -11 -121 0 -137 53 -233
|
||||||
|
158 -285 50 -24 69 -28 147 -28 107 0 158 20 219 83 l40 41 23 -34 c13 -20 46
|
||||||
|
-45 80 -62 51 -25 69 -28 153 -28 68 0 108 5 143 18 l47 19 0 74 0 74 -42 -21
|
||||||
|
c-58 -30 -154 -37 -197 -15 -85 44 -98 250 -21 328 24 24 36 28 84 28 99 0 92
|
||||||
|
9 200 -260 l97 -242 -23 -46 c-32 -65 -67 -87 -134 -87 l-54 0 0 -66 0 -67 45
|
||||||
|
-6 c108 -17 215 34 269 128 20 33 296 754 296 771 0 3 -40 5 -89 5 l-90 0 -64
|
||||||
|
-197 c-35 -109 -69 -214 -75 -233 -10 -34 -10 -34 -11 -7 -1 16 -31 120 -68
|
||||||
|
232 l-66 202 -143 8 c-116 5 -154 4 -197 -9 -61 -18 -126 -61 -145 -98 l-14
|
||||||
|
-25 -52 53 c-40 39 -67 56 -106 68 -87 26 -181 19 -272 -19 -14 -5 -18 -2 -18
|
||||||
|
14 0 19 -6 21 -52 21 -64 0 -129 -30 -164 -76 -15 -19 -30 -34 -34 -34 -4 0
|
||||||
|
-13 23 -20 50 l-12 50 -133 0 -133 0 -7 -40 -7 -40 -36 31 c-67 59 -150 75
|
||||||
|
-237 44z m206 -141 c45 -23 62 -72 62 -180 1 -112 -18 -152 -79 -172 -125 -42
|
||||||
|
-201 80 -163 260 21 96 97 135 180 92z m888 -10 c40 -33 54 -89 49 -184 -7
|
||||||
|
-118 -41 -160 -131 -160 -87 0 -121 53 -121 185 0 135 34 185 125 185 36 0 55
|
||||||
|
-6 78 -26z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
@@ -21,8 +21,8 @@ U = function(relativePath)
|
|||||||
|
|
||||||
if (!Grocy.ActiveNav.isEmpty())
|
if (!Grocy.ActiveNav.isEmpty())
|
||||||
{
|
{
|
||||||
var menuItem = $('.nav').find("[data-nav-for-page='" + Grocy.ActiveNav + "']");
|
var menuItem = $('#sidebarResponsive').find("[data-nav-for-page='" + Grocy.ActiveNav + "']");
|
||||||
menuItem.addClass('active');
|
menuItem.addClass('active-page');
|
||||||
}
|
}
|
||||||
|
|
||||||
$.timeago.settings.allowFuture = true;
|
$.timeago.settings.allowFuture = true;
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -6,6 +6,6 @@ $(function()
|
|||||||
showTodayButton: true,
|
showTodayButton: true,
|
||||||
calendarWeeks: true,
|
calendarWeeks: true,
|
||||||
maxDate: moment(),
|
maxDate: moment(),
|
||||||
locale: moment.locale('de')
|
locale: moment.locale()
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -243,8 +243,8 @@ var addBarcode = GetUriParam('addbarcodetoselection');
|
|||||||
if (addBarcode !== undefined)
|
if (addBarcode !== undefined)
|
||||||
{
|
{
|
||||||
$('#addbarcodetoselection').text(addBarcode);
|
$('#addbarcodetoselection').text(addBarcode);
|
||||||
$('#flow-info-addbarcodetoselection').removeClass('hide');
|
$('#flow-info-addbarcodetoselection').removeClass('d-none');
|
||||||
$('#barcode-lookup-disabled-hint').removeClass('hide');
|
$('#barcode-lookup-disabled-hint').removeClass('d-none');
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#new_amount').on('keypress', function(e)
|
$('#new_amount').on('keypress', function(e)
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
$('.logout-button').hide();
|
$('.logout-button').hide();
|
||||||
|
$('.logout-button-divider').hide();
|
||||||
|
|
||||||
$('#username').focus();
|
$('#username').focus();
|
||||||
|
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
var createdApiKeyId = GetUriParam('CreatedApiKeyId');
|
var createdApiKeyId = GetUriParam('CreatedApiKeyId');
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -97,7 +97,8 @@ $('#product_id').on('change', function(e)
|
|||||||
});
|
});
|
||||||
|
|
||||||
$('.combobox').combobox({
|
$('.combobox').combobox({
|
||||||
appendId: '_text_input'
|
appendId: '_text_input',
|
||||||
|
bsVersion: '4'
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#product_id_text_input').on('change', function(e)
|
$('#product_id_text_input').on('change', function(e)
|
||||||
@@ -253,8 +254,8 @@ var addBarcode = GetUriParam('addbarcodetoselection');
|
|||||||
if (addBarcode !== undefined)
|
if (addBarcode !== undefined)
|
||||||
{
|
{
|
||||||
$('#addbarcodetoselection').text(addBarcode);
|
$('#addbarcodetoselection').text(addBarcode);
|
||||||
$('#flow-info-addbarcodetoselection').removeClass('hide');
|
$('#flow-info-addbarcodetoselection').removeClass('d-none');
|
||||||
$('#barcode-lookup-disabled-hint').removeClass('hide');
|
$('#barcode-lookup-disabled-hint').removeClass('d-none');
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#best_before_date').on('change', function(e)
|
$('#best_before_date').on('change', function(e)
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
'columnDefs': [
|
'columnDefs': [
|
||||||
{ 'orderable': false, 'targets': 0 }
|
{ 'orderable': false, 'targets': 0 }
|
||||||
],
|
],
|
||||||
'language': JSON.parse(L('datatables_localization'))
|
'language': JSON.parse(L('datatables_localization')),
|
||||||
|
'scrollY': false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#search").on("keyup", function()
|
$("#search").on("keyup", function()
|
||||||
|
@@ -5,55 +5,59 @@
|
|||||||
@section('viewJsName', 'batteries')
|
@section('viewJsName', 'batteries')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">
|
<div class="row">
|
||||||
@yield('title')
|
<div class="col">
|
||||||
<a class="btn btn-default" href="{{ $U('/battery/new') }}" role="button">
|
<h1>
|
||||||
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
@yield('title')
|
||||||
</a>
|
<a class="btn btn-outline-dark" href="{{ $U('/battery/new') }}">
|
||||||
</h1>
|
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
||||||
|
</a>
|
||||||
<div class="container-fluid">
|
</h1>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
|
||||||
<input type="text" class="form-control" id="search">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row mt-3">
|
||||||
<table id="batteries-table" class="table table-striped">
|
<div class="col-3">
|
||||||
<thead>
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
<tr>
|
<input type="text" class="form-control" id="search">
|
||||||
<th>#</th>
|
</div>
|
||||||
<th>{{ $L('Name') }}</th>
|
</div>
|
||||||
<th>{{ $L('Description') }}</th>
|
|
||||||
<th>{{ $L('Used in') }}</th>
|
<div class="row">
|
||||||
</tr>
|
<div class="col">
|
||||||
</thead>
|
<table id="batteries-table" class="table table-sm table-striped dt-responsive">
|
||||||
<tbody>
|
<thead>
|
||||||
@foreach($batteries as $battery)
|
<tr>
|
||||||
<tr>
|
<th>#</th>
|
||||||
<td class="fit-content">
|
<th>{{ $L('Name') }}</th>
|
||||||
<a class="btn btn-info" href="{{ $U('/battery/') }}{{ $battery->id }}" role="button">
|
<th>{{ $L('Description') }}</th>
|
||||||
<i class="fa fa-pencil"></i>
|
<th>{{ $L('Used in') }}</th>
|
||||||
</a>
|
</tr>
|
||||||
<a class="btn btn-danger battery-delete-button" href="#" role="button" data-battery-id="{{ $battery->id }}" data-battery-name="{{ $battery->name }}">
|
</thead>
|
||||||
<i class="fa fa-trash"></i>
|
<tbody>
|
||||||
</a>
|
@foreach($batteries as $battery)
|
||||||
</td>
|
<tr>
|
||||||
<td>
|
<td class="fit-content">
|
||||||
{{ $battery->name }}
|
<a class="btn btn-info btn-sm" href="{{ $U('/battery/') }}{{ $battery->id }}">
|
||||||
</td>
|
<i class="fa fa-pencil"></i>
|
||||||
<td>
|
</a>
|
||||||
{{ $battery->description }}
|
<a class="btn btn-danger btn-sm battery-delete-button" href="#" data-battery-id="{{ $battery->id }}" data-battery-name="{{ $battery->name }}">
|
||||||
</td>
|
<i class="fa fa-trash"></i>
|
||||||
<td>
|
</a>
|
||||||
{{ $battery->used_in }}
|
</td>
|
||||||
</td>
|
<td>
|
||||||
</tr>
|
{{ $battery->name }}
|
||||||
@endforeach
|
</td>
|
||||||
</tbody>
|
<td>
|
||||||
</table>
|
{{ $battery->description }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ $battery->used_in }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,60 +9,61 @@
|
|||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
<div class="container-fluid">
|
<h1>@yield('title')</h1>
|
||||||
<div class="row">
|
<p class="btn btn-lg btn-warning no-real-button responsive-button mr-2">{{ $L('#1 batteries are due to be charged within the next #2 days', $countDueNextXDays, $nextXDays) }}</p>
|
||||||
<p class="btn btn-lg btn-warning no-real-button responsive-button">{{ $L('#1 batteries are due to be charged within the next #2 days', $countDueNextXDays, $nextXDays) }}</p>
|
|
||||||
<p class="btn btn-lg btn-danger no-real-button responsive-button">{{ $L('#1 batteries are overdue to be charged', $countOverdue) }}</p>
|
<p class="btn btn-lg btn-danger no-real-button responsive-button">{{ $L('#1 batteries are overdue to be charged', $countOverdue) }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="discrete-content-separator-2x"></div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
<div class="row mt-3">
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
<div class="col-3">
|
||||||
<input type="text" class="form-control" id="search">
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
</div>
|
<input type="text" class="form-control" id="search">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row">
|
||||||
<table id="batteries-overview-table" class="table table-striped">
|
<div class="col">
|
||||||
<thead>
|
<table id="batteries-overview-table" class="table table-sm table-striped dt-responsive">
|
||||||
<tr>
|
<thead>
|
||||||
<th>#</th>
|
<tr>
|
||||||
<th>{{ $L('Battery') }}</th>
|
<th>#</th>
|
||||||
<th>{{ $L('Last charged') }}</th>
|
<th>{{ $L('Battery') }}</th>
|
||||||
<th>{{ $L('Next planned charge cycle') }}</th>
|
<th>{{ $L('Last charged') }}</th>
|
||||||
</tr>
|
<th>{{ $L('Next planned charge cycle') }}</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
@foreach($current as $curentBatteryEntry)
|
<tbody>
|
||||||
<tr class="@if(FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->charge_interval_days > 0 && $nextChargeTimes[$curentBatteryEntry->battery_id] < date('Y-m-d H:i:s')) error-bg @endif">
|
@foreach($current as $curentBatteryEntry)
|
||||||
<td class="fit-content">
|
<tr class="@if(FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->charge_interval_days > 0 && $nextChargeTimes[$curentBatteryEntry->battery_id] < date('Y-m-d H:i:s')) table-danger @endif">
|
||||||
<a class="btn btn-success btn-xs track-charge-cycle-button" href="#" title="{{ $L('Track charge cycle of battery #1', FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->name) }}"
|
<td class="fit-content">
|
||||||
data-battery-id="{{ $curentBatteryEntry->battery_id }}"
|
<a class="btn btn-success btn-sm track-charge-cycle-button" href="#" title="{{ $L('Track charge cycle of battery #1', FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->name) }}"
|
||||||
data-battery-name="{{ FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->name }}">
|
data-battery-id="{{ $curentBatteryEntry->battery_id }}"
|
||||||
<i class="fa fa-fire"></i>
|
data-battery-name="{{ FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->name }}">
|
||||||
</a>
|
<i class="fa fa-fire"></i>
|
||||||
</td>
|
</a>
|
||||||
<td>
|
</td>
|
||||||
{{ FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->name }}
|
<td>
|
||||||
</td>
|
{{ FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->name }}
|
||||||
<td>
|
</td>
|
||||||
<span id="battery-{{ $curentBatteryEntry->battery_id }}-last-tracked-time">{{ $curentBatteryEntry->last_tracked_time }}</span>
|
<td>
|
||||||
<time id="battery-{{ $curentBatteryEntry->battery_id }}-last-tracked-time-timeago" class="timeago timeago-contextual" datetime="{{ $curentBatteryEntry->last_tracked_time }}"></time>
|
<span id="battery-{{ $curentBatteryEntry->battery_id }}-last-tracked-time">{{ $curentBatteryEntry->last_tracked_time }}</span>
|
||||||
</td>
|
<time id="battery-{{ $curentBatteryEntry->battery_id }}-last-tracked-time-timeago" class="timeago timeago-contextual" datetime="{{ $curentBatteryEntry->last_tracked_time }}"></time>
|
||||||
<td>
|
</td>
|
||||||
@if(FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->charge_interval_days > 0)
|
<td>
|
||||||
{{ $nextChargeTimes[$curentBatteryEntry->battery_id] }}
|
@if(FindObjectInArrayByPropertyValue($batteries, 'id', $curentBatteryEntry->battery_id)->charge_interval_days > 0)
|
||||||
<time class="timeago timeago-contextual" datetime="{{ $nextChargeTimes[$curentBatteryEntry->battery_id] }}"></time>
|
{{ $nextChargeTimes[$curentBatteryEntry->battery_id] }}
|
||||||
@else
|
<time class="timeago timeago-contextual" datetime="{{ $nextChargeTimes[$curentBatteryEntry->battery_id] }}"></time>
|
||||||
...
|
@else
|
||||||
@endif
|
...
|
||||||
</td>
|
@endif
|
||||||
</tr>
|
</td>
|
||||||
@endforeach
|
</tr>
|
||||||
</tbody>
|
@endforeach
|
||||||
</table>
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,35 +9,37 @@
|
|||||||
@section('viewJsName', 'batteryform')
|
@section('viewJsName', 'batteryform')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-6 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
||||||
|
|
||||||
@if($mode == 'edit')
|
@if($mode == 'edit')
|
||||||
<script>Grocy.EditObjectId = {{ $battery->id }}</script>
|
<script>Grocy.EditObjectId = {{ $battery->id }}</script>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form id="battery-form">
|
<form id="battery-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Name') }}</label>
|
<label for="name">{{ $L('Name') }}</label>
|
||||||
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $battery->name }}@endif">
|
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $battery->name }}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="description">{{ $L('Description') }}</label>
|
<label for="description">{{ $L('Description') }}</label>
|
||||||
<input type="text" class="form-control" id="description" name="description" value="@if($mode == 'edit'){{ $battery->description }}@endif">
|
<input type="text" class="form-control" id="description" name="description" value="@if($mode == 'edit'){{ $battery->description }}@endif">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Used in') }}</label>
|
<label for="name">{{ $L('Used in') }}</label>
|
||||||
<input type="text" class="form-control" id="used_in" name="used_in" value="@if($mode == 'edit'){{ $battery->used_in }}@endif">
|
<input type="text" class="form-control" id="used_in" name="used_in" value="@if($mode == 'edit'){{ $battery->used_in }}@endif">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="save-battery-button" type="submit" class="btn btn-default">{{ $L('Save') }}</button>
|
<button id="save-battery-button" type="submit" class="btn btn-success">{{ $L('Save') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,39 +5,41 @@
|
|||||||
@section('viewJsName', 'batterytracking')
|
@section('viewJsName', 'batterytracking')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-4 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<form id="batterytracking-form">
|
<form id="batterytracking-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="battery_id">{{ $L('Battery') }}</label>
|
<label for="battery_id">{{ $L('Battery') }}</label>
|
||||||
<select class="form-control combobox" id="battery_id" name="battery_id" required>
|
<select class="form-control combobox" id="battery_id" name="battery_id" required>
|
||||||
<option value=""></option>
|
<option value=""></option>
|
||||||
@foreach($batteries as $battery)
|
@foreach($batteries as $battery)
|
||||||
<option value="{{ $battery->id }}">{{ $battery->name }}</option>
|
<option value="{{ $battery->id }}">{{ $battery->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div id="battery-error" class="help-block with-errors"></div>
|
<div id="battery-error" class="invalid-feedback"></div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="tracked_time">{{ $L('Tracked time') }}</label>
|
|
||||||
<div class="input-group date datetimepicker">
|
|
||||||
<input type="text" class="form-control" id="tracked_time" name="tracked_time" required >
|
|
||||||
<span class="input-group-addon">
|
|
||||||
<span class="fa fa-calendar"></span>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="help-block with-errors"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button id="save-batterytracking-button" type="submit" class="btn btn-default">{{ $L('OK') }}</button>
|
<div class="form-group">
|
||||||
|
<label for="tracked_time">{{ $L('Tracked time') }}</label>
|
||||||
|
<div class="input-group date datetimepicker">
|
||||||
|
<input type="text" class="form-control" id="tracked_time" name="tracked_time" required >
|
||||||
|
<span class="input-group-addon">
|
||||||
|
<span class="fa fa-calendar"></span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="invalid-feedback"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</form>
|
<button id="save-batterytracking-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
</form>
|
||||||
@include('components.batterycard')
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-xs-12">
|
||||||
|
@include('components.batterycard')
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -2,14 +2,13 @@
|
|||||||
<script src="{{ $U('/viewjs/components/batterycard.js', true) }}?v={{ $version }}"></script>
|
<script src="{{ $U('/viewjs/components/batterycard.js', true) }}?v={{ $version }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
<div class="main well">
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
<h3>{{ $L('Battery overview') }} <strong><span id="batterycard-battery-name"></span></strong></h3>
|
<i class="fa fa-fw fa-battery-three-quarters"></i> {{ $L('Battery overview') }} <strong><span id="batterycard-battery-name"></span></strong>
|
||||||
|
</div>
|
||||||
<p>
|
<div class="card-body">
|
||||||
<strong>{{ $L('Used in') }}:</strong> <span id="batterycard-battery-used_in"></span><br>
|
<strong>{{ $L('Used in') }}:</strong> <span id="batterycard-battery-used_in"></span><br>
|
||||||
<strong>{{ $L('Charge cycles count') }}:</strong> <span id="batterycard-battery-charge-cycles-count"></span><br>
|
<strong>{{ $L('Charge cycles count') }}:</strong> <span id="batterycard-battery-charge-cycles-count"></span><br>
|
||||||
<strong>{{ $L('Last charged') }}:</strong> <span id="batterycard-battery-last-charged"></span> <time id="batterycard-battery-last-charged-timeago" class="timeago timeago-contextual"></time><br>
|
<strong>{{ $L('Last charged') }}:</strong> <span id="batterycard-battery-last-charged"></span> <time id="batterycard-battery-last-charged-timeago" class="timeago timeago-contextual"></time><br>
|
||||||
</p>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@@ -6,9 +6,9 @@
|
|||||||
<label for="{{ $id }}">{{ $L($label) }} <span class="small text-muted"><time id="datepicker-timeago" class="timeago timeago-contextual"></time>@if(!empty($hint))<br>{{ $L($hint) }}@endif</span></label>
|
<label for="{{ $id }}">{{ $L($label) }} <span class="small text-muted"><time id="datepicker-timeago" class="timeago timeago-contextual"></time>@if(!empty($hint))<br>{{ $L($hint) }}@endif</span></label>
|
||||||
<div class="input-group date">
|
<div class="input-group date">
|
||||||
<input type="text" data-isodate="isodate" class="form-control datepicker" id="{{ $id }}" name="{{ $id }}" required autocomplete="off">
|
<input type="text" data-isodate="isodate" class="form-control datepicker" id="{{ $id }}" name="{{ $id }}" required autocomplete="off">
|
||||||
<div id="datepicker-button" class="input-group-addon">
|
<div id="datepicker-button" class="input-group-append">
|
||||||
<i class="fa fa-calendar"></i>
|
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -3,12 +3,12 @@
|
|||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="{{ $id }}">{{ $L($label) }}</label>
|
<label for="{{ $id }}">{{ $L($label) }}</label>
|
||||||
<div class="input-group date datetimepicker">
|
<div class="input-group date datetimepicker" id="{{ $id }}" data-target-input="nearest">
|
||||||
<input type="text" class="form-control" id="{{ $id }}" name="{{ $id }}" required>
|
<input type="text" class="form-control datetimepicker-input" data-target="#{{ $id }}"/>
|
||||||
<span class="input-group-addon">
|
<div class="input-group-append" data-target="#{{ $id }}" data-toggle="datetimepicker">
|
||||||
<span class="fa fa-calendar"></span>
|
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||||
</span>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -2,13 +2,12 @@
|
|||||||
<script src="{{ $U('/viewjs/components/habitcard.js', true) }}?v={{ $version }}"></script>
|
<script src="{{ $U('/viewjs/components/habitcard.js', true) }}?v={{ $version }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
<div class="main well">
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
<h3>{{ $L('Habit overview') }} <strong><span id="habitcard-habit-name"></span></strong></h3>
|
<i class="fa fa-fw fa-refresh"></i> {{ $L('Habit overview') }} <strong><span id="habitcard-habit-name"></span></strong>
|
||||||
|
</div>
|
||||||
<p>
|
<div class="card-body">
|
||||||
<strong>{{ $L('Tracked count') }}:</strong> <span id="habitcard-habit-tracked-count"></span><br>
|
<strong>{{ $L('Tracked count') }}:</strong> <span id="habitcard-habit-tracked-count"></span><br>
|
||||||
<strong>{{ $L('Last tracked') }}:</strong> <span id="habitcard-habit-last-tracked"></span> <time id="habitcard-habit-last-tracked-timeago" class="timeago timeago-contextual"></time><br>
|
<strong>{{ $L('Last tracked') }}:</strong> <span id="habitcard-habit-last-tracked"></span> <time id="habitcard-habit-last-tracked-timeago" class="timeago timeago-contextual"></time><br>
|
||||||
</p>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,96 +0,0 @@
|
|||||||
<ul class="list-group list-group-flush sidebar-nav">
|
|
||||||
<a class="discrete-link" href="{{ $U('/stockoverview') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="stockoverview">
|
|
||||||
<i class="fa fa-tachometer fa-fw"></i> {{ $L('Stock overview') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/habitsoverview') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="habitsoverview">
|
|
||||||
<i class="fa fa-tachometer fa-fw"></i> {{ $L('Habits overview') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/batteriesoverview') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="batteriesoverview">
|
|
||||||
<i class="fa fa-tachometer fa-fw"></i> {{ $L('Batteries overview') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="discrete-content-separator-2x"></div>
|
|
||||||
|
|
||||||
<ul class="list-group list-group-flush sidebar-nav">
|
|
||||||
<li class="list-group-item disabled"><a href="#"><strong>{{ $L('Record data') }}</strong></a></li>
|
|
||||||
<a class="discrete-link" href="{{ $U('/purchase') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="purchase">
|
|
||||||
<i class="fa fa-shopping-cart fa-fw"></i> {{ $L('Purchase') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/consume') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="consume">
|
|
||||||
<i class="fa fa-cutlery fa-fw"></i> {{ $L('Consume') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/shoppinglist') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="shoppinglist">
|
|
||||||
<i class="fa fa-shopping-bag fa-fw"></i> {{ $L('Shopping list') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/inventory') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="inventory">
|
|
||||||
<i class="fa fa-list fa-fw"></i> {{ $L('Inventory') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/habittracking') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="habittracking">
|
|
||||||
<i class="fa fa-play fa-fw"></i> {{ $L('Habit tracking') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/batterytracking') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="batterytracking">
|
|
||||||
<i class="fa fa-fire fa-fw"></i> {{ $L('Battery tracking') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="discrete-content-separator-2x"></div>
|
|
||||||
|
|
||||||
<ul class="list-group list-group-flush sidebar-nav">
|
|
||||||
<li class="list-group-item disabled"><a href="#"><strong>{{ $L('Manage master data') }}</strong></a></li>
|
|
||||||
|
|
||||||
<a class="discrete-link" href="{{ $U('/products') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="products">
|
|
||||||
<i class="fa fa-product-hunt fa-fw"></i> {{ $L('Products') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/locations') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="locations">
|
|
||||||
<i class="fa fa-map-marker fa-fw"></i> {{ $L('Locations') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/quantityunits') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="quantityunits">
|
|
||||||
<i class="fa fa-balance-scale fa-fw"></i> {{ $L('Quantity units') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/habits') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="habits">
|
|
||||||
<i class="fa fa-refresh fa-fw"></i> {{ $L('Habits') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
<a class="discrete-link" href="{{ $U('/batteries') }}">
|
|
||||||
<li class="list-group-item" data-nav-for-page="batteries">
|
|
||||||
<i class="fa fa-battery-three-quarters fa-fw"></i> {{ $L('Batteries') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="discrete-content-separator-2x hidden-xs"></div>
|
|
||||||
|
|
||||||
<ul class="list-group list-group-flush nav-copyright">
|
|
||||||
<a class="discrete-link" href="#" data-toggle="modal" data-target="#about-modal">
|
|
||||||
<li class="list-group-item">
|
|
||||||
Version {{ $version }}<br>
|
|
||||||
{{ $L('About grocy') }}
|
|
||||||
</li>
|
|
||||||
</a>
|
|
||||||
</ul>
|
|
@@ -2,15 +2,14 @@
|
|||||||
<script src="{{ $U('/viewjs/components/productcard.js', true) }}?v={{ $version }}"></script>
|
<script src="{{ $U('/viewjs/components/productcard.js', true) }}?v={{ $version }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
<div class="main well">
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
<h3>{{ $L('Product overview') }} <strong><span id="productcard-product-name"></span></strong></h3>
|
<i class="fa fa-fw fa-product-hunt"></i> {{ $L('Product overview') }} <strong><span id="productcard-product-name"></span></strong>
|
||||||
<h4><strong>{{ $L('Stock quantity unit') }}:</strong> <span id="productcard-product-stock-qu-name"></span></h4>
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
<p>
|
<strong>{{ $L('Stock quantity unit') }}:</strong> <span id="productcard-product-stock-qu-name"></span><br>
|
||||||
<strong>{{ $L('Stock amount') }}:</strong> <span id="productcard-product-stock-amount"></span> <span id="productcard-product-stock-qu-name2"></span><br>
|
<strong>{{ $L('Stock amount') }}:</strong> <span id="productcard-product-stock-amount"></span> <span id="productcard-product-stock-qu-name2"></span><br>
|
||||||
<strong>{{ $L('Last purchased') }}:</strong> <span id="productcard-product-last-purchased"></span> <time id="productcard-product-last-purchased-timeago" class="timeago timeago-contextual"></time><br>
|
<strong>{{ $L('Last purchased') }}:</strong> <span id="productcard-product-last-purchased"></span> <time id="productcard-product-last-purchased-timeago" class="timeago timeago-contextual"></time><br>
|
||||||
<strong>{{ $L('Last used') }}:</strong> <span id="productcard-product-last-used"></span> <time id="productcard-product-last-used-timeago" class="timeago timeago-contextual"></time>
|
<strong>{{ $L('Last used') }}:</strong> <span id="productcard-product-last-used"></span> <time id="productcard-product-last-used-timeago" class="timeago timeago-contextual"></time>
|
||||||
</p>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,17 +0,0 @@
|
|||||||
<ul class="nav navbar-nav ml-auto">
|
|
||||||
<li class="dropdown nav-item">
|
|
||||||
<a href="#" class="dropdown-toggle nav-link nav-link-navbar" data-toggle="dropdown">@if(AUTHENTICATED === true){{ HTTP_USER }}@endif <span class="caret"></span></a>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-right">
|
|
||||||
<li class="dropdown-item">
|
|
||||||
<a class="discrete-link logout-button" href="{{ $U('/logout') }}"><i class="fa fa-sign-out fa-fw"></i> {{ $L('Logout') }}</a>
|
|
||||||
</li>
|
|
||||||
<div class="dropdown-divider"></div>
|
|
||||||
<li class="dropdown-item">
|
|
||||||
<a class="discrete-link" href="{{ $U('/manageapikeys') }}"><i class="fa fa-handshake-o fa-fw"></i> {{ $L('Manage API keys') }}</a>
|
|
||||||
</li>
|
|
||||||
<li class="dropdown-item">
|
|
||||||
<a class="discrete-link" target="_blank" href="{{ $U('/api') }}"><i class="fa fa-book"></i> {{ $L('REST API & data model documentation') }}</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
@@ -5,40 +5,42 @@
|
|||||||
@section('viewJsName', 'consume')
|
@section('viewJsName', 'consume')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-4 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<form id="consume-form">
|
<form id="consume-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i></label>
|
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i></label>
|
||||||
<select class="form-control combobox" id="product_id" name="product_id" required>
|
<select class="form-control combobox" id="product_id" name="product_id" required>
|
||||||
<option value=""></option>
|
<option value=""></option>
|
||||||
@foreach($products as $product)
|
@foreach($products as $product)
|
||||||
<option data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
<option data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div id="product-error" class="help-block with-errors"></div>
|
<div id="product-error" class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="amount">{{ $L('Amount') }} <span id="amount_qu_unit" class="small text-muted"></span></label>
|
<label for="amount">{{ $L('Amount') }} <span id="amount_qu_unit" class="small text-muted"></span></label>
|
||||||
<input type="number" class="form-control" id="amount" name="amount" value="1" min="1" required>
|
<input type="number" class="form-control" id="amount" name="amount" value="1" min="1" required>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label for="spoiled">
|
<label for="spoiled">
|
||||||
<input type="checkbox" id="spoiled" name="spoiled"> {{ $L('Spoiled') }}
|
<input type="checkbox" id="spoiled" name="spoiled"> {{ $L('Spoiled') }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="save-consume-button" type="submit" class="btn btn-default">{{ $L('OK') }}</button>
|
<button id="save-consume-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="col-lg-6 col-xs-12">
|
||||||
@include('components.productcard')
|
@include('components.productcard')
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,48 +9,50 @@
|
|||||||
@section('viewJsName', 'habitform')
|
@section('viewJsName', 'habitform')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-6 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
||||||
|
|
||||||
@if($mode == 'edit')
|
@if($mode == 'edit')
|
||||||
<script>Grocy.EditObjectId = {{ $habit->id }};</script>
|
<script>Grocy.EditObjectId = {{ $habit->id }};</script>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form id="habit-form">
|
<form id="habit-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Name') }}</label>
|
<label for="name">{{ $L('Name') }}</label>
|
||||||
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $habit->name }}@endif">
|
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $habit->name }}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="description">{{ $L('Description') }}</label>
|
<label for="description">{{ $L('Description') }}</label>
|
||||||
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $habit->description }}@endif</textarea>
|
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $habit->description }}@endif</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="period_type">{{ $L('Period type') }}</label>
|
<label for="period_type">{{ $L('Period type') }}</label>
|
||||||
<select required class="form-control input-group-habit-period-type" id="period_type" name="period_type">
|
<select required class="form-control input-group-habit-period-type" id="period_type" name="period_type">
|
||||||
@foreach($periodTypes as $periodType)
|
@foreach($periodTypes as $periodType)
|
||||||
<option @if($mode == 'edit' && $periodType == $habit->period_type) selected="selected" @endif value="{{ $periodType }}">{{ $L($periodType) }}</option>
|
<option @if($mode == 'edit' && $periodType == $habit->period_type) selected="selected" @endif value="{{ $periodType }}">{{ $L($periodType) }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="period_days">{{ $L('Period days') }}</label>
|
<label for="period_days">{{ $L('Period days') }}</label>
|
||||||
<input type="number" class="form-control input-group-habit-period-type" id="period_days" name="period_days" value="@if($mode == 'edit'){{ $habit->period_days }}@endif">
|
<input type="number" class="form-control input-group-habit-period-type" id="period_days" name="period_days" value="@if($mode == 'edit'){{ $habit->period_days }}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p id="habit-period-type-info" class="help-block text-muted"></p>
|
<p id="habit-period-type-info" class="help-block text-muted"></p>
|
||||||
|
|
||||||
<button id="save-habit-button" type="submit" class="btn btn-default">{{ $L('Save') }}</button>
|
<button id="save-habit-button" type="submit" class="btn btn-success">{{ $L('Save') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,24 +5,27 @@
|
|||||||
@section('viewJsName', 'habits')
|
@section('viewJsName', 'habits')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">
|
<div class="row">
|
||||||
@yield('title')
|
<div class="col">
|
||||||
<a class="btn btn-default" href="{{ $U('/habit/new') }}" role="button">
|
<h1>
|
||||||
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
@yield('title')
|
||||||
</a>
|
<a class="btn btn-outline-dark" href="{{ $U('/habit/new') }}">
|
||||||
</h1>
|
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
||||||
|
</a>
|
||||||
<div class="container-fluid">
|
</h1>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
|
||||||
<input type="text" class="form-control" id="search">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row mt-3">
|
||||||
<table id="habits-table" class="table table-striped">
|
<div class="col-3">
|
||||||
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
|
<input type="text" class="form-control" id="search">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<table id="habits-table" class="table table-sm table-striped dt-responsive">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
@@ -36,10 +39,10 @@
|
|||||||
@foreach($habits as $habit)
|
@foreach($habits as $habit)
|
||||||
<tr>
|
<tr>
|
||||||
<td class="fit-content">
|
<td class="fit-content">
|
||||||
<a class="btn btn-info" href="{{ $U('/habit/') }}{{ $habit->id }}" role="button">
|
<a class="btn btn-info btn-sm" href="{{ $U('/habit/') }}{{ $habit->id }}">
|
||||||
<i class="fa fa-pencil"></i>
|
<i class="fa fa-pencil"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-danger habit-delete-button" href="#" role="button" data-habit-id="{{ $habit->id }}" data-habit-name="{{ $habit->name }}">
|
<a class="btn btn-danger btn-sm habit-delete-button" href="#" data-habit-id="{{ $habit->id }}" data-habit-name="{{ $habit->name }}">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
@@ -58,6 +61,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,60 +9,61 @@
|
|||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
<div class="container-fluid">
|
<h1>@yield('title')</h1>
|
||||||
<div class="row">
|
<p class="btn btn-lg btn-warning no-real-button responsive-button mr-2">{{ $L('#1 habits are due to be done within the next #2 days', $countDueNextXDays, $nextXDays) }}</p>
|
||||||
<p class="btn btn-lg btn-warning no-real-button responsive-button">{{ $L('#1 habits are due to be done within the next #2 days', $countDueNextXDays, $nextXDays) }}</p>
|
|
||||||
<p class="btn btn-lg btn-danger no-real-button responsive-button">{{ $L('#1 habits are overdue to be done', $countOverdue) }}</p>
|
<p class="btn btn-lg btn-danger no-real-button responsive-button">{{ $L('#1 habits are overdue to be done', $countOverdue) }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="discrete-content-separator-2x"></div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
<div class="row mt-3">
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
<div class="col-3">
|
||||||
<input type="text" class="form-control" id="search">
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
</div>
|
<input type="text" class="form-control" id="search">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row">
|
||||||
<table id="habits-overview-table" class="table table-striped">
|
<div class="col">
|
||||||
<thead>
|
<table id="habits-overview-table" class="table table-sm table-striped dt-responsive">
|
||||||
<tr>
|
<thead>
|
||||||
<th>#</th>
|
<tr>
|
||||||
<th>{{ $L('Habit') }}</th>
|
<th>#</th>
|
||||||
<th>{{ $L('Next estimated tracking') }}</th>
|
<th>{{ $L('Habit') }}</th>
|
||||||
<th>{{ $L('Last tracked') }}</th>
|
<th>{{ $L('Next estimated tracking') }}</th>
|
||||||
</tr>
|
<th>{{ $L('Last tracked') }}</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
@foreach($currentHabits as $curentHabitEntry)
|
<tbody>
|
||||||
<tr class="@if(FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->period_type === \Grocy\Services\HabitsService::HABIT_TYPE_DYNAMIC_REGULAR && $nextHabitTimes[$curentHabitEntry->habit_id] < date('Y-m-d H:i:s')) error-bg @endif">
|
@foreach($currentHabits as $curentHabitEntry)
|
||||||
<td class="fit-content">
|
<tr class="@if(FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->period_type === \Grocy\Services\HabitsService::HABIT_TYPE_DYNAMIC_REGULAR && $nextHabitTimes[$curentHabitEntry->habit_id] < date('Y-m-d H:i:s')) table-danger @endif">
|
||||||
<a class="btn btn-success btn-xs track-habit-button" href="#" title="{{ $L('Track execution of habit #1', FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->name) }}"
|
<td class="fit-content">
|
||||||
data-habit-id="{{ $curentHabitEntry->habit_id }}"
|
<a class="btn btn-success btn-sm track-habit-button" href="#" title="{{ $L('Track execution of habit #1', FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->name) }}"
|
||||||
data-habit-name="{{ FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->name }}">
|
data-habit-id="{{ $curentHabitEntry->habit_id }}"
|
||||||
<i class="fa fa-play"></i>
|
data-habit-name="{{ FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->name }}">
|
||||||
</a>
|
<i class="fa fa-play"></i>
|
||||||
</td>
|
</a>
|
||||||
<td>
|
</td>
|
||||||
{{ FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->name }}
|
<td>
|
||||||
</td>
|
{{ FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->name }}
|
||||||
<td>
|
</td>
|
||||||
@if(FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->period_type === \Grocy\Services\HabitsService::HABIT_TYPE_DYNAMIC_REGULAR)
|
<td>
|
||||||
{{ $nextHabitTimes[$curentHabitEntry->habit_id] }}
|
@if(FindObjectInArrayByPropertyValue($habits, 'id', $curentHabitEntry->habit_id)->period_type === \Grocy\Services\HabitsService::HABIT_TYPE_DYNAMIC_REGULAR)
|
||||||
<time class="timeago timeago-contextual" datetime="{{ $nextHabitTimes[$curentHabitEntry->habit_id] }}"></time>
|
{{ $nextHabitTimes[$curentHabitEntry->habit_id] }}
|
||||||
@else
|
<time class="timeago timeago-contextual" datetime="{{ $nextHabitTimes[$curentHabitEntry->habit_id] }}"></time>
|
||||||
...
|
@else
|
||||||
@endif
|
...
|
||||||
</td>
|
@endif
|
||||||
<td>
|
</td>
|
||||||
<span id="habit-{{ $curentHabitEntry->habit_id }}-last-tracked-time">{{ $curentHabitEntry->last_tracked_time }}</span>
|
<td>
|
||||||
<time id="habit-{{ $curentHabitEntry->habit_id }}-last-tracked-time-timeago" class="timeago timeago-contextual" datetime="{{ $curentHabitEntry->last_tracked_time }}"></time>
|
<span id="habit-{{ $curentHabitEntry->habit_id }}-last-tracked-time">{{ $curentHabitEntry->last_tracked_time }}</span>
|
||||||
</td>
|
<time id="habit-{{ $curentHabitEntry->habit_id }}-last-tracked-time-timeago" class="timeago timeago-contextual" datetime="{{ $curentHabitEntry->last_tracked_time }}"></time>
|
||||||
</tr>
|
</td>
|
||||||
@endforeach
|
</tr>
|
||||||
</tbody>
|
@endforeach
|
||||||
</table>
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,33 +5,35 @@
|
|||||||
@section('viewJsName', 'habittracking')
|
@section('viewJsName', 'habittracking')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-4 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<form id="habittracking-form">
|
<form id="habittracking-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="habit_id">{{ $L('Habit') }}</label>
|
<label for="habit_id">{{ $L('Habit') }}</label>
|
||||||
<select class="form-control combobox" id="habit_id" name="habit_id" required>
|
<select class="form-control combobox" id="habit_id" name="habit_id" required>
|
||||||
<option value=""></option>
|
<option value=""></option>
|
||||||
@foreach($habits as $habit)
|
@foreach($habits as $habit)
|
||||||
<option value="{{ $habit->id }}">{{ $habit->name }}</option>
|
<option value="{{ $habit->id }}">{{ $habit->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div id="product-error" class="help-block with-errors"></div>
|
<div id="product-error" class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@include('components.datetimepicker', array(
|
@include('components.datetimepicker', array(
|
||||||
'id' => 'tracked_time',
|
'id' => 'tracked_time',
|
||||||
'label' => 'Tracked time'
|
'label' => 'Tracked time'
|
||||||
))
|
))
|
||||||
|
|
||||||
<button id="save-habittracking-button" type="submit" class="btn btn-default">{{ $L('OK') }}</button>
|
<button id="save-habittracking-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="col-lg-4 col-xs-12">
|
||||||
@include('components.habitcard')
|
@include('components.habitcard')
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,42 +5,44 @@
|
|||||||
@section('viewJsName', 'inventory')
|
@section('viewJsName', 'inventory')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-4 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<form id="inventory-form">
|
<form id="inventory-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i><span id="barcode-lookup-disabled-hint" class="small text-muted hide"> {{ $L('Barcode lookup is disabled') }}</span></label>
|
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i><span id="barcode-lookup-disabled-hint" class="small text-muted d-none"> {{ $L('Barcode lookup is disabled') }}</span></label>
|
||||||
<select class="form-control combobox" id="product_id" name="product_id" required>
|
<select class="form-control combobox" id="product_id" name="product_id" required>
|
||||||
<option value=""></option>
|
<option value=""></option>
|
||||||
@foreach($products as $product)
|
@foreach($products as $product)
|
||||||
<option data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
<option data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
<div id="flow-info-addbarcodetoselection" class="text-muted small hide"><strong><span id="addbarcodetoselection"></span></strong> {{ $L('will be added to the list of barcodes for the selected product on submit') }}</div>
|
<div id="flow-info-addbarcodetoselection" class="text-muted small d-none"><strong><span id="addbarcodetoselection"></span></strong> {{ $L('will be added to the list of barcodes for the selected product on submit') }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="new_amount">{{ $L('New amount') }} <span id="new_amount_qu_unit" class="small text-muted"></span></label>
|
<label for="new_amount">{{ $L('New amount') }} <span id="new_amount_qu_unit" class="small text-muted"></span></label>
|
||||||
<input type="number" data-notequal="notequal" class="form-control" id="new_amount" name="new_amount" min="0" not-equal="-1" required>
|
<input type="number" data-notequal="notequal" class="form-control" id="new_amount" name="new_amount" min="0" not-equal="-1" required>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
<div id="inventory-change-info" class="help-block text-muted"></div>
|
<div id="inventory-change-info" class="text-muted"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@include('components.datepicker', array(
|
@include('components.datepicker', array(
|
||||||
'id' => 'best_before_date',
|
'id' => 'best_before_date',
|
||||||
'label' => 'Best before',
|
'label' => 'Best before',
|
||||||
'hint' => 'This will apply to added products'
|
'hint' => 'This will apply to added products'
|
||||||
))
|
))
|
||||||
|
|
||||||
<button id="save-inventory-button" type="submit" class="btn btn-default">{{ $L('OK') }}</button>
|
<button id="save-inventory-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="col-lg-4 col-xs-12">
|
||||||
@include('components.productcard')
|
@include('components.productcard')
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ CULTURE }}" class="h-100">
|
<html lang="{{ CULTURE }}">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
@@ -9,11 +9,12 @@
|
|||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
|
||||||
<meta name="author" content="Bernd Bestel (bernd@berrnd.de)">
|
<meta name="author" content="Bernd Bestel (bernd@berrnd.de)">
|
||||||
<link rel="icon" type="image/png" sizes="200x200" href="{{ $U('/img/grocy.png?v=', true) }}{{ $version }}">
|
<link rel="icon" href="{{ $U('/img/grocy_icon.svg?v=', true) }}{{ $version }}">
|
||||||
|
|
||||||
<title>@yield('title') | grocy</title>
|
<title>@yield('title') | grocy</title>
|
||||||
|
|
||||||
<link href="{{ $U('/node_modules/bootstrap/dist/css/bootstrap.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/bootstrap/dist/css/bootstrap.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
|
<link href="{{ $U('/node_modules/startbootstrap-sb-admin/css/sb-admin.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/font-awesome/css/font-awesome.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/font-awesome/css/font-awesome.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/@danielfarrell/bootstrap-combobox/css/bootstrap-combobox.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/@danielfarrell/bootstrap-combobox/css/bootstrap-combobox.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
@@ -21,7 +22,7 @@
|
|||||||
<link href="{{ $U('/node_modules/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/toastr/build/toastr.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/toastr/build/toastr.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/tagmanager/tagmanager.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/tagmanager/tagmanager.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/node_modules/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/node_modules/tempusdominus-bootstrap-4/build/css/tempusdominus-bootstrap-4.min.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/components_unmanaged/noto-sans-v6-latin/noto-sans-v6-latin.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/components_unmanaged/noto-sans-v6-latin/noto-sans-v6-latin.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
<link href="{{ $U('/css/grocy.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
<link href="{{ $U('/css/grocy.css?v=', true) }}{{ $version }}" rel="stylesheet">
|
||||||
@stack('pageStyles')
|
@stack('pageStyles')
|
||||||
@@ -35,67 +36,180 @@
|
|||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="h-100">
|
<body class="fixed-nav">
|
||||||
<nav id="top-nav" class="navbar navbar-expand-lg navbar-light fixed-top py-0">
|
<nav id="mainNav" class="navbar navbar-expand-lg navbar-light fixed-top">
|
||||||
<a class="navbar-brand py-0" href="{{ $U('/') }}">grocy</a>
|
<a class="navbar-brand" href="{{ $U('/') }}"><img src="{{ $U('/img/grocy_logo.svg?v=', true) }}" height="30"></a>
|
||||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-mobile">
|
|
||||||
|
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#sidebarResponsive">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div id="navbar" class="collapse navbar-collapse">
|
<div id="sidebarResponsive" class="collapse navbar-collapse">
|
||||||
@include('components.usermenu')
|
<ul class="navbar-nav navbar-sidenav">
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="navbar-mobile" class="collapse navbar-collapse">
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Stock overview') }}" data-nav-for-page="stockoverview">
|
||||||
<!--@include('components.menu')-->
|
<a class="nav-link discrete-link" href="{{ $U('/stockoverview') }}">
|
||||||
@include('components.usermenu')
|
<i class="fa fa-fw fa-dashboard"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Stock overview') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Habits overview') }}" data-nav-for-page="habitsoverview">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/habitsoverview') }}">
|
||||||
|
<i class="fa fa-fw fa-dashboard"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Habits overview') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Batteries overview') }}" data-nav-for-page="batteriesoverview">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/batteriesoverview') }}">
|
||||||
|
<i class="fa fa-fw fa-dashboard"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Batteries overview') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item mt-4" data-toggle="tooltip" data-placement="right" title="{{ $L('Purchase') }}" data-nav-for-page="purchase">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/purchase') }}">
|
||||||
|
<i class="fa fa-fw fa-shopping-cart"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Purchase') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Consume') }}" data-nav-for-page="consume">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/consume') }}">
|
||||||
|
<i class="fa fa-fw fa-cutlery"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Consume') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Shopping list') }}" data-nav-for-page="shoppinglist">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/shoppinglist') }}">
|
||||||
|
<i class="fa fa-fw fa-shopping-bag"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Shopping list') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Inventory') }}" data-nav-for-page="inventory">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/inventory') }}">
|
||||||
|
<i class="fa fa-fw fa-list"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Inventory') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Habit tracking') }}" data-nav-for-page="habittracking">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/habittracking') }}">
|
||||||
|
<i class="fa fa-fw fa-play"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Habit tracking') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" data-toggle="tooltip" data-placement="right" title="{{ $L('Battery tracking') }}" data-nav-for-page="batterytracking">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/batterytracking') }}">
|
||||||
|
<i class="fa fa-fw fa-fire"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Battery tracking') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item mt-4" data-toggle="tooltip" data-placement="right" title="{{ $L('Manage master data') }}">
|
||||||
|
<a class="nav-link nav-link-collapse collapsed discrete-link" data-toggle="collapse" href="#top-nav-manager-master-data">
|
||||||
|
<i class="fa fa-fw fa-wrench"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Manage master data') }}</span>
|
||||||
|
</a>
|
||||||
|
<ul id="top-nav-manager-master-data" class="sidenav-second-level collapse">
|
||||||
|
<li data-nav-for-page="products">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/products') }}">
|
||||||
|
<i class="fa fa-fw fa-product-hunt"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Products') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li data-nav-for-page="locations">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/locations') }}">
|
||||||
|
<i class="fa fa-fw fa-map-marker"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Locations') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li data-nav-for-page="quantityunits">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/quantityunits') }}">
|
||||||
|
<i class="fa fa-fw fa-balance-scale"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Quantity units') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li data-nav-for-page="habits">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/habits') }}">
|
||||||
|
<i class="fa fa-fw fa-refresh"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Habits') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li data-nav-for-page="batteries">
|
||||||
|
<a class="nav-link discrete-link" href="{{ $U('/batteries') }}">
|
||||||
|
<i class="fa fa-fw fa-battery-three-quarters"></i>
|
||||||
|
<span class="nav-link-text">{{ $L('Batteries') }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul class="navbar-nav sidenav-toggler">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a id="sidenavToggler" class="nav-link text-center">
|
||||||
|
<i class="fa fa-fw fa-angle-left"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul class="navbar-nav ml-auto">
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
<a class="nav-link dropdown-toggle mr-lg-2" href="#" data-toggle="dropdown">@if(AUTHENTICATED === true){{ HTTP_USER }}@else{{ $L('Not logged in') }}@endif</a>
|
||||||
|
|
||||||
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
|
<a class="dropdown-item logout-button discrete-link" href="{{ $U('/logout') }}"><i class="fa fa-sign-out fa-fw"></i> {{ $L('Logout') }}</a>
|
||||||
|
|
||||||
|
<div class="dropdown-divider logout-button-divider"></div>
|
||||||
|
|
||||||
|
<a class="dropdown-item discrete-link" href="{{ $U('/manageapikeys') }}"><i class="fa fa-handshake-o fa-fw"></i> {{ $L('Manage API keys') }}</a>
|
||||||
|
<a class="dropdown-item discrete-link" target="_blank" href="{{ $U('/api') }}"><i class="fa fa-book"></i> {{ $L('REST API & data model documentation') }}</a>
|
||||||
|
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
|
||||||
|
<a class="dropdown-item discrete-link" href="#" data-toggle="modal" data-target="#about-modal"><i class="fa fa-info fa-fw"></i> {{ $L('About grocy') }} (Version {{ $version }})</a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div class="container-fluid h-100">
|
<div class="content-wrapper">
|
||||||
<div class="row h-100 pt-5">
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
<nav id="sidebar" class="col-2 d-none d-lg-block pt-3 px-0">
|
<div class="col content-text">
|
||||||
@include('components.menu')
|
@yield('content')
|
||||||
</nav>
|
</div>
|
||||||
|
|
||||||
<div class="col pt-3 ml-4 mr-0">
|
|
||||||
@yield('content')
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal fade" id="about-modal" tabindex="-1">
|
<div class="modal fade content-text" id="about-modal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content text-center">
|
<div class="modal-content text-center">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
<h4 class="modal-title w-100">{{ $L('About grocy') }}</h4>
|
||||||
<h4 class="modal-title">{{ $L('About grocy') }}</h4>
|
<button type="button" class="close" data-dismiss="modal" title="{{ $L('Close') }}">×</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
grocy is a project by
|
grocy is a project by
|
||||||
<a href="https://berrnd.de" target="_blank">Bernd Bestel</a><br>
|
<a href="https://berrnd.de" class="discrete-link" target="_blank">Bernd Bestel</a><br>
|
||||||
Created with passion since 2017<br>
|
Created with passion since 2017<br>
|
||||||
<br>
|
<br>
|
||||||
Version {{ $version }}<br>
|
Version {{ $version }}<br>
|
||||||
{{ $L('Released on') }} {{ $releaseDate }} <time class="timeago timeago-contextual" datetime="{{ $releaseDate }}"></time><br>
|
{{ $L('Released on') }} {{ $releaseDate }} <time class="timeago timeago-contextual" datetime="{{ $releaseDate }}"></time><br>
|
||||||
<br>
|
<br>
|
||||||
Life runs on code<br>
|
Life runs on code<br>
|
||||||
<a href="https://github.com/berrnd/grocy" target="_blank">
|
<a href="https://github.com/berrnd/grocy" class="discrete-link" target="_blank">
|
||||||
<i class="fa fa-github"></i>
|
<i class="fa fa-github"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ $L('Close') }}</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="{{ $U('/node_modules/jquery/dist/jquery.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/jquery/dist/jquery.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/bootstrap/dist/js/bootstrap.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/bootbox/bootbox.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/startbootstrap-sb-admin/js/sb-admin.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
|
<script src="{{ $U('/node_modules/bootbox/dist/bootbox.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/jquery-serializeJSON/jquery.serializejson.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/jquery-serializeJSON/jquery.serializejson.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
@if(!empty($L('bootstrap_datepicker_locale')))<script src="{{ $U('/bower_components', true) }}/bootstrap-datepicker/dist/locales/bootstrap-datepicker.{{ $L('bootstrap_datepicker_locale') }}.min.js?v={{ $version }}"></script>@endif
|
@if(!empty($L('bootstrap_datepicker_locale')))<script src="{{ $U('/bower_components', true) }}/bootstrap-datepicker/dist/locales/bootstrap-datepicker.{{ $L('bootstrap_datepicker_locale') }}.min.js?v={{ $version }}"></script>@endif
|
||||||
@@ -111,7 +225,7 @@
|
|||||||
<script src="{{ $U('/node_modules', true) }}/timeago/locales/jquery.timeago.{{ $L('timeago_locale') }}.js?v={{ $version }}"></script>
|
<script src="{{ $U('/node_modules', true) }}/timeago/locales/jquery.timeago.{{ $L('timeago_locale') }}.js?v={{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/toastr/build/toastr.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/toastr/build/toastr.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/tagmanager/tagmanager.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/tagmanager/tagmanager.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/tempusdominus-bootstrap-4/build/js/tempusdominus-bootstrap-4.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
|
|
||||||
<script src="{{ $U('/js/extensions.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/js/extensions.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/js/grocy.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/js/grocy.js?v=', true) }}{{ $version }}"></script>
|
||||||
@@ -123,4 +237,5 @@
|
|||||||
@php include __DIR__ . '/../../data/add_before_end_body.html' @endphp
|
@php include __DIR__ . '/../../data/add_before_end_body.html' @endphp
|
||||||
@endif
|
@endif
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
@@ -9,30 +9,32 @@
|
|||||||
@section('viewJsName', 'locationform')
|
@section('viewJsName', 'locationform')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-6 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
||||||
|
|
||||||
@if($mode == 'edit')
|
@if($mode == 'edit')
|
||||||
<script>Grocy.EditObjectId = {{ $location->id }};</script>
|
<script>Grocy.EditObjectId = {{ $location->id }};</script>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form id="location-form">
|
<form id="location-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Name') }}</label>
|
<label for="name">{{ $L('Name') }}</label>
|
||||||
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $location->name }}@endif">
|
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $location->name }}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="description">{{ $L('Description') }}</label>
|
<label for="description">{{ $L('Description') }}</label>
|
||||||
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $location->description }}@endif</textarea>
|
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $location->description }}@endif</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="save-location-button" type="submit" class="btn btn-default">{{ $L('Save') }}</button>
|
<button id="save-location-button" type="submit" class="btn btn-success">{{ $L('Save') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,51 +5,55 @@
|
|||||||
@section('viewJsName', 'locations')
|
@section('viewJsName', 'locations')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">
|
<div class="row">
|
||||||
@yield('title')
|
<div class="col">
|
||||||
<a class="btn btn-default" href="{{ $U('/location/new') }}" role="button">
|
<h1>
|
||||||
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
@yield('title')
|
||||||
</a>
|
<a class="btn btn-outline-dark" href="{{ $U('/location/new') }}">
|
||||||
</h1>
|
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
||||||
|
</a>
|
||||||
<div class="container-fluid">
|
</h1>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
|
||||||
<input type="text" class="form-control" id="search">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row mt-3">
|
||||||
<table id="locations-table" class="table table-striped">
|
<div class="col-3">
|
||||||
<thead>
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
<tr>
|
<input type="text" class="form-control" id="search">
|
||||||
<th>#</th>
|
</div>
|
||||||
<th>{{ $L('Name') }}</th>
|
</div>
|
||||||
<th>{{ $L('Description') }}</th>
|
|
||||||
</tr>
|
<div class="row">
|
||||||
</thead>
|
<div class="col">
|
||||||
<tbody>
|
<table id="locations-table" class="table table-sm table-striped dt-responsive">
|
||||||
@foreach($locations as $location)
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="fit-content">
|
<th>#</th>
|
||||||
<a class="btn btn-info" href="{{ $U('/location/') }}{{ $location->id }}" role="button">
|
<th>{{ $L('Name') }}</th>
|
||||||
<i class="fa fa-pencil"></i>
|
<th>{{ $L('Description') }}</th>
|
||||||
</a>
|
</tr>
|
||||||
<a class="btn btn-danger location-delete-button" href="#" role="button" data-location-id="{{ $location->id }}" data-location-name="{{ $location->name }}">
|
</thead>
|
||||||
<i class="fa fa-trash"></i>
|
<tbody>
|
||||||
</a>
|
@foreach($locations as $location)
|
||||||
</td>
|
<tr>
|
||||||
<td>
|
<td class="fit-content">
|
||||||
{{ $location->name }}
|
<a class="btn btn-info btn-sm" href="{{ $U('/location/') }}{{ $location->id }}">
|
||||||
</td>
|
<i class="fa fa-pencil"></i>
|
||||||
<td>
|
</a>
|
||||||
{{ $location->description }}
|
<a class="btn btn-danger btn-sm location-delete-button" href="#" data-location-id="{{ $location->id }}" data-location-name="{{ $location->name }}">
|
||||||
</td>
|
<i class="fa fa-trash"></i>
|
||||||
</tr>
|
</a>
|
||||||
@endforeach
|
</td>
|
||||||
</tbody>
|
<td>
|
||||||
</table>
|
{{ $location->name }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ $location->description }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -4,25 +4,27 @@
|
|||||||
@section('viewJsName', 'login')
|
@section('viewJsName', 'login')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-md-6 col-md-offset-3 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header text-center">@yield('title')</h1>
|
<div class="col-lg-6 offset-lg-3 col-xs-12">
|
||||||
|
<h1 class="text-center">@yield('title')</h1>
|
||||||
|
|
||||||
<form method="post" action="{{ $U('/login') }}" id="login-form">
|
<form method="post" action="{{ $U('/login') }}" id="login-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Username') }}</label>
|
<label for="name">{{ $L('Username') }}</label>
|
||||||
<input type="text" class="form-control" required id="username" name="username">
|
<input type="text" class="form-control" required id="username" name="username">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Password') }}</label>
|
<label for="name">{{ $L('Password') }}</label>
|
||||||
<input type="password" class="form-control" required id="password" name="password">
|
<input type="password" class="form-control" required id="password" name="password">
|
||||||
<div id="login-error" class="help-block with-errors"></div>
|
<div id="login-error" class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="login-button" type="submit" class="btn btn-default">{{ $L('OK') }}</button>
|
<button id="login-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,61 +9,63 @@
|
|||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">
|
<div class="row">
|
||||||
@yield('title')
|
<div class="col">
|
||||||
<a class="btn btn-default" href="{{ $U('/manageapikeys/new') }}" role="button">
|
<h1>
|
||||||
<i class="fa fa-plus"></i> {{ $L('Create new API key') }}
|
@yield('title')
|
||||||
</a>
|
<a class="btn btn-outline-dark" href="{{ $U('/manageapikeys/new') }}">
|
||||||
</h1>
|
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
||||||
|
</a>
|
||||||
<p class="lead"><a href="{{ $U('/api') }}" target="_blank">{{ $L('REST API & data model documentation') }}</a></p>
|
</h1>
|
||||||
|
|
||||||
<div class="container-fluid">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
|
||||||
<input type="text" class="form-control" id="search">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row mt-3">
|
||||||
<table id="apikeys-table" class="table table-striped">
|
<div class="col-3">
|
||||||
<thead>
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
<tr>
|
<input type="text" class="form-control" id="search">
|
||||||
<th>#</th>
|
</div>
|
||||||
<th>{{ $L('API key') }}</th>
|
</div>
|
||||||
<th>{{ $L('Expires') }}</th>
|
|
||||||
<th>{{ $L('Last used') }}</th>
|
<div class="row">
|
||||||
<th>{{ $L('Created') }}</th>
|
<div class="col">
|
||||||
</tr>
|
<table id="apikeys-table" class="table table-sm table-striped dt-responsive">
|
||||||
</thead>
|
<thead>
|
||||||
<tbody>
|
<tr>
|
||||||
@foreach($apiKeys as $apiKey)
|
<th>#</th>
|
||||||
<tr id="apiKeyRow_{{ $apiKey->id }}">
|
<th>{{ $L('API key') }}</th>
|
||||||
<td class="fit-content">
|
<th>{{ $L('Expires') }}</th>
|
||||||
<a class="btn btn-danger apikey-delete-button" href="#" role="button" data-apikey-id="{{ $apiKey->id }}" data-apikey-apikey="{{ $apiKey->api_key }}">
|
<th>{{ $L('Last used') }}</th>
|
||||||
<i class="fa fa-trash"></i>
|
<th>{{ $L('Created') }}</th>
|
||||||
</a>
|
</tr>
|
||||||
</td>
|
</thead>
|
||||||
<td>
|
<tbody>
|
||||||
{{ $apiKey->api_key }}
|
@foreach($apiKeys as $apiKey)
|
||||||
</td>
|
<tr id="apiKeyRow_{{ $apiKey->id }}">
|
||||||
<td>
|
<td class="fit-content">
|
||||||
{{ $apiKey->expires }}
|
<a class="btn btn-danger btn-sm apikey-delete-button" href="#" data-apikey-id="{{ $apiKey->id }}" data-apikey-apikey="{{ $apiKey->api_key }}">
|
||||||
<time class="timeago timeago-contextual" datetime="{{ $apiKey->expires }}"></time>
|
<i class="fa fa-trash"></i>
|
||||||
</td>
|
</a>
|
||||||
<td>
|
</td>
|
||||||
@if(empty($apiKey->last_used)){{ $L('never') }}@else{{ $apiKey->last_used }}@endif
|
<td>
|
||||||
<time class="timeago timeago-contextual" datetime="{{ $apiKey->last_used }}"></time>
|
{{ $apiKey->api_key }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $apiKey->row_created_timestamp }}
|
{{ $apiKey->expires }}
|
||||||
<time class="timeago timeago-contextual" datetime="{{ $apiKey->row_created_timestamp }}"></time>
|
<time class="timeago timeago-contextual" datetime="{{ $apiKey->expires }}"></time>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
<td>
|
||||||
@endforeach
|
@if(empty($apiKey->last_used)){{ $L('never') }}@else{{ $apiKey->last_used }}@endif
|
||||||
</tbody>
|
<time class="timeago timeago-contextual" datetime="{{ $apiKey->last_used }}"></time>
|
||||||
</table>
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ $apiKey->row_created_timestamp }}
|
||||||
|
<time class="timeago timeago-contextual" datetime="{{ $apiKey->row_created_timestamp }}"></time>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
|
||||||
<meta name="author" content="Bernd Bestel (bernd@berrnd.de)">
|
<meta name="author" content="Bernd Bestel (bernd@berrnd.de)">
|
||||||
<link rel="icon" type="image/png" sizes="200x200" href="{{ $U('/img/grocy.png?v=', true) }}{{ $version }}">
|
<link rel="icon" href="{{ $U('/img/grocy_icon.svg?v=', true) }}{{ $version }}">
|
||||||
|
|
||||||
<title>{{ $L('REST API & data model documentation') }} | grocy</title>
|
<title>{{ $L('REST API & data model documentation') }} | grocy</title>
|
||||||
|
|
||||||
|
@@ -9,85 +9,87 @@
|
|||||||
@section('viewJsName', 'productform')
|
@section('viewJsName', 'productform')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-6 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
||||||
|
|
||||||
@if($mode == 'edit')
|
@if($mode == 'edit')
|
||||||
<script>Grocy.EditObjectId = {{ $product->id }};</script>
|
<script>Grocy.EditObjectId = {{ $product->id }};</script>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form id="product-form">
|
<form id="product-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Name') }}</label>
|
<label for="name">{{ $L('Name') }}</label>
|
||||||
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $product->name}}@endif">
|
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $product->name}}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="description">{{ $L('Description') }}</label>
|
<label for="description">{{ $L('Description') }}</label>
|
||||||
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $product->description }}@endif</textarea>
|
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $product->description }}@endif</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group tm-group">
|
<div class="form-group tm-group">
|
||||||
<label for="barcode-taginput">{{ $L('Barcode(s)') }} <i class="fa fa-barcode"></i></label>
|
<label for="barcode-taginput">{{ $L('Barcode(s)') }} <i class="fa fa-barcode"></i></label>
|
||||||
<input type="text" class="form-control tm-input" id="barcode-taginput">
|
<input type="text" class="form-control tm-input" id="barcode-taginput">
|
||||||
<div id="barcode-taginput-container"></div>
|
<div id="barcode-taginput-container"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="location_id">{{ $L('Location') }}</label>
|
<label for="location_id">{{ $L('Location') }}</label>
|
||||||
<select required class="form-control" id="location_id" name="location_id">
|
<select required class="form-control" id="location_id" name="location_id">
|
||||||
@foreach($locations as $location)
|
@foreach($locations as $location)
|
||||||
<option @if($mode == 'edit' && $location->id == $product->location_id) selected="selected" @endif value="{{ $location->id }}">{{ $location->name }}</option>
|
<option @if($mode == 'edit' && $location->id == $product->location_id) selected="selected" @endif value="{{ $location->id }}">{{ $location->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="min_stock_amount">{{ $L('Minimum stock amount') }}</label>
|
<label for="min_stock_amount">{{ $L('Minimum stock amount') }}</label>
|
||||||
<input required min="0" type="number" class="form-control" id="min_stock_amount" name="min_stock_amount" value="@if($mode == 'edit'){{ $product->min_stock_amount }}@else{{0}}@endif">
|
<input required min="0" type="number" class="form-control" id="min_stock_amount" name="min_stock_amount" value="@if($mode == 'edit'){{ $product->min_stock_amount }}@else{{0}}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="default_best_before_days">{{ $L('Default best before days') }}<br><span class="small text-muted">{{ $L('For purchases this amount of days will be added to today for the best before date suggestion') }}</span></label>
|
<label for="default_best_before_days">{{ $L('Default best before days') }}<br><span class="small text-muted">{{ $L('For purchases this amount of days will be added to today for the best before date suggestion') }}</span></label>
|
||||||
<input required min="0" type="number" class="form-control" id="default_best_before_days" name="default_best_before_days" value="@if($mode == 'edit'){{ $product->default_best_before_days }}@else{{0}}@endif">
|
<input required min="0" type="number" class="form-control" id="default_best_before_days" name="default_best_before_days" value="@if($mode == 'edit'){{ $product->default_best_before_days }}@else{{0}}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="qu_id_purchase">{{ $L('Quantity unit purchase') }}</label>
|
<label for="qu_id_purchase">{{ $L('Quantity unit purchase') }}</label>
|
||||||
<select required class="form-control input-group-qu" id="qu_id_purchase" name="qu_id_purchase">
|
<select required class="form-control input-group-qu" id="qu_id_purchase" name="qu_id_purchase">
|
||||||
@foreach($quantityunits as $quantityunit)
|
@foreach($quantityunits as $quantityunit)
|
||||||
<option @if($mode == 'edit' && $quantityunit->id == $product->qu_id_purchase) selected="selected" @endif value="{{ $quantityunit->id }}">{{ $quantityunit->name }}</option>
|
<option @if($mode == 'edit' && $quantityunit->id == $product->qu_id_purchase) selected="selected" @endif value="{{ $quantityunit->id }}">{{ $quantityunit->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="qu_id_stock">{{ $L('Quantity unit stock') }}</label>
|
<label for="qu_id_stock">{{ $L('Quantity unit stock') }}</label>
|
||||||
<select required class="form-control input-group-qu" id="qu_id_stock" name="qu_id_stock">
|
<select required class="form-control input-group-qu" id="qu_id_stock" name="qu_id_stock">
|
||||||
@foreach($quantityunits as $quantityunit)
|
@foreach($quantityunits as $quantityunit)
|
||||||
<option @if($mode == 'edit' && $quantityunit->id == $product->qu_id_stock) selected="selected" @endif value="{{ $quantityunit->id }}">{{ $quantityunit->name }}</option>
|
<option @if($mode == 'edit' && $quantityunit->id == $product->qu_id_stock) selected="selected" @endif value="{{ $quantityunit->id }}">{{ $quantityunit->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="qu_factor_purchase_to_stock">{{ $L('Factor purchase to stock quantity unit') }}</label>
|
<label for="qu_factor_purchase_to_stock">{{ $L('Factor purchase to stock quantity unit') }}</label>
|
||||||
<input required min="1" type="number" class="form-control input-group-qu" id="qu_factor_purchase_to_stock" name="qu_factor_purchase_to_stock" value="@if ($mode == 'edit'){{ $product->qu_factor_purchase_to_stock }}@else{{1}}@endif">
|
<input required min="1" type="number" class="form-control input-group-qu" id="qu_factor_purchase_to_stock" name="qu_factor_purchase_to_stock" value="@if ($mode == 'edit'){{ $product->qu_factor_purchase_to_stock }}@else{{1}}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p id="qu-conversion-info" class="help-block text-muted"></p>
|
<p id="qu-conversion-info" class="text-muted"></p>
|
||||||
|
|
||||||
<button id="save-product-button" type="submit" class="btn btn-default">{{ $L('Save') }}</button>
|
<button id="save-product-button" type="submit" class="btn btn-success">{{ $L('Save') }}</button>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,71 +5,75 @@
|
|||||||
@section('viewJsName', 'products')
|
@section('viewJsName', 'products')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">
|
<div class="row">
|
||||||
@yield('title')
|
<div class="col">
|
||||||
<a class="btn btn-default" href="{{ $U('/product/new') }}" role="button">
|
<h1>
|
||||||
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
@yield('title')
|
||||||
</a>
|
<a class="btn btn-outline-dark" href="{{ $U('/product/new') }}">
|
||||||
</h1>
|
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
||||||
|
</a>
|
||||||
<div class="container-fluid">
|
</h1>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
|
||||||
<input type="text" class="form-control" id="search">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row mt-3">
|
||||||
<table id="products-table" class="table table-striped">
|
<div class="col-3">
|
||||||
<thead>
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
<tr>
|
<input type="text" class="form-control" id="search">
|
||||||
<th>#</th>
|
</div>
|
||||||
<th>{{ $L('Name') }}</th>
|
</div>
|
||||||
<th>{{ $L('Location') }}</th>
|
|
||||||
<th>{{ $L('Min. stock amount') }}</th>
|
<div class="row">
|
||||||
<th>{{ $L('QU purchase') }}</th>
|
<div class="col">
|
||||||
<th>{{ $L('QU stock') }}</th>
|
<table id="products-table" class="table table-sm table-striped dt-responsive">
|
||||||
<th>{{ $L('QU factor') }}</th>
|
<thead>
|
||||||
<th>{{ $L('Description') }}</th>
|
<tr>
|
||||||
</tr>
|
<th>#</th>
|
||||||
</thead>
|
<th>{{ $L('Name') }}</th>
|
||||||
<tbody>
|
<th>{{ $L('Location') }}</th>
|
||||||
@foreach($products as $product)
|
<th>{{ $L('Min. stock amount') }}</th>
|
||||||
<tr>
|
<th>{{ $L('QU purchase') }}</th>
|
||||||
<td class="fit-content">
|
<th>{{ $L('QU stock') }}</th>
|
||||||
<a class="btn btn-info" href="{{ $U('/product/') }}{{ $product->id }}" role="button">
|
<th>{{ $L('QU factor') }}</th>
|
||||||
<i class="fa fa-pencil"></i>
|
<th>{{ $L('Description') }}</th>
|
||||||
</a>
|
</tr>
|
||||||
<a class="btn btn-danger product-delete-button" href="#" role="button" data-product-id="{{ $product->id }}" data-product-name="{{ $product->name }}">
|
</thead>
|
||||||
<i class="fa fa-trash"></i>
|
<tbody>
|
||||||
</a>
|
@foreach($products as $product)
|
||||||
</td>
|
<tr>
|
||||||
<td>
|
<td class="fit-content">
|
||||||
{{ $product->name }}
|
<a class="btn btn-info btn-sm" href="{{ $U('/product/') }}{{ $product->id }}">
|
||||||
</td>
|
<i class="fa fa-pencil"></i>
|
||||||
<td>
|
</a>
|
||||||
{{ FindObjectInArrayByPropertyValue($locations, 'id', $product->location_id)->name }}
|
<a class="btn btn-danger btn-sm product-delete-button" href="#" data-product-id="{{ $product->id }}" data-product-name="{{ $product->name }}">
|
||||||
</td>
|
<i class="fa fa-trash"></i>
|
||||||
<td>
|
</a>
|
||||||
{{ $product->min_stock_amount }}
|
</td>
|
||||||
</td>
|
<td>
|
||||||
<td>
|
{{ $product->name }}
|
||||||
{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', $product->qu_id_purchase)->name }}
|
</td>
|
||||||
</td>
|
<td>
|
||||||
<td>
|
{{ FindObjectInArrayByPropertyValue($locations, 'id', $product->location_id)->name }}
|
||||||
{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', $product->qu_id_stock)->name }}
|
</td>
|
||||||
</td>
|
<td>
|
||||||
<td>
|
{{ $product->min_stock_amount }}
|
||||||
{{ $product->qu_factor_purchase_to_stock }}
|
</td>
|
||||||
</td>
|
<td>
|
||||||
<td>
|
{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', $product->qu_id_purchase)->name }}
|
||||||
{{ $product->description }}
|
</td>
|
||||||
</td>
|
<td>
|
||||||
</tr>
|
{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', $product->qu_id_stock)->name }}
|
||||||
@endforeach
|
</td>
|
||||||
</tbody>
|
<td>
|
||||||
</table>
|
{{ $product->qu_factor_purchase_to_stock }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ $product->description }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,40 +5,42 @@
|
|||||||
@section('viewJsName', 'purchase')
|
@section('viewJsName', 'purchase')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-4 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<form id="purchase-form">
|
<form id="purchase-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i><span id="barcode-lookup-disabled-hint" class="small text-muted hide"> Barcode lookup is disabled</span></label>
|
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i><span id="barcode-lookup-disabled-hint" class="small text-muted d-none"> Barcode lookup is disabled</span></label>
|
||||||
<select class="form-control combobox" id="product_id" name="product_id" required>
|
<select class="form-control combobox" id="product_id" name="product_id" required>
|
||||||
<option value=""></option>
|
<option value=""></option>
|
||||||
@foreach($products as $product)
|
@foreach($products as $product)
|
||||||
<option data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
<option data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
<div id="flow-info-addbarcodetoselection" class="text-muted small hide"><strong><span id="addbarcodetoselection"></span></strong> {{ $L('will be added to the list of barcodes for the selected product on submit') }}</div>
|
<div id="flow-info-addbarcodetoselection" class="text-muted small d-none"><strong><span id="addbarcodetoselection"></span></strong> {{ $L('will be added to the list of barcodes for the selected product on submit') }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@include('components.datepicker', array(
|
@include('components.datepicker', array(
|
||||||
'id' => 'best_before_date',
|
'id' => 'best_before_date',
|
||||||
'label' => 'Best before'
|
'label' => 'Best before'
|
||||||
))
|
))
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="amount">{{ $L('Amount') }} <span id="amount_qu_unit" class="small text-muted"></span></label>
|
<label for="amount">{{ $L('Amount') }} <span id="amount_qu_unit" class="small text-muted"></span></label>
|
||||||
<input type="number" class="form-control" id="amount" name="amount" value="1" min="1" required>
|
<input type="number" class="form-control" id="amount" name="amount" value="1" min="1" required>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="save-purchase-button" type="submit" class="btn btn-default">{{ $L('OK') }}</button>
|
<button id="save-purchase-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="col-lg-6 col-xs-12">
|
||||||
@include('components.productcard')
|
@include('components.productcard')
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,30 +9,32 @@
|
|||||||
@section('viewJsName', 'quantityunitform')
|
@section('viewJsName', 'quantityunitform')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-6 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
||||||
|
|
||||||
@if($mode == 'edit')
|
@if($mode == 'edit')
|
||||||
<script>Grocy.EditObjectId = {{ $quantityunit->id }};</script>
|
<script>Grocy.EditObjectId = {{ $quantityunit->id }};</script>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form id="quantityunit-form">
|
<form id="quantityunit-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">{{ $L('Name') }}</label>
|
<label for="name">{{ $L('Name') }}</label>
|
||||||
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $quantityunit->name }}@endif">
|
<input type="text" class="form-control" required id="name" name="name" value="@if($mode == 'edit'){{ $quantityunit->name }}@endif">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="description">{{ $L('Description') }}</label>
|
<label for="description">{{ $L('Description') }}</label>
|
||||||
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $quantityunit->description }}@endif</textarea>
|
<textarea class="form-control" rows="2" id="description" name="description">@if($mode == 'edit'){{ $quantityunit->description }}@endif</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="save-quantityunit-button" type="submit" class="btn btn-default">{{ $L('Save') }}</button>
|
<button id="save-quantityunit-button" type="submit" class="btn btn-success">{{ $L('Save') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,51 +5,55 @@
|
|||||||
@section('viewJsName', 'quantityunits')
|
@section('viewJsName', 'quantityunits')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">
|
<div class="row">
|
||||||
@yield('title')
|
<div class="col">
|
||||||
<a class="btn btn-default" href="{{ $U('/quantityunit/new') }}" role="button">
|
<h1>
|
||||||
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
@yield('title')
|
||||||
</a>
|
<a class="btn btn-outline-dark" href="{{ $U('/quantityunit/new') }}">
|
||||||
</h1>
|
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
||||||
|
</a>
|
||||||
<div class="container-fluid">
|
</h1>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
|
||||||
<input type="text" class="form-control" id="search">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row mt-3">
|
||||||
<table id="quantityunits-table" class="table table-striped">
|
<div class="col-3">
|
||||||
<thead>
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
<tr>
|
<input type="text" class="form-control" id="search">
|
||||||
<th>#</th>
|
</div>
|
||||||
<th>{{ $L('Name') }}</th>
|
</div>
|
||||||
<th>{{ $L('Description') }}</th>
|
|
||||||
</tr>
|
<div class="row">
|
||||||
</thead>
|
<div class="col">
|
||||||
<tbody>
|
<table id="quantityunits-table" class="table table-sm table-striped dt-responsive">
|
||||||
@foreach($quantityunits as $quantityunit)
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="fit-content">
|
<th>#</th>
|
||||||
<a class="btn btn-info" href="{{ $U('/quantityunit/') }}{{ $quantityunit->id }}" role="button">
|
<th>{{ $L('Name') }}</th>
|
||||||
<i class="fa fa-pencil"></i>
|
<th>{{ $L('Description') }}</th>
|
||||||
</a>
|
</tr>
|
||||||
<a class="btn btn-danger quantityunit-delete-button" href="#" role="button" data-quantityunit-id="{{ $quantityunit->id }}" data-quantityunit-name="{{ $quantityunit->name }}">
|
</thead>
|
||||||
<i class="fa fa-trash"></i>
|
<tbody>
|
||||||
</a>
|
@foreach($quantityunits as $quantityunit)
|
||||||
</td>
|
<tr>
|
||||||
<td>
|
<td class="fit-content">
|
||||||
{{ $quantityunit->name }}
|
<a class="btn btn-info btn-sm" href="{{ $U('/quantityunit/') }}{{ $quantityunit->id }}">
|
||||||
</td>
|
<i class="fa fa-pencil"></i>
|
||||||
<td>
|
</a>
|
||||||
{{ $quantityunit->description }}
|
<a class="btn btn-danger btn-sm quantityunit-delete-button" href="#" data-quantityunit-id="{{ $quantityunit->id }}" data-quantityunit-name="{{ $quantityunit->name }}">
|
||||||
</td>
|
<i class="fa fa-trash"></i>
|
||||||
</tr>
|
</a>
|
||||||
@endforeach
|
</td>
|
||||||
</tbody>
|
<td>
|
||||||
</table>
|
{{ $quantityunit->name }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ $quantityunit->description }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -5,54 +5,58 @@
|
|||||||
@section('viewJsName', 'shoppinglist')
|
@section('viewJsName', 'shoppinglist')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="page-header">
|
<div class="row">
|
||||||
@yield('title')
|
<div class="col">
|
||||||
<a class="btn btn-default" href="{{ $U('/shoppinglistitem/new') }}" role="button">
|
<h1>
|
||||||
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
@yield('title')
|
||||||
</a>
|
<a class="btn btn-outline-dark" href="{{ $U('/shoppinglistitem/new') }}">
|
||||||
<a id="add-products-below-min-stock-amount" class="btn btn-info" href="#" role="button">
|
<i class="fa fa-plus"></i> {{ $L('Add') }}
|
||||||
<i class="fa fa-plus"></i> {{ $L('Add products that are below defined min. stock amount') }}
|
</a>
|
||||||
</a>
|
<a id="add-products-below-min-stock-amount" class="btn btn-info" href="#">
|
||||||
</h1>
|
<i class="fa fa-plus"></i> {{ $L('Add products that are below defined min. stock amount') }}
|
||||||
|
</a>
|
||||||
<div class="container-fluid">
|
</h1>
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-3 no-gutters">
|
|
||||||
<label for="search">{{ $L('Search') }}</label>
|
|
||||||
<input type="text" class="form-control" id="search">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="row mt-3">
|
||||||
<table id="shoppinglist-table" class="table table-striped">
|
<div class="col-3">
|
||||||
<thead>
|
<label for="search">{{ $L('Search') }}</label>
|
||||||
<tr>
|
<input type="text" class="form-control" id="search">
|
||||||
<th>#</th>
|
</div>
|
||||||
<th>{{ $L('Product') }} / <em>{{ $L('Note') }}</em></th>
|
</div>
|
||||||
<th>{{ $L('Amount') }}</th>
|
|
||||||
</tr>
|
<div class="row">
|
||||||
</thead>
|
<div class="col">
|
||||||
<tbody>
|
<table id="shoppinglist-table" class="table table-sm table-striped dt-responsive">
|
||||||
@foreach($listItems as $listItem)
|
<thead>
|
||||||
<tr class="@if($listItem->amount_autoadded > 0) info-bg @endif">
|
<tr>
|
||||||
<td class="fit-content">
|
<th>#</th>
|
||||||
<a class="btn btn-info" href="{{ $U('/shoppinglistitem/') }}{{ $listItem->id }}" role="button">
|
<th>{{ $L('Product') }} / <em>{{ $L('Note') }}</em></th>
|
||||||
<i class="fa fa-pencil"></i>
|
<th>{{ $L('Amount') }}</th>
|
||||||
</a>
|
</tr>
|
||||||
<a class="btn btn-danger shoppinglist-delete-button" href="#" role="button" data-shoppinglist-id="{{ $listItem->id }}">
|
</thead>
|
||||||
<i class="fa fa-trash"></i>
|
<tbody>
|
||||||
</a>
|
@foreach($listItems as $listItem)
|
||||||
</td>
|
<tr class="@if($listItem->amount_autoadded > 0) table-info @endif">
|
||||||
<td>
|
<td class="fit-content">
|
||||||
@if(!empty($listItem->product_id)) {{ FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->name }}<br>@endif<em>{{ $listItem->note }}</em>
|
<a class="btn btn-info" href="{{ $U('/shoppinglistitem/') }}{{ $listItem->id }}">
|
||||||
</td>
|
<i class="fa fa-pencil"></i>
|
||||||
<td>
|
</a>
|
||||||
{{ $listItem->amount + $listItem->amount_autoadded }} @if(!empty($listItem->product_id)) {{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name }}@endif
|
<a class="btn btn-danger shoppinglist-delete-button" href="#" data-shoppinglist-id="{{ $listItem->id }}">
|
||||||
</td>
|
<i class="fa fa-trash"></i>
|
||||||
</tr>
|
</a>
|
||||||
@endforeach
|
</td>
|
||||||
</tbody>
|
<td>
|
||||||
</table>
|
@if(!empty($listItem->product_id)) {{ FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->name }}<br>@endif<em>{{ $listItem->note }}</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ $listItem->amount + $listItem->amount_autoadded }} @if(!empty($listItem->product_id)) {{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name }}@endif
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -9,45 +9,47 @@
|
|||||||
@section('viewJsName', 'shoppinglistform')
|
@section('viewJsName', 'shoppinglistform')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="row">
|
||||||
<h1 class="page-header">@yield('title')</h1>
|
<div class="col-lg-4 col-xs-12">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
<script>Grocy.EditMode = '{{ $mode }}';</script>
|
||||||
|
|
||||||
@if($mode == 'edit')
|
@if($mode == 'edit')
|
||||||
<script>Grocy.EditObjectId = {{ $listItem->id }};</script>
|
<script>Grocy.EditObjectId = {{ $listItem->id }};</script>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form id="shoppinglist-form">
|
<form id="shoppinglist-form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i></label>
|
<label for="product_id">{{ $L('Product') }} <i class="fa fa-barcode"></i></label>
|
||||||
<select class="form-control combobox" id="product_id" name="product_id" value="@if($mode == 'edit') {{ $listItem->product_id }} @endif">
|
<select class="form-control combobox" id="product_id" name="product_id" value="@if($mode == 'edit') {{ $listItem->product_id }} @endif">
|
||||||
<option value=""></option>
|
<option value=""></option>
|
||||||
@foreach($products as $product)
|
@foreach($products as $product)
|
||||||
<option @if($mode == 'edit' && $product->id == $listItem->product_id) selected="selected" @endif data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
<option @if($mode == 'edit' && $product->id == $listItem->product_id) selected="selected" @endif data-additional-searchdata="{{ $product->barcode }}" value="{{ $product->id }}">{{ $product->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<div id="product-error" class="help-block with-errors"></div>
|
<div id="product-error" class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="amount">{{ $L('Amount') }} <span id="amount_qu_unit" class="small text-muted"></span><br><span class="small text-warning">@if($mode == 'edit' && $listItem->amount_autoadded > 0){{ $L('#1 units were automatically added and will apply in addition to the amount entered here', $listItem->amount_autoadded) }}@endif</span></label>
|
<label for="amount">{{ $L('Amount') }} <span id="amount_qu_unit" class="small text-muted"></span><br><span class="small text-warning">@if($mode == 'edit' && $listItem->amount_autoadded > 0){{ $L('#1 units were automatically added and will apply in addition to the amount entered here', $listItem->amount_autoadded) }}@endif</span></label>
|
||||||
<input type="number" class="form-control" id="amount" name="amount" value="@if($mode == 'edit'){{ $listItem->amount }}@else{{1}}@endif" min="0" required>
|
<input type="number" class="form-control" id="amount" name="amount" value="@if($mode == 'edit'){{ $listItem->amount }}@else{{1}}@endif" min="0" required>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="invalid-feedback"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="note">{{ $L('Note') }}</label>
|
<label for="note">{{ $L('Note') }}</label>
|
||||||
<textarea class="form-control" rows="2" id="note" name="note">@if($mode == 'edit'){{ $listItem->note }}@endif</textarea>
|
<textarea class="form-control" rows="2" id="note" name="note">@if($mode == 'edit'){{ $listItem->note }}@endif</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="save-shoppinglist-button" type="submit" class="btn btn-default">{{ $L('Save') }}</button>
|
<button id="save-shoppinglist-button" type="submit" class="btn btn-success">{{ $L('Save') }}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
<div class="col-lg-4 col-xs-12">
|
||||||
@include('components.productcard')
|
@include('components.productcard')
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h1>{{ $L('Stock overview') }} <small class="text-muted">{{ $L('#1 products with #2 units in stock', count($currentStock), SumArrayValue($currentStock, 'amount')) }}</small></h1>
|
<h1>@yield('title') <small class="text-muted">{{ $L('#1 products with #2 units in stock', count($currentStock), SumArrayValue($currentStock, 'amount')) }}</small></h1>
|
||||||
<p class="btn btn-lg btn-warning no-real-button responsive-button mr-2">{{ $L('#1 products expiring within the next #2 days', $countExpiringNextXDays, $nextXDays) }}</p>
|
<p class="btn btn-lg btn-warning no-real-button responsive-button mr-2">{{ $L('#1 products expiring within the next #2 days', $countExpiringNextXDays, $nextXDays) }}</p>
|
||||||
<p class="btn btn-lg btn-danger no-real-button responsive-button mr-2">{{ $L('#1 products are already expired', $countAlreadyExpired) }}</p>
|
<p class="btn btn-lg btn-danger no-real-button responsive-button mr-2">{{ $L('#1 products are already expired', $countAlreadyExpired) }}</p>
|
||||||
<p class="btn btn-lg btn-info no-real-button responsive-button">{{ $L('#1 products are below defined min. stock amount', count($missingProducts)) }}</p>
|
<p class="btn btn-lg btn-info no-real-button responsive-button">{{ $L('#1 products are below defined min. stock amount', count($missingProducts)) }}</p>
|
||||||
@@ -34,52 +34,54 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row table-responsive">
|
<div class="row">
|
||||||
<table id="stock-overview-table" class="col table table-sm table-striped">
|
<div class="col">
|
||||||
<thead>
|
<table id="stock-overview-table" class="table table-sm table-striped dt-responsive">
|
||||||
<tr>
|
<thead>
|
||||||
<th>#</th>
|
<tr>
|
||||||
<th>{{ $L('Product') }}</th>
|
<th>#</th>
|
||||||
<th>{{ $L('Amount') }}</th>
|
<th>{{ $L('Product') }}</th>
|
||||||
<th>{{ $L('Next best before date') }}</th>
|
<th>{{ $L('Amount') }}</th>
|
||||||
<th class="hidden">Hidden location</th>
|
<th>{{ $L('Next best before date') }}</th>
|
||||||
</tr>
|
<th class="hidden">Hidden location</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
@foreach($currentStock as $currentStockEntry)
|
<tbody>
|
||||||
<tr id="product-{{ $currentStockEntry->product_id }}-row" class="@if($currentStockEntry->best_before_date < date('Y-m-d', strtotime('-1 days'))) error-bg @elseif($currentStockEntry->best_before_date < date('Y-m-d', strtotime('+5 days'))) warning-bg @elseif (FindObjectInArrayByPropertyValue($missingProducts, 'id', $currentStockEntry->product_id) !== null) info-bg @endif">
|
@foreach($currentStock as $currentStockEntry)
|
||||||
<td class="fit-content">
|
<tr id="product-{{ $currentStockEntry->product_id }}-row" class="@if($currentStockEntry->best_before_date < date('Y-m-d', strtotime('-1 days'))) table-danger @elseif($currentStockEntry->best_before_date < date('Y-m-d', strtotime('+5 days'))) table-warning @elseif (FindObjectInArrayByPropertyValue($missingProducts, 'id', $currentStockEntry->product_id) !== null) table-info @endif">
|
||||||
<a class="btn btn-success btn-sm product-consume-button" href="#" title="{{ $L('Consume #3 #1 of #2', FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name, FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name, 1) }}"
|
<td class="fit-content">
|
||||||
data-product-id="{{ $currentStockEntry->product_id }}"
|
<a class="btn btn-success btn-sm product-consume-button" href="#" title="{{ $L('Consume #3 #1 of #2', FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name, FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name, 1) }}"
|
||||||
data-product-name="{{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }}"
|
data-product-id="{{ $currentStockEntry->product_id }}"
|
||||||
data-product-qu-name="{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name }}"
|
data-product-name="{{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }}"
|
||||||
data-consume-amount="1">
|
data-product-qu-name="{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name }}"
|
||||||
<i class="fa fa-cutlery"></i> 1
|
data-consume-amount="1">
|
||||||
</a>
|
<i class="fa fa-cutlery"></i> 1
|
||||||
<a id="product-{{ $currentStockEntry->product_id }}-consume-all-button" class="btn btn-danger btn-sm product-consume-button" href="#" title="{{ $L('Consume all #1 which are currently in stock', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name) }}"
|
</a>
|
||||||
data-product-id="{{ $currentStockEntry->product_id }}"
|
<a id="product-{{ $currentStockEntry->product_id }}-consume-all-button" class="btn btn-danger btn-sm product-consume-button" href="#" title="{{ $L('Consume all #1 which are currently in stock', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name) }}"
|
||||||
data-product-name="{{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }}"
|
data-product-id="{{ $currentStockEntry->product_id }}"
|
||||||
data-product-qu-name="{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name }}"
|
data-product-name="{{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }}"
|
||||||
data-consume-amount="{{ $currentStockEntry->amount }}">
|
data-product-qu-name="{{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name }}"
|
||||||
<i class="fa fa-cutlery"></i> {{ $L('All') }}
|
data-consume-amount="{{ $currentStockEntry->amount }}">
|
||||||
</a>
|
<i class="fa fa-cutlery"></i> {{ $L('All') }}
|
||||||
</td>
|
</a>
|
||||||
<td>
|
</td>
|
||||||
{{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }}
|
<td>
|
||||||
</td>
|
{{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }}
|
||||||
<td>
|
</td>
|
||||||
<span id="product-{{ $currentStockEntry->product_id }}-amount">{{ $currentStockEntry->amount }}</span> {{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name }}
|
<td>
|
||||||
</td>
|
<span id="product-{{ $currentStockEntry->product_id }}-amount">{{ $currentStockEntry->amount }}</span> {{ FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name }}
|
||||||
<td>
|
</td>
|
||||||
{{ $currentStockEntry->best_before_date }}
|
<td>
|
||||||
<time class="timeago timeago-contextual" datetime="{{ $currentStockEntry->best_before_date }}"></time>
|
{{ $currentStockEntry->best_before_date }}
|
||||||
</td>
|
<time class="timeago timeago-contextual" datetime="{{ $currentStockEntry->best_before_date }}"></time>
|
||||||
<td class="hidden">
|
</td>
|
||||||
{{ FindObjectInArrayByPropertyValue($locations, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->location_id)->name }}
|
<td class="hidden">
|
||||||
</td>
|
{{ FindObjectInArrayByPropertyValue($locations, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->location_id)->name }}
|
||||||
</tr>
|
</td>
|
||||||
@endforeach
|
</tr>
|
||||||
</tbody>
|
@endforeach
|
||||||
</table>
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@stop
|
@stop
|
||||||
|
113
yarn.lock
113
yarn.lock
@@ -2,13 +2,13 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@danielfarrell/bootstrap-combobox@^1.1.8":
|
"@danielfarrell/bootstrap-combobox@https://github.com/pallidus-fintech/bootstrap-combobox.git#enhance/boostrap_4":
|
||||||
version "1.1.8"
|
version "1.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/@danielfarrell/bootstrap-combobox/-/bootstrap-combobox-1.1.8.tgz#489d0a9edb5a2fc9c65971d4422294e7ab9320ec"
|
resolved "https://github.com/pallidus-fintech/bootstrap-combobox.git#0bd1da781b99d390f1c75315b6025e7d8658b263"
|
||||||
|
|
||||||
bootbox@^4.4.0:
|
"bootbox@https://github.com/makeusabrew/bootbox.git#v5.x":
|
||||||
version "4.4.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/bootbox/-/bootbox-4.4.0.tgz#ff7f898fb87d4527e547feb64158f88450d1a0c9"
|
resolved "https://github.com/makeusabrew/bootbox.git#8d843602d6ba7a2367829e01feee399d5f0a3a07"
|
||||||
|
|
||||||
bootstrap-datepicker@^1.8.0:
|
bootstrap-datepicker@^1.8.0:
|
||||||
version "1.8.0"
|
version "1.8.0"
|
||||||
@@ -24,14 +24,49 @@ bootstrap-validator@^0.11.9:
|
|||||||
version "0.11.9"
|
version "0.11.9"
|
||||||
resolved "https://registry.yarnpkg.com/bootstrap-validator/-/bootstrap-validator-0.11.9.tgz#fb7058eef53623e78f5aa7967026f98f875a9404"
|
resolved "https://registry.yarnpkg.com/bootstrap-validator/-/bootstrap-validator-0.11.9.tgz#fb7058eef53623e78f5aa7967026f98f875a9404"
|
||||||
|
|
||||||
bootstrap@^3.3:
|
bootstrap@4.0.0:
|
||||||
version "3.3.7"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71"
|
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.0.0.tgz#ceb03842c145fcc1b9b4e15da2a05656ba68469a"
|
||||||
|
|
||||||
bootstrap@^4.1.1:
|
bootstrap@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.1.tgz#3aec85000fa619085da8d2e4983dfd67cf2114cb"
|
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.1.tgz#3aec85000fa619085da8d2e4983dfd67cf2114cb"
|
||||||
|
|
||||||
|
chart.js@2.7.1:
|
||||||
|
version "2.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.7.1.tgz#ae90b4aa4ff1f02decd6b1a2a8dabfd73c9f9886"
|
||||||
|
dependencies:
|
||||||
|
chartjs-color "~2.2.0"
|
||||||
|
moment "~2.18.0"
|
||||||
|
|
||||||
|
chartjs-color-string@^0.5.0:
|
||||||
|
version "0.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.5.0.tgz#8d3752d8581d86687c35bfe2cb80ac5213ceb8c1"
|
||||||
|
dependencies:
|
||||||
|
color-name "^1.0.0"
|
||||||
|
|
||||||
|
chartjs-color@~2.2.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.2.0.tgz#84a2fb755787ed85c39dd6dd8c7b1d88429baeae"
|
||||||
|
dependencies:
|
||||||
|
chartjs-color-string "^0.5.0"
|
||||||
|
color-convert "^0.5.3"
|
||||||
|
|
||||||
|
color-convert@^0.5.3:
|
||||||
|
version "0.5.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd"
|
||||||
|
|
||||||
|
color-name@^1.0.0:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||||
|
|
||||||
|
datatables.net-bs4@1.10.16:
|
||||||
|
version "1.10.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/datatables.net-bs4/-/datatables.net-bs4-1.10.16.tgz#9eee67cfa8565bd3807a603a188305f7d0e20e32"
|
||||||
|
dependencies:
|
||||||
|
datatables.net "1.10.16"
|
||||||
|
jquery ">=1.7"
|
||||||
|
|
||||||
datatables.net-bs4@^1.10.15, datatables.net-bs4@^1.10.19:
|
datatables.net-bs4@^1.10.15, datatables.net-bs4@^1.10.19:
|
||||||
version "1.10.19"
|
version "1.10.19"
|
||||||
resolved "https://registry.yarnpkg.com/datatables.net-bs4/-/datatables.net-bs4-1.10.19.tgz#0608dff22008cf3c7b8a68b1bc702ed255b404fb"
|
resolved "https://registry.yarnpkg.com/datatables.net-bs4/-/datatables.net-bs4-1.10.19.tgz#0608dff22008cf3c7b8a68b1bc702ed255b404fb"
|
||||||
@@ -54,22 +89,19 @@ datatables.net-responsive@2.2.3, datatables.net-responsive@^2.2.3:
|
|||||||
datatables.net "^1.10.15"
|
datatables.net "^1.10.15"
|
||||||
jquery ">=1.7"
|
jquery ">=1.7"
|
||||||
|
|
||||||
|
datatables.net@1.10.16:
|
||||||
|
version "1.10.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.16.tgz#4b052d1082824261b68eed9d22741b711d3d2469"
|
||||||
|
dependencies:
|
||||||
|
jquery ">=1.7"
|
||||||
|
|
||||||
datatables.net@1.10.19, datatables.net@^1.10.15, datatables.net@^1.10.19:
|
datatables.net@1.10.19, datatables.net@^1.10.15, datatables.net@^1.10.19:
|
||||||
version "1.10.19"
|
version "1.10.19"
|
||||||
resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.19.tgz#97a1ed41c85e62d61040603481b59790a172dd1f"
|
resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.19.tgz#97a1ed41c85e62d61040603481b59790a172dd1f"
|
||||||
dependencies:
|
dependencies:
|
||||||
jquery ">=1.7"
|
jquery ">=1.7"
|
||||||
|
|
||||||
eonasdan-bootstrap-datetimepicker@^4.17.47:
|
font-awesome@4.7.0, font-awesome@^4.7.0:
|
||||||
version "4.17.47"
|
|
||||||
resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.47.tgz#7a49970044065276e7965efd16f822735219e735"
|
|
||||||
dependencies:
|
|
||||||
bootstrap "^3.3"
|
|
||||||
jquery "^1.8.3 || ^2.0 || ^3.0"
|
|
||||||
moment "^2.10"
|
|
||||||
moment-timezone "^0.4.0"
|
|
||||||
|
|
||||||
font-awesome@^4.7.0:
|
|
||||||
version "4.7.0"
|
version "4.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
|
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
|
||||||
|
|
||||||
@@ -81,24 +113,47 @@ jquery-ui-dist@^1.12.1:
|
|||||||
version "1.12.1"
|
version "1.12.1"
|
||||||
resolved "https://registry.yarnpkg.com/jquery-ui-dist/-/jquery-ui-dist-1.12.1.tgz#5c0815d3cc6f90ff5faaf5b268a6e23b4ca904fa"
|
resolved "https://registry.yarnpkg.com/jquery-ui-dist/-/jquery-ui-dist-1.12.1.tgz#5c0815d3cc6f90ff5faaf5b268a6e23b4ca904fa"
|
||||||
|
|
||||||
|
jquery.easing@^1.4.1:
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jquery.easing/-/jquery.easing-1.4.1.tgz#47982c5836bd758fd48494923c4a101ef6e93e3b"
|
||||||
|
|
||||||
jquery@1:
|
jquery@1:
|
||||||
version "1.12.4"
|
version "1.12.4"
|
||||||
resolved "https://registry.yarnpkg.com/jquery/-/jquery-1.12.4.tgz#01e1dfba290fe73deba77ceeacb0f9ba2fec9e0c"
|
resolved "https://registry.yarnpkg.com/jquery/-/jquery-1.12.4.tgz#01e1dfba290fe73deba77ceeacb0f9ba2fec9e0c"
|
||||||
|
|
||||||
jquery@>=1.12.0, jquery@>=1.2.3, jquery@>=1.7, "jquery@>=1.7.1 <4.0.0", "jquery@^1.8.3 || ^2.0 || ^3.0":
|
jquery@3.3.1, jquery@>=1.12.0, jquery@>=1.2.3, jquery@>=1.7, "jquery@>=1.7.1 <4.0.0", jquery@^3.0, jquery@^3.3.1:
|
||||||
version "3.3.1"
|
version "3.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca"
|
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca"
|
||||||
|
|
||||||
moment-timezone@^0.4.0:
|
moment-timezone@^0.5.11:
|
||||||
version "0.4.1"
|
version "0.5.21"
|
||||||
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06"
|
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.21.tgz#3cba247d84492174dbf71de2a9848fa13207b845"
|
||||||
dependencies:
|
dependencies:
|
||||||
moment ">= 2.6.0"
|
moment ">= 2.9.0"
|
||||||
|
|
||||||
"moment@>= 2.6.0", moment@^2.10, moment@^2.18.1:
|
"moment@>= 2.9.0", moment@^2.18.1, moment@^2.22.2:
|
||||||
version "2.22.2"
|
version "2.22.2"
|
||||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
|
||||||
|
|
||||||
|
moment@~2.18.0:
|
||||||
|
version "2.18.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
|
||||||
|
|
||||||
|
popper.js@^1.12.9:
|
||||||
|
version "1.14.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.3.tgz#1438f98d046acf7b4d78cd502bf418ac64d4f095"
|
||||||
|
|
||||||
|
startbootstrap-sb-admin@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/startbootstrap-sb-admin/-/startbootstrap-sb-admin-4.0.0.tgz#cf141a260d031b36bdc013c68200a1c1ea6c9881"
|
||||||
|
dependencies:
|
||||||
|
bootstrap "4.0.0"
|
||||||
|
chart.js "2.7.1"
|
||||||
|
datatables.net-bs4 "1.10.16"
|
||||||
|
font-awesome "4.7.0"
|
||||||
|
jquery "3.3.1"
|
||||||
|
jquery.easing "^1.4.1"
|
||||||
|
|
||||||
swagger-ui-dist@^3.13.4:
|
swagger-ui-dist@^3.13.4:
|
||||||
version "3.17.3"
|
version "3.17.3"
|
||||||
resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-3.17.3.tgz#dfb96408ccc46775155f7369190c5d4b2016fe5c"
|
resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-3.17.3.tgz#dfb96408ccc46775155f7369190c5d4b2016fe5c"
|
||||||
@@ -109,6 +164,16 @@ swagger-ui-dist@^3.13.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
jquery "1"
|
jquery "1"
|
||||||
|
|
||||||
|
tempusdominus-bootstrap-4@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tempusdominus-bootstrap-4/-/tempusdominus-bootstrap-4-5.0.1.tgz#713d5d1547caf7784e510e480e32997ccbe7e511"
|
||||||
|
dependencies:
|
||||||
|
bootstrap "4.0.0"
|
||||||
|
jquery "^3.0"
|
||||||
|
moment "^2.22.2"
|
||||||
|
moment-timezone "^0.5.11"
|
||||||
|
popper.js "^1.12.9"
|
||||||
|
|
||||||
timeago@^1.6.1:
|
timeago@^1.6.1:
|
||||||
version "1.6.3"
|
version "1.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.6.3.tgz#162a1adae99356297df59339837d09f1b0f36465"
|
resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.6.3.tgz#162a1adae99356297df59339837d09f1b0f36465"
|
||||||
|
Reference in New Issue
Block a user