M3 Integration fixes

This commit is contained in:
Mark Gregory
2026-09-21 10:14:57 +01:00
parent 4af997c465
commit 6d60cbff84
5853 changed files with 79032 additions and 1825 deletions
View File
View File
@@ -0,0 +1,26 @@
/* M3 integration inside the Core WMS shell. Core owns the global sidebar, topbar, typography and appearance. */
.m3-core-page{font-family:inherit;color:inherit;width:100%;max-width:1600px;margin:0 auto;padding:1.5rem}
.m3-core-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.5rem;padding:1.5rem;border:1px solid rgb(228 228 231);border-radius:1.5rem;background:linear-gradient(135deg,#020617,#0f172a 55%,#172554);color:#fff}
.m3-core-eyebrow{margin:0 0 .5rem;font-size:.75rem;font-weight:700;letter-spacing:.28em;color:#bfdbfe}
.m3-core-title{margin:0;font:inherit;font-size:2rem;font-weight:650;line-height:1.15;letter-spacing:-.025em;color:#fff}
.m3-core-context{margin:.5rem 0 0;color:#dbeafe}
.m3-core-actions{display:flex;gap:.5rem;flex-wrap:wrap}
.m3-core-breadcrumb{margin-bottom:1rem;color:rgb(82 82 91);font-size:.875rem}
.m3-core-content{color:rgb(24 24 27)}
.m3-core-content .container-fluid{padding:0}
.m3-core-content .panel,.m3-core-content .card,.m3-core-content .well{border:1px solid rgb(228 228 231);border-radius:1rem;background:#fff;box-shadow:0 1px 2px rgb(0 0 0/.04);overflow:hidden}
.m3-core-content .panel-heading,.m3-core-content .card-header{background:rgb(250 250 250);border-bottom:1px solid rgb(228 228 231);padding:.9rem 1rem;font-weight:600}
.m3-core-content table{color:inherit;background:transparent}
.m3-core-content .table>tbody>tr>td,.m3-core-content .table>tbody>tr>th,.m3-core-content .table>tfoot>tr>td,.m3-core-content .table>tfoot>tr>th,.m3-core-content .table>thead>tr>td,.m3-core-content .table>thead>tr>th{border-color:rgb(228 228 231)}
.m3-core-content input,.m3-core-content select,.m3-core-content textarea,.m3-core-content button{font-family:inherit}
.m3-core-alert{padding:1rem;border:1px solid rgb(254 202 202);border-radius:1rem;background:rgb(254 242 242);color:rgb(153 27 27);font-weight:600}
html.dark .m3-core-header{border-color:rgb(63 63 70);background:linear-gradient(135deg,#020617,#0f172a 55%,#172554)}
html.dark .m3-core-breadcrumb{color:rgb(161 161 170)}
html.dark .m3-core-content{color:rgb(244 244 245)}
html.dark .m3-core-content .panel,html.dark .m3-core-content .card,html.dark .m3-core-content .well{border-color:rgb(63 63 70);background:rgb(24 24 27)}
html.dark .m3-core-content .panel-heading,html.dark .m3-core-content .card-header{background:rgb(39 39 42);border-color:rgb(63 63 70);color:rgb(244 244 245)}
html.dark .m3-core-content .table{color:rgb(244 244 245)}
html.dark .m3-core-content .table>tbody>tr>td,html.dark .m3-core-content .table>tbody>tr>th,html.dark .m3-core-content .table>tfoot>tr>td,html.dark .m3-core-content .table>tfoot>tr>th,html.dark .m3-core-content .table>thead>tr>td,html.dark .m3-core-content .table>thead>tr>th{border-color:rgb(63 63 70)}
html.dark .m3-core-content input,html.dark .m3-core-content select,html.dark .m3-core-content textarea{background:rgb(39 39 42);border-color:rgb(82 82 91);color:rgb(244 244 245)}
html.dark .m3-core-alert{border-color:rgb(127 29 29);background:rgb(69 10 10);color:rgb(254 202 202)}
@media(max-width:768px){.m3-core-page{padding:1rem}.m3-core-header{padding:1.25rem}.m3-core-title{font-size:1.6rem}}
View File
+1
View File
@@ -0,0 +1 @@
/* M3 module styles are provided by the Core application theme. */
+1
View File
@@ -0,0 +1 @@
require('./bootstrap');
+28
View File
@@ -0,0 +1,28 @@
window._ = require('lodash');
/**
* We'll load the axios HTTP library which allows us to easily issue requests
* to our Laravel back-end. This library automatically handles sending the
* CSRF token as a header based on the value of the "XSRF" token cookie.
*/
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
// import Echo from 'laravel-echo';
// window.Pusher = require('pusher-js');
// window.Echo = new Echo({
// broadcaster: 'pusher',
// key: process.env.MIX_PUSHER_APP_KEY,
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
// forceTLS: true
// });
View File
+20
View File
@@ -0,0 +1,20 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'These credentials do not match our records.',
'password' => 'The provided password is incorrect.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];
+19
View File
@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];
+22
View File
@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'reset' => 'Your password has been reset!',
'sent' => 'We have emailed your password reset link!',
'throttled' => 'Please wait before retrying.',
'token' => 'This password reset token is invalid.',
'user' => "We can't find a user with that email address.",
];
@@ -0,0 +1,57 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Area Chart Example
let ctx = document.getElementById("myAreaChart");
if (ctx) {
new Chart(ctx, {
type: 'line',
data: {
labels: ["Mar 1", "Mar 2", "Mar 3", "Mar 4", "Mar 5", "Mar 6", "Mar 7", "Mar 8", "Mar 9", "Mar 10", "Mar 11", "Mar 12", "Mar 13"],
datasets: [{
label: "Sessions",
lineTension: 0.3,
backgroundColor: "rgba(2,117,216,0.2)",
borderColor: "rgba(2,117,216,1)",
pointRadius: 5,
pointBackgroundColor: "rgba(2,117,216,1)",
pointBorderColor: "rgba(255,255,255,0.8)",
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(2,117,216,1)",
pointHitRadius: 50,
pointBorderWidth: 2,
data: [10000, 30162, 26263, 18394, 18287, 28682, 31274, 33259, 25849, 24159, 32651, 31984, 38451],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'date'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 7
}
}],
yAxes: [{
ticks: {
min: 0,
max: 40000,
maxTicksLimit: 5
},
gridLines: {
color: "rgba(0, 0, 0, .125)",
}
}],
},
legend: {
display: false
}
}
});
}
@@ -0,0 +1,50 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Bar Chart Example
let ctx = document.getElementById("myBarChart");
if (ctx) {
new Chart(ctx, {
type: 'bar',
data: {
labels: ["January", "February", "March", "April", "May", "June"],
datasets: [{
label: "Revenue",
backgroundColor: "rgba(2,117,216,1)",
borderColor: "rgba(2,117,216,1)",
data: [4215, 5312, 6251, 7841, 9821, 14984],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'month'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 6
}
}],
yAxes: [{
ticks: {
min: 0,
max: 15000,
maxTicksLimit: 5
},
gridLines: {
display: true
}
}],
},
legend: {
display: false
}
}
});
}
@@ -0,0 +1,19 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Pie Chart Example
let ctx = document.getElementById("myPieChart");
if (ctx){
new Chart(ctx, {
type: 'pie',
data: {
labels: ["Blue", "Red", "Yellow", "Green"],
datasets: [{
data: [12.21, 15.58, 11.25, 8.32],
backgroundColor: ['#007bff', '#dc3545', '#ffc107', '#28a745'],
}],
},
});
}
@@ -0,0 +1,4 @@
// Call the dataTables jQuery plugin
$(document).ready(function() {
$('#dataTable').DataTable();
});
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 KiB

@@ -0,0 +1,26 @@
/* M3 integration inside the Core WMS shell. Core owns the global sidebar, topbar, typography and appearance. */
.m3-core-page{font-family:inherit;color:inherit;width:100%;max-width:1600px;margin:0 auto;padding:1.5rem}
.m3-core-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.5rem;padding:1.5rem;border:1px solid rgb(228 228 231);border-radius:1.5rem;background:linear-gradient(135deg,#020617,#0f172a 55%,#172554);color:#fff}
.m3-core-eyebrow{margin:0 0 .5rem;font-size:.75rem;font-weight:700;letter-spacing:.28em;color:#bfdbfe}
.m3-core-title{margin:0;font:inherit;font-size:2rem;font-weight:650;line-height:1.15;letter-spacing:-.025em;color:#fff}
.m3-core-context{margin:.5rem 0 0;color:#dbeafe}
.m3-core-actions{display:flex;gap:.5rem;flex-wrap:wrap}
.m3-core-breadcrumb{margin-bottom:1rem;color:rgb(82 82 91);font-size:.875rem}
.m3-core-content{color:rgb(24 24 27)}
.m3-core-content .container-fluid{padding:0}
.m3-core-content .panel,.m3-core-content .card,.m3-core-content .well{border:1px solid rgb(228 228 231);border-radius:1rem;background:#fff;box-shadow:0 1px 2px rgb(0 0 0/.04);overflow:hidden}
.m3-core-content .panel-heading,.m3-core-content .card-header{background:rgb(250 250 250);border-bottom:1px solid rgb(228 228 231);padding:.9rem 1rem;font-weight:600}
.m3-core-content table{color:inherit;background:transparent}
.m3-core-content .table>tbody>tr>td,.m3-core-content .table>tbody>tr>th,.m3-core-content .table>tfoot>tr>td,.m3-core-content .table>tfoot>tr>th,.m3-core-content .table>thead>tr>td,.m3-core-content .table>thead>tr>th{border-color:rgb(228 228 231)}
.m3-core-content input,.m3-core-content select,.m3-core-content textarea,.m3-core-content button{font-family:inherit}
.m3-core-alert{padding:1rem;border:1px solid rgb(254 202 202);border-radius:1rem;background:rgb(254 242 242);color:rgb(153 27 27);font-weight:600}
html.dark .m3-core-header{border-color:rgb(63 63 70);background:linear-gradient(135deg,#020617,#0f172a 55%,#172554)}
html.dark .m3-core-breadcrumb{color:rgb(161 161 170)}
html.dark .m3-core-content{color:rgb(244 244 245)}
html.dark .m3-core-content .panel,html.dark .m3-core-content .card,html.dark .m3-core-content .well{border-color:rgb(63 63 70);background:rgb(24 24 27)}
html.dark .m3-core-content .panel-heading,html.dark .m3-core-content .card-header{background:rgb(39 39 42);border-color:rgb(63 63 70);color:rgb(244 244 245)}
html.dark .m3-core-content .table{color:rgb(244 244 245)}
html.dark .m3-core-content .table>tbody>tr>td,html.dark .m3-core-content .table>tbody>tr>th,html.dark .m3-core-content .table>tfoot>tr>td,html.dark .m3-core-content .table>tfoot>tr>th,html.dark .m3-core-content .table>thead>tr>td,html.dark .m3-core-content .table>thead>tr>th{border-color:rgb(63 63 70)}
html.dark .m3-core-content input,html.dark .m3-core-content select,html.dark .m3-core-content textarea{background:rgb(39 39 42);border-color:rgb(82 82 91);color:rgb(244 244 245)}
html.dark .m3-core-alert{border-color:rgb(127 29 29);background:rgb(69 10 10);color:rgb(254 202 202)}
@media(max-width:768px){.m3-core-page{padding:1rem}.m3-core-header{padding:1.25rem}.m3-core-title{font-size:1.6rem}}
+2
View File
@@ -0,0 +1,2 @@
.morris-hover{overflow: auto; height: 300px;position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}
.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,17 @@
/*!
Bootstrap integration for DataTables' Editor
©2015 SpryMedia Ltd - datatables.net/license
*/
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var f=a[d];if(b.call(c,f,d,a))return{i:d,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};
$jscomp.polyfill=function(a,b,c,e){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,e):$jscomp.polyfillUnisolated(a,b,c,e))};$jscomp.polyfillUnisolated=function(a,b,c,e){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];if(!(d in c))return;c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};
$jscomp.polyfillIsolated=function(a,b,c,e){var d=a.split(".");a=1===d.length;e=d[0];e=!a&&e in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<d.length-1;f++){var k=d[f];if(!(k in e))return;e=e[k]}d=d[d.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&"es6"===c?e[d]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,d,{configurable:!0,writable:!0,value:b}):b!==c&&($jscomp.propertyToPolyfillSymbol[d]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(d):$jscomp.POLYFILL_PREFIX+d,d=
$jscomp.propertyToPolyfillSymbol[d],$jscomp.defineProperty(e,d,{configurable:!0,writable:!0,value:b})))};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(b,c){return $jscomp.findInternal(this,b,c).v}},"es6","es3");
(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs5","datatables.net-editor"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net-bs5")(b,c).$);c.fn.dataTable.Editor||require("datatables.net-editor")(b,c);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;d.Editor.defaults.display="bootstrap";e=d.Editor.defaults.i18n;
e.create.title='<h5 class="modal-title">'+e.create.title+"</h5>";e.edit.title='<h5 class="modal-title">'+e.edit.title+"</h5>";e.remove.title='<h5 class="modal-title">'+e.remove.title+"</h5>";a.extend(!0,a.fn.dataTable.Editor.classes,{header:{wrapper:"DTE_Header modal-header"},body:{wrapper:"DTE_Body modal-body"},footer:{wrapper:"DTE_Footer modal-footer"},form:{tag:"form-horizontal",button:"btn",buttonInternal:"btn btn-outline-secondary"},field:{wrapper:"DTE_Field form-group row",label:"col-lg-4 col-form-label",
input:"col-lg-8",error:"error is-invalid","msg-labelInfo":"form-text text-secondary small","msg-info":"form-text text-secondary small","msg-message":"form-text text-secondary small","msg-error":"form-text text-danger small",multiValue:"card multi-value",multiInfo:"small",multiRestore:"card multi-restore"}});a.extend(!0,d.ext.buttons,{create:{formButtons:{className:"btn-primary"}},edit:{formButtons:{className:"btn-primary"}},remove:{formButtons:{className:"btn-danger"}}});d.Editor.fieldTypes.datatable.tableClass=
"table";var f=!1,k=!1,l=a('<div class="modal fade DTED"><div class="modal-dialog modal-dialog-scrollable modal-dialog-centered"></div></div>'),v=a('<button class="btn-close"></div>'),n,u=b.bootstrap;d.Editor.bootstrap=function(g){u=g};d.Editor.display.bootstrap=a.extend(!0,{},d.Editor.models.displayController,{init:function(g){g.on("displayOrder.dtebs",function(h,m,q,r){a.each(g.s.fields,function(p,t){a("input:not([type=checkbox]):not([type=radio]), select, textarea",t.node()).addClass("form-control");
a("input[type=checkbox], input[type=radio]",t.node()).addClass("form-check-input");a("select",t.node()).addClass("form-select")})});return d.Editor.display.bootstrap},open:function(g,h,m){n||(n=new u.Modal(l[0],{backdrop:"static",keyboard:!1}));a(h).addClass("modal-content");a(h).find("div.DTE_Field_Type_datatable div.dt-buttons").removeClass("btn-group").addClass("btn-group-vertical");v.attr("title",g.i18n.close).off("click.dte-bs5").on("click.dte-bs5",function(){g.close("icon")}).appendTo(a("div.modal-header",
h));var q=!1;a(c).off("mousedown.dte-bs5").on("mousedown.dte-bs5","div.modal",function(p){q=a(p.target).hasClass("modal")&&f?!0:!1});a(c).off("click.dte-bs5").on("click.dte-bs5","div.modal",function(p){a(p.target).hasClass("modal")&&q&&g.background()});var r=l.find("div.modal-dialog");r.children().detach();r.append(h);f?m&&m():(f=!0,k=!1,a(l).one("shown.bs.modal",function(){g.s.setFocus&&g.s.setFocus.focus();k=!0;m&&m()}).one("hidden",function(){f=!1}).appendTo("body"),n.show())},close:function(g,
h){if(f)if(k)a(l).one("hidden.bs.modal",function(){a(this).detach()}),n.hide(),k=f=!1,h&&h();else a(l).one("shown.bs.modal",function(){d.Editor.display.bootstrap.close(g,h)});else h&&h()},node:function(g){return l[0]}});return d.Editor});
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
$('#datatablesSimple').DataTable( {
});
$('#datatablesSimple2').DataTable( {
responsive: true,
"pageLength": 50,
"aaSorting": []
});
+17
View File
@@ -0,0 +1,17 @@
/*!
Bootstrap integration for DataTables' Editor
©2015 SpryMedia Ltd - datatables.net/license
*/
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var f=a[d];if(b.call(c,f,d,a))return{i:d,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};
$jscomp.polyfill=function(a,b,c,e){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,e):$jscomp.polyfillUnisolated(a,b,c,e))};$jscomp.polyfillUnisolated=function(a,b,c,e){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];if(!(d in c))return;c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};
$jscomp.polyfillIsolated=function(a,b,c,e){var d=a.split(".");a=1===d.length;e=d[0];e=!a&&e in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<d.length-1;f++){var k=d[f];if(!(k in e))return;e=e[k]}d=d[d.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&"es6"===c?e[d]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,d,{configurable:!0,writable:!0,value:b}):b!==c&&($jscomp.propertyToPolyfillSymbol[d]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(d):$jscomp.POLYFILL_PREFIX+d,d=
$jscomp.propertyToPolyfillSymbol[d],$jscomp.defineProperty(e,d,{configurable:!0,writable:!0,value:b})))};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(b,c){return $jscomp.findInternal(this,b,c).v}},"es6","es3");
(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs5","datatables.net-editor"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net-bs5")(b,c).$);c.fn.dataTable.Editor||require("datatables.net-editor")(b,c);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;d.Editor.defaults.display="bootstrap";e=d.Editor.defaults.i18n;
e.create.title='<h5 class="modal-title">'+e.create.title+"</h5>";e.edit.title='<h5 class="modal-title">'+e.edit.title+"</h5>";e.remove.title='<h5 class="modal-title">'+e.remove.title+"</h5>";a.extend(!0,a.fn.dataTable.Editor.classes,{header:{wrapper:"DTE_Header modal-header"},body:{wrapper:"DTE_Body modal-body"},footer:{wrapper:"DTE_Footer modal-footer"},form:{tag:"form-horizontal",button:"btn",buttonInternal:"btn btn-outline-secondary"},field:{wrapper:"DTE_Field form-group row",label:"col-lg-4 col-form-label",
input:"col-lg-8",error:"error is-invalid","msg-labelInfo":"form-text text-secondary small","msg-info":"form-text text-secondary small","msg-message":"form-text text-secondary small","msg-error":"form-text text-danger small",multiValue:"card multi-value",multiInfo:"small",multiRestore:"card multi-restore"}});a.extend(!0,d.ext.buttons,{create:{formButtons:{className:"btn-primary"}},edit:{formButtons:{className:"btn-primary"}},remove:{formButtons:{className:"btn-danger"}}});d.Editor.fieldTypes.datatable.tableClass=
"table";var f=!1,k=!1,l=a('<div class="modal fade DTED"><div class="modal-dialog modal-dialog-scrollable modal-dialog-centered"></div></div>'),v=a('<button class="btn-close"></div>'),n,u=b.bootstrap;d.Editor.bootstrap=function(g){u=g};d.Editor.display.bootstrap=a.extend(!0,{},d.Editor.models.displayController,{init:function(g){g.on("displayOrder.dtebs",function(h,m,q,r){a.each(g.s.fields,function(p,t){a("input:not([type=checkbox]):not([type=radio]), select, textarea",t.node()).addClass("form-control");
a("input[type=checkbox], input[type=radio]",t.node()).addClass("form-check-input");a("select",t.node()).addClass("form-select")})});return d.Editor.display.bootstrap},open:function(g,h,m){n||(n=new u.Modal(l[0],{backdrop:"static",keyboard:!1}));a(h).addClass("modal-content");a(h).find("div.DTE_Field_Type_datatable div.dt-buttons").removeClass("btn-group").addClass("btn-group-vertical");v.attr("title",g.i18n.close).off("click.dte-bs5").on("click.dte-bs5",function(){g.close("icon")}).appendTo(a("div.modal-header",
h));var q=!1;a(c).off("mousedown.dte-bs5").on("mousedown.dte-bs5","div.modal",function(p){q=a(p.target).hasClass("modal")&&f?!0:!1});a(c).off("click.dte-bs5").on("click.dte-bs5","div.modal",function(p){a(p.target).hasClass("modal")&&q&&g.background()});var r=l.find("div.modal-dialog");r.children().detach();r.append(h);f?m&&m():(f=!0,k=!1,a(l).one("shown.bs.modal",function(){g.s.setFocus&&g.s.setFocus.focus();k=!0;m&&m()}).one("hidden",function(){f=!1}).appendTo("body"),n.show())},close:function(g,
h){if(f)if(k)a(l).one("hidden.bs.modal",function(){a(this).detach()}),n.hide(),k=f=!1,h&&h();else a(l).one("shown.bs.modal",function(){d.Editor.display.bootstrap.close(g,h)});else h&&h()},node:function(g){return l[0]}});return d.Editor});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+145
View File
@@ -0,0 +1,145 @@
/*!
* Start Bootstrap - SB Admin v7.0.3 (https://startbootstrap.com/template/sb-admin)
* Copyright 2013-2021 Start Bootstrap
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-sb-admin/blob/master/LICENSE)
*/
//
// Scripts
//
$(function() {
let copyButtonTrans = 'Copy'
let csvButtonTrans = 'CSV'
let excelButtonTrans = 'Excel'
let pdfButtonTrans = 'PDF'
// let printButtonTrans = '{{ trans('global.datatables.print') }}'
let colvisButtonTrans = 'Columns'
let selectAllButtonTrans = 'Select All'
let selectNoneButtonTrans = 'Deselect All'
let languages = {
'en': 'https://cdn.datatables.net/plug-ins/1.10.19/i18n/English.json'
};
$.extend(true, $.fn.dataTable.Buttons.defaults.dom.button, {
className: 'btn'
})
$.extend(true, $.fn.dataTable.defaults, {
language: {
url: languages['{{ app()->getLocale() }}']
},
columnDefs: [
{
orderable: false,
className: 'select-checkbox',
targets: 0
},
{
orderable: false,
searchable: false,
targets: -1
}
],
select: {
style: 'multi+shift',
selector: 'td:first-child'
},
order: [],
scrollX: true,
pageLength: 100,
dom: "<'row'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-7'B><'col-sm-12 col-md-3'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
// dom: '<lBfr>tip<"actions">',
buttons: [{
extend: 'selectAll',
className: 'btn-primary mr-1',
text: selectAllButtonTrans,
exportOptions: {
columns: ':visible'
},
action: function(e, dt) {
e.preventDefault()
dt.rows().deselect();
dt.rows({
search: 'applied'
}).select();
}
},
{
extend: 'selectNone',
className: 'btn-primary mr-1',
text: selectNoneButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'copy',
className: 'btn-default mr-1',
text: copyButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'csv',
className: 'btn-default mr-1',
text: csvButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'excelHtml5',
className: 'btn-default mr-1',
text: excelButtonTrans,
exportOptions: {
columns: ':visible',
stripHtml: true
},
customize: function(xlsx,btnObj, tableInst) {
let sheet = xlsx.xl.worksheets['sheet1.xml'];
let cellIndexes = tableInst.cells(".bg-danger").indexes();
for (let i = 0; i < cellIndexes.length; i++) {
let cellIndex = cellIndexes[i];
let tblRow = cellIndex['row']+3; // adjusted from 0 indexed
let tblCol = cellIndex['column']; // adjusted from 0 indexed
let xlCol = numberToLetters(tblCol);
let excelCell = xlCol+tblRow;
$('row c[r='+excelCell+']', sheet).attr( 's', '11' );
}
}
},
{
extend: 'pdfHtml5',
className: 'btn-default mr-1',
text: pdfButtonTrans,
exportOptions: {
columns: ':visible'
}
},
// {
// extend: 'print',
// className: 'btn-default',
// text: printButtonTrans,
// exportOptions: {
// columns: ':visible'
// }
// },
{
extend: 'colvis',
className: 'btn-default mr-1',
text: colvisButtonTrans,
exportOptions: {
columns: ':visible'
}
}
]
});
$.fn.dataTable.ext.classes.sPageButton = '';
});
// console.log("Scripts");
+197
View File
@@ -0,0 +1,197 @@
{
"openapi": "3.0.0",
"servers": [
{
"description": "M3 Sentinel Json Receiver",
"url": "http://esn2:10014"
}
],
"info": {
"description": "Sentinel Receiver",
"version": "1.0.0",
"title": "Sentinel API",
"contact": {
"email": "you@your-company.com"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"tags": [
{
"name": "M3 API",
"description": "Receive Json from Mulesoft"
}
],
"components": {
"securitySchemes": {
"basicAuth": {
"type": "http",
"scheme": "basic"
}
}
},
"paths": {
"/api/m3receiver": {
"post": {
"tags": [
"General"
],
"summary": "M3 Laravel API",
"description": "M3 POC listener",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"example": {
"Recipient": {
"BillToId": "IC7401",
"ShipToId": "IC7401",
"PersonName": "Mary Berry",
"CompanyName": "IC7401",
"Country": "SG",
"CountryName": "United Kingdom",
"State": "ST",
"City": "SINGAPORE",
"PostalCode": "608830",
"Address1": "5A Toh Guan Road East",
"Address2": "/#04-01",
"Address3": "SINGAPORE 608830",
"Address4": "SINGAPORE",
"AccountNo": "0212520",
"Email": "KRISTIN@ELIT.NO"
},
"Contents": {
"Commodities": [
{
"Quantity": 40,
"PartWeight": 200,
"Description": "BRAID MBJ 6-150-6",
"PartNumber": "556600",
"UOM": "EA",
"SellUOM": "EA",
"PartConv": 1.000000000,
"BaseUnitPrice": 1,
"OrderLine": 1,
"ShipmentPOLine": 1,
"PrimaryLocation": "AD21A13",
"LocationSeq": "042620",
"LocationType": "PR",
"Zone": "A",
"HazMat": "H4.1",
"PartUPC": "782856449713",
"PartEAN": "3479775566009",
"ProdType": "EFX",
"LotFlag": "Y",
"LotNumber": "121333",
"ManOrd": "22222",
"FreightClass": "50",
"PallSize": "60",
"MasterCarton": "EBV-240381",
"MasterQty": 12,
"InnerQty": 1,
"PalletQty": 1,
"CartonQty": 14
}
,
{
"Quantity": 500,
"PartWeight": 500,
"Description": "ISO TP 15M4",
"PartNumber": "548400",
"UOM": "EA",
"SellUOM": "EA",
"PartConv": 1.000000000,
"BaseUnitPrice": 1,
"OrderLine": 2,
"ShipmentPOLine": 1,
"PrimaryLocation": "AE40Q26",
"LocationSeq": "054130",
"LocationType": "PR",
"Zone": "A",
"HazMat": "H4.1",
"PartUPC": "782856875413",
"PartEAN": "3479775484006",
"ProdType": "EFX",
"LotFlag": "Y",
"LotNumber": "121333",
"ManOrd": "22222",
"FreightClass": "50",
"PallSize": "60",
"MasterCarton": "EBV-240381",
"MasterQty": 12,
"InnerQty": 1,
"PalletQty": 1,
"CartonQty": 14
}
]
},
"Warehouse": "A02",
"PickerNumber": "00000087126",
"Company": "001",
"Plant": "11",
"OrderNumber": "3140001799",
"ShipmentNumber": "001",
"ShipmentPONumber": "100497",
"PromDate": 20220914,
"Currency": "EUR",
"ExchangeRate": 1.134,
"RouteCode": "111009",
"ShipTerms": "FCA",
"OrderClass": "CIC",
"CarrierCode": "BWAY",
"ShipVia": "004"
}
}
}
}
},
"security": [
{
"basicAuth": []
}
],
"parameters": [
{
"name": "Content-Type",
"in": "header",
"schema": {
"type": "string"
},
"example": "application/json"
}
],
"responses": {
"200": {
"description": "OK",
"headers": {
"Content-Type": {
"schema": {
"type": "string",
"example": "text/plain"
}
}
},
"content": {
"text/plain": {
"schema": {
"type": "string"
},
"example": {
"code": "200",
"status": "success",
"message": "File Received, DB Updated"
}
}
}
}
}
}
}
}
}
+177
View File
@@ -0,0 +1,177 @@
openapi: 3.0.0
servers:
- description: M3 Sentinel Json Receiver
url: http://esn2:10014
info:
description: Sentinel Receiver
version: 1.0.0
title: Sentinel API
contact:
email: you@your-company.com
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
tags:
- name: M3 API
description: Receive Json from Mulesoft
components:
securitySchemes:
basicAuth:
type: http
scheme: basic
paths:
/api/m3receiver:
post:
tags:
- General
summary: M3 Laravel API
description: M3 POC listener
requestBody:
content:
application/json:
schema:
type: object
example:
Recipient:
BillToId: C09586
ShipToId: C09587
PersonName: Mary Berry
CompanyName: ELIT AS
Country: UK
CountryName: United Kingdom
State: ''
City: GJERDRUM N
PostalCode: '2022'
Address1: HELLENVEGEN 9
Address2: ''
Address3: ''
Address4: ''
AccountNo: '0212520'
Email: KRISTIN@ELIT.NO
Contents:
Commodities:
- Quantity: 1
PartWeight: 102.552
Description: Electrical and Fastening Products
PartNumber: C1586230
UOM: EA
SellUOM: EA
PartConv: '1'
BaseUnitPrice: 1
FrgnUnitPrice: 1.134
OrderLine: 1
ShipmentPOLine: 1
PrimaryLocation: 1A69580
LocationSeq: B003550
LocationType: PRIMARY
Zone: A
HazMat: H4.1
PartUPC: '78285637301'
PartEAN: '3479775637204'
ProdType: FE
LotFlag: 'N'
LotNumber: ''
ManOrd: ''
FreightClass: '50'
PallSize: 60
MasterCarton: EBV-240381
MasterQty: 12
InnerQty: 1
PalletQty: 14400
CartonQty: 14
- Quantity: 50
PartWeight: 6.21
Description: HANGER,CONDUIT,FLEXIBLE
PartNumber: KX
UOM: BG
SellUOM: EA
PartConv: '1000'
BaseUnitPrice: 15.015
FrgnUnitPrice: 19.73
OrderLine: 2
ShipmentPOLine: 4
PrimaryLocation: 1F12L01
LocationSeq: A003280
LocationType: PRIMARY
Zone: A
HazMat: H4
PartUPC: '78285600156'
PartEAN: ''
ProdType: FEP
LotFlag: A
LotNumber: '450012584451'
ManOrd: C458987
FreightClass: '50'
PallSize: 60
MasterCarton: EBV-240381
MasterQty: 12
InnerQty: 1
PalletQty: 14400
CartonQty: 150
- Quantity: 50
PartWeight: 6.21
Description: HANGER,CONDUIT,FLEXIBLE
PartNumber: KX
UOM: BG
SellUOM: EA
PartConv: '1000'
BaseUnitPrice: 15.015
FrgnUnitPrice: 19.73
OrderLine: 2
ShipmentPOLine: 4
PrimaryLocation: 1F12L01
LocationSeq: A003280
LocationType: PRIMARY
Zone: A
HazMat: H4
PartUPC: '78285600156'
PartEAN: ''
ProdType: FEP
LotFlag: A
LotNumber: '450012584451'
ManOrd: C458987
FreightClass: '50'
PallSize: 60
MasterCarton: EBV-240381
MasterQty: 12
InnerQty: 1
PalletQty: 14400
CartonQty: 150
Company: '11'
Plant: '11'
Warehouse: '111'
OrderNumber: '79758'
ReleaseNumber: '05'
ShipmentNumber: '001'
PickerNumber: '1454221245'
ShipmentPONumber: '100497'
PromDate: 20221001
Currency: EUR
ExchangeRate: 1.134
RouteCode: '00'
ShipTerms: FC
FOBCode: SP
OrderClass: '001'
CarrierCode: BWAY
ShipVia: AIR
security:
- basicAuth: []
parameters:
- name: Content-Type
in: header
schema:
type: string
example: application/json
responses:
'200':
description: OK
headers:
Content-Type:
schema:
type: string
example: text/plain
content:
text/plain:
schema:
type: string
example: File Received, DB Updated
View File
+9
View File
@@ -0,0 +1,9 @@
@extends('m3::layouts.master')
@section('content')
<h1>Hello World</h1>
<p>
This view is loaded from module: {!! config('m3.name') !!}
</p>
@endsection
+19
View File
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Module M3</title>
{{-- Laravel Mix - CSS File --}}
{{-- <link rel="stylesheet" href="{{ mix('css/m3.css') }}"> --}}
</head>
<body>
@yield('content')
{{-- Laravel Mix - JS File --}}
{{-- <script src="{{ mix('js/m3.js') }}"></script> --}}
</body>
</html>
@@ -0,0 +1,92 @@
@php
# Get Current USER
$loggedUser = strtoUpper(m3_user());
$admin_users = $power_users = $csr = $execUser = "";
$UserCO = $UserWHS = $UserPL = '';
$WDWNAM = '';
$IC670MAllWHS = collect();
$m3Connection = config('m3.connection', 'pgsql');
$getUsers = [];
if (\Illuminate\Support\Facades\Schema::connection($m3Connection)->hasTable('icm428m')) {
$getUsers = DB::connection($m3Connection)
->table('icm428m')
->select('R428US', 'R428ADMUSR', 'R428PWRUSR', 'R428CO', 'R428PL', 'R428WH', 'R42811A', 'R42821A')
->where('R428US', $loggedUser)
->get();
}
foreach ($getUsers as $key=>$user) {
if(trim($user->R428ADMUSR)=="Y") {
# Different logic from Qinclude version : this not an Array
$admin_users=trim($user->R428ADMUSR);
}
if(trim($user->R428PWRUSR)=="Y") {
# Different logic from Qinclude version : this not an Array
$power_users=trim($user->R428PWRUSR);
}
if(trim($user->R42811A)=="C") {
$csr="Y";
}
if(trim($user->R42821A)=="Y") {
$execUser="Y";
}
$UserCO = $user->R428CO;
$UserWHS = $user->R428WH;
$UserPL = $user->R428PL;
}
# Get current WHS
if ($UserCO !== '' && $UserPL !== '' && $UserWHS !== '' && \Illuminate\Support\Facades\Schema::connection($m3Connection)->hasTable('ic670m')) {
$IC670M = DB::connection(config('m3.connection', 'pgsql'))->table('ic670m')
->select('WDWNAM')
->where('WDCO', $UserCO)
->where('WDPL', $UserPL)
->where('WDWHS', $UserWHS)
->first();
$WDWNAM = isset($IC670M->WDWNAM) ? trim($IC670M->WDWNAM) : '';
$IC670MAllWHS = DB::connection(config('m3.connection', 'pgsql'))->table('ic670m')->get();
}
# Get the current route information
$route = app('request')->route();
// dump($route);
$pdfURL = str_ends_with($route?->uri() ?? '', 'M3GetPDFFromCache');
// dump("CSR:".$csr .' SDA:'.$pdfURL);
$callingProgramPacking = app('request')->request->get('callingProgram')=='Packing' ? true : false;
// dump($callingProgramPacking);
@endphp
<x-layouts.app :title="trim($__env->yieldContent('title', 'M3'))">
<div class="m3-core-page" data-m3-module>
@include('m3::liberty-theme.partials.styles')
<link href="{{ route('m3.assets', ['path' => 'liberty-theme/css/m3-core-shell.css']) }}" rel="stylesheet" />
<div class="m3-core-header">
<div>
<p class="m3-core-eyebrow">M3 INTEGRATION</p>
<h1 class="m3-core-title">@yield('title', 'M3')</h1>
@if($WDWNAM !== '')
<p class="m3-core-context">{{ $WDWNAM }}</p>
@endif
</div>
<div class="m3-core-actions">@yield('btn')</div>
</div>
@hasSection('breadcrumb')
<div class="m3-core-breadcrumb">@yield('breadcrumb')</div>
@endif
<section class="m3-core-content">
@if($csr === '' || ($csr === 'Y' && $pdfURL))
@yield('content')
@else
<div class="m3-core-alert">403 - Unauthorized</div>
@endif
</section>
@include('m3::liberty-theme.partials.scripts')
@yield('scripts')
</div>
</x-layouts.app>
@@ -0,0 +1,67 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Scan Boxes To Pallet
@endsection
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Scan Boxes To Pallet</h1>
<div class="card mb-4">
<div class="card-header">
<form id="palletForm" method="GET" action="{{ route('m3.BoxPackToPallet.getboxes') }}">
<div class="d-flex align-items-center gap-2">
<label for="R659PALT" class="col-form-label text-nowrap">Scan Pallet</label>
<input type="text"
id="R659PALT"
class="form-control"
name="R659PALT"
placeholder="S000000000000"
maxlength="12"
value=""
style="max-width: 220px;">
<div id="palletError" class="text-danger small" style="display:none;"></div>
<button type="submit" class="btn btn-primary text-nowrap">Scan Pallet</button>
</div>
</form>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function () {
$('#palletForm').on('submit', function (e) {
const val = $('#R659PALT').val().trim();
const $error = $('#palletError');
if (!val.startsWith('S')) {
e.preventDefault();
$error.text('Pallet must start with "S".').show();
$('#R659PALT').addClass('is-invalid');
return;
}
if (val.length > 12) {
e.preventDefault();
$error.text('Pallet must be 12 characters max.').show();
$('#R659PALT').addClass('is-invalid');
return;
}
$error.hide();
$('#R659PALT').removeClass('is-invalid');
});
// Clear error on input
$('#R659PALT').on('input', function () {
$('#palletError').hide();
$(this).removeClass('is-invalid');
});
$('#R659PALT').on('change', function () {
$('#palletForm').submit();
});
});
</script>
@endsection
@@ -0,0 +1,331 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Load Boxes on Pallets
@endsection
@section('content')
<div class="container-fluid px-4">
<h4 class="mt-4">Load Boxes on Pallets</h4>
<div class="row mb-2">
{{-- ── Pallet Header Card ─────────────────────────────── --}}
<div class="col-6">
<div class="card mb-3 border-primary h-100">
<div class="card-header bg-primary text-white fw-bold d-flex justify-content-between align-items-center">
<span>Pallet Information</span>
<span><a class="btn btn-info" href="{{ route('m3.BoxPackToPallet') }}">Next Pallet</a></span>
</div>
<div class="card-body py-2">
<div class="row g-2 align-items-center">
<div class="col-auto">
<span class="text-muted small">Pallet #</span>
<span id="hdr-pallet" class="fs-5 fw-bold ms-1">{{ $R659PALT }}</span>
</div>
<div class="col-auto border-start ps-3">
<span class="text-muted small">User</span>
<span id="hdr-user" class="ms-1">
{{ $palletHeader->R659USER ?? (m3_user() !== '' ? Str::upper(m3_user()) : '—') }}
</span>
</div>
<div class="col-auto border-start ps-3">
<span class="text-muted small">Date</span>
<span id="hdr-date" class="ms-1">
{{ $palletHeader ? $palletHeader->R659DATE : '—' }}
</span>
</div>
<div class="col-auto border-start ps-3">
<span class="text-muted small">Time</span>
<span id="hdr-time" class="ms-1">
{{ $palletHeader ? $palletHeader->R659TIME : '—' }}
</span>
</div>
</div>
</div>
</div>
</div>
{{-- ── Scan Input Card ────────────────────────────────── --}}
<div class="col-6">
<div class="card mb-4 border-secondary h-100">
<div class="card-header fw-semibold d-flex justify-content-between align-items-center">
<span>Scan Box Barcode</span>
{{-- <span id="scan-alert-badge" class="badge bg-danger d-none">Danger</span> --}}
</div>
<div class="card-body py-2">
<div class="d-flex align-items-center gap-2 flex-wrap">
<div>
<div class="input-group">
<div class="input-group-text">Box #</div>
<label for="scan-input" class="visually-hidden">Scan or type box #</label>
<input type="text" id="scan-input" class="form-control" maxlength="12"
placeholder="Scan or type box #" autocomplete="off" autofocus style="width: 180px;">
</div>
</div>
<div class="mt-auto">
<button id="btn-scan" class="btn btn-success">
<i class="fas fa-barcode me-1"></i> Add Box
</button>
</div>
{{-- <div id="scan-alert-1" class="d-none align-self-center"></div> --}}
</div>
</div>
</div>
</div>
</div>
{{-- ── Boxes DataTable Card ────────────────────────────── --}}
<div class="card mb-4">
<div class="card-header fw-semibold d-flex justify-content-between align-items-center">
<span>Boxes on Pallet</span>
<span id="box-count" class="badge bg-secondary">0 boxes</span>
</div>
<div class="card-body p-1">
<div class="table-responsive">
<table id="boxes-table" class="table table-striped table-hover mb-0 w-100">
<thead>
<tr>
<th>Box #</th>
<th>Carrier</th>
<th>Conveyor</th>
<th>Country</th>
<th>Status</th>
<th>User</th>
<th>Date</th>
<th>Time</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
const PALT = '{{ $R659PALT ?? '' }}';
const GET_URL = '{{ route('m3.BoxPackToPallet.getboxes') }}';
const SCAN_URL = '{{ route('m3.BoxPackToPallet.scanboxes') }}';
const DEL_URL = '{{ route('m3.BoxPackToPallet.deletebox') }}';
// Seed from PHP on first load — avoids a redundant AJAX call on page load
const initialData = @json($boxes ?? []);
// ── DataTable init ────────────────────────────────────────
const dt = $('#boxes-table').DataTable({
data: initialData,
columns: [{
data: 'R659BOX'
},
{
data: 'AYSPR15A01',
defaultContent: '—'
},
{
data: 'CONVEYOR_NAME',
defaultContent: '—'
},
{
data: 'A4SHSHCT',
defaultContent: '—'
},
{
data: 'R659LOADED',
render: val => (val ?? '').toString().trim() ?
'<span class="badge bg-success">Loaded</span>' :
'<span class="badge bg-warning text-dark">Pending</span>'
},
{
data: 'R659USER'
},
{
data: 'R659DATE',
render: val => val
},
{
data: 'R659TIME',
render: val => val
},
{
data: null,
orderable: false,
searchable: false,
className: 'text-center',
render: row => {
const loaded = (row.R659LOADED ?? '').toString().trim();
if (loaded) return '—';
return `<button class="btn btn-danger btn-sm btn-delete"
data-box="${row.R659BOX}">
<i class="fas fa-trash-alt"></i>
</button>`;
}
},
],
order: [],
pageLength: 25,
responsive: true,
select: false,
buttons: false,
dom: "<'row mt-2'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-3'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row mt-2'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
// Override columnDefs to remove the checkbox class
columnDefs: [{
orderable: false,
searchable: false,
targets: -1
}]
});
// Update count badge on init
updateCount();
// ── Refresh table via AJAX (after scan or delete) ─────────
function reloadBoxes() {
$.get(GET_URL, {
R659PALT: PALT
}, function(res) {
if (res.success) {
dt.clear().rows.add(res.data).draw();
updateCount();
}
}).fail(function() {
showAlert('danger', 'Failed to refresh boxes.');
});
}
// ── Scan / Add box ────────────────────────────────────────
function doScan() {
const box = $('#scan-input').val().trim().toUpperCase();
if (!box) return;
$('#btn-scan').prop('disabled', true).html(
'<span class="spinner-border spinner-border-sm"></span>');
$.post(SCAN_URL, {
R659PALT: PALT,
R659BOX: box,
_token: '{{ csrf_token() }}'
})
.done(function(res) {
showAlert('success', res.message);
dt.clear().rows.add(res.data).draw();
updateCount();
$('#scan-input').val('').focus();
})
.fail(function(xhr) {
showAlert('danger', xhr.responseJSON?.message ?? 'Scan failed.');
$('#scan-input').select().focus();
})
.always(function() {
$('#btn-scan').prop('disabled', false).html(
'<i class="fas fa-barcode me-1"></i> Add Box');
});
}
$('#btn-scan').on('click', doScan);
$('#scan-input').on('change', function(e) {
// if (e.key === 'Enter') doScan();
doScan();
});
// ── Delete box ────────────────────────────────────────────
$('#boxes-table').on('click', '.btn-delete', function() {
const box = $(this).data('box');
Swal.fire({
title: 'Remove Box?',
text: `Remove box ${box} from pallet ${PALT}?`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#d33',
confirmButtonText: 'Yes, remove it',
}).then(result => {
if (!result.isConfirmed) return;
$.post(DEL_URL, {
R659PALT: PALT,
R659BOX: box,
_token: '{{ csrf_token() }}'
})
.done(function(res) {
showAlert('success', res.message);
dt.clear().rows.add(res.data).draw();
updateCount();
})
.fail(function(xhr) {
showAlert('danger', xhr.responseJSON?.message ?? 'Delete failed.');
});
});
});
// ── Helpers ───────────────────────────────────────────────
function updateCount() {
const n = dt.data().length;
$('#box-count').text(n + ' box' + (n !== 1 ? 'es' : ''));
}
function playDing() {
const ctx = new AudioContext();
const oscillator = ctx.createOscillator();
const gainNode = ctx.createGain();
oscillator.connect(gainNode);
gainNode.connect(ctx.destination);
oscillator.type = 'sine';
oscillator.frequency.setValueAtTime(880, ctx.currentTime); // A5 note
// Fade out for a natural "ding" decay
gainNode.gain.setValueAtTime(1, ctx.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 1.5);
oscillator.start(ctx.currentTime);
oscillator.stop(ctx.currentTime + 1.5);
}
function showAlert(type, msg) {
let iconType;
// Map your badge types to SweetAlert icons
if (type === 'success') iconType = 'success';
else if (type === 'danger') iconType = 'error';
else if (type === 'warning') iconType = 'warning';
else iconType = 'info';
if (type === 'danger' || type === 'warning') {
playDing();
Swal.fire({
icon: iconType,
title: msg,
showConfirmButton: true,
}).then((result) => {
if (result.isConfirmed) $('#scan-input').select().focus();
});
} else {
Swal.fire({
toast: true,
position: 'bottom-end',
icon: iconType,
title: msg,
showConfirmButton: false,
timer: 3000,
timerProgressBar: true
});
}
}
document.body.classList.toggle('sb-sidenav-toggled');
});
</script>
@endsection
@@ -0,0 +1,277 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - M3 Delivery Methods
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">M3 Delivery Methods Maintenance</h1>
<div class="card mb-4">
<div class="card-header">
@if($power_user->R428PWRUSR=="Y")
<button name="M3DeliveryAdd" type="button" class="btn btn-sm btn-info M3DeliveryAdd_click" id="M3DeliveryAdd_click"
data-AT9DPW="{{$power_user->R428CO.$power_user->R428PL.$power_user->R428WH}}">Add Record</button>
@endif
</div>
{{-- // AVCO AVCO CHARACTER 3 No ' ' Division
// AVWHS AVWHS CHARACTER 3 No ' ' Warehouse
// AVPLANT AVPLANT CHARACTER 3 No ' ' Plant
// AVDELMETH AVDELMETH CHARACTER 4 No ' ' Delivery method
// AVSHPVIA AVSHPVIA CHARACTER 4 No ' ' Sentinel ship via
// AVSHSRT AVSHSRT CHARACTER 6 No ' ' Sentinel route
// AVSHORCL AVSHORCL CHARACTER 3 No ' ' Sentinel intl code --}}
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5" style="width:80%">
<thead>
<tr>
<th></th>
<th></th>
<th>Delivery method</th>
<th>Ship Via</th>
<th>Route</th>
<th>Intl code</th>
</tr>
</thead>
<tbody>
@foreach($ICM664M as $key=>$val)
<tr>
<td></td>
<td>
@if($power_user->R428PWRUSR=="Y")
<button name="M3DeliveryEdit{{trim($val->AVDELMETH)}}" type="submit" class="btn btn-sm btn-info M3DeliveryEdit_click" id="M3DeliveryEdit_click"
data-AVDELMETH="{{$val->AVDELMETH}}" data-AVSHPVIA="{{trim($val->AVSHPVIA)}}" data-AVSHSRT="{{trim($val->AVSHSRT)}}"
data-AVSHORCL="{{trim($val->AVSHORCL)}}"
>Edit</button>
@endif
</td>
<td> {{ $val->AVDELMETH }} </td>
<td> {{ $val->AVSHPVIA }} </td>
<td> {{ $val->AVSHSRT }} </td>
<td> {{ $val->AVSHORCL }} </td>
</tr>
@endforeach
<!-- endif-->
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- /.row -->
<!-- @include('m3::liberty-theme.partials.modals.blank') -->
@include('m3::liberty-theme.partials.modals.M3DeliveryAdd')
@include('m3::liberty-theme.partials.modals.M3DeliveryEdit')
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
var myTable = $('#datatablesSimple5').DataTable({
"aaSorting": [],
"lengthMenu": [ [15,35,50,-1], [15,35,50,"All"] ],
"sPaginationType": "full_numbers",
"dom": 'Bfrtip', // Needs button container
"responsive": true,
"orderCellsTop": true,
"order": [ [2, 'asc'] ],
"pageLength": 15,
"columnDefs": [
{
orderable: true,
searchable: true,
targets: -1
}
],
});
//
// Open Modal M3Delivery Edit
//
// AVCO AVCO CHARACTER 3 No ' ' Division
// AVWHS AVWHS CHARACTER 3 No ' ' Warehouse
// AVPLANT AVPLANT CHARACTER 3 No ' ' Plant
// AVDELMETH AVDELMETH CHARACTER 4 No ' ' Delivery method
// AVSHPVIA AVSHPVIA CHARACTER 4 No ' ' Sentinel ship via
// AVSHSRT AVSHSRT CHARACTER 6 No ' ' Sentinel route
// AVSHORCL AVSHORCL CHARACTER 3 No ' ' Sentinel intl code
$(document).on('click', '#M3DeliveryEdit_click', function() {
// console.log($(this));
$("#AVDELMETH").val($(this).data("avdelmeth"));
$("#AVSHPVIA").val($(this).data("avshpvia"));
$("#AVSHSRT").val($(this).data("avshsrt"));
$("#AVSHORCL").val($(this).data("avshorcl"));
$("#OLD_AVDELMETH").val($(this).data("avdelmeth"));
$("#OLD_AVSHPVIA").val($(this).data("avshpvia"));
$("#OLD_AVSHSRT").val($(this).data("avshsrt"));
$("#OLD_AVSHORCL").val($(this).data("avshorcl"));
$('#M3DeliveryEdit').modal('show');
});
//
// Open Modal M3Delivery Add
//
$(document).on('click', '#M3DeliveryAdd_click', function() {
// console.log($(this));
$('#M3DeliveryAdd').modal('show');
});
// Clear values on Edit form when Close is clicked
$(document).on('click', '#closeEdit', function() {
document.getElementById("frmEdit").reset();
});
// Clear values on Add form when Close is clicked
$(document).on('click', '#closeAdd', function() {
document.getElementById("frmAdd").reset();
});
//
// Save M3Delivery Edit
//
$(document).on('click', '#submitM3DeliveryEdit', function() {
var changes_detected = 0;
var errors_found = 0;
// Retrieve the values we need to pass on
var NEW_AVDELMETH = $("#AVDELMETH").val();
var NEW_AVSHPVIA = $("#AVSHPVIA").val();
var NEW_AVSHSRT = $("#AVSHSRT").val();
var NEW_AVSHORCL = $("#AVSHORCL").val();
var NEW_AVCO = $("#AVCO").val();
var NEW_AVPLANT = $("#AVPLANT").val();
var NEW_AVWHS = $("#AVWHS").val();
// Retrieve old values
var OLD_AVDELMETH = $("#OLD_AVDELMETH").val();
var OLD_AVSHPVIA = $("#OLD_AVSHPVIA").val();
var OLD_AVSHSRT = $("#OLD_AVSHSRT").val();
var OLD_AVSHORCL = $("#OLD_AVSHORCL").val();
if(NEW_AVSHPVIA!=OLD_AVSHPVIA || NEW_AVSHSRT!=OLD_AVSHSRT || NEW_AVSHORCL!=OLD_AVSHORCL) {
changes_detected = 1;
}
if (changes_detected==0) {
$('#M3DeliveryEdit').modal('show');
alert("No changes have been detected. Please try again");
} else {
if(errors_found==0) {
var csrf = document.querySelector('meta[name="csrf-token"]').content;
var form_post = {
'AVDELMETH': NEW_AVDELMETH,
'AVSHPVIA': NEW_AVSHPVIA,
'AVSHSRT': NEW_AVSHSRT,
'AVSHORCL': NEW_AVSHORCL,
'AVCO': NEW_AVCO,
'AVPLANT': NEW_AVPLANT,
'AVWHS': NEW_AVWHS,
'_token': csrf
};
$.ajax({
type:'POST',
url:'/M3Delivery/saveM3DeliveryEdit',
data: form_post,
success:function(data) {
if (data=="success") {
//$('#blank-modal').modal('hide');
$('#M3DeliveryEdit').modal('hide');
// alert("should reload here");
location.reload();
} else {
$("#AVDELMETH").val(NEW_AVDELMETH);
$("#AVSHPVIA").val(NEW_AVSHPVIA);
$("#AVSHSRT").val(NEW_AVSHSRT);
$("#AVSHORCL").val(NEW_AVSHORCL);
$("#AVCO").val(NEW_AVCO);
$("#AVPLANT").val(NEW_AVPLANT);
$("#AVWHS").val(NEW_AVWHS);
$("#OLD_AVDELMETH").val(OLD_AVDELMETH);
$("#OLD_AVSHPVIA").val(OLD_AVSHPVIA);
$("#OLD_AVSHSRT").val(OLD_AVSHSRT);
$("#OLD_AVSHORCL").val(OLD_AVSHORCL);
}
}
});
}
}
});
//
// Save M3Delivery Add
//
$(document).on('click', '#submitM3DeliveryAdd', function() {
var errors_found = 0;
// Retrieve the values we need to pass on
var NEW_AVDELMETH = $("#addAVDELMETH").val();
var NEW_AVSHPVIA = $("#addAVSHPVIA").val();
var NEW_AVSHSRT = $("#addAVSHSRT").val();
var NEW_AVSHORCL = $("#addAVSHORCL").val();
var NEW_AVCO = $("#addAVCO").val();
var NEW_AVPLANT = $("#addAVPLANT").val();
var NEW_AVWHS = $("#addAVWHS").val();
var csrf = document.querySelector('meta[name="csrf-token"]').content;
var form_post = {
'AVDELMETH': NEW_AVDELMETH,
'AVSHPVIA': NEW_AVSHPVIA,
'AVSHSRT': NEW_AVSHSRT,
'AVSHORCL': NEW_AVSHORCL,
'AVCO': NEW_AVCO,
'AVPLANT': NEW_AVPLANT,
'AVWHS': NEW_AVWHS,
'_token': csrf
};
if(errors_found==0) {
$.ajax({
type:'POST',
url:'/M3Delivery/saveM3DeliveryAdd',
data: form_post,
success:function(data) {
if (data=="success") {
$('#M3DeliveryAdd').modal('hide');
location.reload();
} else {
$("#addAVDELMETH").val(NEW_AVDELMETH);
$("#addAVSHPVIA").val(NEW_AVSHPVIA);
$("#addAVSHSRT").val(NEW_AVSHSRT);
$("#addAVSHORCL").val(NEW_AVSHORCL);
if (data=="exists") {
alert("Delivery Method entered already exists. Please try again.");
$("#addAVDELMETH").val('');
$("#addAVSHPVIA").val('');
$("#addAVSHSRT").val('');
$("#addAVSHORCL").val('');
$('#M3DeliveryAdd').modal('show');
}
}
}
});
}
});
});
//});
</script>
@endsection
@@ -0,0 +1,854 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Transaction log for M3/Sentinel interface
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Transaction log for M3/Sentinel interface</h1>
<div class="card mb-4">
<div class="card-header">
<div class="row">
<div class="col-12 mt-1">
<form class="needs-validation" enctype="multipart/form-data" id="formFilters">
<div class="mb-3 row align-items-center">
{{-- Show errors --}}
@php $showerrors = old('SHOWERRORS') ?? $showerrors; @endphp
<div class="col-auto">
<label class=" form-check-label" for="flexSwitchCheckDefault">Show errors</label>
<div class="form-check form-switch">
<label for="SHOWERRORS" class="visually-hidden">SHOWERRORS</label>
<input class="form-check-input" type="checkbox" id="SHOWERRORS" name="SHOWERRORS"
value="Y" {{ $showerrors == 'Y' ? 'checked' : '' }}>
</div>
</div>
{{-- MACPKR --}}
<div class="col-auto">
<label for="inputPassword2" class="col-form-label">Delivery Note</label>
<label for="SHMACPKR" class="visually-hidden">SHMACPKR</label>
<input type="text" class="form-control form-control-sm" name="SHMACPKR"
id="SHMACPKR" value="{{ old('SHMACPKR') ?? $macpkr }}" maxlength="11">
</div>
{{-- Start Date --}}
<div class="col-auto">
<label for="exampleFormControlInput1" class="col-form-label">Start Date</label>
<label for="STARTDATE" class="visually-hidden">STARTDATE</label>
<input type="date" class="form-control form-control-sm" id="STARTDATE"
name="STARTDATE"
value="{{ old('STARTDATE') ?? today()->subDays(1)->format('Y-m-d') }}" required>
</div>
{{-- End Date --}}
<div class="col-auto">
<label for="exampleFormControlInput1" class="col-form-label">End Date</label>
<label for="ENDDATE" class="visually-hidden">ENDDATE</label>
<input type="date" class="form-control form-control-sm" id="ENDDATE" name="ENDDATE"
value="{{ old('ENDDATE') ?? date('Y-m-d') }}" required>
</div>
{{-- SHSOURCE --}}
<div class="col-auto">
<label for="SHSOURCE" class="col-form-label">Source</label>
@php
$transxTypes = Config::get('arrays.transxTypes');
$shsource = old('SHSOURCE') ?? $shsource;
@endphp
{{-- transxTypes --}}
<select class="form-select" name="SHSOURCE" id="SHSOURCE">
<option value="">Select Source...</option>
@foreach ($transxTypes as $key => $transxType)
<option value="{{ $key }}" {{ $shsource == $key ? 'selected' : '' }}>
{{ $transxType }}</option>
@endforeach
</select>
</div>
<input type="hidden" id="SKIPDATES" name="SKIPDATES" value="{{ $skipdates }}">
<div class="col-auto align-self-end">
<button type="button" class="btn btn-sm btn-primary" id="filterTop">Submit</button>
</div>
<div class="col-auto align-self-end">
<a type="button" class="btn btn-sm btn-danger" id="refresh">Refresh</a>
</div>
<div class="col-auto align-self-end">
<button type="button" class="btn btn-sm btn-warning mt-4" id="exportExcel">Download
Excel</button>
</div>
</div>
</form>
{{-- Form for Export --}}
<form enctype="multipart/form-data" method="POST" action="{{ route('m3.exporttoExcel699') }}"
id="exporttoExcelForm">
@csrf
<input type="hidden" name="SHMACPKR" id="SHMACPKR1" value="">
<input type="hidden" name="SHSOURCE" id="SHSOURCE1" value="">
<input type="hidden" name="STARTDATE" id="STARTDATE1" value="">
<input type="hidden" name="ENDDATE" id="ENDDATE1" value="">
<input type="hidden" name="SHOWERRORS" id="SHOWERRORS1" value="">
<input type="hidden" name="SKIPDATES" id="SKIPDATES1" value="{{ $skipdates }}">
</form>
</div>
<div class="col-12 mt-1">
{{-- Header Title --}}
</div>
</div>
</div>
<div class="card-body">
<div class="container-fluid table-responsive">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5"
style="width:100%">
<thead>
<tr>
<th>Delivery Note</th>
<th>Order #</th>
<th>Customer</th>
<th>Date</th>
<th>Error</th>
<th>Error description</th>
<th>Request Type</th>
<th>Source of transaction</th>
<th>User</th>
<th>Request or Response Data</th>
<th>Error message</th>
<th>Division</th>
<th>Warehouse</th>
<th>Acknowledge/Retry Date</th>
<th>Acknowledged/Retried by User</th>
<th>Internal Box Number</th>
<th>Link to SPD</th>
<th>Note</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
var transTypes = JSON.parse('{!! json_encode($transxTypes) !!}');
// console.log(transTypes);
var usersList = JSON.parse('{!! json_encode($ICM428MCOL) !!}');
// DataTables Init
let copyButtonTrans = 'Copy'
let csvButtonTrans = 'CSV'
let excelButtonTrans = 'Excel'
let pdfButtonTrans = 'PDF'
let colvisButtonTrans = 'Columns'
let selectAllButtonTrans = 'Select All'
let selectNoneButtonTrans = 'Deselect All'
let languages = {
'en': 'https://cdn.datatables.net/plug-ins/1.10.19/i18n/English.json'
};
$.extend(true, $.fn.dataTable.Buttons.defaults.dom.button, {
className: 'btn'
})
// End Datatables
$(document).ready(function() {
// DataTables Columns
var columnDefs = [{
data: "SHMACPKR",
name: "SHMACPKR",
render: function(data, type, row) {
return '<a class="link-primary getmackpkr" href="#" data-macpkr="' + row.SHMACPKR
.trim() + '">' + row.SHMACPKR.trim() + '</a>';
}
},
{
data: "A4ONO",
name: "A4ONO",
render: function(data, type, row) {
if (data != null) {
return data;
} else {
return row.A1ONO;
}
}
},
{
data: "A4SHSHNM",
name: "A4SHSHNM",
render: function(data, type, row) {
if (data != null) {
return data;
} else {
return row.A1SHSHNM;
}
}
},
{
data: "SHDATETIME",
name: "SHDATETIME",
type: 'date'
},
{
data: "SHERROR",
name: "SHERROR",
render: function(data, type, row) {
// return data;
newData = data == 'X' && (row.SHTYPE.trim() == 'M3-QtyChg') ?
'<button type="button" class="btn btn-sm btn-warning ml-1 acknowledge" data-shsource="' +
row.SHSOURCE.trim() +
'" data-macpkr="' + row.SHMACPKR.trim() + '" data-shco="' + row.SHCO.trim() +
'" data-shwhs="' + row.SHWHS.trim() + '" ' +
' data-shdt="' + row.SHDT.trim() + '" data-shtime="' + row.SHTIME.trim() +
'" data-shtype="' + row.SHTYPE.trim() + '">Acknowledge</button>' :
data;
closeBtn = (data == 'X' && (row.SHTYPE.trim() == 'M3-Err-out' || row.SHTYPE
.trim() == 'M3-Res-out' || row.SHTYPE.trim() == 'M3-Req-out' || row.SHTYPE
.trim() == 'M3-General')) ||
(data == 'X' && row.SHSOURCE.trim() == 'M3ReceiverAPI' && (row.SHTYPE.trim() ==
'M3-Lis-in' || row.SHTYPE.trim() == 'M3-Lis-JSN')) ||
(data == 'X' && row.SHTYPE.trim().toUpperCase() == 'M3-LIS-SPL' && (row.SHSOURCE
.trim() == 'ICM710E12' || row.SHSOURCE.trim() == 'ICM710E13' ||
row.SHSOURCE.trim() == 'M3ReceiverAPI' || row.SHSOURCE.trim() ==
'ICM710E')) ||
(data == 'X' && row.SHTYPE.trim() == 'M3-Res-out' && row.SHSOURCE.trim() ==
'M3InventoryReportReplen') ?
'<button type="button" class="btn btn-sm btn-danger closeErr" data-shsource="' +
row.SHSOURCE.trim() +
'" data-macpkr="' + row.SHMACPKR.trim() + '" data-shco="' + row.SHCO.trim() +
'" data-shwhs="' + row.SHWHS.trim() + '" ' +
' data-shdt="' + row.SHDT.trim() + '" data-shtime="' + row.SHTIME.trim() +
'" data-shtype="' + row.SHTYPE.trim() +
'" title="Close"><i class="fa fa-times" aria-hidden="true"></i></button> ' :
'';
return (data == 'X' && row.SHSOURCE.trim() == 'CloseShipmentCoChargeAPI') || (
data == 'X' && row.SHSOURCE.trim() == 'TransferAPIURL' && row.SHTYPE
.trim() == 'M3-Res-out') ?
'<button type="button" class="btn btn-sm btn-warning retryAPICall" data-shsource="' +
row.SHSOURCE.trim() +
'" data-macpkr="' + row.SHMACPKR.trim() + '" data-shco="' + row.SHCO.trim() +
'" data-shwhs="' + row.SHWHS.trim() + '" ' +
' data-shdt="' + row.SHDT.trim() + '" data-shtime="' + row.SHTIME.trim() +
'" data-shtype="' + row.SHTYPE.trim() +
'" title="Retry"><i class="fas fa-redo-alt"></i></button> ' + closeBtn :
data == 'X' && row.SHTYPE.trim().toUpperCase() == 'M3-LIS-SPL' && (row.SHSOURCE
.trim() == 'ICM710E12' || row.SHSOURCE.trim() == 'ICM710E13' ||
row.SHSOURCE.trim() == 'M3ReceiverAPI' || row.SHSOURCE.trim() == 'ICM710E'
) ||
(data == 'X' && row.SHSOURCE.trim() == 'M3ReceiverAPI' && (row.SHTYPE.trim() ==
'M3-Lis-in' || row.SHTYPE.trim() == 'M3-Lis-JSN')) ||
(data == 'X' && row.SHSOURCE.trim() == 'M3InventoryReportListURL') ||
(data == 'X' && row.SHSOURCE.trim() == 'TransferAPIURL' && row.SHTYPE.trim() ==
'M3-Err-out') ||
(data == 'X' && row.SHTYPE.trim() == 'M3-Res-out' && row.SHSOURCE.trim() ==
'M3InventoryReportReplen') ?
closeBtn :
data == 'Z' ?
'<b>Closed</b>' :
newData;
}
},
{
data: "SHDATA",
name: "SHDATA",
type: 'html',
render: function(data, type, row) {
var firstOccurrenceIndex = data.indexOf('{') > 0 ? data.indexOf('{') : 0;
var TotalLength = data.length;
var errorDesc = firstOccurrenceIndex > 0 && TotalLength > 200 ? data.substring(0,
firstOccurrenceIndex) : data.substring(0, 200);
// console.log(errorDesc);
return errorDesc;
}
},
{
data: "SHTYPE",
name: "SHTYPE"
},
{
data: "SHSOURCE",
name: "SHSOURCE",
render: function(data, type, row) {
var key = data.trim();
return transTypes[key] != null ? transTypes[key] : data.trim();
}
},
{
data: "R428FIRST",
name: "R428FIRST",
render: function(data, type, row) {
return data != null ? (data.trim() + ' ' + row.R428FAMILY.trim()).toUpperCase() : (
row.SHUSER.trim()).toUpperCase();
}
},
{
data: "SHDATA",
name: "SHDATA",
type: 'html',
render: function(data, type, row) {
return data;
}
},
{
data: "SHCODE",
name: "SHCODE"
},
{
data: "SHCO",
name: "SHCO"
},
{
data: "SHWHS",
name: "SHWHS"
},
{
data: "SHACKDATE",
name: "SHACKDATE",
render: function(data, type, row) {
return data + ' ' + row.SHACKTIME;
}
},
{
data: "SHACKUSER",
name: "SHACKUSER",
render: function(data, type, row) {
var key = data.trim();
var currUser = key;
// console.log(key);
if (key != '') {
usersList.forEach(element => {
// console.log(element.R428US+' '+key);
if (element.R428US == key) {
currUser = element.R428FIRST + ' ' + element.R428FAMILY;
// console.log(currUser);
}
});
}
return currUser;
}
},
{
data: "SHINTBOX",
name: "SHINTBOX"
},
{
data: "SHMACPKR",
name: "SHMACPKR",
orderable: false,
searchable: false,
render: function(data, type, row) {
fullUrl = "{{ Request::url() }}";
UrlPath = "{{ Request::path() }}";
sendUrl = fullUrl.replace(UrlPath, "");
return '<a class="btn btn-sm btn-secondary" href="' + sendUrl +
'php/AllSentPkr.php?macpkr_input=' + row.SHMACPKR.trim() + '">SPD</a>';
}
},
{
data: "SHACKNOTE",
name: "SHACKNOTE"
}
];
// DataTables init Config
$.extend(true, $.fn.dataTable.defaults, {
processing: true,
serverSide: true,
ajax: {
url: '{{ route('m3.M3ErrorsDisplayDT') }}',
data: function(d) {
d.STARTDATE = $('#STARTDATE').val().trim();
d.ENDDATE = $('#ENDDATE').val().trim();
d.SHMACPKR = $('#SHMACPKR').val().trim();
d.SHSOURCE = $('#SHSOURCE').val().trim();
d.SHOWERRORS = $('#SHOWERRORS').is(':checked') ? 'Y' : 'N';
d.SKIPDATES = $('#SKIPDATES').val().trim();
}
},
columns: columnDefs,
responsive: true,
fixedColumns: true,
orderCellsTop: true,
order: [
[3, 'asc'] // Order By Date time
],
pageLength: 100,
"lengthMenu": [
[10, 25, 50, 100, 500],
[10, 25, 50, 100, 500]
],
select: {
style: 'multi+shift',
selector: 'td:first-child'
},
language: {
url: languages['{{ app()->getLocale() }}']
},
dom: "<'row'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-7'B>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
// <'col-sm-12 col-md-3'f>
buttons: [{
extend: 'selectAll',
className: 'btn-primary mr-1',
text: selectAllButtonTrans,
exportOptions: {
columns: ':visible'
},
action: function(e, dt) {
e.preventDefault()
dt.rows().deselect();
dt.rows({
search: 'applied'
}).select();
}
},
{
extend: 'selectNone',
className: 'btn-primary mr-1',
text: selectNoneButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'copy',
className: 'btn-default mr-1',
text: copyButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'csv',
className: 'btn-default mr-1',
text: csvButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'excelHtml5',
className: 'btn-default mr-1',
text: excelButtonTrans,
exportOptions: {
columns: ':visible',
stripHtml: true
},
customize: function(xlsx, btnObj, tableInst) {
var sheet = xlsx.xl.worksheets['sheet1.xml'];
var cellIndexes = tableInst.cells(".bg-danger").indexes();
for (var i = 0; i < cellIndexes.length; i++) {
var cellIndex = cellIndexes[i];
var tblRow = cellIndex['row'] + 3; // adjusted from 0 indexed
var tblCol = cellIndex['column']; // adjusted from 0 indexed
var xlCol = numberToLetters(tblCol);
var excelCell = xlCol + tblRow;
$('row c[r=' + excelCell + ']', sheet).attr('s', '11');
}
}
},
{
extend: 'pdfHtml5',
className: 'btn-default mr-1',
text: pdfButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'colvis',
className: 'btn-default mr-1',
text: colvisButtonTrans,
exportOptions: {
columns: ':visible'
}
}
]
});
var myTable = $('#datatablesSimple5').DataTable({});
// Add event listeners to the date filter inputs
$('#filterTop,#refresh').on('click', function() {
var SHMACPKR = $('#SHMACPKR').val().trim();
// Check SHMACPKR for invalid CHARS
var numbersOnly = /^[0-9]+$/;
if (!SHMACPKR.match(numbersOnly) && SHMACPKR != '') {
alert('Only numeric values are allowed for Delivery Note ');
$('#SHMACPKR').focus();
return false;
}
// Refresh the table data
myTable.ajax.reload();
});
// Retry Call API
$(document).on('click', '.retryAPICall', function() {
$('.retryAPICall').prop("disabled", true);
SHSOURCE = $(this).data('shsource');
SHMACPKR = $(this).data('macpkr');
SHCO = $(this).data('shco');
SHWHS = $(this).data('shwhs');
SHDT = $(this).data('shdt');
SHTIME = $(this).data('shtime');
SHTYPE = $(this).data('shtype');
urlToCall = "";
fullUrl = "{{ Request::url() }}";
UrlPath = "{{ Request::path() }}";
sendUrl = fullUrl.replace(UrlPath, "");
// console.log(sendUrl);
// return false;
if (SHSOURCE == 'CloseShipmentCoChargeAPI') {
urlToCall = sendUrl + "api/" + SHSOURCE + "?TRANSTYPE=P&COMPANY=" + SHCO + "&WHS=" +
SHWHS + "&MANIFEST=" + SHMACPKR +
"&SHDT=" + SHDT + "&SHTIME=" + SHTIME + "&SHTYPE=" + SHTYPE;
} else if (SHSOURCE == 'TransferAPIURL') {
urlToCall = sendUrl + "api/" + SHSOURCE + "?TRANSTYPE=R&COMPANY=" + SHCO + "&WHS=" +
SHWHS + "&DELIVERYNO=" + SHMACPKR +
"&SHDT=" + SHDT + "&SHTIME=" + SHTIME + "&SHTYPE=" + SHTYPE;
}
// else if (SHSOURCE=='M3ReceiverAPI') {
// urlToCall = sendUrl+"api/m3receiver?TRANSTYPE=R&COMPANY="+SHCO+"&WHS="+SHWHS+"&DELIVERYNO="+SHMACPKR+
// "&SHDT="+SHDT+"&SHTIME="+SHTIME+"&SHTYPE="+SHTYPE;
// }
// var urlToCall = "http://esn2.nventco.com:10024/api/"+SHSOURCE+"?TRANSTYPE=R";
// console.log(urlToCall); return false;
// Call API
if (urlToCall != '') {
var settings = {
"url": urlToCall,
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
},
};
$.ajax(settings).done(function(response) {
// console.log(response);
if (response.code != '200') {
Swal.fire('The retry resulted in another error: ' + response.message);
} else {
Swal.fire('The retry was Successful');
}
// Refresh the table data
myTable.ajax.reload();
$('.retryAPICall').prop("disabled", false);
});
} else {
Swal.fire('It was not possible to issue the retry.');
// console.log("URL Not Valid");
$('.retryAPICall').prop("disabled", false);
}
});
// Acknowledge Call API
$(document).on('click', '.acknowledge', function() {
$('.acknowledge').prop("disabled", true);
SHSOURCE = $(this).data('shsource');
SHMACPKR = $(this).data('macpkr');
SHCO = $(this).data('shco');
SHWHS = $(this).data('shwhs');
SHDT = $(this).data('shdt');
SHTIME = $(this).data('shtime');
SHTYPE = $(this).data('shtype');
urlToCall = "";
// console.log(SHSOURCE);
fullUrl = "{{ Request::url() }}";
UrlPath = "{{ Request::path() }}";
sendUrl = fullUrl.replace(UrlPath, "");
// console.log(sendUrl);
Swal.fire({
title: 'Acknowledge',
text: "Have you ensured that this qty adjustment has been manually posted in the ERP system to ensure that we do not over-invoice the customer?",
// icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes',
input: 'text',
inputAttributes: {
autocapitalize: 'off'
},
// icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes',
inputValidator: (value) => {
return new Promise((resolve) => {
if (value !== '') {
resolve();
} else {
resolve('You should fill a reason.');
}
})
},
preConfirm: (text) => {
var form_post2 = {
SHSOURCE: SHSOURCE,
SHMACPKR: SHMACPKR,
SHCO: SHCO,
SHWHS: SHWHS,
SHDT: SHDT,
SHTIME: SHTIME,
SHTYPE: SHTYPE,
SHACKNOTE: text,
_token: '{{ csrf_token() }}'
};
// console.log(form_post2);
$.ajax({
url: "{{ route('m3.M3ErrorsDisplay699') }}",
type: "POST",
data: form_post2,
success: function(response) {
if (response.success == true) {
// Refresh the table data
myTable.ajax.reload();
Swal.fire('Acknowledge call was Successful');
$('.acknowledge').prop("disabled", false);
} else {
Swal.fire('Acknowledge Failed');
$('.acknowledge').prop("disabled", false);
}
},
error: function(error) {
// console.log(error);
// alert(error);
}
});
}
}).then((result) => {
if (result.isConfirmed) {
//
} else {
$('.acknowledge').prop("disabled", false);
}
});
});
// Close Call API
$(document).on('click', '.closeErr', function() {
$('.closeErr').prop("disabled", true);
SHSOURCE = $(this).data('shsource');
SHMACPKR = $(this).data('macpkr');
SHCO = $(this).data('shco');
SHWHS = $(this).data('shwhs');
SHDT = $(this).data('shdt');
SHTIME = $(this).data('shtime');
SHTYPE = $(this).data('shtype');
urlToCall = "";
// console.log(SHTYPE);
// console.log(SHSOURCE);
fullUrl = "{{ Request::url() }}";
UrlPath = "{{ Request::path() }}";
sendUrl = fullUrl.replace(UrlPath, "");
// console.log(sendUrl);
// return false;
if (SHTYPE == 'M3-LIS-SPL') {
var message = 'Please ask ERP team to correct errors and resend this order';
} else {
var message =
"Please explain what action was taken to ensure the ERP system was updated manually";
}
// Set Close All Button for Replen
if (SHSOURCE == 'M3InventoryReportReplen') {
var showCloseAll = true;
var closethisErrorMsg = 'Close this error only';
} else {
var showCloseAll = false;
var closethisErrorMsg = 'Close';
}
if (SHSOURCE == 'M3ReceiverAPI') {
var noteText = '';
} else {
var noteText = '';
}
Swal.fire({
title: 'Close',
text: message,
input: 'text',
inputValue: noteText,
inputAttributes: {
autocapitalize: 'off'
},
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: closethisErrorMsg,
showDenyButton: showCloseAll,
denyButtonText: `Close All similar errors`,
inputValidator: (value) => {
return new Promise((resolve) => {
if (value !== '') {
resolve();
} else {
resolve('You should fill a reason.');
}
})
},
preConfirm: (text) => {
var form_post2 = {
SHSOURCE: SHSOURCE,
SHMACPKR: SHMACPKR,
SHCO: SHCO,
SHWHS: SHWHS,
SHDT: SHDT,
SHTIME: SHTIME,
SHTYPE: SHTYPE,
SHACKNOTE: text,
CLOSESIM: 'N',
_token: '{{ csrf_token() }}'
};
// console.log(form_post2);
// return false;
$.ajax({
url: "{{ route('m3.M3ErrorsDisplay699') }}",
type: "POST",
data: form_post2,
success: function(response) {
if (response.success == true) {
// Refresh the table data
myTable.ajax.reload();
Swal.fire('Close call was Successful');
$('.closeErr').prop("disabled", false);
} else {
Swal.fire('Close Failed');
$('.closeErr').prop("disabled", false);
}
},
error: function(error) {
// console.log(error);
// alert(error);
}
});
},
preDeny: () => {
// Get the input value manually
const text = Swal.getInput().value;
// Validate the input
if (!text || text.trim() === '') {
Swal.showValidationMessage('You should fill a reason.');
return false; // Prevent the dialog from closing
}
var form_post2 = {
SHSOURCE: SHSOURCE,
SHMACPKR: SHMACPKR,
SHCO: SHCO,
SHWHS: SHWHS,
SHDT: SHDT,
SHTIME: SHTIME,
SHTYPE: SHTYPE,
SHACKNOTE: text,
CLOSESIM: 'Y',
_token: '{{ csrf_token() }}'
};
// console.log(form_post2);
// return false;
$.ajax({
url: "{{ route('m3.M3ErrorsDisplay699') }}",
type: "POST",
data: form_post2,
success: function(response) {
if (response.success == true) {
// Refresh the table data
myTable.ajax.reload();
Swal.fire('Close call was Successful');
$('.closeErr').prop("disabled", false);
} else {
Swal.fire('Close Failed');
$('.closeErr').prop("disabled", false);
}
},
error: function(error) {
// console.log(error);
// alert(error);
}
});
}
}).then((result) => {
if (result.isConfirmed) {} else {
// console.log("Canceled...");
$('.closeErr').prop("disabled", false);
}
});
});
// Show all Macpkr on click
$(document).on('click', '.getmackpkr', function() {
mackpkr = $(this).data("macpkr");
$('#SHMACPKR').val(mackpkr);
// MAK Change Later
$('#SHSOURCE').val("");
// Refresh the table data
myTable.ajax.reload();
});
// Prevent Form Submit
$("#formFilters").keypress(function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#filterTop').trigger('click');
return false;
}
})
// Export To Excel exportExcel
$(document).on('click', '#exportExcel', function() {
var SHMACPKR = $('#SHMACPKR').val().trim();
// Check SHMACPKR for invalid CHARS
var numbersOnly = /^[0-9]+$/;
if (!SHMACPKR.match(numbersOnly) && SHMACPKR != '') {
alert('Only numeric values are allowed for Delivery Note ');
$('#SHMACPKR').focus();
return false;
}
SHMACPKR = $("#SHMACPKR").val();
SHSOURCE = $("#SHSOURCE").val();
STARTDATE = $("#STARTDATE").val();
ENDDATE = $("#ENDDATE").val();
SHOWERRORS = $('#SHOWERRORS').is(':checked') ? 'Y' : 'N';
$("#SHMACPKR1").val(SHMACPKR);
$("#SHSOURCE1").val(SHSOURCE);
$("#STARTDATE1").val(STARTDATE);
$("#ENDDATE1").val(ENDDATE);
$("#SHOWERRORS1").val(SHOWERRORS);
$("#exporttoExcelForm").submit();
});
@if (session('message') != '')
alert("{{ session('message') }}");
@endif
});
</script>
@endsection
@@ -0,0 +1,107 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Sentinel Doc Archive
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Sentinel Doc Archive</h1>
<div class="card mb-4">
<div class="card-header">
<div class="row">
<div class="col-12 mt-1">
<form class="needs-validation" enctype="multipart/form-data" method="GET" action="{{ route("m3.M3GetPDFFromCache.index") }}">
{{-- @csrf --}}
<div class="mb-3 row">
<label for="inputPassword2" class="col-sm-1 col-form-label">Del. Note #</label>
<div class="col-sm-1">
<label for="SHMACPKR" class="visually-hidden">MACPKR</label>
<input type="text" class="form-control form-control-sm" name="MACPKR" id="SHMACPKR" value="{{$AYMACPKR}}">
</div>
<label for="recipient-name" class="col-sm-1 col-form-label">Warehouse:</label>
<div class="col-sm-2">
<select class="form-select" id="WHDDA" aria-label="WHDD" tabindex="-1" disabled>
@foreach ($IC670M as $key => $IC670MR)
@php $currentWHDDA = trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS); @endphp
<option value="{{ $currentWHDDA }}"
data-comp="{{ trim($IC670MR->WDCO) }}" data-pl="{{ trim($IC670MR->WDPL) }}" data-wh="{{ trim($IC670MR->WDWHS) }}"
{{ ($WHDDA!='' && $WHDDA==$currentWHDDA) ? "selected" : "" }}>
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
<label for="recipient-name" class="col-sm-1 col-form-label">Division:</label>
<div class="col-sm-1">
<label for="COMPANY" class="visually-hidden">COMPANY</label>
<input type="text" class="form-control" name="COMPANY" id="COMPANY" required readonly>
</div>
<label for="recipient-name" class="col-sm-1 col-form-label">Plant:</label>
<div class="col-sm-1">
<label for="PLANT" class="visually-hidden">PLANT</label>
<input type="text" class="form-control" name="PLANT" id="PLANT" required readonly>
</div>
<label for="recipient-name" class="col-sm-1 col-form-label">Warehouse:</label>
<div class="col-sm-1">
<label for="WHS" class="visually-hidden">WHS</label>
<input type="text" class="form-control" name="WHS" id="WHS" required readonly>
</div>
<div class="col-sm-1">
<button type="submit" class="btn btn-primary mb-3" id="filterTop">Submit</button>
</div>
</div>
</form>
@if($aggmsg!="")
<div class="text-center"><b> {{ $aggmsg }}
(
@foreach($ICM688M1 as $key => $ICM688M1R)
<a href="M3GetPDFFromCache?MACPKR={{$ICM688M1R->A4MACPKR}}&COMPANY={{$COMPANY}}&PLANT={{$PLANT}}&WHS={{$WHS}}">{{$ICM688M1R->A4MACPKR}}</a>
@endforeach
) </b></div>
@endif
@if(count($trackingno)>0)
@foreach($trackingno as $key => $val)
@if(trim($carrier[$key])=="UPSG")
<div class="text-center"><b> UPSG <a href=https://www.ups.com/track?loc=en_US&tracknum={{$val}}>{{$val}}</a> </b></div>
@elseif(trim($carrier[$key])=="FEDG" || trim($carrier[$key])=="FXFE")
<div class="text-center"><b> Fedex <a href=https://www.fedex.com/fedextrack/?trknbr={{$val}}>{{$val}}</a> </b></div>
@endif
@endforeach
@endif
</div>
</div>
</div>
<div class="card-body">
<div class="container-fluid table-responsive">
@if(count($PDFArray)>0)
{{-- {{ dump(count($PDFArray)); }} --}}
@foreach ($PDFArray as $pdf)
<iframe title="Embedded document" src="data:application/pdf;base64,{{ $pdf }}" style="width: 100%; height: 500px;"></iframe>
@endforeach
@endif
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// Update Division/WH/Plant on Warehouse change
$(document).on('change select','#WHDDA',function(){
$("#COMPANY").val($(this).find("option:selected").data("comp"));
$("#PLANT").val($(this).find("option:selected").data("pl"));
$("#WHS").val($(this).find("option:selected").data("wh"));
});
$('#WHDDA').trigger('change');
// $('#filterTop').trigger('click');
// Add event listeners to the date filter inputs
// $('#STARTDATE, #ENDDATE, #SHMACPKR').on('change', function () {
// $('#filterTop').on('click', function () {});
});
</script>
@endsection
@@ -0,0 +1,92 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Manifest Orders
@endsection
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Manifest Orders</h1>
<div class="card mb-4">
<div class="card-header">
@php
$fullUrl = Request::url();
$UrlPath = Request::path();
$sendUrl = str_replace($UrlPath, "", $fullUrl);
@endphp
<h6>
Manifest #
<a class="btn btn-link fw-bold mb-1" target="_blank" href="{{$sendUrl.'php/ClosedTrucksDetail.php?manifest='.$MF}}"> {{ $MF }} </a>
<span class="ml-6">Carrier: {{ $carrier }} </span>
</h6>
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5">
<thead>
<tr>
<th>Delivery note</th>
<th>Order Number</th>
<th>Customer</th>
<th>Sentinel Picker Status</th>
<th>Total weight</th>
<th>Boxes/pallets</th>
</tr>
</thead>
<tbody>
@foreach($ICM695M1 as $key=>$val)
@php
$A4PICKSTSTMP = isset($val->A4PICKSTS) ? trim($val->A4PICKSTS) : "";
$A4PICKSTS = $A4PICKSTSTMP!="" && isset($status_ICM688M1_array[trim($val->A4PICKSTS)]) ?
$status_ICM688M1_array[trim($val->A4PICKSTS)] : "";
@endphp
<tr>
<td>
<a class="btn btn-link" target="_blank" href="{{$sendUrl.'php/AllSentPkr.php?macpkr_input='.$val->AYMACPKR}}" >
{{ $val->AYMACPKR }}
</a>
</td>
<td> {{ $val->AYONO }} </td>
<td> {{ $val->A4SHSHNM }} </td>
<td> {{ $A4PICKSTS }} </td>
<td> {{ number_format($val->TOTWEIGHT, 2) }} </td>
<td> {{ $val->BOXPAL }} </td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
$('#datatablesSimple5').DataTable({
"aaSorting": [],
"lengthMenu": [ [100,200,500,-1], [100,200,500,"All"] ],
"sPaginationType": "full_numbers",
dom: "<'row mt-2'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-6'B><'col-sm-12 col-md-3'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row mt-2'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
"responsive": true,
"orderCellsTop": true,
"order": [ [0, 'asc'] ],
pageLength: 25,
"lengthMenu": [ [10,25,50,100,500], [10,25,50,100,500] ],
"columnDefs": [
{
orderable: true,
searchable: true,
targets: -1
}
],
});
});
</script>
@endsection
@@ -0,0 +1,320 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Closed order lines report
@endsection
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Closed order lines report</h1>
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Daily report</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Download Reports</button>
</li>
</ul>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
<div class="card mb-4">
<div class="card-header">
<form class="needs-validation" enctype="multipart/form-data" method="GET" action="{{ route("m3.OrderLinesOfClosedOrder") }}">
<div class="row d-flex flex-row align-items-center">
@php
$REPORTDATEDisp = old('REPORTDATEDisp') ?? \DateTime::createFromFormat('Ymd',$REPORTDATEDisp)->format('Y-m-d');
@endphp
<div class="col">
<label for="REPORTDATEDisp">Date</label>
<input type="date" class="form-control" id="REPORTDATEDisp" name="REPORTDATEDisp" value="{{ $REPORTDATEDisp }}" max={{ date('Y-m-d') }} required>
</div>
<div class="col">
<label for="recipient-name" >Warehouse:</label>
<select class="form-select" id="WHDDA" aria-label="WHDD" tabindex="-1" disabled>
@foreach ($IC670M as $key => $IC670MR)
@php $currentWHDDA = trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS); @endphp
<option value="{{ $currentWHDDA }}"
data-comp="{{ trim($IC670MR->WDCO) }}" data-pl="{{ trim($IC670MR->WDPL) }}" data-wh="{{ trim($IC670MR->WDWHS) }}"
{{ ($WHDDA!='' && $WHDDA==$currentWHDDA) ? "selected" : "" }}>
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
<div class="col">
<label for="recipient-name">Division:</label>
<label for="COMPANY" class="visually-hidden">COMPANY</label>
<input type="text" class="form-control" id="COMPANY" required readonly>
</div>
<div class="col">
<label for="recipient-name">Plant:</label>
<label for="PLANT" class="visually-hidden">PLANT</label>
<input type="text" class="form-control" id="PLANT" required readonly>
</div>
<div class="col">
<label for="recipient-name">Warehouse:</label>
<label for="WHS" class="visually-hidden">WHS</label>
<input type="text" class="form-control" id="WHS" required readonly>
</div>
<div class="col">
<button type="submit" class="btn btn-primary mt-4" id="filterTop">Submit</button>
</div>
</div>
</form>
</div>
<div class="card-body">
<div class="container-fluid table-responsive">
<table class="table table-striped table-bordered table-hover" id="datatableslinesCLosed" style="width:100%">
<th scope="col"ead>
<tr>
<th scope="col"></th>
<th scope="col">Close Date</th>
<th scope="col">Delivery #</th>
<th scope="col">Order #</th>
<th scope="col">Terms</th>
<th scope="col">Weight</th>
<th scope="col">Carrier</th>
<th scope="col">Mode</th>
<th scope="col">Order Type</th>
<th scope="col">Part #</th>
<th scope="col">Reserved</th>
<th scope="col">Packed</th>
<th scope="col">Back Order Qty</th>
<th scope="col">Value Packed $</th>
<th scope="col">Customer name</th>
{{-- <th scope="col">Date</th>
<th scope="col">Time</th> --}}
<th scope="col">Failure Reason</th>
<th scope="col">Currency Code</th>
<th scope="col">Freight</th>
</tr>
</thead>
<tbody>
@foreach($ICM688M2 as $key=>$ICM688M2R)
<tr>
<td></td>
<td>{{ $ICM688M2R->SHDT }} {{ $ICM688M2R->SHTIME }} </td>
<td class="text-end"><a type="button" class="btn btn-link" target="_blank" href="/php/AllSentPkr.php?macpkr_input={{ $ICM688M2R->A5MACPKR }}">{{ $ICM688M2R->A5MACPKR }}</a></td>
<td class="text-end"> {{ $ICM688M2R->A5ONO }} </td>
<td class="text-end"> {{ $ICM688M2R->A4OFSTRM }} </td>
<td class="text-end"> {{ number_format($ICM688M2R->WEIGHT, 2, '.', ',') }} </td>
<td class="text-end"> {{ $ICM688M2R->A4SCAC }} </td>
<td class="text-end"> {{ $ICM688M2R->A4SHIPTYPE }} </td>
<td class="text-end"> {{ $ICM688M2R->A4REFORD }} </td>
<td> {{ $ICM688M2R->A5PART }} </td>
<td class="text-end"> {{ number_format($ICM688M2R->A5RSVQTY, 0, '.', ',') }} </td>
<td class="text-end"> {{ number_format($ICM688M2R->A5PACKED, 0, '.', ',') }} </td>
<td class="text-end"> {{ number_format($ICM688M2R->CALCULATED_COLUMN, 0, '.', ',') }} </td>
<td class="text-end">{{ number_format($ICM688M2R->ANOTHER_CALCULATED_COLUMN, 2, '.', ',') }}</td>
<td>{{ $ICM688M2R->A4SHSHNM }} </td>
{{-- <td>{{ $ICM688M2R->SHDT }} </td>
<td>{{ $ICM688M2R->SHTIME }} </td> --}}
<td>{{ substr($ICM688M2R->REASON,0,150) }} </td>
<td>{{ $ICM688M2R->A1SHCURR }} </td>
<td>{{ $ICM688M2R->FREIGHT }} </td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr>
<th scope="col" colspan="12"></th>
<th scope="col">Total:</th>
<th scope="col" class="text-end"></th>
<th scope="col"></th><th scope="col"></th><th scope="col"></th>
{{-- <th scope="col"></th><th scope="col"></th> --}}
<th scope="col"></th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
<div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab">
<div class="card mb-4">
<div class="card-header">
<form class="needs-validation" enctype="multipart/form-data" method="GET" action="{{ route("m3.OrderLinesOfClosedOrder") }}">
<div class="row d-flex flex-row align-items-center">
@php
$todayDate = today()->format('Ymd');
$reportDate = old('REPORTDATE') ?? \DateTime::createFromFormat('Ymd',$todayDate)->format('Y-m-d');
$toreportDate = old('TOREPORTDATE') ?? \DateTime::createFromFormat('Ymd', $todayDate)->format('Y-m-d');
@endphp
<div class="col">
<label for="REPORTDATE">From Date</label>
<input type="date" class="form-control" id="REPORTDATE" name="REPORTDATE" value="{{ $reportDate }}" max={{ date('Y-m-d') }} required>
</div>
<div class="col">
<label for="REPORTDATE">To Date</label>
<label for="TOREPORTDATE" class="visually-hidden">TOREPORTDATE</label>
<input type="date" class="form-control" id="TOREPORTDATE" name="TOREPORTDATE" value="{{ $toreportDate }}" max={{ date('Y-m-d') }} required>
</div>
<div class="col">
<button type="button" class="btn btn-primary mt-4" id="exportExcel">Download Excel</button>
{{-- MAK Used temporarly to generate report on AS400 --}}
{{-- <button type="button" class="btn btn-primary mt-4" id="saveExcel">Save Excel</button> --}}
</div>
</div>
</form>
{{-- Form for Export --}}
<form enctype="multipart/form-data" method="POST" action="{{ route("m3.exporttoExcel") }}" id="exporttoExcelForm">
@csrf
<input type="hidden" name="REPORTDATE" id="REPORTDATE1" value="">
<input type="hidden" name="TOREPORTDATE" id="TOREPORTDATE1" value="">
</form>
{{-- Form for Saving Excel --}}
<form enctype="multipart/form-data" method="POST" action="{{ route("m3.StoreExcelToDisk") }}" id="StoreExcelToDiskForm">
@csrf
<input type="hidden" name="REPORTDATE" id="REPORTDATE2" value="">
<input type="hidden" name="TOREPORTDATE" id="TOREPORTDATE2" value="">
</form>
</div>
<div class="card-body">
@foreach ($allReportsUrls as $fileName=>$reportsUrl)
@php
$fileNameOnly = strpos($fileName, '/')!= false ? substr($fileName, strpos($fileName, '/') + 1) : $fileName;
@endphp
<a href='{{ route('m3.downloadFiles', ['filename' => $fileName]) }}' >{{ $fileNameOnly }}</a><br>
@endforeach
</div>
</div>
{{-- @foreach ($allReportsUrls as $fileName=>$reportsUrl)
@php
$fileNameOnly = strpos($fileName, '/')!= false ? substr($fileName, strpos($fileName, '/') + 1) : $fileName;
@endphp
<a href='{{ route('m3.downloadFiles', ['filename' => $fileName]) }}' >{{ $fileNameOnly }}</a><br>
@endforeach --}}
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
var myTable = $('#datatableslinesCLosed').DataTable({
"aaSorting": [],
"lengthMenu": [ [25,50,100,-1], [25,50,100,"All"] ],
"sPaginationType": "full_numbers",
dom: "<'row mt-2'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-6'B><'col-sm-12 col-md-3'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row mt-2'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
// "dom": 'lBfrtip',
"responsive": true,
"orderCellsTop": true,
"order": [ [1, 'asc'] ],
"pageLength": 100,
"select": true,
"columnDefs": [
{
orderable: false,
className: 'select-checkbox',
targets: 0
}
],
buttons: [
{
extend: 'selectAll',
className: 'btn-primary mr-1'
},
{
extend: 'selectNone',
className: 'btn-primary mr-1'
},
{
extend: 'copy',
className: 'btn-secondary mr-1'
},
{
extend: 'csv',
className: 'btn-secondary mr-1'
},
{
extend: 'excelHtml5',
className: 'btn-secondary mr-1',
filename: function(){
var date = new Date();
// Format the date as desired, for example: 'YYYY-MM-DD'
var formattedDate = date.toISOString().split('T')[0];
return 'Closed_order_lines_report_' + formattedDate;
},
title: 'Closed order lines report',
footer: true
},
{
extend: 'pdfHtml5',
className: 'btn-secondary mr-1',
footer: true
},
{
extend: 'colvis',
className: 'btn-secondary mr-1'
}
],
footerCallback: function (row, data, start, end, display) {
let api = this.api();
// Remove the formatting to get integer data for summation
let intVal = function (i) {
return typeof i === 'string'
? i.replace(/[\$,]/g, '') * 1
: typeof i === 'number'
? i
: 0;
};
// Total over all pages
total = api
.column(13)
.data()
.reduce((a, b) => intVal(a) + intVal(b), 0);
// Update footer
api.column(13).footer().innerHTML = total.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });;
}
});
// Update Division/WH/Plant on Warehouse change
$(document).on('change select','#WHDDA',function(){
$("#COMPANY").val($(this).find("option:selected").data("comp"));
$("#PLANT").val($(this).find("option:selected").data("pl"));
$("#WHS").val($(this).find("option:selected").data("wh"));
});
$('#WHDDA').trigger('change');
// $('#filterTop').trigger('click');
// Export To Excel exportExcel
$(document).on('click','#exportExcel', function () {
REPORTDATE = $("#REPORTDATE").val();
TOREPORTDATE = $("#TOREPORTDATE").val();
$("#REPORTDATE1").val(REPORTDATE);
$("#TOREPORTDATE1").val(TOREPORTDATE);
$("#exporttoExcelForm").submit();
});
// Export To Excel exportExcel
$(document).on('click','#saveExcel', function () {
REPORTDATE = $("#REPORTDATE").val();
TOREPORTDATE = $("#TOREPORTDATE").val();
$("#REPORTDATE2").val(REPORTDATE);
$("#TOREPORTDATE2").val(TOREPORTDATE);
$("#StoreExcelToDiskForm").submit();
});
@if (session('message')!='')
alert("{{ session('message') }}");
@endif
});
</script>
@endsection
@@ -0,0 +1,605 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Replenishment Settings Update
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Replenishment Settings</h1>
<div class="card mb-4">
<div class="card-header">
<button type="button" class="btn btn-primary" id="addRecordBtn">Add Record</button>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5" style="width:100%">
<thead>
<tr>
<th></th>
<th>Division</th>
<th>Plant</th>
<th>Warehouse</th>
<th>Location</th>
<th>Part</th>
<th>Minimum qty</th>
<th>Replenishment qty</th>
<th>Tolerance</th>
<th>Replenishment min qty</th>
<th>Lot Controlled</th>
<th></th>
</tr>
</thead>
<tbody>
{{-- @foreach ($REFCAT658 as $key => $val)
<tr>
<td></td>
<td> {{ $val->R658CO }} </td>
<td> {{ $val->R658PL }} </td>
<td> {{ $val->R658WH }} </td>
<td> {{ $val->R658LC }} </td>
<td> {{ $val->R658PN }} </td>
<td> {{ $val->R658MQ }} </td>
<td> {{ $val->R658RQ }} </td>
<td> {{ $val->R658TL }} </td>
<td> {{ $val->R658RMQ }} </td>
<td class="text-center">
{!! ($val->R658IZLCF ?? '')=='1' ? '<i class="fas fa-lg fa-check"></i>' :'<i class="fas fa-lg fa-times"></i>' !!}
</td>
<td>
<button type="button" class="btn btn-sm btn-info editrefcat"
data-comp="{{ trim($val->R658CO) }}" data-pl="{{ trim($val->R658PL) }}" data-loc="{{ trim($val->R658LC) }}"
data-part="{{ trim($val->R658PN) }}" data-wh="{{ trim($val->R658WH) }}"
data-minqty="{{ trim($val->R658MQ) }}" data-repqty="{{ trim($val->R658RQ) }}"
data-repminqty="{{ trim($val->R658RMQ) }}" data-tol="{{ trim($val->R658TL) }}"
data-controlled="{{ trim($val->R658IZLCF) }}"
title="Edit Replenishment">
Edit
</button>
<button type="button" class="btn btn-sm btn-danger deleterefcat"
data-comp="{{ trim($val->R658CO) }}" data-pl="{{ trim($val->R658PL) }}" data-loc="{{ trim($val->R658LC) }}"
data-part="{{ trim($val->R658PN) }}" data-wh="{{ trim($val->R658WH) }}" title="Delete Replenishment">
Delete
</button>
</td>
</tr>
@endforeach --}}
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Add Modal -->
<div class="modal fade" id="addModal" tabindex="-1" aria-labelledby="addModalLabel" aria-hidden="true"
data-bs-backdrop="static">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addModalLabel">Add Record</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form class="needs-validation" id="addReplen" method="POST" action="{{ route("m3.replenishmentSettings.store") }}" enctype="multipart/form-data">
<div class="modal-body">
@csrf
<div class="row">
<div class="col-6">
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Part:</label>
<label for="R658PNA" class="visually-hidden">R658PN</label>
<input type="text" class="form-control" name="R658PN" id="R658PNA" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Location:</label>
<label for="R658LCA" class="visually-hidden">R658LC</label>
<input type="text" class="form-control" name="R658LC" id="R658LCA" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Minimum quantity:</label>
<label for="R658MQA" class="visually-hidden">R658MQ</label>
<input type="number" class="form-control" name="R658MQ" id="R658MQA" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Replenishment quantity:</label>
<label for="R658RQA" class="visually-hidden">R658RQ</label>
<input type="number" class="form-control" name="R658RQ" id="R658RQA" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Replenishment Min quantity:</label>
<label for="R658RMQA" class="visually-hidden">R658RMQ</label>
<input type="number" class="form-control" name="R658RMQ" id="R658RMQA" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Tolerance:</label>
<label for="R658TLA" class="visually-hidden">R658TL</label>
<input type="text" class="form-control" name="R658TL" id="R658TLA" maxlength="2" required>
</div>
</div>
<div class="col-6">
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Warehouse:</label>
<select class="form-select" id="WHDDA" aria-label="WHDD" tabindex="4" required>
<option value="">Select Warehouse</option>
@foreach ($IC670M as $key => $IC670MR)
<option value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}"
data-comp="{{ trim($IC670MR->WDCO) }}" data-pl="{{ trim($IC670MR->WDPL) }}" data-wh="{{ trim($IC670MR->WDWHS) }}" >
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Division:</label>
<label for="R658COA" class="visually-hidden">R658CO</label>
<input type="text" class="form-control" name="R658CO" id="R658COA" required readonly>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Plant:</label>
<label for="R658PLA" class="visually-hidden">R658PL</label>
<input type="text" class="form-control" name="R658PL" id="R658PLA" required readonly>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Warehouse:</label>
<label for="R658WHA" class="visually-hidden">R658WH</label>
<input type="text" class="form-control" name="R658WH" id="R658WHA" required readonly>
</div>
<div class="form-check form-switch">
<label for="R658IZLCFA" class="visually-hidden">R658IZLCF</label>
<input class="form-check-input" type="checkbox" role="switch" name="R658IZLCF" id="R658IZLCFA" value="1" aria-checked="false">
<label class="form-check-label" for="flexSwitchCheckDefault">Lot Controlled</label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" onClick="return validateAdd();">Submit</button>
</div>
</form>
</div>
</div>
</div>
<!-- Edit Modal -->
<div class="modal fade" id="editModal" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true"
data-bs-backdrop="static">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="editModalLabel">Edit Record</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form class="needs-validation" id="editReplen" method="POST" action="replenishmentSettingsUpdate"
enctype="multipart/form-data">
<div class="modal-body">
@csrf
<div class="row">
<div class="col-6">
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Part:</label>
<label for="R658PN" class="visually-hidden">R658PN</label>
<input type="text" class="form-control" name="R658PN" id="R658PN" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Location:</label>
<label for="R658LC" class="visually-hidden">R658LC</label>
<input type="text" class="form-control" name="R658LC" id="R658LC" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Minimum quantity:</label>
<label for="R658MQ" class="visually-hidden">R658MQ</label>
<input type="number" class="form-control" name="R658MQ" id="R658MQ" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Replenishment quantity:</label>
<label for="R658RQ" class="visually-hidden">R658RQ</label>
<input type="number" class="form-control" name="R658RQ" id="R658RQ" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Replenishment Min quantity:</label>
<label for="R658RMQ" class="visually-hidden">R658RMQ</label>
<input type="number" class="form-control" name="R658RMQ" id="R658RMQ" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Tolerance:</label>
<label for="R658TL" class="visually-hidden">R658TL</label>
<input type="text" class="form-control" name="R658TL" id="R658TL" maxlength="2" required>
</div>
</div>
<div class="col-6">
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Warehouse:</label>
<select class="form-select" id="WHDD" aria-label="WHDD" tabindex="4" disabled>
<option value="">Select Warehouse</option>
@foreach ($IC670M as $key => $IC670MR)
<option value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}"
data-comp="{{ trim($IC670MR->WDCO) }}" data-pl="{{ trim($IC670MR->WDPL) }}" data-wh="{{ trim($IC670MR->WDWHS) }}" >
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Division:</label>
<label for="R658CO" class="visually-hidden">R658CO</label>
<input type="text" class="form-control" name="R658CO" id="R658CO" required readonly>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Plant:</label>
<label for="R658PL" class="visually-hidden">R658PL</label>
<input type="text" class="form-control" name="R658PL" id="R658PL" required readonly>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Warehouse:</label>
<label for="R658WH" class="visually-hidden">R658WH</label>
<input type="text" class="form-control" name="R658WH" id="R658WH" required readonly>
</div>
<div class="form-check form-switch">
<label for="R658IZLCF" class="visually-hidden">R658IZLCF</label>
<input class="form-check-input" type="checkbox" role="switch" name="R658IZLCF" id="R658IZLCF" value="1" aria-checked="false">
<label class="form-check-label" for="flexSwitchCheckDefault">Lot Controlled</label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
</form>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
// DataTables Init
let copyButtonTrans = 'Copy'
let csvButtonTrans = 'CSV'
let excelButtonTrans = 'Excel'
let pdfButtonTrans = 'PDF'
// let printButtonTrans = '{{ trans('global.datatables.print') }}'
let colvisButtonTrans = 'Columns'
let selectAllButtonTrans = 'Select All'
let selectNoneButtonTrans = 'Deselect All'
let languages = {
'en': 'https://cdn.datatables.net/plug-ins/1.10.19/i18n/English.json'
};
$.extend(true, $.fn.dataTable.Buttons.defaults.dom.button, {
className: 'btn'
})
// End Datatables
$(document).ready(function() {
var editModal = new bootstrap.Modal(document.getElementById('editModal'), {
backdrop: 'static',
keyboard: false
});
var addModal = new bootstrap.Modal(document.getElementById('addModal'), {
backdrop: 'static',
keyboard: false
});
var columnDefs = [
{
data: 'checkbox',
name: 'checkbox',
orderable: false,
searchable: false,
render: function (data, type, row) {
return '<label for="sonar-input-5b415a7750" class="visually-hidden">sonar input 5b415a7750</label>
<input type="checkbox" class="select-checkbox" value="' + row.id + '" id="sonar-input-5b415a7750">';
}
},
{
data: "R658CO",
name: "R658CO"
},
{
data: "R658PL",
name: "R658PL"
},
{
data: "R658WH",
name: "R658WH"
},
{
data: "R658LC",
name: "R658LC"
},
{
data: "R658PN",
name: "R658PN"
},
{
data: "R658MQ",
name: "R658MQ"
},
{
data: "R658RQ",
name: "R658RQ"
},
{
data: "R658TL",
name: "R658TL"
},
{
data: "R658RMQ",
name: "R658RMQ"
},
{
data: "R658IZLCF",
name: "R658IZLCF",
orderable: false,
searchable: false,
render: function (data, type, row) {
// console.log("data: "+data);
return data=='1' ? '<i class="fas fa-lg fa-check"></i>' :'<i class="fas fa-lg fa-times"></i>';
// return '<label for="sonar-input-b328551d58" class="visually-hidden">sonar input b328551d58</label>
<input type="checkbox" class="select-checkbox" value="' + row.id + '" id="sonar-input-b328551d58">';
}
},
{
data: 'action',
name: 'action',
orderable: false,
searchable: false,
render: function (data, type, row) {
// console.log(row.R658LC);
// return '<button type="button" class="btn btn-sm btn-danger delete-user" data-id="' + row.id + '">Delete</button>';
return '<button type="button" class="btn btn-sm btn-info editrefcat"'+
' data-comp="'+row.R658CO.trim()+'" data-pl="'+row.R658PL.trim()+'" data-loc="'+row.R658LC.trim()+'" '+
' data-part="'+row.R658PN.trim()+'" data-wh="'+row.R658WH.trim()+'"'+
' data-minqty="'+row.R658MQ.trim()+'" data-repqty="'+row.R658RQ.trim()+'"'+
' data-repminqty="'+row.R658RMQ.trim()+'" data-tol="'+row.R658TL.trim()+'"'+
' data-controlled="'+row.R658IZLCF.trim()+'" title="Edit Replenishment"> Edit </button>'+
' <button type="button" class="btn btn-sm btn-danger deleterefcat"'+
' data-comp="'+row.R658CO.trim()+'" data-pl="'+row.R658PL.trim()+'" data-loc="'+row.R658LC.trim()+'"'+
' data-part="'+row.R658PN.trim()+'" data-wh="'+row.R658WH.trim()+'" title="Delete Replenishment">Delete</button>';
}
}
];
// DataTable init
$.extend(true, $.fn.dataTable.defaults, {
order: [
[1, 'asc']
],
"lengthMenu": [
[10, 25, 50, 100, -1],
[10, 25, 50, 100, "All"]
],
pageLength: 100,
processing: true,
serverSide: true,
ajax: '{{ route('m3.replenishmentSettingsDT') }}',
columns: columnDefs,
language: {
url: languages['{{ app()->getLocale() }}']
},
select: {
style: 'multi+shift',
selector: 'td:first-child'
},
dom: "<'row'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-7'B><'col-sm-12 col-md-3'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
buttons: [
{
extend: 'selectAll',
className: 'btn-primary mr-1',
text: selectAllButtonTrans,
exportOptions: {
columns: ':visible'
},
action: function(e, dt) {
e.preventDefault()
dt.rows().deselect();
dt.rows({
search: 'applied'
}).select();
}
},
{
extend: 'selectNone',
className: 'btn-primary mr-1',
text: selectNoneButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'copy',
className: 'btn-default mr-1',
text: copyButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'csv',
className: 'btn-default mr-1',
text: csvButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'excelHtml5',
className: 'btn-default mr-1',
text: excelButtonTrans,
exportOptions: {
columns: ':visible',
stripHtml: true
},
customize: function(xlsx,btnObj, tableInst) {
var sheet = xlsx.xl.worksheets['sheet1.xml'];
var cellIndexes = tableInst.cells(".bg-danger").indexes();
for (var i = 0; i < cellIndexes.length; i++) {
var cellIndex = cellIndexes[i];
var tblRow = cellIndex['row']+3; // adjusted from 0 indexed
var tblCol = cellIndex['column']; // adjusted from 0 indexed
var xlCol = numberToLetters(tblCol);
var excelCell = xlCol+tblRow;
$('row c[r='+excelCell+']', sheet).attr( 's', '11' );
}
}
},
{
extend: 'pdfHtml5',
className: 'btn-default mr-1',
text: pdfButtonTrans,
exportOptions: {
columns: ':visible'
}
},
{
extend: 'colvis',
className: 'btn-default mr-1',
text: colvisButtonTrans,
exportOptions: {
columns: ':visible'
}
}
]
});
var myTable = $('#datatablesSimple5').DataTable({});
// Update Division/WH/Plant on Warehouse change
$(document).on('change select','#WHDDA',function(){
$("#R658COA").val($(this).find("option:selected").data("comp"));
$("#R658PLA").val($(this).find("option:selected").data("pl"));
$("#R658WHA").val($(this).find("option:selected").data("wh"));
});
// Open Modal Edit
$(document).on('click', '.editrefcat', function() {
// console.log($(this).data("part"));
$("#editReplen").trigger('reset');
// console.log($(this).data("comp").toString() + $(this).data("pl").toString() + $(this).data("wh").toString() );
// Set WH name
WHDD = $(this).data("comp").toString() + $(this).data("pl").toString() + $(this).data("wh").toString();
$("#WHDD").val(WHDD);
$("#R658PN").val($(this).data("part"));
$("#R658CO").val($(this).data("comp"));
$("#R658LC").val($(this).data("loc"));
$("#R658PL").val($(this).data("pl"));
$("#R658WH").val($(this).data("wh"));
$("#R658MQ").val($(this).data("minqty"));
$("#R658RQ").val($(this).data("repqty"));
$("#R658RMQ").val($(this).data("repminqty"));
$("#R658TL").val($(this).data("tol"));
if ($(this).data("controlled")=='1') {
$("#R658IZLCF").prop('checked',true);
}
else{
$("#R658IZLCF").prop('checked',false);
}
editModal.show();
});
// Add Record Btn
$(document).on('click', '#addRecordBtn', function() {
$("#addReplen").trigger('reset');
addModal.show();
});
// Delete Record
$(document).on('click', '.deleterefcat', function() {
R658PN = $(this).data("part");
R658CO = $(this).data("comp");
R658LC = $(this).data("loc");
R658PL = $(this).data("pl");
R658WH = $(this).data("wh");
var form_post = {
R658PN: R658PN,
R658CO: R658CO,
R658LC: R658LC,
R658PL: R658PL,
R658WH: R658WH,
_token: '{{ csrf_token() }}'
};
if (confirm("Delete Record?") == true) {
$.ajax({
url: "{{ route('m3.replenishmentSettingsDelete') }}",
type: "POST",
data: form_post,
success: function(response) {
// console.log("record Deleted...");
location.reload();
},
error: function(error) {}
});
}
});
// Check Record Exist
checkRecordExist = function(form_post){
$.ajax({
url: "{{ route('m3.replenishmentSettingsExist') }}",
type: "POST",
data: form_post,
success: function(response) {
if(response.recordExists){
$('#addReplen').submit();
}
else{
alert("Part already exist!");
}
},
error: function(error) {}
});
}
});
// Validate Add Record before Submit
function validateAdd() {
// console.log($.trim($("#R658PNA").val()) == "");
$.trim($("#R658PNA").val()) == "" ? $("#R658PNA").addClass("is-invalid") : $("#R658PNA").removeClass("is-invalid");
$.trim($("#R658LCA").val()) == "" ? $("#R658LCA").addClass("is-invalid") : $("#R658LCA").removeClass("is-invalid");
$.trim($("#R658MQA").val()) == "" ? $("#R658MQA").addClass("is-invalid") : $("#R658MQA").removeClass("is-invalid");
$.trim($("#R658RQA").val()) == "" ? $("#R658RQA").addClass("is-invalid") : $("#R658RQA").removeClass("is-invalid");
$.trim($("#R658RMQA").val()) == "" ? $("#R658RMQA").addClass("is-invalid") : $("#R658RMQA").removeClass("is-invalid");
$.trim($("#R658TLA").val()) == "" ? $("#R658TLA").addClass("is-invalid") : $("#R658TLA").removeClass("is-invalid");
$.trim($("#R658COA").val()) == "" ? $("#R658COA").addClass("is-invalid") : $("#R658COA").removeClass("is-invalid");
$.trim($("#R658PLA").val()) == "" ? $("#R658PLA").addClass("is-invalid") : $("#R658PLA").removeClass("is-invalid");
$.trim($("#R658WHA").val()) == "" ? $("#R658WHA").addClass("is-invalid") : $("#R658WHA").removeClass("is-invalid");
if ($.trim($("#R658LCA").val()) == "" || $.trim($("#R658PNA").val()) == "" || $.trim($("#R658MQA").val()) == "" || $.trim($("#R658RQA").val()) == ""
|| $.trim($("#R658RMQA").val()) == "" || $.trim($("#R658TLA").val()) == "" || $.trim($("#R658COA").val()) == "" || $.trim($("#R658PLA").val()) == "" ||
$.trim($("#R658WHA").val()) == "" ) {
return false;
}
var formInputs = $("#addReplen").serialize();
var form_post = {
data: formInputs,
_token: '{{ csrf_token() }}'
};
checkRecordExist(form_post);
};
</script>
@endsection
@@ -0,0 +1,84 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Warehouse Performance Metrics report
@endsection
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Warehouse Performance Metrics report</h1>
<div class="card mb-4">
<div class="card-header">
<form class="needs-validation" enctype="multipart/form-data" method="GET" action="{{ route("m3.OrderLinesOfClosedOrder") }}">
<div class="row d-flex flex-row align-items-center">
@php
// $REPORTDATEDisp = old('REPORTDATEDisp') ?? \DateTime::createFromFormat('Ymd',$REPORTDATEDisp)->format('Y-m-d');
@endphp
{{-- <div class="col">
<label for="REPORTDATEDisp">Date</label>
<input type="date" class="form-control" id="REPORTDATEDisp" name="REPORTDATEDisp" value="{{ $REPORTDATEDisp }}" max={{ date('Y-m-d') }} required>
</div> --}}
<div class="col">
<label for="recipient-name" >Warehouse:</label>
<select class="form-select" id="WHDDA" aria-label="WHDD" tabindex="-1" disabled>
@foreach ($IC670M as $key => $IC670MR)
@php $currentWHDDA = trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS); @endphp
<option value="{{ $currentWHDDA }}"
data-comp="{{ trim($IC670MR->WDCO) }}" data-pl="{{ trim($IC670MR->WDPL) }}" data-wh="{{ trim($IC670MR->WDWHS) }}"
{{ ($WHDDA!='' && $WHDDA==$currentWHDDA) ? "selected" : "" }}>
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
<div class="col">
<label for="recipient-name">Division:</label>
<label for="COMPANY" class="visually-hidden">COMPANY</label>
<input type="text" class="form-control" id="COMPANY" required readonly>
</div>
<div class="col">
<label for="recipient-name">Plant:</label>
<label for="PLANT" class="visually-hidden">PLANT</label>
<input type="text" class="form-control" id="PLANT" required readonly>
</div>
<div class="col">
<label for="recipient-name">Warehouse:</label>
<label for="WHS" class="visually-hidden">WHS</label>
<input type="text" class="form-control" id="WHS" required readonly>
</div>
<div class="col">
{{-- <button type="submit" class="btn btn-primary mt-4" id="filterTop">Submit</button> --}}
</div>
</div>
</form>
</div>
<div class="card-body">
@foreach ($allReportsUrls as $fileName=>$reportsUrl)
@php
$fileNameOnly = basename($fileName);
@endphp
<a href='{{ route('m3.downloadFilesWhs', ['filename' => $fileName]) }}' >{{ $fileNameOnly }}</a><br>
@endforeach
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// Update Division/WH/Plant on Warehouse change
$(document).on('change select','#WHDDA',function(){
$("#COMPANY").val($(this).find("option:selected").data("comp"));
$("#PLANT").val($(this).find("option:selected").data("pl"));
$("#WHS").val($(this).find("option:selected").data("wh"));
});
$('#WHDDA').trigger('change');
// $('#filterTop').trigger('click');
// @if (session('message')!='')
// alert("{{ session('message') }}");
// @endif
});
</script>
@endsection
@@ -0,0 +1,406 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Carrier Master Maintenance
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Carrier Master Maintenance</h1>
<div class="card mb-4">
<div class="card-header">
@if(isset($power_user[0]) && trim((string) ($power_user[0]->R428PWRUSR ?? '')) === 'Y')
<button name="carrierAdd" type="button" class="btn btn-sm btn-info carrierAdd_click" id="carrierAdd_click"
data-AT9DPW="{{ ($power_user[0]->R428CO ?? '').($power_user[0]->R428PL ?? '').($power_user[0]->R428WH ?? '') }}">Add Record</button>
@endif
<!-- data-AT9DPW="$co.$plant.$whs">Add Record</button> -->
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5" style="width:80%">
<thead>
<tr>
<th></th>
<th></th>
<th>SCAC Code</th>
<th>Carrier name</th>
<th>2ship Carrier Code</th>
<th>Parcel Carrier Code</th>
<th>ERP Carrier Code</th>
<th>Timing of M3 closing</th>
</tr>
</thead>
<tbody>
@foreach($ICM160M as $key=>$val)
<tr>
<td></td>
<td>
@if(isset($power_user[0]) && trim((string) ($power_user[0]->R428PWRUSR ?? '')) === 'Y')
<button name="carrierEdit{{trim($val->CANUM)}}" type="submit" class="btn btn-sm btn-info carrierEdit_click" id="carrierEdit_click"
data-CANUM="{{trim($val->CANUM)}}" data-CANAM="{{trim($val->CANAM)}}" data-TWOSHIPCARRIERCODE="{{trim($val->TWOSHIPCARRIERCODE)}}"
data-PARCELCARRIERCODE="{{trim($val->PARCELCARRIERCODE)}}" data-CASPR10A01="{{trim($val->CASPR10A01)}}"
data-CASPR1A01="{{trim($val->CASPR1A01)}}"
>Edit</button>
@endif
</td>
<td> {{ $val->CANUM }} </td>
<td> {{ $val->CANAM }} </td>
<td> {{ $val->TWOSHIPCARRIERCODE }} </td>
<td> {{ $val->PARCELCARRIERCODE=="X"?"Parcel":"" }} </td>
<td> {{ $val->CASPR10A01 }} </td>
<td> {{ $val->CASPR1A01=="Y"?"When closing truck":"" }} </td>
</tr>
@endforeach
<!-- endif-->
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- /.row -->
<!-- @include('m3::liberty-theme.partials.modals.blank') -->
@include('m3::liberty-theme.partials.modals.carrierAdd')
@include('m3::liberty-theme.partials.modals.carrierEdit')
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
var myTable = $('#datatablesSimple5').DataTable({
"aaSorting": [],
"lengthMenu": [ [12,35,50,-1], [12,35,50,"All"] ],
"sPaginationType": "full_numbers",
"dom": 'Bfrtip', // Needs button container
"responsive": true,
"orderCellsTop": true,
"order": [ [2, 'asc'] ],
"pageLength": 12,
"columnDefs": [
{
orderable: true,
searchable: true,
targets: -2
}
]
});
// Update Checkbox values on Change
$("#PARCELCARRIERCODE").change(function() {
if($(this).is(":checked")) {
$("#PARCELCARRIERCODE").val("X");
} else {
$("#PARCELCARRIERCODE").val(" ");
}
});
$("#addPARCELCARRIERCODE").change(function() {
if($(this).is(":checked")) {
$("#addPARCELCARRIERCODE").val("X");
} else {
$("#addPARCELCARRIERCODE").val(" ");
}
});
$("#CASPR1A01").change(function() {
if($(this).is(":checked")) {
$("#CASPR1A01").val("Y");
} else {
$("#CASPR1A01").val(" ");
}
});
$("#addCASPR1A01").change(function() {
if($(this).is(":checked")) {
$("#addCASPR1A01").val("Y");
} else {
$("#addCASPR1A01").val(" ");
}
});
//
// Open Modal Carrier Edit
//
$(document).on('click', '#carrierEdit_click', function() {
// console.log($(this));
$("#CANUM").val($(this).data("canum"));
$("#CANAM").val($(this).data("canam"));
$("#TWOSHIPCARRIERCODE").val($(this).data("twoshipcarriercode"));
$("#PARCELCARRIERCODE").val($(this).data("parcelcarriercode"));
$("#CASPR10A01").val($(this).data("caspr10a01"));
$("#CASPR1A01").val($(this).data("caspr1a01"));
$("#OLD_CANUM").val($(this).data("canum"));
$("#OLD_CANAM").val($(this).data("canam"));
$("#OLD_TWOSHIPCARRIERCODE").val($(this).data("twoshipcarriercode"));
$("#OLD_PARCELCARRIERCODE").val($(this).data("parcelcarriercode"));
$("#OLD_CASPR10A01").val($(this).data("caspr10a01"));
$("#OLD_CASPR1A01").val($(this).data("caspr1a01"));
if($(this).data("parcelcarriercode")=='X') {
$("#PARCELCARRIERCODE").prop("checked", true);
} else {
$("#PARCELCARRIERCODE").prop("checked", false);
}
if($(this).data("caspr1a01")=='Y') {
$("#CASPR1A01").prop("checked", true);
} else {
$("#CASPR1A01").prop("checked", false);
}
$('#carrierEdit').modal('show');
});
//
// Open Modal Carrier Add
//
$(document).on('click', '#carrierAdd_click', function() {
// console.log($(this));
// $("#AT9DPW").val($(this).data("at9dpw"));
$('#carrierAdd').modal('show');
});
// Clear values on Edit form when Close is clicked
$(document).on('click', '#closeEdit', function() {
document.getElementById("frmEdit").reset();
});
// Clear values on Add form when Close is clicked
$(document).on('click', '#closeAdd', function() {
document.getElementById("frmAdd").reset();
});
//
// Save Carrier Edit
//
$(document).on('click', '#submitCarrierEdit', function() {
var changes_detected = 0;
var errors_found = 0;
// Get the right Values
if($("#PARCELCARRIERCODE").is(":checked")) {
$("#PARCELCARRIERCODE").val("X");
} else {
$("#PARCELCARRIERCODE").val(" ");
}
if($("#addPARCELCARRIERCODE").is(":checked")) {
$("#addPARCELCARRIERCODE").val("X");
} else {
$("#addPARCELCARRIERCODE").val(" ");
}
if($("#CASPR1A01").is(":checked")) {
$("#CASPR1A01").val("Y");
} else {
$("#CASPR1A01").val(" ");
}
if($("#addCASPR1A01").is(":checked")) {
$("#addCASPR1A01").val("Y");
} else {
$("#addCASPR1A01").val(" ");
}
// Retrieve the values we need to pass on
var NEW_CANUM = $("#CANUM").val();
var NEW_CANAM = $("#CANAM").val();
var NEW_TWOSHIPCARRIERCODE = $("#TWOSHIPCARRIERCODE").val();
var NEW_PARCELCARRIERCODE = $("#PARCELCARRIERCODE").val();
var NEW_CASPR10A01 = $("#CASPR10A01").val();
var NEW_CASPR1A01 = $("#CASPR1A01").val();
// Retrieve old values
var OLD_CANUM = $("#OLD_CANUM").val();
var OLD_CANAM = $("#OLD_CANAM").val();
var OLD_TWOSHIPCARRIERCODE = $("#OLD_TWOSHIPCARRIERCODE").val();
var OLD_PARCELCARRIERCODE = $("#OLD_PARCELCARRIERCODE").val();
var OLD_CASPR10A01 = $("#OLD_CASPR10A01").val();
var OLD_CASPR1A01 = $("#OLD_CASPR1A01").val();
if(NEW_TWOSHIPCARRIERCODE.length>3) {
$('#carrierEdit').modal('show');
alert("Value entered greater than 999");
$("#TWOSHIPCARRIERCODE").val("");
$("#TWOSHIPCARRIERCODE").focus();
errors_found=1;
}
if(NEW_CASPR10A01.length>6) {
$('#carrierEdit').modal('show');
alert("Value entered greater than 999999");
$("#PARCELCARRIERCODE").val("");
$("#PARCELCARRIERCODE").focus();
errors_found=1;
}
if(errors_found==0) {
var csrf = document.querySelector('meta[name="csrf-token"]').content;
var form_post = {
'CANUM': NEW_CANUM,
'CANAM': NEW_CANAM,
'TWOSHIPCARRIERCODE': NEW_TWOSHIPCARRIERCODE,
'PARCELCARRIERCODE': NEW_PARCELCARRIERCODE,
'CASPR10A01': NEW_CASPR10A01,
'CASPR1A01': NEW_CASPR1A01,
'_token': csrf
};
// console.log(form_post); return false;
$.ajax({
type:'POST',
url:'/carrierMaint/saveCarrierEdit',
data: form_post,
success:function(data) {
if (data=="success") {
//$('#blank-modal').modal('hide');
$('#carrierEdit').modal('hide');
// alert("should reload here");
location.reload();
} else {
$("#CANUM").val(NEW_CANUM);
$("#CANAM").val(NEW_CANAM);
$("#TWOSHIPCARRIERCODE").val(NEW_TWOSHIPCARRIERCODE);
$("#AT9DPW").val(NEW_AT9DPWH);
$("#PARCELCARRIERCODE").val(NEW_PARCELCARRIERCODE);
$("#CASPR10A01").val(NEW_CASPR10A01);
$("#CASPR1A01").val(NEW_CASPR1A01);
$("#OLD_CANUM").val(OLD_CANUM);
$("#OLD_CANAM").val(OLD_CANAM);
$("#OLD_TWOSHIPCARRIERCODE").val(OLD_TWOSHIPCARRIERCODE);
$("#OLD_PARCELCARRIERCODE").val(OLD_PARCELCARRIERCODE);
$("#OLD_CASPR10A01").val(OLD_CASPR10A01);
$("#OLD_CASPR1A01").val(OLD_CASPR1A01);
// if (data=="null") {
// alert("SCAC Code entered cannot be blank. Please try again.");
// $("#addCANUM").val('');
// $('#carrierAdd').modal('show');
// $("#addCANUM").focus();
// }
}
}
});
}
});
//
// Save Carrier Add
//
$(document).on('click', '#submitCarrierAdd', function() {
var errors_found = 0;
// Get the right Values
if($("#PARCELCARRIERCODE").is(":checked")) {
$("#PARCELCARRIERCODE").val("X");
} else {
$("#PARCELCARRIERCODE").val(" ");
}
if($("#addPARCELCARRIERCODE").is(":checked")) {
$("#addPARCELCARRIERCODE").val("X");
} else {
$("#addPARCELCARRIERCODE").val(" ");
}
if($("#CASPR1A01").is(":checked")) {
$("#CASPR1A01").val("Y");
} else {
$("#CASPR1A01").val(" ");
}
if($("#addCASPR1A01").is(":checked")) {
$("#addCASPR1A01").val("Y");
} else {
$("#addCASPR1A01").val(" ");
}
// Retrieve the values we need to pass on
var NEW_CANUM = $("#addCANUM").val();
var NEW_CANAM = $("#addCANAM").val();
var NEW_TWOSHIPCARRIERCODE = $("#addTWOSHIPCARRIERCODE").val();
var NEW_PARCELCARRIERCODE = $("#addPARCELCARRIERCODE").val();
var NEW_CASPR10A01 = $("#addCASPR10A01").val();
var NEW_CASPR1A01 = $("#addCASPR1A01").val();
var csrf = document.querySelector('meta[name="csrf-token"]').content;
var form_post = {
'CANUM': NEW_CANUM,
'CANAM': NEW_CANAM,
'TWOSHIPCARRIERCODE': NEW_TWOSHIPCARRIERCODE,
'PARCELCARRIERCODE': NEW_PARCELCARRIERCODE,
'CASPR10A01': NEW_CASPR10A01,
'CASPR1A01': NEW_CASPR1A01,
'_token': csrf
};
// console.log(form_post); return false;
// if (NEW_PARCELCARRIERCODE.trim()=="" || NEW_CASPR10A01.trim()=="") {
// $('#carrierAdd').modal('show');
// if (NEW_CASPR10A01=="") {
// $('#CASPR10A01').focus();
// }
// alert("There are fields that are blank that must be populated.");
// } else {
if(NEW_TWOSHIPCARRIERCODE.length>3) {
$('#carrierAdd').modal('show');
alert("Value entered greater than 999");
$("#addTWOSHIPCARRIERCODE").val("");
$("#addTWOSHIPCARRIERCODE").focus();
errors_found=1;
}
if(NEW_CASPR10A01.length>6) {
$('#carrierAdd').modal('show');
alert("Value entered greater than 999999");
$("#addPARCELCARRIERCODE").val("");
$("#addPARCELCARRIERCODE").focus();
errors_found=1;
}
if(errors_found==0) {
$.ajax({
type:'POST',
url:'/carrierMaint/saveCarrierAdd',
data: form_post,
success:function(data) {
if (data=="success") {
$('#carrierAdd').modal('hide');
location.reload();
} else {
$("#addCANUM").val(NEW_CANUM);
$("#addCANAM").val(NEW_CANAM);
$("#addTWOSHIPCARRIERCODE").val(NEW_TWOSHIPCARRIERCODE);
$("#addPARCELCARRIERCODE").val(NEW_PARCELCARRIERCODE);
$("#addCASPR10A01").val(NEW_CASPR10A01);
$("#addCASPR1A01").val(NEW_CASPR1A01);
if (data=="exists") {
alert("SCAC Code entered already exists. Please try again.");
$("#addCANUM").val('');
$("#addCANAM").val('');
$("#addTWOSHIPCARRIERCODE").val('');
$("#addPARCELCARRIERCODE").val('');
$("#addCASPR10A01").val('');
$("#addCASPR1A01").val('');
$('#carrierAdd').modal('show');
}
if (data=="null") {
alert("SCAC Code entered cannot be blank. Please try again.");
$("#addCANUM").val('');
$('#carrierAdd').modal('show');
$("#addCANUM").focus();
}
}
}
});
}
});
});
//});
</script>
@endsection
@@ -0,0 +1,39 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Sentinel API
@endsection
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Dashboard</h1>
<div class="row">
<div class="col-xl-6">
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-chart-area me-1"></i>
Last 7 days of picking <b>DEMO DATA</b>
</div>
<div class="card-body"><canvas id="myAreaChart" width="100%" height="40"></canvas></div>
</div>
</div>
<div class="col-xl-6">
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-chart-bar me-1"></i>
Last 12 month of invoice <b>DEMO DATA</b>
</div>
<div class="card-body"><canvas id="myBarChart" width="100%" height="40"></canvas></div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(function() {
});
</script>
@endsection
@@ -0,0 +1,518 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Exec Summary
@endsection
{{-- Flat Picker CSS --}}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/plugins/monthSelect/style.css">
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Exec Summary</h1>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
<div class="card mb-4">
{{-- <div class="card-header"></div> --}}
<div class="card-body">
<div class="row">
{{-- Selectors --}}
<div class="col-2 border-end">
<form id="chartSelectorsForm">
<h6>Sales / Weight / Lines</h6>
{{-- Warehouses --}}
<div class="mb-3">
<div class="form-check-container">
@foreach ($IC670M as $key => $IC670MR)
@php $currentWHDDA = trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS); @endphp
<div class="form-check">
<input class="form-check-input" type="checkbox" name="WHDDA[]"
id="WHDDA_{{ $currentWHDDA }}" value="{{ $currentWHDDA }}"
data-comp="{{ trim($IC670MR->WDCO) }}"
data-pl="{{ trim($IC670MR->WDPL) }}"
data-wh="{{ trim($IC670MR->WDWHS) }}"
{{ $WHDDA != '' && $WHDDA == $currentWHDDA ? 'checked' : '' }}>
<label class="form-check-label" for="WHDDA_{{ $currentWHDDA }}">
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</label>
</div>
@endforeach
</div>
</div>
<hr>
{{-- Report Period --}}
<div class="mb-3">
<div class="btn-group" role="group" aria-label="Report Period">
<input type="radio" class="btn-check" name="reportPeriod" id="periodMonthly"
value="monthly" checked>
<label class="btn btn-outline-primary btn-sm"
for="periodMonthly">Monthly</label>
<input type="radio" class="btn-check" name="reportPeriod" id="periodQuarter"
value="quarter">
<label class="btn btn-outline-primary btn-sm"
for="periodQuarter">Quarter</label>
<input type="radio" class="btn-check" name="reportPeriod" id="periodYear"
value="year">
<label class="btn btn-outline-primary btn-sm" for="periodYear">Year</label>
<input type="radio" class="btn-check" name="reportPeriod" id="preiodCustom"
value="custom">
<label class="btn btn-outline-primary btn-sm" for="preiodCustom">Daily</label>
</div>
</div>
<hr>
{{-- From To Dates --}}
<div class="mb-3">
@php
$todayDate = today()->format('Ym');
$reportDate = \DateTime::createFromFormat('Ym', $todayDate)
->modify('first day of January last year')
->format('Y-m');
$toreportDate = \DateTime::createFromFormat('Ym', $todayDate)->format(
'Y-m',
);
@endphp
<div class="row">
{{-- <fieldset id="fromToDates"> --}}
<div class="row align-items-center mb-2">
<div class="col-md-4">
<label class="col-form-label" for="REPORTDATE">From</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" id="REPORTDATE"
name="REPORTDATE" value="{{ $reportDate }}">
</div>
</div>
<div class="row align-items-center" id="TOREPORTDATEDIV">
<div class="col-md-4">
<label class="col-form-label" for="TOREPORTDATE">To</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" id="TOREPORTDATE"
name="TOREPORTDATE" value="{{ $toreportDate }}">
</div>
</div>
{{-- </fieldset> --}}
</div>
</div>
<hr>
{{-- Sales Weight Lines --}}
<div class="mb-3">
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="checkSales"
name="checkSales" checked>
<label class="form-check-label" for="checkSales">Sales</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="checkWeight"
name="checkWeight">
<label class="form-check-label" for="checkWeight">Weight</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="checkLines"
name="checkLines">
<label class="form-check-label" for="checkLines">Lines</label>
</div>
</div>
<hr>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<button type="button" class="btn btn-primary mt-4" id="updateCharts">Submit</button>
</form>
</div>
{{-- Charts --}}
<div class="col-10">
<div class="container-fluid">
<canvas id="acquisitions"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
{{-- Chart JS --}}
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.8/dist/chart.umd.min.js"></script>
<!-- Flatpickr JS -->
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<!-- Month Select Plugin -->
<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/plugins/monthSelect/index.js"></script>
<script>
$(document).ready(function() {
//// Init Dates
let fromMonthPicker = flatpickr("#REPORTDATE", {
dateFormat: "Y-m", // Format as Year-Month
plugins: [
new monthSelectPlugin({
shorthand: false, // Show short month names (e.g., Jan, Feb)
readOnly: false,
dateFormat: "Y-m", // Format output
altFormat: "F Y", // Display full month name (e.g., January 2025)
theme: "material_blue" // Options: "light", "dark", "material_blue", etc.
})
],
onChange: function(selectedDates, dateStr) {
toMonthPicker.set("minDate",
dateStr); // Prevent selecting a "To" month before "From"
},
// Add these explicit styling options
onReady: function(dateObj, dateStr, instance) {
instance.input.style.backgroundColor = 'white';
instance.input.style.cursor = 'pointer';
}
});
let toMonthPicker = flatpickr("#TOREPORTDATE", {
dateFormat: "Y-m",
plugins: [
new monthSelectPlugin({
shorthand: true,
dateFormat: "Y-m",
altFormat: "F Y",
theme: "material_blue"
})
],
onChange: function(selectedDates, dateStr) {
fromMonthPicker.set("maxDate",
dateStr); // Prevent selecting a "From" month after "To"
},
// Add these explicit styling options
onReady: function(dateObj, dateStr, instance) {
instance.input.style.backgroundColor = 'white';
instance.input.style.cursor = 'pointer';
}
});
//// End Dates
//// Add change event listener to radio buttons
$('input[name="reportPeriod"]').change(function() {
const isDisabled = $(this).val() == 'custom';
// $('#TOREPORTDATE').prop('disabled', isDisabled);
if (isDisabled) {
$('#TOREPORTDATEDIV').hide();
// toMonthPicker.input.style.backgroundColor = '#e9ecef';
// toMonthPicker.input.style.cursor = 'not-allowed';
// Set fromMonthPicker to today
const today = new Date();
fromMonthPicker.setDate(today);
}
// Show Todate
else {
$('#TOREPORTDATEDIV').show();
// toMonthPicker.input.style.backgroundColor = 'white';
// toMonthPicker.input.style.cursor = 'pointer';
}
});
//// Update Charts
$("#updateCharts").click(function() {
//// Validate Fields before calling Ajax
// Validation checks
let isValid = true;
let errorMessages = [];
// Check if at least one WHDDA checkbox is checked
const checkedWhdda = $("input[name='WHDDA[]']:checked").length;
if (checkedWhdda === 0) {
isValid = false;
errorMessages.push("Please select at least one Warehouse/Plant");
}
// Check From and To dates
const fromDate = $("#REPORTDATE").val();
const toDate = $("#TOREPORTDATE").val();
if (!fromDate || !toDate) {
isValid = false;
errorMessages.push("Please select both From and To dates");
}
// Check if at least one of Sales/Weight/Lines is checked
const checkedMetrics =
$("#checkSales:checked").length +
$("#checkWeight:checked").length +
$("#checkLines:checked").length;
if (checkedMetrics === 0) {
isValid = false;
errorMessages.push("Please select at least one metric (Sales, Weight, or Lines)");
}
// If validation fails, show SweetAlert
if (!isValid) {
Swal.fire({
icon: 'warning',
title: 'Validation Error',
html: errorMessages.map(msg => `<p>${msg}</p>`).join(''),
confirmButtonText: 'OK'
});
return;
}
let formData = $('#chartSelectorsForm').serialize(); // Serialize form data
// console.log(formData); return false;
//// Ran Ajax
$.ajax({
url: "{{ route('m3.execsummary') }}",
type: "POST",
data: formData,
success: function(response) {
//// Update charts
if (response.success == true) {
//// First: Destroy Chart if it exists
if (window.execSummaryChart !== undefined) {
window.execSummaryChart.destroy();
}
checkSales = response.checkSales;
checkWeight = response.checkWeight;
checkLines = response.checkLines;
dataResult = response.result;
reportPeriod = response.reportPeriod;
// Build Data
const data = dataResult.map(item => ({
year: item.YEARS,
dollars: parseInt(item.DOLLARS),
weight: parseInt(item.WEIGHT),
lines: parseInt(item.LINES),
whs: parseInt(item.WHS)
}));
// Group data by year and WHS
const groupedData = new Map();
const whsSet = new Set();
const yearsSet = new Set();
data.forEach(entry => {
const { year, whs,dollars,weight,lines} = entry;
if (!groupedData.has(year)) {
groupedData.set(year, new Map());
yearsSet.add(year);
}
if (!groupedData.get(year).has(whs)) {groupedData.get(year).set(whs, {dollars: 0,weight: 0,lines: 0});}
const whsData = groupedData.get(year).get(whs);
whsData.dollars += dollars;
whsData.weight += weight;
whsData.lines += lines;
whsSet.add(whs);
});
// Convert Sets to Arrays
const labels = [...groupedData.keys()].sort();
const whsArray = Array.from(whsSet);
const yearsArray = Array.from(yearsSet);
//##### MAK
// Function to extract the time period (month or quarter) regardless of year
function getTimePeriod(yearLabel) {
if (yearLabel.includes("Q")) {
// Quarterly format: "Q1-24" -> Return "Q1"
return yearLabel.split("-")[0];
} else if (yearLabel.match(/^\d{2}-\d{4}$/)) {
// Monthly format: "01-2024" -> Check if odd or even
const month = parseInt(yearLabel.split("-")[0]);
return month % 2 === 0 ? "even" : "odd";
} else if (/^\d{2}$/.test(yearLabel)) {
// Daily format: "01" -> Return "day"
return "day";
}
return yearLabel; // Default case
}
// Function to check if a label is a daily format
function isDailyFormat(yearLabel) {
return /^\d{2}$/.test(yearLabel);
}
// Define base hues for metrics
const HUE_BLUE = 195; // Sales → Blue
const HUE_GREEN = 140; // Weight → Green
const HUE_GREY = 220; // Lines → Grey (desaturated)
// Create color maps - first level for period type, second level for WHS
let salesColorMap = {};
let weightColorMap = {};
let linesColorMap = {};
// Define period types
const periodTypes = ["Q1", "Q2", "Q3", "Q4", "odd", "even", "day"];
// Generate colors for each period type
periodTypes.forEach((period, periodIndex) => {
// Calculate hue variations based on period type
let salesHue = HUE_BLUE;
let weightHue = HUE_GREEN;
// Adjust hue for quarters only
if (period.startsWith("Q")) {
const quarterNum = parseInt(period.substring(1));
salesHue = HUE_BLUE + (quarterNum - 1) * 15;
weightHue = HUE_GREEN + (quarterNum - 1) * 15;
}
// For monthly periods (odd/even), use slight variations
if (period === "odd") {
salesHue = HUE_BLUE + 5;
weightHue = HUE_GREEN + 5;
} else if (period === "even") {
salesHue = HUE_BLUE + 20;
weightHue = HUE_GREEN + 20;
}
// Create color maps for each WHS within this period
salesColorMap[period] = {};
weightColorMap[period] = {};
linesColorMap[period] = {};
// Generate different shades for each WHS - darker to lighter
whsArray.forEach((whs, whsIndex) => {
// Vary lightness by WHS - start darker (25%) and get lighter
// Reverse the WHS index calculation to go from dark to light
const reversedIndex = whsArray.length - 1 - whsIndex;
const lightness = 45 + (reversedIndex % 8) * 6;
// Assign colors for each metric
salesColorMap[period][whs] = `hsl(${salesHue}, 85%, ${lightness}%)`;
weightColorMap[period][whs] = `hsl(${weightHue}, 85%, ${lightness}%)`;
linesColorMap[period][whs] = `hsl(${HUE_GREY}, 10%, ${lightness}%)`; // Pure grey for Lines
});
});
// Function to get the appropriate color based on time period, metric, and WHS
function getDatasetColor(yearLabel, metric, whs) {
const period = getTimePeriod(yearLabel);
if (metric === "Sales") {
return salesColorMap[period]?.[whs] || `hsl(${HUE_BLUE}, 85%, 50%)`;
} else if (metric === "Weight") {
return weightColorMap[period]?.[whs] || `hsl(${HUE_GREEN}, 85%, 50%)`;
} else if (metric === "Lines") {
return linesColorMap[period]?.[whs] || `hsl(${HUE_GREY}, 0%, 50%)`;
}
return "rgba(200, 200, 200, 0.6)"; // Default fallback
}
// Extract datasets
let datasets = [];
whsArray.forEach(whs => {
// Function to create dataset with colors based on time period, metric, and WHS
const createDataset = (label, dataKey, stack, yAxisID, metric) => ({
label: `${label} (WHS ${whs} - ${metric})`,
data: labels.map(year => groupedData.get(year)?.get(whs)?.[dataKey] || 0),
backgroundColor: labels.map(year => getDatasetColor(year, metric, whs)),
stack,
yAxisID,
borderWidth: 2
});
if (checkSales === 'on') {
datasets.push(createDataset("Sales", "dollars", "Sales", 'yLeft', "Sales"));
}
if (checkWeight === 'on') {
datasets.push(createDataset("Weight", "weight", "Weight", 'yLeft', "Weight"));
}
if (checkLines === 'on') {
datasets.push(createDataset("Lines", "lines", "Lines", 'yRight', "Lines"));
}
});
//###### END MAK
// Generate Chart
window.execSummaryChart = new Chart(
document.getElementById('acquisitions'), {
type: 'bar',
data: {
labels,
datasets
},
options: {
interaction: {
intersect: false
},
responsive: true,
scales: {
yLeft: {
type: 'linear',
position: 'left',
title: {
display: true,
text: 'Sales & Weight'
},
stacked: true
},
yRight: {
type: 'linear',
position: 'right',
title: {
display: true,
text: 'Lines'
},
grid: {
drawOnChartArea: false
},
stacked: true
},
x: {
stacked: true
},
}
}
}
);
}
},
error: function(xhr, status, error) {
console.error("Error:", error);
// Handle errors
}
});
// End Ajax
});
//// Trigger Click on init
$("#updateCharts").trigger("click");
});
</script>
@endsection
@@ -0,0 +1,992 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Exec Summary - Line Chart
@endsection
{{-- Flat Picker CSS --}}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/plugins/monthSelect/style.css">
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Exec Summary - Line Chart</h1>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
<div class="card mb-4">
{{-- <div class="card-header"></div> --}}
<div class="card-body">
<div class="row">
{{-- Selectors --}}
<div class="col-2 border-end">
<form id="chartSelectorsForm">
<h6>Sales / Weight / Lines</h6>
{{-- Warehouses --}}
<div class="mb-3">
<div class="form-check-container">
@foreach ($IC670M as $key => $IC670MR)
@php $currentWHDDA = trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS); @endphp
<div class="form-check">
<input class="form-check-input" type="checkbox" name="WHDDA[]"
id="WHDDA_{{ $currentWHDDA }}" value="{{ $currentWHDDA }}"
data-comp="{{ trim($IC670MR->WDCO) }}"
data-pl="{{ trim($IC670MR->WDPL) }}"
data-wh="{{ trim($IC670MR->WDWHS) }}"
{{ $WHDDA != '' && $WHDDA == $currentWHDDA ? 'checked' : '' }}>
<label class="form-check-label" for="WHDDA_{{ $currentWHDDA }}">
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</label>
</div>
@endforeach
</div>
</div>
<hr>
{{-- Report Period --}}
<div class="mb-3">
<div class="btn-group" role="group" aria-label="Report Period">
<input type="radio" class="btn-check" name="reportPeriod" id="periodMonthly" value="monthly" checked>
<label class="btn btn-outline-primary btn-sm" for="periodMonthly">Monthly</label>
<input type="radio" class="btn-check" name="reportPeriod" id="periodQuarter" value="quarter">
<label class="btn btn-outline-primary btn-sm" for="periodQuarter">Quarter</label>
<input type="radio" class="btn-check" name="reportPeriod" id="periodYear" value="year">
<label class="btn btn-outline-primary btn-sm" for="periodYear">Year</label>
<input type="radio" class="btn-check" name="reportPeriod" id="preiodCustom" value="custom">
<label class="btn btn-outline-primary btn-sm" for="preiodCustom">Daily</label>
</div>
</div>
<hr>
{{-- From To Dates --}}
<div class="mb-3">
@php
$todayDate = today()->format('Ym');
$reportDate = \DateTime::createFromFormat('Ym', $todayDate)
->modify('first day of January last year')
->format('Y-m');
$toreportDate = \DateTime::createFromFormat('Ym', $todayDate)->format(
'Y-m',
);
@endphp
<div class="row">
{{-- <fieldset id="fromToDates"> --}}
<div class="row align-items-center mb-2">
<div class="col-md-4">
<label class="col-form-label" for="REPORTDATE">From</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" id="REPORTDATE"
name="REPORTDATE" value="{{ $reportDate }}">
</div>
</div>
<div class="row align-items-center" id="TOREPORTDATEDIV">
<div class="col-md-4">
<label class="col-form-label" for="TOREPORTDATE">To</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" id="TOREPORTDATE"
name="TOREPORTDATE" value="{{ $toreportDate }}">
</div>
</div>
{{-- </fieldset> --}}
</div>
</div>
<hr>
{{-- Sales Weight Lines --}}
<div class="mb-3">
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="checkSales"
name="checkSales" checked>
<label class="form-check-label" for="checkSales">Sales</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="checkWeight"
name="checkWeight">
<label class="form-check-label" for="checkWeight">Weight</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="checkLines"
name="checkLines">
<label class="form-check-label" for="checkLines">Lines</label>
</div>
</div>
<hr>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<button type="button" class="btn btn-primary mt-4" id="updateCharts">Submit</button>
</form>
</div>
{{-- Charts --}}
<div class="col-10">
<div class="container-fluid">
<canvas id="acquisitions"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
{{-- Chart JS --}}
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.8/dist/chart.umd.min.js"></script>
<!-- Flatpickr JS -->
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<!-- Month Select Plugin -->
<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/plugins/monthSelect/index.js"></script>
<script>
$(document).ready(function() {
//// Init Dates
let fromMonthPicker = flatpickr("#REPORTDATE", {
dateFormat: "Y-m", // Format as Year-Month
plugins: [
new monthSelectPlugin({
shorthand: false, // Show short month names (e.g., Jan, Feb)
readOnly: false,
dateFormat: "Y-m", // Format output
altFormat: "F Y", // Display full month name (e.g., January 2025)
theme: "material_blue" // Options: "light", "dark", "material_blue", etc.
})
],
onChange: function(selectedDates, dateStr) {
toMonthPicker.set("minDate",
dateStr); // Prevent selecting a "To" month before "From"
},
// Add these explicit styling options
onReady: function(dateObj, dateStr, instance) {
instance.input.style.backgroundColor = 'white';
instance.input.style.cursor = 'pointer';
}
});
let toMonthPicker = flatpickr("#TOREPORTDATE", {
dateFormat: "Y-m",
plugins: [
new monthSelectPlugin({
shorthand: true,
dateFormat: "Y-m",
altFormat: "F Y",
theme: "material_blue"
})
],
onChange: function(selectedDates, dateStr) {
fromMonthPicker.set("maxDate",
dateStr); // Prevent selecting a "From" month after "To"
},
// Add these explicit styling options
onReady: function(dateObj, dateStr, instance) {
instance.input.style.backgroundColor = 'white';
instance.input.style.cursor = 'pointer';
}
});
//// End Dates
//// Add change event listener to radio buttons
$('input[name="reportPeriod"]').change(function() {
const isDisabled = $(this).val() == 'custom' || $(this).val() == 'monthly';
// $('#TOREPORTDATE').prop('disabled', isDisabled);
if (isDisabled) {
$('#TOREPORTDATEDIV').hide();
// toMonthPicker.input.style.backgroundColor = '#e9ecef';
// toMonthPicker.input.style.cursor = 'not-allowed';
// Set fromMonthPicker to today
const today = new Date();
fromMonthPicker.setDate(today);
}
// Show Todate
else {
$('#TOREPORTDATEDIV').show();
// toMonthPicker.input.style.backgroundColor = 'white';
// toMonthPicker.input.style.cursor = 'pointer';
}
});
//// Trigger Period change
$('input[name="reportPeriod"]').trigger("change");
//// Update Charts
$("#updateCharts").click(function() {
//// Validate Fields before calling Ajax
// Validation checks
let isValid = true;
let errorMessages = [];
// Check if at least one WHDDA checkbox is checked
const checkedWhdda = $("input[name='WHDDA[]']:checked").length;
if (checkedWhdda === 0) {
isValid = false;
errorMessages.push("Please select at least one Warehouse/Plant");
}
// Get selected period
const checkedPeriod = $('input[name="reportPeriod"]:checked').val();
// console.log(checkedPeriod);
// Check From and To dates
const fromDate = $("#REPORTDATE").val();
const toDate = $("#TOREPORTDATE").val();
if ((checkedPeriod == 'monthly' || checkedPeriod == 'custom') && !fromDate) {
isValid = false;
errorMessages.push("Please select date");
}
else if (!fromDate && !toDate) {
isValid = false;
errorMessages.push("Please select both From and To dates");
}
// Check if at least one of Sales/Weight/Lines is checked
const checkedMetrics =
$("#checkSales:checked").length +
$("#checkWeight:checked").length +
$("#checkLines:checked").length;
if (checkedMetrics === 0) {
isValid = false;
errorMessages.push("Please select at least one metric (Sales, Weight, or Lines)");
}
// If validation fails, show SweetAlert
if (!isValid) {
Swal.fire({
icon: 'warning',
title: 'Validation Error',
html: errorMessages.map(msg => `<p>${msg}</p>`).join(''),
confirmButtonText: 'OK'
});
return;
}
let formData = $('#chartSelectorsForm').serialize(); // Serialize form data
// console.log(formData); return false;
//// Run Ajax
$.ajax({
url: "{{ route('m3.execsummaryline') }}",
type: "POST",
data: formData,
success: function(response) {
//// Update charts
if (response.success == true) {
// First: Destroy Chart if it exists
if (window.execSummaryChart !== undefined) {
window.execSummaryChart.destroy();
}
checkSales = response.checkSales;
checkWeight = response.checkWeight;
checkLines = response.checkLines;
dataResult = response.result;
dataResultLY = response.resultLY; // Last year data
reportPeriod = response.reportPeriod;
// Build Data for Current Year
const data = dataResult.map(item => ({
year: item.YEARS,
dollars: parseInt(item.DOLLARS),
weight: parseInt(item.WEIGHT),
lines: parseInt(item.LINES),
whs: parseInt(item.WHS)
}));
// Build Data for Last Year
const dataLY = dataResultLY ? dataResultLY.map(item => ({
year: item.YEARS,
dollars: parseInt(item.DOLLARS),
weight: parseInt(item.WEIGHT),
lines: parseInt(item.LINES),
whs: parseInt(item.WHS)
})) : [];
// Determine data format (year, quarterly, monthly, or daily)
let dataFormat;
if (data.length > 0) {
const sampleYear = data[0].year;
if (sampleYear.includes("Q")) {
dataFormat = "quarterly";
} else if (sampleYear.match(/^\d{4}-\d{2}$/)) {
dataFormat = "monthly";
} else if (/^\d{2}$/.test(sampleYear)) {
dataFormat = "daily";
} else {
dataFormat = "yearly";
}
}
// Function to generate distinct colors
function generateDistinctColors(count) {
let colors = [];
for (let i = 0; i < count; i++) {
let hue = (i * 137.5) % 360; // Golden angle for uniqueness
let saturation = 70 + (i % 3) * 10;
let lightness = 50 + (i % 2) * 10;
colors.push(`hsl(${hue}, ${saturation}%, ${lightness}%)`);
}
return colors;
}
// Function to create a lighter version of a color for LY data
function createLighterColor(color) {
// Extract HSL values
const match = color.match(/hsl\((\d+\.?\d*),\s*(\d+\.?\d*)%,\s*(\d+\.?\d*)%\)/);
if (match) {
const h = parseFloat(match[1]);
const s = parseFloat(match[2]);
const l = parseFloat(match[3]);
// Create lighter version by increasing lightness and reducing saturation
return `hsl(${h}, ${Math.max(s - 20, 30)}%, ${Math.min(l + 15, 85)}%)`;
}
return color; // Return original if parsing fails
}
// Group data according to format
let labels = [];
let datasets = [];
const whsSet = new Set();
// Initialize warehouse set from data
data.forEach(entry => whsSet.add(entry.whs));
if (dataLY) dataLY.forEach(entry => whsSet.add(entry.whs));
const whsArray = Array.from(whsSet).sort((a, b) => a - b);
// Monthly data format handling
if (dataFormat === "monthly") {
// Extract unique year-month combinations
const periodData = new Map();
const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
// Process current year data
data.forEach(entry => {
const [year, month] = entry.year.split("-");
const monthIndex = parseInt(month) - 1;
const monthName = monthNames[monthIndex];
const yearSuffix = year.substring(2); // Last 2 digits
const periodKey = `${monthName}`; // '${yearSuffix}
const periodKey2 = `${monthName} '${yearSuffix}`;
if (!periodData.has(periodKey)) {
periodData.set(periodKey, { current: {}, ly: {} ,label: periodKey2 });
}
const whsData = periodData.get(periodKey).current;
if (!whsData[entry.whs]) {
whsData[entry.whs] = { dollars: 0, weight: 0, lines: 0 };
}
whsData[entry.whs].dollars += entry.dollars;
whsData[entry.whs].weight += entry.weight;
whsData[entry.whs].lines += entry.lines;
});
// Process last year data if available
if (dataLY && dataLY.length > 0) {
dataLY.forEach(entry => {
const [year, month] = entry.year.split("-");
const monthIndex = parseInt(month) - 1;
const monthName = monthNames[monthIndex];
const yearSuffix = year.substring(2); // Last 2 digits
const periodKey = `${monthName}`; // '${yearSuffix}
const periodKey2 = `${monthName} '${yearSuffix}`;
if (!periodData.has(periodKey)) {
periodData.set(periodKey, { current: {}, ly: {},label: periodKey2 });
}
const whsData = periodData.get(periodKey).ly;
if (!whsData[entry.whs]) {
whsData[entry.whs] = { dollars: 0, weight: 0, lines: 0 };
}
whsData[entry.whs].dollars += entry.dollars;
whsData[entry.whs].weight += entry.weight;
whsData[entry.whs].lines += entry.lines;
});
}
// Sort labels chronologically
labels = Array.from(periodData.keys()).sort((a, b) => {
// Parse month and year
const [monthA, yearA] = a.split(" '");
const [monthB, yearB] = b.split(" '");
const yearDiff = parseInt(yearA) - parseInt(yearB);
if (yearDiff !== 0) return yearDiff;
// Compare months if same year
const monthOrder = { "Jan": 1, "Feb": 2, "Mar": 3, "Apr": 4, "May": 5, "Jun": 6,"Jul": 7, "Aug": 8, "Sep": 9, "Oct": 10, "Nov": 11, "Dec": 12 };
return monthOrder[monthA] - monthOrder[monthB];
});
// Generate colors for each WHS
const whsColors = {};
whsArray.forEach((whs, index) => {
whsColors[whs] = generateDistinctColors(whsArray.length)[index];
});
// Create datasets for each metric and warehouse
whsArray.forEach(whs => {
if (checkSales === 'on') {
// Sales dataset for current year
datasets.push({
type: 'line',
label: `Sales TY (WHS ${whs})`,
data: labels.map(period => ({
x: period,
y: periodData.get(period)?.current[whs]?.dollars || 0,
label: periodData.get(period)?.label || period
})),
borderColor: whsColors[whs],
backgroundColor: whsColors[whs],
yAxisID: 'yLeft',
tension: 0.3,
fill: false
});
// Sales dataset for last year
if (dataLY && dataLY.length > 0) {
datasets.push({
type: 'line',
label: `Sales LY (WHS ${whs})`,
data: labels.map(period => ({
x: period,
y: periodData.get(period)?.ly[whs]?.dollars || 0,
label: periodData.get(period)?.label || period
})),
borderColor: createLighterColor(whsColors[whs]),
backgroundColor: createLighterColor(whsColors[whs]),
borderDash: [10, 5],
yAxisID: 'yLeft',
tension: 0.3,
fill: false,
order: 1
});
}
}
// Weight
if (checkWeight === 'on') {
// Weight dataset for current year
datasets.push({
type: 'line',
label: `Weight TY (WHS ${whs})`,
data: labels.map(period =>
periodData.get(period)?.current[whs]?.weight || 0
),
borderColor: whsColors[whs],
backgroundColor: whsColors[whs],
// borderDash: [5, 5],
yAxisID: 'yLeft',
tension: 0.3,
fill: false
});
// Weight dataset for last year
if (dataLY && dataLY.length > 0) {
datasets.push({
type: 'line',
label: `Weight LY (WHS ${whs})`,
data: labels.map(period =>
periodData.get(period)?.ly[whs]?.weight || 0
),
borderColor: createLighterColor(whsColors[whs]),
backgroundColor: createLighterColor(whsColors[whs]),
borderDash: [10, 10],
yAxisID: 'yLeft',
tension: 0.3,
fill: false,
order: 1
});
}
}
// Lines
if (checkLines === 'on') {
// Lines dataset for current year
datasets.push({
type: 'line',
label: `Lines TY (WHS ${whs})`,
data: labels.map(period =>
periodData.get(period)?.current[whs]?.lines || 0
),
borderColor: whsColors[whs],
backgroundColor: whsColors[whs],
// borderDash: [2, 2],
yAxisID: 'yRight',
tension: 0.3,
fill: false
});
// Lines dataset for last year
if (dataLY && dataLY.length > 0) {
datasets.push({
type: 'line',
label: `Lines LY (WHS ${whs})`,
data: labels.map(period =>
periodData.get(period)?.ly[whs]?.lines || 0
),
borderColor: createLighterColor(whsColors[whs]),
backgroundColor: createLighterColor(whsColors[whs]),
borderDash: [10, 2],
yAxisID: 'yRight',
tension: 0.3,
fill: false,
order: 1
});
}
}
});
}
// Quarterly data format handling
else if (dataFormat === "quarterly") {
// Extract unique years and quarters
const yearsSet = new Set();
const periodsSet = new Set();
data.forEach(entry => {
const [quarter, year] = entry.year.split("-");
yearsSet.add(year);
periodsSet.add(quarter);
});
const years = Array.from(yearsSet).sort();
const periods = Array.from(periodsSet).sort((a, b) =>
parseInt(a.substring(1)) - parseInt(b.substring(1))
);
// Create groupedData structure for quarters
const groupedData = new Map();
const groupedDataLY = new Map();
// Initialize data structures
years.forEach(year => {
groupedData.set(year, new Map());
periods.forEach(quarter => {
groupedData.get(year).set(quarter, new Map());
});
});
// Process current year data
data.forEach(entry => {
const [quarter, year] = entry.year.split("-");
if (!groupedData.has(year)) {
groupedData.set(year, new Map());
}
if (!groupedData.get(year).has(quarter)) {
groupedData.get(year).set(quarter, new Map());
}
if (!groupedData.get(year).get(quarter).has(entry.whs)) {
groupedData.get(year).get(quarter).set(entry.whs, {
dollars: 0, weight: 0, lines: 0
});
}
const whsData = groupedData.get(year).get(quarter).get(entry.whs);
whsData.dollars += entry.dollars;
whsData.weight += entry.weight;
whsData.lines += entry.lines;
});
// Process last year data if available
if (dataLY && dataLY.length > 0) {
// Initialize LY structure
years.forEach(year => {
groupedDataLY.set(year, new Map());
periods.forEach(quarter => {
groupedDataLY.get(year).set(quarter, new Map());
});
});
dataLY.forEach(entry => {
const [quarter, year] = entry.year.split("-");
if (!groupedDataLY.has(year)) {
groupedDataLY.set(year, new Map());
}
if (!groupedDataLY.get(year).has(quarter)) {
groupedDataLY.get(year).set(quarter, new Map());
}
if (!groupedDataLY.get(year).get(quarter).has(entry.whs)) {
groupedDataLY.get(year).get(quarter).set(entry.whs, {
dollars: 0, weight: 0, lines: 0
});
}
const whsData = groupedDataLY.get(year).get(quarter).get(entry.whs);
whsData.dollars += entry.dollars;
whsData.weight += entry.weight;
whsData.lines += entry.lines;
});
}
// Set labels to quarters
labels = periods;
// Create color map for years
const yearColors = {};
const generatedColors = generateDistinctColors(years.length);
years.forEach((year, index) => {
yearColors[year] = generatedColors[index];
});
// Create datasets
whsArray.forEach(whs => {
years.forEach(year => {
if (checkSales === 'on') {
// Current year sales
datasets.push({
type: 'line',
label: `Sales (WHS ${whs} - ${year})`,
data: periods.map(period =>
groupedData.get(year)?.get(period)?.get(whs)?.dollars || 0
),
borderColor: yearColors[year],
backgroundColor: yearColors[year],
yAxisID: 'yLeft',
tension: 0.3,
fill: false
});
// Last year sales
if (dataLY && dataLY.length > 0) {
datasets.push({
type: 'line',
label: `Sales LY (WHS ${whs} - ${year})`,
data: periods.map(period =>
groupedDataLY.get(year)?.get(period)?.get(whs)?.dollars || 0
),
borderColor: yearColors[year],
backgroundColor: yearColors[year],
borderDash: [10, 5],
yAxisID: 'yLeft',
tension: 0.3,
fill: false,
order: 1
});
}
}
if (checkWeight === 'on') {
// Current year weight
datasets.push({
type: 'line',
label: `Weight (WHS ${whs} - ${year})`,
data: periods.map(period =>
groupedData.get(year)?.get(period)?.get(whs)?.weight || 0
),
borderColor: yearColors[year],
backgroundColor: yearColors[year],
borderDash: [5, 5],
yAxisID: 'yLeft',
tension: 0.3,
fill: false
});
// Last year weight
if (dataLY && dataLY.length > 0) {
datasets.push({
type: 'line',
label: `Weight LY (WHS ${whs} - ${year})`,
data: periods.map(period =>
groupedDataLY.get(year)?.get(period)?.get(whs)?.weight || 0
),
borderColor: yearColors[year],
backgroundColor: yearColors[year],
borderDash: [10, 10],
yAxisID: 'yLeft',
tension: 0.3,
fill: false,
order: 1
});
}
}
if (checkLines === 'on') {
// Current year lines
datasets.push({
type: 'line',
label: `Lines (WHS ${whs} - ${year})`,
data: periods.map(period =>
groupedData.get(year)?.get(period)?.get(whs)?.lines || 0
),
borderColor: yearColors[year],
backgroundColor: yearColors[year],
borderDash: [2, 2],
yAxisID: 'yRight',
tension: 0.3,
fill: false
});
// Last year lines
if (dataLY && dataLY.length > 0) {
datasets.push({
type: 'line',
label: `Lines LY (WHS ${whs} - ${year})`,
data: periods.map(period =>
groupedDataLY.get(year)?.get(period)?.get(whs)?.lines || 0
),
borderColor: yearColors[year],
backgroundColor: yearColors[year],
borderDash: [10, 2],
yAxisID: 'yRight',
tension: 0.3,
fill: false,
order: 1
});
}
}
});
});
}
// Yearly or daily format handling
else {
// Group data by year/day and warehouse
const groupedData = new Map();
const groupedDataLY = new Map();
// Process current year data
data.forEach(entry => {
if (!groupedData.has(entry.year)) {
groupedData.set(entry.year, new Map());
}
if (!groupedData.get(entry.year).has(entry.whs)) {
groupedData.get(entry.year).set(entry.whs, {
dollars: 0, weight: 0, lines: 0
});
}
const whsData = groupedData.get(entry.year).get(entry.whs);
whsData.dollars += entry.dollars;
whsData.weight += entry.weight;
whsData.lines += entry.lines;
});
// Process last year data if available
if (dataLY && dataLY.length > 0) {
dataLY.forEach(entry => {
if (!groupedDataLY.has(entry.year)) {
groupedDataLY.set(entry.year, new Map());
}
if (!groupedDataLY.get(entry.year).has(entry.whs)) {
groupedDataLY.get(entry.year).set(entry.whs, {
dollars: 0, weight: 0, lines: 0
});
}
const whsData = groupedDataLY.get(entry.year).get(entry.whs);
whsData.dollars += entry.dollars;
whsData.weight += entry.weight;
whsData.lines += entry.lines;
});
}
// Set labels to sorted years or days
labels = Array.from(groupedData.keys()).sort();
// Helper function to get time key
function getTimeKey(yearLabel) {
if (yearLabel.includes("Q")) {
return yearLabel.split("-")[0] + "-";
} else if (yearLabel.match(/^\d{4}-\d{2}$/)) {
return yearLabel.split("-")[1]; // Get month part
} else if (/^\d{2}$/.test(yearLabel)) {
return yearLabel;
}
return yearLabel;
}
// Create color map
let uniqueKeys = new Set();
data.forEach(item => {
const timeKey = getTimeKey(item.year);
whsArray.forEach(whs => {
if (/^\d{2}$/.test(item.year)) {
// Daily case
uniqueKeys.add(`${whs}_Sales`);
uniqueKeys.add(`${whs}_Weight`);
uniqueKeys.add(`${whs}_Lines`);
} else {
// Yearly case
uniqueKeys.add(`${timeKey}_${whs}`);
}
});
});
uniqueKeys = [...uniqueKeys];
let colorMap = {};
let generatedColors = generateDistinctColors(uniqueKeys.length);
uniqueKeys.forEach((key, index) => {
colorMap[key] = generatedColors[index];
});
// Function to get color
function getDatasetColor(year, whs, metric, isLastYear = false) {
const timeKey = getTimeKey(year);
const key = /^\d{2}$/.test(year) ?
`${whs}_${metric}${isLastYear ? '_LY' : ''}` :
`${timeKey}_${whs}`;
return colorMap[key] || "rgba(200, 200, 200, 0.6)";
}
// Create datasets
whsArray.forEach(whs => {
// Function to create dataset with unique colors
const createDataset = (label, dataKey, stack, yAxisID, metric, isLastYear = false, dataGroup) => ({
type: 'line',
label: `${label}${isLastYear ? ' LY' : ''} (WHS ${whs} - ${metric})`,
data: labels.map(year => dataGroup.get(year)?.get(whs)?.[dataKey] || 0),
borderColor: labels.map(year => getDatasetColor(year, whs, metric, isLastYear)),
backgroundColor: labels.map(year => getDatasetColor(year, whs, metric, isLastYear)),
borderDash: isLastYear ? [10, 5] : undefined,
stack,
yAxisID,
tension: 0.3,
fill: false,
order: isLastYear ? 1 : 0
});
if (checkSales === 'on') {
// Current year data
datasets.push(createDataset("Sales", "dollars", "Sales", 'yLeft', "Sales", false, groupedData));
// Last year data for daily format
if ((dataFormat === "daily" || dataFormat === "yearly") && dataLY && dataLY.length > 0) {
datasets.push(createDataset("Sales", "dollars", "Sales_LY", 'yLeft', "Sales", true, groupedDataLY));
}
}
if (checkWeight === 'on') {
// Current year data
datasets.push(createDataset("Weight", "weight", "Weight", 'yLeft', "Weight", false, groupedData));
// Last year data for daily/yearly format
if ((dataFormat === "daily" || dataFormat === "yearly") && dataLY && dataLY.length > 0) {
datasets.push(createDataset("Weight", "weight", "Weight_LY", 'yLeft', "Weight", true, groupedDataLY));
}
}
if (checkLines === 'on') {
// Current year data
datasets.push(createDataset("Lines", "lines", "Lines", 'yRight', "Lines", false, groupedData));
// Last year data for daily/yearly format
if ((dataFormat === "daily" || dataFormat === "yearly") && dataLY && dataLY.length > 0) {
datasets.push(createDataset("Lines", "lines", "Lines_LY", 'yRight', "Lines", true, groupedDataLY));
}
}
});
}
// Generate Chart
window.execSummaryChart = new Chart(
document.getElementById('acquisitions'), {
type: 'line',
data: {
labels,
datasets
},
options: {
interaction: {
intersect: false,
mode: 'index'
},
responsive: true,
elements: {
point: {
radius: 5,
hoverRadius: 8
}
},
scales: {
yLeft: {
type: 'linear',
position: 'left',
title: {
display: true,
text: 'Sales & Weight'
},
beginAtZero: true
},
yRight: {
type: 'linear',
position: 'right',
title: {
display: true,
text: 'Lines'
},
grid: {
drawOnChartArea: false
},
beginAtZero: true
},
x: {
title: {
display: true,
text: dataFormat === "quarterly" ? 'Quarter' :
dataFormat === "monthly" ? 'Month' :
dataFormat === "daily" ? 'Day' : 'Year'
}
}
},
plugins: {
tooltip: {
callbacks: {
title: function(tooltipItems) {
return tooltipItems[0].label;
// return tooltipItems[0].raw.label;
}
}
},
legend: {
position: 'top',
labels: {
usePointStyle: true
}
}
}
}
}
);
}
// End Success
},
error: function(xhr, status, error) {
console.error("Error:", error);
// Display error message to user
Swal.fire({
icon: 'error',
title: 'Ajax Error',
text: 'Failed to load chart data. Please try again.',
confirmButtonText: 'OK'
});
}
});
// End Ajax
});
//// Trigger Click on init
$("#updateCharts").trigger("click");
});
</script>
@endsection
@@ -0,0 +1,278 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal
@endsection
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Executive Dashboard</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
Filters
</div>
<div class="card-body">
<div class="card-body">
<form>
@csrf
<div class="row mb-3">
<label for="inputEmail" class="col-sm-2 col-form-label">Date Range</label>
<div class="col-sm-10">
<label for="text" class="visually-hidden">dates</label>
<input value="{{ $starting }} - {{ $ending }}" id="text" name="dates" type="text" aria-describedby="textHelpBlock" class="form-control">
</div>
</div>
<div class="row mb-3">
<label for="inputWhs" class="col-sm-2 col-form-label">Warehouse</label>
<div class="col-sm-10">
<select aria-label="Whs" name="whs" class="form-control">
<option value="*ALL">*ALL</option>
@foreach($whs_array as $key)
<option value={{$key}}
@if($whs==$key) selected @endif
>{{$key}}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="row">
@foreach($data as $key=>$value)
<div class="col-xl-6">
<div class="card mb-12">
<div class="card-header">
<i class="fas fa-chart-bar me-1"></i>
{{($key=="IC")?'INTERCO':'EXTERNAL'}}
</div>
<div class="card-body">
<figure class="highcharts-figure">
<div id="container{{($key=='IC')?'1':'2'}}"></div>
</figure>
</div>
</div>
</div>
@endforeach
</div>
<div class="row" style="margin-top:20px;">
@foreach($data as $key=>$value)
<div class="col-sm-6">
<div class="card text-white bg-info mb-3" id="div2">
<div class="card-header"><h5 class="card-title">{{($key=="IC")?'INTERCO':'EXTERNAL'}} <span class="text-end">$ {{ number_format($data[$key]['total'], 0, '.', ',') }}</span></h5></div>
<div class="card-body">
<b>Held</b>: $ {{ number_format($data[$key]['HLD'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9495;&nbsp;<b>Financial Hold</b>: $ {{ number_format($data[$key]['FinHld'], 0, '.', ',') }}&nbsp;&nbsp;($ {{ number_format($data[$key]['FinFutHld'], 0, '.', ',') }} is &#62;{{env('FDATE')}} in future)<br>
&nbsp;&nbsp;&#9475;&nbsp;&nbsp;&#9495;&nbsp;<b>Reserved On Pick</b>: $ {{ number_format($data[$key]['FHResPick'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9475;&nbsp;&nbsp;&#9495;&nbsp;<b>Reserved No Pick</b>: $ {{ number_format($data[$key]['FHResNoPick'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9475;&nbsp;&nbsp;&#9495;&nbsp;<b>Not reserved</b>: $ {{ number_format($data[$key]['FHNres'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9495;&nbsp;<b>Customer Hold</b>: $ {{ number_format($data[$key]['CusHld'], 0, '.', ',') }}&nbsp;&nbsp;($ {{ number_format($data[$key]['CusFutHld'], 0, '.', ',') }} is &#62;{{env('FDATE')}} in future)<br>
&nbsp;&nbsp;&#9475;&nbsp;&nbsp;&#9495;&nbsp;<b>Reserved On Pick</b>: $ {{ number_format($data[$key]['CHResPick'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9475;&nbsp;&nbsp;&#9495;&nbsp;<b>Reserved No Pick</b>: $ {{ number_format($data[$key]['CHResNoPick'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9475;&nbsp;&nbsp;&#9495;&nbsp;<b>Not reserved</b>: $ {{ number_format($data[$key]['CHNres'], 0, '.', ',') }}<br>
<b>Avail</b>: $ {{ number_format($data[$key]['Avail'], 0, '.', ',') }}&nbsp;&nbsp;($ {{ number_format($data[$key]['futNH'], 0, '.', ',') }} is &#62;{{env('FDATE')}} in future)<br>
&nbsp;&nbsp;&#9495;&nbsp;&nbsp;&#9495;&nbsp;<b>Reserved On Pick</b>: $ {{ number_format($data[$key]['AvResPick'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9495;&nbsp;&nbsp;&#9495;&nbsp;<b>Reserved No Pick Fill Code 1</b>: $ {{ number_format($data[$key]['AvResNoPickFillCode1'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9495;&nbsp;&nbsp;&#9495;&nbsp;<b>Reserved No Pick</b>: $ {{ number_format($data[$key]['AvResNoPick'], 0, '.', ',') }}<br>
&nbsp;&nbsp;&#9495;&nbsp;<b>Not reserved</b>: $ {{ number_format($data[$key]['AvUNres'], 0, '.', ',') }}<br>
<b>No Early</b>: $ {{ number_format($data[$key]['NoE'], 0, '.', ',') }}
</div>
</div>
</div>
@endforeach
</div>
@endsection
@section('scripts')
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
var s1 = $('#div1').height();
var s2 = $('#div2').height();
if (s1 > s2){
$('#div2').css('height', s1 + "px");
}else{
$('#div1').css('height', s2 + "px");
}
@foreach ($data as $key=>$value)
var data{{$key}} = [
{id: '0.0',parent: '', name: 'Total', value: '{{ $data[$key]['total'] }}'},
{ id: '1.1', parent: '0.0', name: 'Held', value: '{{ $data[$key]['HLD'] }}'},
{ id: '1.1.1', parent: '1.1', name: 'Financial Hold', value: '{{ $data[$key]['FinHld'] }}'},
{ id: '1.1.1.1', parent: '1.1.1', name: 'Reserved', value: '{{ $data[$key]['FHResPick'] }}'},
{ id: '1.1.1.2', parent: '1.1.1', name: 'Reserved', value: '{{ $data[$key]['FHResNoPick'] }}'},
{ id: '1.1.1.3', parent: '1.1.1', name: 'Not reserved', value: '{{ $data[$key]['FHNres'] }}'},
{ id: '1.1.2', parent: '1.1', name: 'Customer Hold', value: '{{ $data[$key]['CusHld'] }}'},
{ id: '1.1.2.1', parent: '1.1.2', name: 'Reserved', value: '{{ $data[$key]['CHResPick'] }}'},
{ id: '1.1.2.2', parent: '1.1.2', name: 'Reserved', value: '{{ $data[$key]['CHResNoPick'] }}'},
{ id: '1.1.2.3', parent: '1.1.2', name: 'Not reserved', value: '{{ $data[$key]['CHNres'] }}'},
{ id: '1.2', parent: '0.0', name: 'Avail', value: '{{ $data[$key]['Avail'] }}'},
{ id: '1.2.1', parent: '1.2', name: 'Avail', value: '{{ $data[$key]['Avail'] }}'},
{ id: '1.2.1.1', parent: '1.2.1', name: 'Reserved On Pick', value: '{{ $data[$key]['AvResPick'] }}'},
{ id: '1.2.1.2', parent: '1.2.1', name: 'Reserved No Pick', value: '{{ $data[$key]['AvResNoPick'] }}'},
{ id: '1.2.1.3', parent: '1.2.1', name: 'Reserved No Pick Fill Code 1', value: '{{ $data[$key]['AvResNoPickFillCode1'] }}'},
{ id: '1.2.1.4', parent: '1.2.1', name: 'Not reserved', value: '{{ $data[$key]['AvUNres'] }}'},
{ id: '1.3', parent: '0.0', name: 'No Early', value: '{{ $data[$key]['NoE'] }}'},
{ id: '1.3.1', parent: '1.3', name: 'No Early', value: '{{ $data[$key]['NoE'] }}'},
{ id: '1.3.1.1', parent: '1.3.1', name: 'No Early', value: '{{ $data[$key]['NoE'] }}'}
];
@endforeach
Highcharts.chart('container1', {
chart: { height: '100%'},
colors: ['transparent'].concat(Highcharts.getOptions().colors),
title: { text: 'Interco Chart'},
series: [{
type: 'sunburst',
data: dataIC,
allowDrillToNode: true,
cursor: 'pointer',
dataLabels: {
format: '{point.name}',
filter: {
property: 'innerArcLength',
operator: '>',
value: 16
},
rotationMode: 'circular'
},
levels: [{
level: 1,
levelIsConstant: false,
dataLabels: {
filter: {
property: 'outerArcLength',
operator: '>',
value: 64
}
}
}, {
level: 2,
colorByPoint: true
},
{
level: 3,
colorVariation: {
key: 'brightness',
to: -0.5
}
}, {
level: 4,
colorVariation: {
key: 'brightness',
to: 0.5
}
}]
}],
tooltip: {
headerFormat: '',
pointFormat: '<b>{point.name}</b> is <b>$ {point.value:,.1f}</b>'
}
});
Highcharts.chart('container2', {
chart: { height: '100%' },
colors: ['transparent'].concat(Highcharts.getOptions().colors),
title: { text: 'External Chart' },
series: [{
type: 'sunburst',
data: dataEX,
allowDrillToNode: true,
cursor: 'pointer',
dataLabels: {
format: '{point.name}',
filter: {
property: 'innerArcLength',
operator: '>',
value: 16
},
rotationMode: 'circular'
},
levels: [{
level: 1,
levelIsConstant: false,
dataLabels: {
filter: {
property: 'outerArcLength',
operator: '>',
value: 64
}
}
}, {
level: 2,
colorByPoint: true
},
{
level: 3,
colorVariation: {
key: 'brightness',
to: -0.5
}
}, {
level: 4,
colorVariation: {
key: 'brightness',
to: 0.5
}
}]
}],
tooltip: {
headerFormat: '',
pointFormat: '<b>{point.name}</b> is <b>$ {point.value:,.1f}</b>'
}
});
</script>
<script>
$(document).ready(function() {
// Date range init
$('input[name="dates"]').daterangepicker({
locale: {
format: 'YYYY-MM-DD',
},
startDate: '{{ $starting }}',
endDate: '{{ $ending }}',
alwaysShowCalendars: true,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
'This Year': [moment().startOf('year'), moment()]
}
});
});
</script>
@endsection
@@ -0,0 +1,59 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Fill BOL PDF
@endsection
@section('content')
<div class="container-fluid px-4">
<h3 class="mt-2">Fill BOL</h3>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-body">
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if(session('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif
<form method="POST" action="{{ route('m3.fillBOLPDF') }}">
@csrf
<div class="form-group">
<label for="sonar-input-b5ab07fdda">BOL number</label>
<input type="text" class="form-control" name="BOL_number" value="" id="sonar-input-b5ab07fdda">
</div>
<div class="form-group">
<label for="sonar-input-e32a7fe74c">Amount</label>
<input type="text" class="form-control" name="amount" value="" id="sonar-input-e32a7fe74c">
</div>
<input type="hidden" name="referrer" id="referrer" value="">
<div class="form-group mt-3 mb-2">
<button type="submit" class="btn btn-primary">Fill PDF</button>
<button type="button" class="btn btn-primary" onclick="goBack()">Back</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
});
//});
</script>
@endsection
@@ -0,0 +1,59 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Fill BOL PDF
@endsection
@section('content')
<div class="container-fluid px-4">
<h3 class="mt-2">Fill BOL 2</h3>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-body">
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if(session('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif
<form method="POST" action="{{ route('m3.fillBOL2PDF') }}">
@csrf
<div class="form-group">
<label for="sonar-input-903d906a51">BOL number</label>
<input type="text" class="form-control" name="BOL_number" value="" id="sonar-input-903d906a51">
</div>
<div class="form-group">
<label for="sonar-input-0ef98af069">Amount</label>
<input type="text" class="form-control" name="amount" value="" id="sonar-input-0ef98af069">
</div>
<input type="hidden" name="referrer" id="referrer" value="">
<div class="form-group mt-3 mb-2">
<button type="submit" class="btn btn-primary">Fill PDF</button>
<button type="button" class="btn btn-primary" onclick="goBack()">Back</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
});
//});
</script>
@endsection
@@ -0,0 +1,51 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Logout
@endsection
@section('btn')
@endsection
@section('content')
<div class="container-fluid px-4">
<h1 class="mt-4">Logout</h1>
<div class="row">
You will be logged out in a few seconds.
</div>
</div>
@endsection
@section('scripts')
<script type="text/javascript">
function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
function logoutUser() {
//setTimeout('location.reload(true)', 1000);
xmlhttp = GetXmlHttpObject();
if (xmlhttp==null) {
return;
}
//alert(xmlhttp);
var url = "/";
xmlhttp.open("GET", url, true, "dummy_user", "dummy_password");
xmlhttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
xmlhttp.setRequestHeader( 'Accept', 'message/x-formresult' );
xmlhttp.send(null);
}
logoutUser();
</script>
@endsection
@@ -0,0 +1,55 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Order Inquiry
@endsection
@section('breadcrumb')
<div class="row">
<hr class="hr-primary" />
<nav class="navbar navbar-expand-lg navbar-light" aria-label="Page navigation">
<div class="container-fluid">
<nav aria-label="breadcrumb">
<ol class="breadcrumb breadcrumb-custom">
<li class="breadcrumb-item"><a href="/" data-abc="true"><i class="fa fa-home"></i> Dashboard</a></li>
<li class="breadcrumb-item active" aria-current="page"><i class="fa fa-truck"></i> Order Inquiry</li>
</ol>
</nav>
</div>
</nav>
</div>
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Order Inquiry</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
</div>
<div class="card-body">
<div class="card-body">
<form action="/gotoOrder" onSubmit="document.forms[0].order.value=document.forms[0].order.value+'-0';" method="POST">
@csrf
<div class="row mb-3">
<div class="col-sm-10">
<label for="inputOrder" class="col-sm-2 col-form-label">Please enter an order number</label>
<input type="hidden" id="reason" name="reason" value="-">
<label for="order" class="visually-hidden">order</label>
<input type="text" id="order" name="order" maxlength=6 length=4 aria-describedby="textHelpBlock">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
@endsection
@@ -0,0 +1,171 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Orders On Hold Summary
@endsection
@section('breadcrumb')
<div class="row">
<hr class="hr-primary" />
<nav class="navbar navbar-expand-lg navbar-light" aria-label="Page navigation">
<div class="container-fluid">
<nav aria-label="breadcrumb">
<ol class="breadcrumb breadcrumb-custom">
<li class="breadcrumb-item"><a href="/" data-abc="true"><i class="fa fa-home"></i> Dashboard</a></li>
<li class="breadcrumb-item active" aria-current="page"><i class="fa fa-truck"></i> Orders On Hold</li>
</ol>
</nav>
</div>
</nav>
</div>
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Orders on hold</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
Filters
</div>
<div class="card-body">
<div class="card-body">
<form>
@csrf
<div class="row mb-3">
<div class="col-sm-10">
<label for="inputWhs" class="col-sm-2 col-form-label">Please choose Selling warehouse subset</label>
@foreach($whs_list as $key => $val)
<label for="sonar-input-5fd2d62166" class="visually-hidden">sonar input 5fd2d62166</label>
<label for="whs" class="visually-hidden">whs</label>
<input value="{{ $val->SLSRWH }}" id="whs" name="whs[]" type="checkbox" aria-describedby="textHelpBlock"
@if(array_key_exists($val->SLSRWH, $checked_whs)) checked @endif
> {{ $val->SLSRWH }} &nbsp; &nbsp; &nbsp;
@endforeach
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
List of hold codes
</div>
<div class="card-body">
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple4">
<th scope="col"ead>
<tr>
<th scope="col">Reason</th>
<th scope="col" style="text-align:center">No of Orders</th>
<th scope="col" style="text-align:right">Total</th>
<th scope="col" style="text-align:right">Total for subset</th>
<th scope="col" style="text-align:right">Reserved for subset</th>
<th scope="col" style="text-align:right">On pick for subset</th>
</tr>
</thead>
<tbody>
@foreach($data as $key=>$value)
<tr class="odd gradeX">
<td><a href="/ordersOnHoldReq/{{ ( $value->SHHLDC == ' ' ? "NotHold" : $value->SHHLDC) }}">
{{ ( $value->SHHLDC == ' ' ? "Not On Hold" : $value->SHHLDC . " - " . $hold_code_array[$value->SHHLDC] ) }}</a></td>
<td class="text-right">{{ (isset($value->NBORDERS))?$value->NBORDERS:'' }}</td>
<td class="text-right">$ {{ number_format((float)$value->TOTAL, 2, '.', ',') }}</td>
<td class="text-right">$ {{ number_format((float)$value->TOTALWH, 2, '.', ',') }}</td>
<td class="text-right">$ {{ number_format((float)$value->TOTALWHRESERVED, 2, '.', ',') }}</td>
<td class="text-right">$ {{ number_format((float)$value->TOTALWHONPICK, 2, '.', ',') }}</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr style="text-align:right">
<th scope="col" style="text-align:right"></th>
<th scope="col" style="text-align:center"></th>
<th scope="col" style="text-align:right"></th>
<th scope="col" style="text-align:right"></th>
<th scope="col" style="text-align:right"></th>
<th scope="col" style="text-align:right"></th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$('#datatablesSimple4').DataTable( {
responsive: true,
"pageLength": 50,
"aaSorting": [],
"columnDefs": [{ targets: [2, 3, 4, 5], className: 'dt-body-right' }, { targets: [1], className: 'dt-body-center' }],
"footerCallback": function ( row, data, start, end, display ) {
var api = this.api(), data;
// converting to interger to find total
var intVal = function ( i ) {
return typeof i === 'string' ?
i.replace(/[\$,]/g, '')*1 :
typeof i === 'number' ?
i : 0;
};
// computing column Total of the complete result
var orderTotal = api
.column( 1 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
var totalTotal = api
.column( 2 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 ).toFixed(2);
var whtotal = api
.column( 3 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 ).toFixed(2);
var whtotalReserved = api
.column( 4 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 ).toFixed(2);
var whtotalOnpick = api
.column( 5 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 ).toFixed(2);
// Update footer by showing the total with the reference of the column index
$( api.column( 0 ).footer() ).html('Total');
$( api.column( 1 ).footer() ).html(Intl.NumberFormat('en-US').format(orderTotal));
$( api.column( 2 ).footer() ).html('$ '+Intl.NumberFormat('en-US').format(totalTotal));
$( api.column( 3 ).footer() ).html('$ '+Intl.NumberFormat('en-US').format(whtotal));
$( api.column( 4 ).footer() ).html('$ '+Intl.NumberFormat('en-US').format(whtotalReserved));
$( api.column( 5 ).footer() ).html('$ '+Intl.NumberFormat('en-US').format(whtotalOnpick));
}
});
</script>
<script src="/js/raphael.min.js"></script>
@endsection
@@ -0,0 +1,407 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - ordersOnHoldReq
@endsection
@section('breadcrumb')
<div class="row">
<hr class="hr-primary" />
<nav class="navbar navbar-expand-lg navbar-light" aria-label="Page navigation">
<div class="container-fluid">
<nav aria-label="breadcrumb">
<ol class="breadcrumb breadcrumb-custom">
<li class="breadcrumb-item"><a href="/" data-abc="true"><i class="fa fa-home"></i> Dashboard</a></li>
<li class="breadcrumb-item"><a data-abc="true" href="/ordersOnHoldReq"><i class="fa fa-truck"></i> Orders On Hold</a></li>
<li class="breadcrumb-item"><a data-abc="true" href="/ordersOnHoldReq/{{ $request->reason }}">Reason: {{ $request->reason }}</a></li>
<li class="breadcrumb-item active" aria-current="page">Order: {{ $request->order }}</li>
</ol>
</nav>
</div>
</nav>
</div>
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Orders</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" id="order-tab" data-bs-toggle="tab" href="#order" role="tab" aria-controls="order" aria-selected="true">Order inquiry</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="details-tab" data-bs-toggle="tab" href="#details" role="tab" aria-controls="details" aria-selected="false">Details</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="comments-tab" data-bs-toggle="tab" href="#comments" role="tab" aria-controls="comments" aria-selected="false">Comments</a>
</li>
</ul>
</div>
<div class="card-body">
<div class="card-body">
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="order" role="tabpanel" aria-labelledby="order-tab">@include('m3::liberty-theme.partials.tabs.orders')</div>
<div class="tab-pane fade" id="details" role="tabpanel" aria-labelledby="details-tab">@include('m3::liberty-theme.partials.tabs.details')</div>
<div class="tab-pane fade" id="comments" role="tabpanel" aria-labelledby="comments-tab">@include('m3::liberty-theme.partials.tabs.comments')</div>
</div>
</div>
</div>
</div>
</div>
<!-- /.row -->
@include('m3::liberty-theme.partials.modals.blank')
@include('m3::liberty-theme.partials.modals.shipToEdit')
@include('m3::liberty-theme.partials.modals.shipToCheckBox')
@endsection
@section('scripts')
<script>
$( document ).ready(function() {
$(document).on('click', '#DATE', function(e){
e.preventDefault();
$(this).attr("autocomplete", "off");
});
$(document).on('click', '#AMSPARE5', function(e){
e.preventDefault();
$(this).attr("autocomplete", "off");
});
$(document).on('click', '.close', function(e){
$('.altEditor-modal').modal('hide');
});
$(document).on('click', "button[data-dismiss='modal']", function(e){
$('.altEditor-modal').modal('hide');
});
$(document).on('keyup', "#AMCOMM", function(e){
var maxlength = "150";
var currentLength = $(this).val().length;
if($("#counter_" + $(this).attr("id")).length == 0) {
$(this).after("<div id='"+"counter_" + $(this).attr("id")+"'></div>");
}
if( currentLength >= maxlength ){
$("#counter_" + $(this).attr("id")).html(currentLength + ' / ' + maxlength);
}else{
$("#counter_" + $(this).attr("id")).html(maxlength - currentLength + " chars left");
}
});
$('.toUpper').on('input', function(evt) {
$(this).val(function(_, val) {
return val.toUpperCase();
});
});
$(document).on('click', '#submitShipToEdit', function(){
$("#shipToEdit").modal('hide');
});
$(document).on('click', '.close-modal', function(){
$("#shipToEdit").modal('hide');
});
// close and go to checkbox
$(document).on('click', '.close-modal2', function(){
$("#blank-modal").modal('hide');
//$('#shipToCheckBox').modal('show');
});
// close and goto edit
$(document).on('click', '.close-modal3', function(){
$("#blank-modal").modal('hide');
$('#shipToEdit').modal('show');
});
// Make Bill to and Ship To boxes the same height
var s1 = $('#div1').height();
var s2 = $('#div2').height();
if (s1 > s2){
$('#div2').css('height', s1 + "px");
}else{
$('#div1').css('height', s2 + "px");
}
// Open Modal Ship To Edit
$(document).on('click', '#shipToEdit_click', function(){
$('#shipToEdit').modal('show');
});
// Open Modal Ship To CheckBox
$(document).on('click', '#shipToCheckBox_click', function(){
$('#shipToCheckBox').modal('show');
});
// Save Ship To Edit
$(document).on('click', '#submitShipToEdit', function(){
var changes_detected = 0;
// Retrieve the values we need to pass on
var NEW_SHSHA1 = $("input[name=SHSHA1]").val();
var NEW_SHSHA2 = $("input[name=SHSHA2]").val();
var NEW_SHSHCI = $("input[name=SHSHCI]").val();
var NEW_SHSHST = $("input[name=SHSHST]").val();
var NEW_SHSHZP = $("input[name=SHSHZP]").val();
// Retrieve old values
var OLD_SHSHA1 = $("#OLD_SHSHA1").text();
var OLD_SHSHA2 = $("#OLD_SHSHA2").text();
var OLD_SHSHCI = $("#OLD_SHSHCI").text();
var OLD_SHSHST = $("#OLD_SHSHST").text();
var OLD_SHSHZP = $("#OLD_SHSHZP").text();
//alert("NEW_SHSHA1: "+NEW_SHSHA1+", NEW_SHSHCI: "+NEW_SHSHCI+", NEW_SHSHST: "+NEW_SHSHST+",NEW_SHSHZP: "+NEW_SHSHZP);
if (NEW_SHSHA1=="" || NEW_SHSHCI=="" || NEW_SHSHST=="" || NEW_SHSHZP==""){
$('.blank-body').html("There are fields that are blank that must be populated.");
$('#blank-submit').addClass('close-modal2');
$('#blank-submit').html('Close');
$('#blank-close').addClass('close-modal3');
$('#blank-close').html('Back');
$('#blank-modal').modal('show');
}
// Compare the new and the old value before submiting
if(NEW_SHSHA1!=OLD_SHSHA1){changes_detected = 1;}
//alert("NEW_SHSHA1: "+NEW_SHSHA1+", OLD_SHSHA1: "+OLD_SHSHA1+", changes_detected: "+changes_detected);
if(NEW_SHSHA2!=OLD_SHSHA2){changes_detected = 1; if(NEW_SHSHA2=="") NEW_SHSHA2=" ";}
//alert("NEW_SHSHA2: "+NEW_SHSHA2+", OLD_SHSHA2: "+OLD_SHSHA2+", changes_detected: "+changes_detected);
if(NEW_SHSHCI!=OLD_SHSHCI){changes_detected = 1;}
if(NEW_SHSHST!=OLD_SHSHST){changes_detected = 1;}
if(NEW_SHSHZP!=OLD_SHSHZP){changes_detected = 1;}
// If we have no changes we let the user know in a blank modal
if (changes_detected==0){
$('.blank-body').html("No changes has been detected. Click (Back) to make changes.");
$('#blank-submit').addClass('close-modal2');
$('#blank-submit').html('Close');
$('#blank-close').addClass('close-modal3');
$('#blank-close').html('Back');
$('#blank-modal').modal('show');
// Send ajax request
}else{
var csrf = document.querySelector('meta[name="csrf-token"]').content;
$.ajax({
type:'POST',
url:'/ordersOnHoldReq/{{ $request->reason }}/{{ $request->order }}/saveShipToEdit',
data: {
'SHSHA1': NEW_SHSHA1,
'SHSHA2': NEW_SHSHA2,
'SHSHCI': NEW_SHSHCI,
'SHSHST': NEW_SHSHST,
'SHSHZP': NEW_SHSHZP,
'_token': csrf
},
success:function(data){
// If no errors load the next checkbox
if (data=="success"){
$('#blank-modal').modal('hide');
$('#shipToEdit').modal('hide');
$('#shipToCheckBox').modal('show');
// Update the page with out a reload
$.get('/ordersOnHoldReq/{{ $request->reason }}/{{ $request->order }}', function(response) {
var $page = $(response);
$("#shipTo").replaceWith($page.find("#shipTo"));
$("#shipToEditData").replaceWith($page.find("#shipToEditData"));
var s1 = $('#div1').height();
var s2 = $('#div2').height();
if (s1 > s2){
$('#div2').css('height', s1 + "px");
}else{
$('#div1').css('height', s2 + "px");
}
});
}
// If no errors then go to the next modal
}
});
}
});
// Save Ship To CheckBox
$(document).on('click', '#submitShipToCheckBox', function(){
// Retrieve checkbox values
var check1 = $('#check1').is(":checked");
var check2 = $('#check2').is(":checked");
var csrf = document.querySelector('meta[name="csrf-token"]').content;
// Save with AJAX
$.ajax({
type:'POST',
url:'/ordersOnHoldReq/{{ $request->reason }}/{{ $request->order }}/saveShipToCheckBox',
data: {
'check1': check1,
'check2': check2,
'_token': csrf
},
success:function(data){
// If no errors load the next checkbox
if (data=="success"){
$('#shipToCheckBox').modal('hide');
$.get('/ordersOnHoldReq/{{ $request->reason }}/{{ $request->order }}', function(response) {
var $page = $(response);
$("#shipTo").html($page.find("#shipTo"));
$("#orderData").html($page.find("#orderData"));
var s1 = $('#div1').height();
var s2 = $('#div2').height();
if (s1 > s2){
$('#div2').css('height', s1 + "px");
}else{
$('#div1').css('height', s2 + "px");
}
});
}
}
});
});
// Comment editor / datatable tab
var columnDefs = [
{
data: "AMSPARE7",
title: "Id",
type: "hidden"
},
{
data: "AMTRANID",
title: "User",
type: "hidden"
},
{
data: "DATE",
title: "Creation Date",
type: "hidden"
},
{
data: "AMSPARE5",
title: "Reminder Date",
datetimepicker: { timepicker: true, format : "Y/m/d H:i", forceParse: false, validateOnBlur: false}
},
{
data: "AMCOMM",
title: "Comment",
type: "textarea"
}
];
var myTable;
var csrf = document.querySelector('meta[name="csrf-token"]').content;
myTable = $('#example').DataTable({
"sPaginationType": "full_numbers",
ajax: {
url : '/ordersOnHoldReq/{{$request->reason}}/{{$request->order}}/jsoncomment',
// our data is an array of objects, in the root node instead of /data node, so we need 'dataSrc' parameter
dataSrc : ''
},
columns: columnDefs,
dom: 'Bfrtip', // Needs button container
select: 'single',
responsive: true,
altEditor: true, // Enable altEditor
buttons: [
{
text: 'Add',
name: 'add', // do not change name
className: 'comm'
},
{
extend: 'selected', // Bind to Selected row
text: 'Edit',
name: 'edit', // do not change name
className: 'comm'
},
{
extend: 'selected', // Bind to Selected row
text: 'Delete',
name: 'delete' // do not change name
},
{
text: 'Refresh',
name: 'refresh' // do not change name
}
],
onAddRow: function(datatable, rowdata, success, error) {
rowdata["_token"] = csrf;
$.ajax({
// a typical url would be / with type='POST'
url: '/ordersOnHoldReq/{{$request->reason}}/{{$request->order}}/jsoncommentsave',
type: 'POST',
data: rowdata,
success: function(result) {$('.altEditor-modal').modal('hide'); myTable.ajax.reload();},
error: error,
});
},
onDeleteRow: function(datatable, rowdata, success, error) {
rowdata["_token"] = csrf;
console.log(rowdata);
$.ajax({
// a typical url would be /{id} with type='DELETE'
url: '/ordersOnHoldReq/{{$request->reason}}/{{$request->order}}/jsoncommentsave/'+rowdata.AMSPARE7,
type: 'DELETE',
data: rowdata,
success: function(result) {$('.altEditor-modal').modal('hide'); myTable.ajax.reload();},
error: error
});
},
onEditRow: function(datatable, rowdata, success, error) {
rowdata["_token"] = csrf;
$.ajax({
// a typical url would be /{id} with type='PUT'
url: '/ordersOnHoldReq/{{$request->reason}}/{{$request->order}}/jsoncommentsave/'+rowdata.AMSPARE7,
type: 'PUT',
data: rowdata,
success: function(result) {$('.altEditor-modal').modal('hide'); myTable.ajax.reload();},
error: error
});
}
});
$(document).on('click', ".comm", function(e){
var maxlength = "150";
var currentLength = $("#AMCOMM").val().length + 0;
$("#AMCOMM").attr('maxlength', maxlength);
if($("#counter_AMCOMM").length == 0) {
$("#AMCOMM").after("<div id='counter_AMCOMM'></div>");
if( currentLength >= maxlength ){
$("#counter_AMCOMM").html(currentLength + ' / ' + maxlength);
}else{
$("#counter_AMCOMM").html(maxlength - currentLength + " chars left");
}
}
});
});
</script>
@endsection
@@ -0,0 +1,85 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - ordersOnHoldReq
@endsection
@section('breadcrumb')
<div class="row">
<hr class="hr-primary" />
<nav class="navbar navbar-expand-lg navbar-light" aria-label="Page navigation">
<div class="container-fluid">
<nav aria-label="breadcrumb">
<ol class="breadcrumb breadcrumb-custom">
<li class="breadcrumb-item"><a href="/" data-abc="true"><i class="fa fa-home"></i> Dashboard</a></li>
<li class="breadcrumb-item"><a data-abc="true" href="/ordersOnHoldReq"><i class="fa fa-truck"></i> Orders On Hold</a></li>
<li class="breadcrumb-item active">Reason: {{ $request->reason }}</li>
</ol>
</nav>
</div>
</nav>
</div>
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Orders on hold</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
List of orders
</div>
<div class="card-body">
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple3">
<thead>
<tr>
<th>Order No</th>
<th>Status</th>
<th>Order Date</th>
<th>Comment Date</th>
<th>Comment Due Date</th>
<th>Sales Rep</th>
<th>Carrier</th>
<th>Ship Via</th>
<th>ShipTo</th>
<th>Order Value</th>
<th>Reserved Value</th>
<th>On Pick Value</th>
<th>Currency</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$('#datatablesSimple3').DataTable( {
'responsive': true,
'processing': true,
'serverSide': true,
'serverMethod': 'post',
ajax: {
'url': '/ordersOnHoldReq/{{ $request->reason }}/json',
'type': 'POST',
'headers': {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
},
"columnDefs": [
{ targets: [9, 10, 11, 12], className: 'text-right' },
{ targets: [0, 1, 2, 3, 4, 5], className: 'text-center' }
],
});
</script>
@endsection
@@ -0,0 +1,316 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - ERP/TMS Part Data
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">ERP/TMS Part Data</h1>
<div class="card mb-4">
<div class="card-header">
@if($power_user->R428PWRUSR=="Y")
<button name="qtyAdd" type="button" class="btn btn-sm btn-info qtyAdd_click" id="qtyAdd_click"
data-AT9DPW="{{$power_user->R428CO.$power_user->R428PL.$power_user->R428WH}}">Add Record</button>
@endif
<!-- data-AT9DPW="$co.$plant.$whs">Add Record</button> -->
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5" style="width:100%">
<thead>
<tr>
<th></th>
<th></th>
<th>Div-Plt-Whs</th>
<th>Part</th>
<th>Pallet Qty</th>
<th>Hazardous Material</th>
</tr>
</thead>
<tbody>
@foreach($ICM709M as $key=>$val)
<tr>
<td></td>
<td>
@if($power_user->R428PWRUSR=="Y")
<button name="qtyEdit{{trim($val->AT9PART)}}" type="submit" class="btn btn-sm btn-info qtyEdit_click" id="qtyEdit_click"
data-AT9CO="{{$val->AT9CO}}" data-AT9PLT="{{trim($val->AT9PLT)}}" data-AT9WHS="{{trim($val->AT9WHS)}}"
data-AT9PART="{{trim($val->AT9PART)}}" data-AT9QTY="{{$val->AT9QTY}}" data-AT9WRN="{{trim($val->AT9WRN)}}"
data-AT9DPW="{{$val->AT9CO.$val->AT9PLT.$val->AT9WHS}}"
>Edit</button>
@endif
</td>
<td> {{ $val->AT9CO }} {{ $val->AT9PLT }} {{ $val->AT9WHS }} </td>
<td> {{ $val->AT9PART }} </td>
<td> {{ $val->AT9QTY }} </td>
<td> {{ trim($val->AT9WRN) }} </td>
</tr>
@endforeach
<!-- endif-->
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- /.row -->
<!-- @include('m3::liberty-theme.partials.modals.blank') -->
@include('m3::liberty-theme.partials.modals.qtyAdd')
@include('m3::liberty-theme.partials.modals.qtyEdit')
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
var myTable = $('#datatablesSimple5').DataTable({
"aaSorting": [],
"lengthMenu": [ [15,35,50,-1], [15,35,50,"All"] ],
"sPaginationType": "full_numbers",
"dom": 'Bfrtip', // Needs button container
"responsive": true,
"orderCellsTop": true,
"order": [ [1, 'desc'] ],
"pageLength": 15,
"columnDefs": [
{
orderable: true,
searchable: true,
targets: -1
}
],
});
//
// Open Modal Qty Edit
//
$(document).on('click', '#qtyEdit_click', function() {
//console.log($(this));
$("#AT9CO").val($(this).data("at9co"));
$("#AT9PLT").val($(this).data("at9plt"));
$("#AT9WHS").val($(this).data("at9whs"));
$("#AT9DPW").val($(this).data("at9dpw"));
$("#AT9PART").val($(this).data("at9part"));
$("#AT9QTY").val($(this).data("at9qty"));
$("#AT9WRN").val($(this).data("at9wrn"));
$("#OLD_AT9CO").val($(this).data("at9co"));
$("#OLD_AT9PLT").val($(this).data("at9plt"));
$("#OLD_AT9WHS").val($(this).data("at9whs"));
$("#OLD_AT9PART").val($(this).data("at9part"));
$("#OLD_AT9QTY").val($(this).data("at9qty"));
$("#OLD_AT9WRN").val($(this).data("at9wrn"));
$("#AT9QTY").focus();
$('#qtyEdit').modal('show');
});
//
// Open Modal Qty Add
//
$(document).on('click', '#qtyAdd_click', function() {
console.log($(this));
//$("#addAT9DPW").val("");
$("#addAT9QTY").val(1);
// $("#AT9DPW").val($(this).data("at9dpw"));
$("#addAT9QTY").focus();
$('#qtyAdd').modal('show');
});
// Clear values on Edit form when Close is clicked
$(document).on('click', '#closeEdit', function() {
document.getElementById("frmEdit").reset();
});
// Clear values on Add form when Close is clicked
$(document).on('click', '#closeAdd', function() {
document.getElementById("frmAdd").reset();
});
//
// Save Qty Edit
//
$(document).on('click', '#submitQtyEdit', function() {
var changes_detected = 0;
// Retrieve the values we need to pass on
//var NEW_AT9CO = $("#AT9CO").val();
//var NEW_AT9PLT = $("#AT9PLT").val();
//var NEW_AT9WHS = $("#AT9WHS").val();
var NEW_AT9CO = $("#AT9DPW").val().substring(0,3);
var NEW_AT9PLT = $("#AT9DPW").val().substring(3,6);
var NEW_AT9WHS = $("#AT9DPW").val().substring(6,9);
var NEW_AT9PART = $("#AT9PART").val();
var NEW_AT9QTY = $("#AT9QTY").val();
var NEW_AT9WRN = $("#AT9WRN").val();
// Retrieve old values
var OLD_AT9CO = $("#OLD_AT9CO").val();
var OLD_AT9PLT = $("#OLD_AT9PLT").val();
var OLD_AT9WHS = $("#OLD_AT9WHS").val();
var OLD_AT9DPW = $("#OLD_AT9DPW").val();
var OLD_AT9PART = $("#OLD_AT9PART").val();
var OLD_AT9QTY = $("#OLD_AT9QTY").val();
var OLD_AT9WRN = $("#OLD_AT9WRN").val();
// test fields that are not supposed to be blank/empty
if (NEW_AT9QTY.trim()=="") {
$('#qtyEdit').modal('show');
$('#AT9QTY').focus();
alert("There are fields that are blank that must be populated.");
} else {
// Compare the new and the old value before submitting
if(NEW_AT9QTY!=OLD_AT9QTY) {
changes_detected = 1;
}
if(NEW_AT9WRN!=OLD_AT9WRN) {
changes_detected = 1;
}
// If we have no changes we let the user know in a blank modal
//alert(changes_detected);
if (changes_detected==0) {
$('#qtyEdit').modal('show');
alert("No changes have been detected. Please try again");
// Send ajax request
} else {
var csrf = document.querySelector('meta[name="csrf-token"]').content;
$.ajax({
type:'POST',
url:'/palletQty/saveQtyEdit',
data: {
'AT9CO': NEW_AT9CO,
'AT9PLT': NEW_AT9PLT,
'AT9WHS': NEW_AT9WHS,
'AT9PART': NEW_AT9PART,
'AT9QTY': NEW_AT9QTY,
'AT9WRN': NEW_AT9WRN,
'_token': csrf
},
success:function(data) {
if (data=="success") {
//$('#blank-modal').modal('hide');
$('#qtyEdit').modal('hide');
// alert("should reload here");
location.reload();
} else {
$("#AT9CO").val(NEW_AT9CO);
$("#AT9PLT").val(NEW_AT9PLT);
$("#AT9WHS").val(NEW_AT9WHS);
$("#AT9DPW").val(NEW_AT9DPWH);
$("#AT9PART").val(NEW_AT9PART);
$("#AT9QTY").val(NEW_AT9QTY);
$("#AT9WRN").val(NEW_AT9WRN);
$("#OLD_AT9CO").val(OLD_AT9CO);
$("#OLD_AT9PLT").val(OLD_AT9PLT);
$("#OLD_AT9WHS").val(OLD_AT9WHS);
$("#OLD_AT9PART").val(OLD_AT9PART);
$("#OLD_AT9QTY").val(OLD_AT9QTY);
$("#OLD_AT9WRN").val(OLD_AT9WRN);
}
}
});
}
}
});
//
// Save Qty Add
//
$(document).on('click', '#submitQtyAdd', function() {
// Retrieve the values we need to pass on
//if($("#addAT9DPW").val()!=null) {
var NEW_AT9CO = ($("#addAT9DPW").val()).substring(0,3);
var NEW_AT9PLT = ($("#addAT9DPW").val()).substring(3,6);
var NEW_AT9WHS = ($("#addAT9DPW").val()).substring(6,9);
var NEW_AT9DPW = $("#addAT9DPW").val();
//}
//var NEW_AT9CO = $("input[name=addAT9CO]").val();
//var NEW_AT9PLT = $("input[name=addAT9PLT]").val();
//var NEW_AT9WHS = $("input[name=addAT9WHS]").val();
//var NEW_AT9DPW = $("input[name=addAT9DPW]").val();
var NEW_AT9PART = $("input[name=addAT9PART]").val();
var NEW_AT9QTY = $("input[name=addAT9QTY]").val();
var NEW_AT9WRN = $("input[name=addAT9WRN]").val();
var csrf = document.querySelector('meta[name="csrf-token"]').content;
var form_post = {
'AT9CO': NEW_AT9CO,
'AT9PLT': NEW_AT9PLT,
'AT9WHS': NEW_AT9WHS,
'AT9PART': NEW_AT9PART,
'AT9QTY': NEW_AT9QTY,
'AT9WRN': NEW_AT9WRN,
'_token': csrf
};
if (NEW_AT9PART.trim()=="" || NEW_AT9QTY.trim()=="") {
$('#qtyAdd').modal('show');
if (NEW_AT9QTY=="") {
$('#AT9QTY').focus();
}
alert("There are fields that are blank that must be populated.");
} else {
$.ajax({
type:'POST',
url:'/palletQty/saveQtyAdd',
data: form_post,
success:function(data) {
if (data=="success") {
$('#qtyAdd').modal('hide');
location.reload();
} else {
$("#addAT9CO").val(NEW_AT9CO);
$("#addAT9PLT").val(NEW_AT9PLT);
$("#addAT9WHS").val(NEW_AT9WHS);
$("#addAT9DPW").val(NEW_AT9DPW);
$("#addAT9PART").val(NEW_AT9PART);
$("#addAT9QTY").val(NEW_AT9QTY);
$("#addAT9WRN").val(NEW_AT9WRN);
if (data=="exists") {
$("#addAT9PART").val("");
alert("Record already exists in this file.");
$('#qtyAdd').modal('show');
}
if (data=="not exist") {
if (confirm("Part number "+NEW_AT9PART+" does not yet exist in Sentinel. Are you sure it exists in the ERP system?")) {
//console.log(form_post);
$.ajax({
type:'POST',
url:'/palletQty/saveQtyAdd2',
data: form_post,
success:function(data) {
if (data=="success") {
$('#qtyAdd').modal('hide');
location.reload();
}
}
});
}
}
}
}
});
}
});
});
//});
</script>
@endsection
@@ -0,0 +1,292 @@
<!-- #732 -->
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Trucks pending closure with M3
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Trucks pending closure with M3</h1>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
The trucks will be closed automatically at 6pm daily. But you can initiate the close earlier by clicking on the manifest number
@if($ICM699M[0]->COUNT1>0)
<b><p style="background-color:tomato;">There are <a href="./M3ErrorsDisplay?showerrors=Y&skipdates=Y&shsource=CloseShipmentCoChargeAPI">
{{$ICM699M[0]->COUNT1}}</a> closing delivery order errors pending review</p></b>
@endif
@if(count($unprocessedArr)>0)
@php $unprocessedMan = implode(', ', $unprocessedArr); @endphp
<b><p style="background-color:tomato;">Manifests: {!! $unprocessedMan !!} have some orders that still have a header picking status of B, and may not have closed in M3. Please investigate</b>
@endif
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5">
<thead>
<tr>
<th> </th>
<th>Manifest</th>
<th>Status</th>
<th>Dock door</th>
<th>Carrier</th>
<th>Truck ID</th>
<th>Type</th>
<th>User open</th>
<th>Date open</th>
<th>Time open</th>
<th>TMS<br>User close</th>
<th>TMS<br>Date close</th>
<th>TMS<br>Time close</th>
<th>Sentinel<br>User close</th>
<th>Sentinel<br>Date close</th>
<th>Sentinel<br>Time close</th>
</tr>
</thead>
<tbody>
@foreach($ICM705M1 as $key=>$val)
@php
$closeinRed = false;
$APLDCLOD = trim($val->APLDCLOD)!="0" ? date('Y-m-d', strtotime($val->APLDCLOD)) : "";
$APLDCLOT = trim($val->APLDCLOT)!="0"?(strlen($val->APLDCLOT)==6?date('H:i:s', strtotime($val->APLDCLOT)):date('H:i:s', strtotime('0'.$val->APLDCLOT))):"";
# Get current time as a timestamp
$currentTime = time();
$APLDCLOZ = trim($val->APLDCLOZ)!="0" ? strtotime($val->APLDCLOZ) : "";
# Calculate the difference in minutes
if ($APLDCLOZ!='') {
$minutesDiff = round(abs($currentTime - $APLDCLOZ) / 60);
$closeinRed = $minutesDiff <15 ? true : false;
}
$closeInRedClass = $closeinRed ? ' class=text-danger ' : '' ;
# Get In process Manifests with delay > 3 hours
$ManifestDelayed = false;
if ($val->APSPARE2=="P") {
$SHDT = isset($ICM699Ma[$val->APMANIFEST]['SHDT']) ? $ICM699Ma[$val->APMANIFEST]['SHDT'] : '';
$SHTIME = isset($ICM699Ma[$val->APMANIFEST]['SHTIME']) ? $ICM699Ma[$val->APMANIFEST]['SHTIME'] : '';
// dump($val->APMANIFEST."-".$SHDT."-".$SHTIME);
if ($SHDT!='' && $SHTIME!='') {
$specifiedDateTime = new \DateTime($SHDT . " " . $SHTIME);
$currentDateTime = new \DateTime();
# Calculate total hours
$totalHours = $specifiedDateTime->diff($currentDateTime)->days * 24 + $specifiedDateTime->diff($currentDateTime)->h;
// dump("Total Hours: " . $totalHours);
if ($totalHours > 3) {
$ManifestDelayed = true;
}
}
}
@endphp
<tr>
<td></td>
<td>
{{-- Link to Manifest Orders --}}
@if( $val->APMANIFEST!="0" )
<a class="btn btn-link" target="_blank" href="{{ url('MFOrders', ['id' => trim($val->APMANIFEST)]) }}">
{{ trim($val->APMANIFEST)!="0"?$val->APMANIFEST:"" }}
</a>
@endif
{{-- Close Button --}}
@if( ($val->APMANIFEST!="0" && $val->APSPARE2!="P" && trim($val->APLDCLOD)!="") && !$closeinRed)
<button class="btn btn-sm btn-warning" id="submitManifest" data-shuser="{{trim($user)}}" data-manifest="{{trim($val->APMANIFEST)}}" data-apco="{{trim($val->APCO)}}" data-apwhs="{{trim($val->APWHS)}}">
Close
</button>
@elseif($val->APSPARE2=="P")
{{ trim($val->APMANIFEST)!="0" ?$val->APMANIFEST : "" }}
@endif
</td>
{{-- MAK Show Retry Message instead of Contact MPBA --}}
<td> {!! $val->APSPARE2=="P" && !$ManifestDelayed ? "In Process" :
( $val->APSPARE2=="P" && $ManifestDelayed ?
'<button class="btn btn-sm btn-danger" id="allowRetry"
data-shuser="' . trim($user) . '"
data-manifest="' . trim($val->APMANIFEST) . '"
data-apco="' . trim($val->APCO) . '"
data-apwhs="' . trim($val->APWHS) . '">
Failed – please reset
</button>'
: '')
!!}
</td>
<td> {{ $val->APDOCKDOOR }} </td>
<td> {{ $val->APCARRIER }} </td>
<td> {{ $val->APTRUCKIDT }} </td>
<td> {{ $val->APSPARE1 }} </td>
<td> {{ $val->APLDSTRU }} </td>
<td> {{ date('Y-m-d', strtotime($val->APLDSTRD)) }} </td>
<td> {{ strlen($val->APLDSTRT)==6 ? date('H:i:s', strtotime($val->APLDSTRT)):date('H:i:s', strtotime('0'.$val->APLDSTRT)) }} </td>
<td> {{ isset($ICM698Ma[$val->APMANIFEST])?$ICM698Ma[$val->APMANIFEST]['TMSUSER']:"" }} </td>
<td> {{ trim($ICM698Ma[$val->APMANIFEST]['TMSDATE'])!=""?date('Y-m-d', strtotime($ICM698Ma[$val->APMANIFEST]['TMSDATE'])):"" }} </td>
<td> {{ trim($ICM698Ma[$val->APMANIFEST]['TMSTIME'])!=""?(strlen($ICM698Ma[$val->APMANIFEST]['TMSTIME'])==6?date('H:i:s', strtotime($ICM698Ma[$val->APMANIFEST]['TMSTIME'])):date('H:i:s', strtotime('0'.$ICM698Ma[$val->APMANIFEST]['TMSTIME']))):"" }} </td>
<td> {{ $val->APLDCLOU }} </td>
<td> {{ $APLDCLOD }} </td>
<td {{ $closeInRedClass }}> {{ $APLDCLOT }} </td>
</tr>
@endforeach
</tbody>
</table>
<div class="row">
<div class="col-12">
<form id="manifestForm" class="row row-cols-lg-auto g-3 align-items-center">
<div class="col-12">
<label class="visually-hidden" for="inlineFormInputGroupManifest #">Manifest #</label>
<div class="input-group">
<div class="input-group-text">View closed manifest</div>
<label for="MFInput" class="visually-hidden">Manifest #</label>
<input type="text" class="form-control" id="MFInput" placeholder="Manifest #">
</div>
</div>
<div class="col-12">
<button type="button" id="viewMF" class="btn btn-primary" >Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- /.row -->
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
$('#datatablesSimple5').DataTable({
"aaSorting": [],
"lengthMenu": [ [100,200,500,-1], [100,200,500,"All"] ],
"sPaginationType": "full_numbers",
dom: "<'row mt-2'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-6'B><'col-sm-12 col-md-3'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row mt-2'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
"responsive": true,
"orderCellsTop": true,
"order": [ [2, 'asc'] ],
pageLength: 25,
"lengthMenu": [ [10,25,50,100,500], [10,25,50,100,500] ],
"columnDefs": [
{
orderable: true,
searchable: true,
targets: -1
}
],
});
// Submit Manifet
$(document).on('click','#submitManifest', function () {
if (confirm("Do you want to close this manifest in M3 immediately?")) {
SHUSER = $(this).data('shuser');
MANIFEST = $(this).data('manifest');
APCO = $(this).data('apco');
APWHS = $(this).data('apwhs');
var form_post2 = {
SHUSER : SHUSER,
MANIFEST :MANIFEST,
APCO :APCO,
APWHS :APWHS,
_token : '{{ csrf_token() }}'
};
$.ajax({
url: "{{ route('m3.M3ManifestCloseAPI') }}",
type: "POST",
data: form_post2,
async:true,
success: function(response) {
},
error: function(error) {
// console.log(error);
// alert(error);
}
});
Swal.fire({
title: "Manifest Submitted for Closing",
text: "",
icon: "success",
confirmButtonColor: "#3085d6"
});
// alert("Manifest Submitted for Closing");
setTimeout(function(){
window.location.reload();
}, 3000);
}
});
// Allow Retry
$(document).on('click','#allowRetry', function () {
if (confirm("Do you want to allow manifest Closing?")) {
SHUSER = $(this).data('shuser');
MANIFEST = $(this).data('manifest');
APCO = $(this).data('apco');
APWHS = $(this).data('apwhs');
var form_post2 = {
SHUSER : SHUSER,
MANIFEST :MANIFEST,
APCO :APCO,
APWHS :APWHS,
_token : '{{ csrf_token() }}'
};
// console.log(form_post2); return false;
$.ajax({
url: "{{ route('m3.allowRetry') }}",
type: "POST",
data: form_post2,
async:true,
success: function(response) {
},
error: function(error) {
// console.log(error);
// alert(error);
}
});
// alert("Manifest Can now Submitted for retry");
Swal.fire({
title: "Manifest Can now Submitted for retry",
text: "",
icon: "success",
confirmButtonColor: "#3085d6"
});
setTimeout(function(){
window.location.reload();
}, 3000);
}
});
$('#viewMF').on('click', function () {
var MFInput = $('#MFInput').val().trim();
if (MFInput!='') {
var url = "{{ url('MFOrders')}}"+"/"+MFInput;
// window.location.href = url;
window.open(url, '_blank');
}
else{
alert("Manifest # is empty.");
}
});
$("#manifestForm").on('submit', function(e) {
e.preventDefault();
$('#viewMF').trigger('click');
});
});
</script>
@endsection
@@ -0,0 +1,101 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Add: Distribution whs addresses
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h3 class="mt-2">Add: Distribution whs addresses</h3>
<div class="row">
<div class="col-md-12">
<div class="card">
{{-- <div class="card-header">
<h4>Add Ship-to Address</h4>
</div> --}}
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="POST" action="{{ route('m3.ship-to.store') }}">
@csrf
<div class="form-group">
<label for="sonar-input-a5f61985b0">Customer Number</label>
<input type="text" class="form-control" name="AUSTCN" value="{{ old('AUSTCN') }}"
maxlength="11" id="sonar-input-a5f61985b0">
</div>
<div class="form-group">
<label for="sonar-input-20156147e6">Company Name &bull;</label>
<input type="text" class="form-control" name="AUSHSHNM" value="{{ old('AUSHSHNM') }}"
required maxlength="36" id="sonar-input-20156147e6">
</div>
<div class="form-group">
<label for="sonar-input-709c1e07ef">Address 1 &bull;</label>
<input type="text" class="form-control" name="AUSHSHA1" value="{{ old('AUSHSHA1') }}"
required maxlength="36" id="sonar-input-709c1e07ef">
</div>
<div class="form-group">
<label for="sonar-input-e3787f959d">Address 2 &bull;</label>
<input type="text" class="form-control" name="AUSHSHA2" value="{{ old('AUSHSHA2') }}"
required maxlength="36" id="sonar-input-e3787f959d">
</div>
<div class="form-group">
<label for="sonar-input-5bbfb65f3b">Address 3</label>
<input type="text" class="form-control" name="AUSHSHA3" value="{{ old('AUSHSHA3') }}"
maxlength="36" id="sonar-input-5bbfb65f3b">
</div>
<div class="form-group">
<label for="sonar-input-e7a28e585b">Address 4</label>
<input type="text" class="form-control" name="AUSHSHA4" value="{{ old('AUSHSHA4') }}"
maxlength="36" id="sonar-input-e7a28e585b">
</div>
<div class="form-group">
<label for="sonar-input-0620339934">City &bull;</label>
<input type="text" class="form-control" name="AUSHSHCI" value="{{ old('AUSHSHCI') }}"
required maxlength="20" id="sonar-input-0620339934">
</div>
<div class="form-group">
<label for="sonar-select-a5f61985b0">State &bull;</label>
<select class="form-select" name="AUSHSHST" required id="sonar-select-a5f61985b0">
<option value="">Select a state</option>
@foreach ($states as $code => $name)
<option value="{{ $code }}"
{{ old('AUSHSHST') == $code ? 'selected' : '' }}>
{{ $name }} ({{ $code }})
</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="sonar-input-2ed60d69e4">Zip Code &bull;</label>
<input type="text" class="form-control" name="AUSHSHZP" value="{{ old('AUSHSHZP') }}"
required maxlength="10" id="sonar-input-2ed60d69e4">
</div>
<div class="form-group">
<label for="sonar-input-d95b035dcf">Country Code &bull;</label>
<input type="text" class="form-control" name="AUSHSHCT" value="{{ old('AUSHSHCT') }}"
required maxlength="3" id="sonar-input-d95b035dcf">
</div>
<div class="form-group">
<label for="sonar-input-3912060202">Warehouse &bull;</label>
<input type="text" class="form-control" name="AUSHWHS" value="{{ old('AUSHWHS') }}"
required maxlength="3" id="sonar-input-3912060202">
</div>
<div class="form-group mt-3 mb-2">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{{ route('m3.ship-to.index') }}" class="btn btn-secondary">Cancel</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,100 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Edit Distribution whs addresses
@endsection
@section('content')
<div class="container-fluid px-4">
<h3 class="mt-2">Edit Distribution whs addresses</h3>
<div class="row">
<div class="col-md-12">
<div class="card">
{{-- <div class="card-header">
<h4>Edit Ship-to Address</h4>
</div> --}}
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="POST" action="{{ url('/ship-to/'. trim($shipTo->AUSHSHZP) . '/' . trim($shipTo->AUSHWHS)) }}">
@csrf
@method('PUT')
<div class="form-group">
<label for="sonar-input-9efe270e0a">Customer Number</label>
<input type="text" class="form-control" name="AUSTCN"
value="{{ trim($shipTo->AUSTCN) }}" id="sonar-input-9efe270e0a">
</div>
<div class="form-group">
<label for="sonar-input-7c20b39e9b">Company Name &bull;</label>
<input type="text" class="form-control" name="AUSHSHNM"
value="{{ old('AUSHSHNM', trim($shipTo->AUSHSHNM)) }}" required maxlength="36" id="sonar-input-7c20b39e9b">
</div>
<div class="form-group">
<label for="sonar-input-2f1f7536fe">Address 1 &bull;</label>
<input type="text" class="form-control" name="AUSHSHA1"
value="{{ old('AUSHSHA1', trim($shipTo->AUSHSHA1)) }}" required maxlength="36" id="sonar-input-2f1f7536fe">
</div>
<div class="form-group">
<label for="sonar-input-1709fb5d67">Address 2 &bull;</label>
<input type="text" class="form-control" name="AUSHSHA2"
value="{{ old('AUSHSHA2', trim($shipTo->AUSHSHA2)) }}" required maxlength="36" id="sonar-input-1709fb5d67">
</div>
<div class="form-group">
<label for="sonar-input-fb35089be3">Address 3</label>
<input type="text" class="form-control" name="AUSHSHA3"
value="{{ old('AUSHSHA3', trim($shipTo->AUSHSHA3)) }}" maxlength="36" id="sonar-input-fb35089be3">
</div>
<div class="form-group">
<label for="sonar-input-5452b56d11">Address 4</label>
<input type="text" class="form-control" name="AUSHSHA4"
value="{{ old('AUSHSHA4', trim($shipTo->AUSHSHA4)) }}" maxlength="36" id="sonar-input-5452b56d11">
</div>
<div class="form-group">
<label for="sonar-input-a1059c7901">City &bull;</label>
<input type="text" class="form-control" name="AUSHSHCI"
value="{{ old('AUSHSHCI', trim($shipTo->AUSHSHCI)) }}" required maxlength="20" id="sonar-input-a1059c7901">
</div>
<div class="form-group">
<label for="sonar-select-9efe270e0a">State &bull;</label>
<select class="form-select" name="AUSHSHST" required id="sonar-select-9efe270e0a">
<option value="">Select a state</option>
@foreach ($states as $code => $name)
<option value="{{ $code }}"
{{ old('AUSHSHST', $shipTo->AUSHSHST) == $code ? 'selected' : '' }}>
{{ $name }} ({{ $code }})
</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="sonar-input-07cebce94f">Zip Code</label>
<input type="text" class="form-control" value="{{ trim($shipTo->AUSHSHZP) }}" readonly id="sonar-select-9efe270e0a">
</div>
<div class="form-group">
<label for="sonar-input-8b496b4c51">Country Code &bull;</label>
<input type="text" class="form-control" name="AUSHSHCT"
value="{{ old('AUSHSHCT', trim($shipTo->AUSHSHCT)) }}" required maxlength="3" id="sonar-input-8b496b4c51">
</div>
<div class="form-group">
<label for="sonar-input-2b51446d4a">Warehouse</label>
<input type="text" class="form-control" value="{{ $shipTo->AUSHWHS }}" readonly id="sonar-input-2b51446d4a">
</div>
<div class="form-group mt-3 mb-2">
<button type="submit" class="btn btn-primary">Update</button>
<a href="{{ route('m3.ship-to.index') }}" class="btn btn-secondary">Cancel</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,107 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Distribution whs addresses
@endsection
@section('content')
<div class="container-fluid mt-6 pt-6 px-4">
<h3 class="mt-4">Distribution whs addresses</h3>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
{{-- <h4 class="float-left">Ship-to Addresses</h4> --}}
<a href="{{ route('m3.ship-to.create') }}" class="btn btn-primary float-right">Add New</a>
</div>
<div class="card-body">
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<div class="container-fluid table-responsive">
<table class="table table-bordered data-table" style="width:100%">
<thead>
<tr>
<th></th>
<th>Customer Number</th>
<th>Company Name</th>
<th>Address</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
<th>Country</th>
<th>Warehouse</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script type="text/javascript">
$(function() {
var table = $('.data-table').DataTable({
processing: true,
responsive: true,
serverSide: true,
ajax: "{{ route('m3.ship-to.index') }}",
columns: [{
data: 'checkbox',
name: 'checkbox',
orderable: false,
searchable: false
},
{
data: 'AUSTCN',
name: 'AUSTCN'
},
{
data: 'AUSHSHNM',
name: 'AUSHSHNM'
},
{
data: 'AUSHSHA1',
name: 'AUSHSHA1'
},
{
data: 'AUSHSHCI',
name: 'AUSHSHCI'
},
{
data: 'AUSHSHST',
name: 'AUSHSHST'
},
{
data: 'AUSHSHZP',
name: 'AUSHSHZP'
},
{
data: 'AUSHSHCT',
name: 'AUSHSHCT'
},
{
data: 'AUSHWHS',
name: 'AUSHWHS'
},
{
data: 'action',
name: 'action',
orderable: false,
searchable: false
}
]
});
});
</script>
@endsection
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,241 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Daily User Efficiency
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Daily User Efficiency</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
Filters
</div>
<div class="card-body">
<div class="card-body">
<form>
@csrf
<div class="row mb-3">
<label for="inputEmail" class="col-sm-2 col-form-label">Date</label>
<div class="col-sm-10">
<label for="text" class="visually-hidden">dates</label>
<input value="{{ $starting }}" id="text" name="dates" type="text" aria-describedby="textHelpBlock" class="form-control">
</div>
</div>
<div class="row mb-3">
<label for="inputUser" class="col-sm-2 col-form-label">User</label>
<div class="col-sm-10">
<select aria-label="User" name="user" class="form-select">
<option value="" selected> </option>
@foreach($user_array as $key=>$val)
<option value={{$val['userprf']}}
@if($val['userprf']==$user) selected @endif
>{{$val['name']}}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
User Picking Stats
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5">
<thead>
<tr>
<th> </th>
<th>Code</th>
<th>Mon</th>
<th>Date</th>
<th>Hour</th>
<th>Pick ended at</th>
<th style="text-align:right">Weight </th>
<th style="text-align:right">Units Picked</th>
<th style="text-align:right">Part</th>
<th style="text-align:left">Order-Rl-Sh#</th>
<th style="text-align:left">Cust Name</th>
<th style="text-align:right">Time (in mins)</th>
<th> </th>
</tr>
</thead>
<tbody>
@if($no_data=="Y")
<tr> <td colspan=12 style="text-align:center; background-color:yellow"> <b>No data retrieved for this user</b> <td> <tr>
@else
@foreach($statistic4 as $key=>$val)
<tr>
<td></td>
<td> {{ $val->CODE }} </td>
<td> {{ $val->A5SENTVIEW }} </td>
<td> {{ $val->DT }} </td>
<td> {{ $val->HOUR }} </td>
<td> {{ str_replace(' ','______',$val->A5PICKCMTS) }} </td>
<td style="text-align:right"> {{ number_format($val->WEIGHT,2) }} </td>
<a href="http://{{$_SERVER['HTTP_HOST']}}/php/AllSentPkr.php?order={{$val->A5ONO}}&release={{$val->A5RLNO}}&shipment={{$val->A5SHNO}}">
{{ $val->A5ONO }}-{{ $val->A5RLNO }}-{{ $val->A5SHNO }}
</a>
</td>
<td style="text-align:left"> {{ $val->A4SHSHNM }} </td>
<td style="text-align:right"> {{ number_format($val->TIMEDIFF/60,1) }} </td>
<td style="background-color: {{ $val->COLOUR }}"> &nbsp; </td>
</tr>
@endforeach
@endif
</tbody>
<tfoot>
<tr>
<td style="text-align:right" colspan="5"> Total </td>
<td style="text-align:right"> {{ (isset($totals_array['entries']) ? $totals_array['entries'] : "") }} </td>
<td style="text-align:right"> {{number_format($totals_array['weight'],2)}} </td>
<td style="text-align:right"> {{number_format($totals_array['picked'],0)}} </td>
<td> </td>
<td> </td>
<td> </td>
<td style="text-align:right"> {{number_format($totals_array['timediff']/60,1)}} </td>
<td> </td>
</tr>
</tfoot>
</table>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
User Picking Stats Summary
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple3">
<tr>
<th>Monitor</th>
<th>Total</th>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<th> {{$key['header']}} </th>
@endif
@endforeach
</tr>
<tr>
<td> Picked Weight </td>
<td> {{number_format($totals_array['weight'],0)}} </td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['weight'],0) }} </td>
@endif
@endforeach
</tr>
<tr>
<td> Picked Lines </td>
<td> {{number_format($totals_array['entries'],0)}} </td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['lines'],0)}} </td>
@endif
@endforeach
</tr>
<tr>
<td>Total in hours (based on Greg time entry)</td>
<td>{{(isset($perf_array['tot_hours'])?number_format($perf_array['tot_hours'],1):"")}}</td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['tot_hours'],1) }} </td>
@endif
@endforeach
</tr>
<tr>
<td>Percent per activity</td>
<td>100%</td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['percent_per_activity']*100,0)}}% </td>
@endif
@endforeach
</tr>
<tr>
<td>LPH contribution per activity </td>
<td>{{(isset($monitor_array[0]['lph_blended_per_activity'])?number_format($monitor_array[0]['lph_blended_per_activity'],1):"")}}</td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['lph_blended_per_activity'],1)}} </td>
@endif
@endforeach
</tr>
</table>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
User Picking Stats Performance Summary
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple4">
<tr>
<td>Total in hours (based on Greg time entry)</td>
<td>{{(isset($perf_array['tot_hours'])?number_format($perf_array['tot_hours'],1):"")}}</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td>Per hour actual</td>
<td>{{(isset($perf_array['per_hour_actual'])?number_format($perf_array['per_hour_actual'],1):"")}}</td>
</tr>
<tr>
<td>Blended target for the day</td>
<td>{{(isset($monitor_array[0]['lph_blended_per_activity'])?number_format($monitor_array[0]['lph_blended_per_activity'],1):"")}}</td>
</tr>
<tr>
<td>Performance</td>
<td>{{(isset($perf_array['performance_activity'])?number_format($perf_array['performance_activity']*100,0):"")}}%</td>
</tr>
</table>
</div>
</div>
</div>
<!-- /.row -->
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
$('#datatablesSimple5').DataTable({
"aaSorting": [],
"lengthMenu": [ [10,25,50,-1], [10,25,50,"All"] ]
});
// Date range init
$('input[name="dates"]').daterangepicker({
singleDatePicker: true,
showDropdowns: true,
minYear: 2001,
maxYear: parseInt(moment().format('YYYY'),10),
locale: {
format: 'YYYY-MM-DD',
},
startDate: '{{ $starting }}',
alwaysShowCalendars: true
});
});
</script>
@endsection
@@ -0,0 +1,245 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - userPickingStats v4
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">User Activity Stats V4</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
Filters
</div>
<div class="card-body">
<div class="card-body">
<form>
@csrf
<div class="row mb-3">
<label for="inputEmail" class="col-sm-2 col-form-label">Date</label>
<div class="col-sm-10">
<label for="text" class="visually-hidden">dates</label>
<input value="{{ $starting }}" id="text" name="dates" type="text" aria-describedby="textHelpBlock" class="form-control">
</div>
</div>
<div class="row mb-3">
<label for="inputUser" class="col-sm-2 col-form-label">User</label>
<div class="col-sm-10">
<select aria-label="User" name="user" class="form-control">
<option value="" selected> </option>
@foreach($user_array as $key=>$val)
<option value={{$val['userprf']}}
@if($val['userprf']==$user) selected @endif
>{{$val['name']}}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
User Picking Stats
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple5">
<thead>
<tr>
<th>Mon</th>
<th>Date</th>
<th>Hour</th>
<th>Pick ended at</th>
<th style="text-align:right">Weight </th>
<th style="text-align:right">Units Picked</th>
<th style="text-align:right">Part</th>
<th style="text-align:left">Order-Rl-Sh#</th>
<th style="text-align:left">Cust Name</th>
<th style="text-align:right">Time (in mins)</th>
<th> </th>
</tr>
</thead>
<tbody>
@if($no_data=="Y")
<tr> <td colspan=10 style="text-align:center; background-color:yellow"> <b>No data retrieved for this user</b> <td> <tr>
@else
@foreach($statistic4 as $key=>$val)
<tr>
<td> {{ $val->CODE }} </td>
<td> {{ $val->DT }} </td>
<td> {{ $val->HOUR }} </td>
<td> {{ str_replace(' ','______',$val->A5PICKCMTS) }} </td>
<td style="text-align:right"> {{ number_format($val->WEIGHT,2) }} </td>
<td style="text-align:right"> {{ number_format($val->A5PICKED,0) }} </td>
<td style="text-align:right"> {{ $val->A5PART }} </td>
<td style="text-align:left">
<a href="http://{{$_SERVER['SERVER_ADDR']}}:{{ (stristr($_SERVER['DOCUMENT_ROOT'],'liv')?$request->ports['live']:$request->ports['test'])}}/php/AllSentPkr.php?order={{$val->A5ONO}}&release={{$val->A5RLNO}}&shipment={{$val->A5SHNO}}">
{{ $val->A5ONO }}-{{ $val->A5RLNO }}-{{ $val->A5SHNO }}
</a>
</td>
<td style="text-align:left"> {{ $val->A4SHSHNM }} </td>
<td style="text-align:right"> {{ number_format($val->TIMEDIFF/60,1) }} </td>
<td style="background-color: {{ $val->COLOUR }}"> &nbsp; </td>
</tr>
@endforeach
@endif
</tbody>
<tfoot>
<tr>
<td> </td>
<td> </td>
<td style="text-align:right"> Total </td>
<td style="text-align:right"> {{ (isset($totals_array['entries']) ? $totals_array['entries'] : "") }} </td>
<td style="text-align:right"> {{number_format($totals_array['weight'],2)}} </td>
<td style="text-align:right"> {{number_format($totals_array['picked'],0)}} </td>
<td> </td>
<td> </td>
<td> </td>
<td style="text-align:right"> {{number_format($totals_array['timediff']/60,1)}} </td>
<td> </td>
</tr>
</tfoot>
</table>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
User Picking Stats Summary
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple3">
<tr>
<th>Monitor</th>
<th>Total</th>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<th> {{$key['header']}} </th>
@endif
@endforeach
</tr>
<tr>
<td> Picked Weight </td>
<td> {{number_format($totals_array['weight'],0)}} </td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['weight'],0) }} </td>
@endif
@endforeach
</tr>
<tr>
<td> Picked Lines </td>
<td> {{number_format($totals_array['entries'],0)}} </td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['lines'],0)}} </td>
@endif
@endforeach
</tr>
<tr>
<td>Total in hours (based on Greg time entry)</td>
<td>{{(isset($perf_array['tot_hours'])?number_format($perf_array['tot_hours'],1):"")}}</td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['tot_hours'],1) }} </td>
@endif
@endforeach
</tr>
<tr>
<td>Percent per activity</td>
<td>100%</td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['percent_per_activity']*100,0)}}% </td>
@endif
@endforeach
</tr>
<tr>
<td>LPH contribution per activity </td>
<td>{{(isset($monitor_array[0]['lph_blended_per_activity'])?number_format($monitor_array[0]['lph_blended_per_activity'],1):"")}}</td>
@foreach($monitor_array as $key)
@if($key['header']!="0")
<td> {{number_format($key['lph_blended_per_activity'],1)}} </td>
@endif
@endforeach
</tr>
</table>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
User Picking Stats Performance Summary
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple4">
<tr>
<td>Total in hours (based on Greg time entry)</td>
<td>{{(isset($perf_array['tot_hours'])?number_format($perf_array['tot_hours'],1):"")}}</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td>Per hour actual</td>
<td>{{(isset($perf_array['per_hour_actual'])?number_format($perf_array['per_hour_actual'],1):"")}}</td>
</tr>
<tr>
<td>Blended target for the day</td>
<td>{{(isset($monitor_array[0]['lph_blended_per_activity'])?number_format($monitor_array[0]['lph_blended_per_activity'],1):"")}}</td>
</tr>
<tr>
<td>Performance</td>
<td>{{(isset($perf_array['performance_activity'])?number_format($perf_array['performance_activity']*100,0):"")}}%</td>
</tr>
</table>
</div>
</div>
</div>
<!-- /.row -->
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
$('#datatablesSimple5').DataTable({
"aaSorting": [],
"lengthMenu": [ [10,25,50,-1], [10,25,50,"All"] ]
});
// Date range init
$('input[name="dates"]').daterangepicker({
singleDatePicker: true,
showDropdowns: true,
minYear: 2001,
maxYear: parseInt(moment().format('YYYY'),10),
locale: {
format: 'YYYY-MM-DD',
},
startDate: '{{ $starting }}',
alwaysShowCalendars: true
});
});
</script>
@endsection
@@ -0,0 +1,196 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Graph User Efficiency
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Graph User Efficiency</h1>
<div class="card mb-4">
<div class="card-header" style="line-height: 34px;">
<i class="fas fa-table me-1"></i>
Filters
</div>
<div class="card-body">
<div class="card-body">
<form>
@csrf
<div class="row mb-3">
<label for="inputEmail" class="col-sm-2 col-form-label">Date Range</label>
<div class="col-sm-10">
<label for="text" class="visually-hidden">dates</label>
<input value="{{ $starting }} - {{ $ending }}" id="text" name="dates" type="text" aria-describedby="textHelpBlock" class="form-control">
</div>
</div>
<div class="row mb-3">
<label for="inputUser" class="col-sm-2 col-form-label">User</label>
<div class="col-sm-10">
<select aria-label="User" name="user" class="form-select">
@foreach($user_array as $key=>$val)
<option value={{$val['userprf']}}
@if($val['userprf']==$user) selected @endif
>{{$val['name']}}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="row">
<div class="col-xl-6">
<div class="card mb-12">
<div class="card-header">
<i class="fas fa-chart-bar me-1"></i>
Picking Performance
</div>
<div class="card-body">
<figure class="highcharts-figure">
<div id="container"></div>
</figure>
</div>
</div>
</div>
</div>
<div class="row card mt-4 mb-4">
<div class="card-header">
<i class="fas fa-table me-1"></i>
User Picking Stats
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="datatablesSimple3">
<thead>
<tr>
<th>Day</th>
<th>Performance</th>
<th>Blended Target LPH</th>
<th>Actual LPH</th>
<th>Gross Hours</th>
</tr>
</thead>
<tbody>
@foreach($statistic5 as $key=>$val)
<tr>
<td style="text-align:right"> {{ (isset($val['day']) ? $val['day'] : "") }} </td>
<td style="text-align:right"> {{ (isset($val['performance']) ? $val['performance'] : "") }} </td>
<td style="text-align:right"> {{ (isset($val['blendedTargetLPH']) ? $val['blendedTargetLPH'] : "") }} </td>
<td style="text-align:right"> {{ (isset($val['actualLPH']) ? $val['actualLPH'] : "") }} </td>
<td style="text-align:right"> {{ (isset($val['grossHours']) ? $val['grossHours'] : "") }} </td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr>
<td style="text-align:right"> Total </td>
<td style="text-align:right"> {{ (isset($totals_array['performance']) ? number_format($totals_array['performance'],1) : "") }}% </td>
<td style="text-align:right"> </td>
<td style="text-align:right"> </td>
<td style="text-align:right"> </td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<!-- /.row -->
@endsection
@section('scripts')
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
var performance = new Array();
var days = new Array();
const months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var x=0;
@foreach ($statistic5 as $key=>$value)
//if(typeof {{$value['performance']}}!==null) {
if({{$value['performance']}}!=0) {
performance[x] = {{$value['performance']}};
var in_date = "{{$statistic5[$key]['day']}}";
var dt = in_date.split("-");
days[x] = dt[2]+'<br>'+months[dt[1]-1];
x=x+1;
}
//}
@endforeach
var user_name;
@foreach($user_array as $key=>$val)
if("{{$val['userprf']}}"=="{{$user}}") {
user_name="{{$val['name']}}";
}
@endforeach
Highcharts.chart('container', {
title: {
text: user_name+' Picking Performance'
},
subtitle: {
text: "{{$starting}} to {{$ending}}"
},
yAxis: {
title: {
text: 'Percent of Target Lines per Hour'
}
},
xAxis: {
categories: days
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle'
},
series: [{
data: performance,
showInLegend: false,
}],
});
$(document).ready(function() {
// Date range init
$('input[name="dates"]').daterangepicker({
locale: {
format: 'YYYY-MM-DD',
},
startDate: '{{ $starting }}',
endDate: '{{ $ending }}',
alwaysShowCalendars: true,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
'This Year': [moment().startOf('year'), moment()]
}
});
});
</script>
@endsection
@@ -0,0 +1,95 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Change Warehouse
@endsection
@section('content')
<div class="container-fluid px-4">
<h3 class="mt-2">Change Warehouse</h3>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-body">
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if(session('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif
<form method="POST" action="{{ route('m3.userprofileupdate') }}">
@csrf
<div class="form-group">
<label for="sonar-input-06ac09682b">User profile</label>
<input type="text" class="form-control" name="R428US" value="{{ trim($ICM428M->R428US) }}" readonly id="sonar-input-06ac09682b">
</div>
<div class="form-group">
<label for="sonar-input-95fa12106e">First Name</label>
<input type="text" class="form-control" value="{{ trim($ICM428M->R428FIRST) }}" readonly id="sonar-input-95fa12106e">
</div>
<div class="form-group">
<label for="sonar-input-a6f8891ebe">Family Name</label>
<input type="text" class="form-control" value="{{ trim($ICM428M->R428FAMILY) }}" readonly id="sonar-input-a6f8891ebe">
</div>
<div class="form-group">
<label for="sonar-select-06ac09682b">Div-Plt-Whs</label>
<select class="form-select" name="R428DPW" required id="sonar-select-06ac09682b">
<option value="" disabled hidden>Select</option>
@foreach ($IC670M as $key => $IC670MR)
@php
$selected = $ICM428M->R428CO == $IC670MR->WDCO && $ICM428M->R428WH == $IC670MR->WDWHS && $ICM428M->R428PL == $IC670MR->WDPL ?
'selected' : '';
@endphp
<option value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}" {{ $selected }}>
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
<input type="hidden" name="referrer" id="referrer" value="">
<div class="form-group mt-3 mb-2">
<button type="submit" class="btn btn-primary">Update</button>
<button type="button" class="btn btn-primary" onclick="goBack()">Back</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
document.addEventListener("DOMContentLoaded", function () {
let referrer = document.referrer;
let currentPage = window.location.href.split('?')[0];
// Check if referrer is not the same as the current page
if (referrer && !referrer.startsWith(currentPage)) {
document.getElementById("referrer").value = referrer;
}
});
function goBack() {
let referrer = document.getElementById("referrer").value;
if (referrer) {
window.location.href = referrer;
} else {
// window.history.back();
window.history.go(-2);
}
}
</script>
<script>
$(document).ready(function() {
});
</script>
@endsection
@@ -0,0 +1,342 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Warehouse Performance Metrics
@endsection
@section('content')
<h1 class="mt-4">Warehouse Performance Metrics</h1>
<table class="table table-striped table-bordered table-hover table-sm" id="datatablesSimple1" style="width:100%">
<th scope="col"ead style="position: sticky; top: 56px; z-index: 1000; background-color: #F8F9FA; border: 2px solid black;">
<tr class="border-bottom: 1px solid black;">
<th scope="col" style="width:80px">For month</th>
<th scope="col" style="width:70px">{{ date('Y-m',strtotime($date_in)) }}</th>
<th scope="col" class="text-center" style="background-color:lightgrey" colspan=14>Non-interco and Ground/Air</th>
<th scope="col"></th>
<th scope="col" class="text-center" style="background-color:lightgrey" colspan=2>Intercompany & Ocean</th>
</tr>
<tr class="border-bottom: 1px solid black;">
<th scope="col" style="width:80px"></th>
<th scope="col" style="width:70px"></th>
<th scope="col" class="text-center" colspan=4>All</th>
<th scope="col"></th>
<th scope="col" class="text-center" colspan=4>LTL</th>
<th scope="col"></th>
<th scope="col" class="text-center" colspan=4>Parcel</th>
<th scope="col"></th>
<th scope="col" colspan=2></th>
</tr>
<tr class="border-bottom: 1px solid black;">
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-center" style="width:50px">A1+C1</th>
<th scope="col" class="text-center" style="width:50px">B</th>
<th scope="col" class="text-center" style="width:50px">A3+C2</th>
<th scope="col" class="text-center" style="width:20px"></th>
<th scope="col" style="width:10px"></th>
<th scope="col" class="text-center" style="width:50px">A1+C1</th>
<th scope="col" class="text-center" style="width:50px">B</th>
<th scope="col" class="text-center" style="width:50px">A3+C2</th>
<th scope="col" class="text-center" style="width:20px"></th>
<th scope="col" style="width:10px"></th>
<th scope="col" class="text-center" style="width:50px">A1+C1</th>
<th scope="col" class="text-center" style="width:50px">B</th>
<th scope="col" class="text-center" style="width:50px">A3+C2</th>
<th scope="col" class="text-center" style="width:20px"></th>
<th scope="col" style="width:10px"></th>
<th scope="col" class="text-center" style="width:50px">A1+C1</th>
<th scope="col" class="text-center" style="width:50px">A3+C2</th>
</tr>
<tr class="border-bottom: 1px solid black;">
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-center" style="width:50px">Closed</th>
<th scope="col" class="text-center" style="width:50px">Closed (Cherry)</th>
<th scope="col" class="text-center" style="width:50px">Still Open</th>
<th scope="col" class="text-center" style="width:20px">OTTC</th>
<th scope="col"></th>
<th scope="col" class="text-center" style="width:50px">Closed</th>
<th scope="col" class="text-center" style="width:50px">Closed (Cherry)</th>
<th scope="col" class="text-center" style="width:50px">Still Open</th>
<th scope="col" class="text-center" style="width:20px">OTTC</th>
<th scope="col"></th>
<th scope="col" class="text-center" style="width:50px">Closed</th>
<th scope="col" class="text-center" style="width:50px">Closed (Cherry)</th>
<th scope="col" class="text-center" style="width:50px">Still Open</th>
<th scope="col" class="text-center" style="width:20px">OTTC</th>
<th scope="col"></th>
<th scope="col" class="text-center" style="width:50px">Closed</th>
<th scope="col" class="text-center" style="width:50px">Still Open</th>
</tr>
<tr class="border-bottom: 1px solid black;">
<th scope="col" style="background-color:grey" colspan=19></th>
</tr>
<tr>
<th scope="col">Targets</th>
<th scope="col">Deliv Notes</th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-270366714a" class="visually-hidden">sonar input 270366714a</label>
<input type=text name=ALLtgtnotes maxlength=3 size=2 readonly value={{ $pct_array['all_notes'] }} id="sonar-input-270366714a"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-8d3c22d334" class="visually-hidden">sonar input 8d3c22d334</label>
<input type=text name=LTLtgtnotes maxlength=3 size=2 readonly value={{ $pct_array['ltl_notes'] }} id="sonar-input-8d3c22d334"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-ea8cafd287" class="visually-hidden">sonar input ea8cafd287</label>
<input type=text name=PARCELtgtnotes maxlength=3 size=2 readonly value={{ $pct_array['parcel_notes'] }} id="sonar-input-ea8cafd287"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
<tr>
<th scope="col"></th>
<th scope="col">Dollars</th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-8b6c7add91" class="visually-hidden">sonar input 8b6c7add91</label>
<input type=text name=ALLtgtdlr maxlength=3 size=2 readonly value={{ $pct_array['all_dollars'] }} id="sonar-input-8b6c7add91"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-fcd53e4974" class="visually-hidden">sonar input fcd53e4974</label>
<input type=text name=LTLtgtdlr maxlength=3 size=2 readonly value={{ $pct_array['ltl_dollars'] }} id="sonar-input-fcd53e4974"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-379ed77e4a" class="visually-hidden">sonar input 379ed77e4a</label>
<input type=text name=PARCELtgtdlr maxlength=3 size=2 readonly value={{ $pct_array['parcel_dollars'] }} id="sonar-input-379ed77e4a"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
<tr class="border-bottom: 1px solid black;">
<th scope="col"></th>
<th scope="col">Weight</th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-ada5156033" class="visually-hidden">sonar input ada5156033</label>
<input type=text name=ALLtgtwgt maxlength=3 size=2 readonly value={{ $pct_array['all_weight'] }} id="sonar-input-ada5156033"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-aefaf4ca2b" class="visually-hidden">sonar input aefaf4ca2b</label>
<input type=text name=LTLtgtwgt maxlength=3 size=2 readonly value={{ $pct_array['ltl_weight'] }} id="sonar-input-aefaf4ca2b"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col" class="text-right" style="width:20px"><label for="sonar-input-2da53b6d4f" class="visually-hidden">sonar input 2da53b6d4f</label>
<input type=text name=PARCELtgtwgt maxlength=3 size=2 readonly value={{ $pct_array['parcel_weight'] }} id="sonar-input-2da53b6d4f"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
<tr class="border-bottom: 1px solid black;">
<th scope="col" style="background-color:grey" colspan=19></th>
</tr>
</thead>
<tbody style="border: 1px solid black;">
@foreach($ICM711M as $key=>$val)
<tr>
<td>{{ date('Y-m-d',strtotime($val->AVDATE)) }}</td>
<td class="text-left">Deliv Notes</td>
<td class="text-right">{{$val->AVANOTESCL}}</td>
<td class="text-right">{{$val->AVANOTESCH}}</td>
<td class="text-right">{{$val->AVANOTESOP}}</td>
<td class="text-right" style="width:50px">
@if (number_format(($val->AVANOTESCL+$val->AVANOTESCH)/($val->AVANOTESCL+$val->AVANOTESCH+$val->AVANOTESOP)*100,0)<$pct_array['all_notes'])
<span style="color:red">
@endif
@if (number_format(($val->AVANOTESCL+$val->AVANOTESCH)/($val->AVANOTESCL+$val->AVANOTESCH+$val->AVANOTESOP)*100,0)>=$pct_array['all_notes'])
<span style="color:green">
@endif
{{ (($val->AVANOTESCL+$val->AVANOTESCH+$val->AVANOTESOP)!='0'?number_format(($val->AVANOTESCL+$val->AVANOTESCH)/($val->AVANOTESCL+$val->AVANOTESCH+$val->AVANOTESOP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">{{$val->AVLNOTESCL}}</td>
<td class="text-right">{{$val->AVLNOTESCH}}</td>
<td class="text-right">{{$val->AVLNOTESOP}}</td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVLNOTESCL+$val->AVLNOTESCH)/($val->AVLNOTESCL+$val->AVLNOTESCH+$val->AVLNOTESOP)*100,0)<$pct_array['ltl_notes'])
<span style="color:red">
@endif
@if (number_format(($val->AVLNOTESCL+$val->AVLNOTESCH)/($val->AVLNOTESCL+$val->AVLNOTESCH+$val->AVLNOTESOP)*100,0)>=$pct_array['ltl_notes'])
<span style="color:green">
@endif
{{ (($val->AVLNOTESCL+$val->AVLNOTESCH+$val->AVLNOTESOP)!='0'?number_format(($val->AVLNOTESCL+$val->AVLNOTESCH)/($val->AVLNOTESCL+$val->AVLNOTESCH+$val->AVLNOTESOP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">{{$val->AVPNOTESCL}}</td>
<td class="text-right">{{$val->AVPNOTESCH}}</td>
<td class="text-right">{{$val->AVPNOTESOP}}</td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVPNOTESCL+$val->AVPNOTESCH)/($val->AVPNOTESCL+$val->AVPNOTESCH+$val->AVPNOTESOP)*100,0)<$pct_array['parcel_notes'])
<span style="color:red">
@endif
@if (number_format(($val->AVPNOTESCL+$val->AVPNOTESCH)/($val->AVPNOTESCL+$val->AVPNOTESCH+$val->AVPNOTESOP)*100,0)>=$pct_array['parcel_notes'])
<span style="color:green">
@endif
{{ (($val->AVPNOTESCL+$val->AVPNOTESCH+$val->AVPNOTESOP)!='0'?number_format(($val->AVPNOTESCL+$val->AVPNOTESCH)/($val->AVPNOTESCL+$val->AVPNOTESCH+$val->AVPNOTESOP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">{{$val->AVINOTESCL}}</td>
<td class="text-right">{{$val->AVINOTESOP}}</td>
</tr>
<tr>
<td></td>
<td class="text-left">Dollars</td>
<td class="text-right">${{number_format($val->AVADLRCL,0)}}</td>
<td class="text-right">${{number_format($val->AVADLRCH,0)}}</td>
<td class="text-right">${{number_format($val->AVADLROP,0)}}</td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVADLRCL+$val->AVADLRCH)/($val->AVADLRCL+$val->AVADLRCH+$val->AVADLROP)*100,0)<$pct_array['all_dollars'])
<span style="color:red">
@endif
@if (number_format(($val->AVADLRCL+$val->AVADLRCH)/($val->AVADLRCL+$val->AVADLRCH+$val->AVADLROP)*100,0)>=$pct_array['all_dollars'])
<span style="color:green">
@endif
{{ (($val->AVADLRCL+$val->AVADLRCH+$val->AVADLROP)!='0'?number_format(($val->AVADLRCL+$val->AVADLRCH)/($val->AVADLRCL+$val->AVADLRCH+$val->AVADLROP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">${{number_format($val->AVLDLRCL,0)}}</td>
<td class="text-right">${{number_format($val->AVLDLRCH,0)}}</td>
<td class="text-right">${{number_format($val->AVLDLROP,0)}}</td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVLDLRCL+$val->AVLDLRCH)/($val->AVLDLRCL+$val->AVLDLRCH+$val->AVLDLROP)*100,0)<$pct_array['ltl_dollars'])
<span style="color:red">
@endif
@if (number_format(($val->AVLDLRCL+$val->AVLDLRCH)/($val->AVLDLRCL+$val->AVLDLRCH+$val->AVLDLROP)*100,0)>=$pct_array['ltl_dollars'])
<span style="color:green">
@endif
{{ (($val->AVLDLRCL+$val->AVLDLRCH+$val->AVLDLROP)!='0'?number_format(($val->AVLDLRCL+$val->AVLDLRCH)/($val->AVLDLRCL+$val->AVLDLRCH+$val->AVLDLROP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">${{number_format($val->AVPDLRCL,0)}}</td>
<td class="text-right">${{number_format($val->AVPDLRCH,0)}}</td>
<td class="text-right">${{number_format($val->AVPDLROP,0)}}</td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVPDLRCL+$val->AVPDLRCH)/($val->AVPDLRCL+$val->AVPDLRCH+$val->AVPDLROP)*100,0)<$pct_array['parcel_dollars'])
<span style="color:red">
@endif
@if (number_format(($val->AVPDLRCL+$val->AVPDLRCH)/($val->AVPDLRCL+$val->AVPDLRCH+$val->AVPDLROP)*100,0)>=$pct_array['parcel_dollars'])
<span style="color:green">
@endif
{{ (($val->AVPDLRCL+$val->AVPDLRCH+$val->AVPDLROP)!='0'?number_format(($val->AVPDLRCL+$val->AVPDLRCH)/($val->AVPDLRCL+$val->AVPDLRCH+$val->AVPDLROP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">${{number_format($val->AVIDLRCL,0)}}</td>
<td class="text-right">${{number_format($val->AVIDLROP,0)}}</td>
</tr>
<tr>
<td></td>
<td class="text-left">Weight</td>
<td class="text-right">{{number_format($val->AVAWGTCL,0)}}</td>
<td class="text-right">{{number_format($val->AVAWGTCH,0)}}</td>
<td class="text-right"><a href="./whsePerfDetails?for=a&date={{ date('Y-m-d',strtotime($val->AVDATE)) }}">{{number_format($val->AVAWGTOP,0)}}</a></td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVAWGTCL+$val->AVAWGTCH)/($val->AVAWGTCL+$val->AVAWGTCH+$val->AVAWGTOP)*100,0)<$pct_array['all_weight'])
<span style="color:red">
@endif
@if (number_format(($val->AVAWGTCL+$val->AVAWGTCH)/($val->AVAWGTCL+$val->AVAWGTCH+$val->AVAWGTOP)*100,0)>=$pct_array['all_weight'])
<span style="color:green">
@endif
{{ (($val->AVAWGTCL+$val->AVAWGTCH+$val->AVAWGTOP)!='0'?number_format(($val->AVAWGTCL+$val->AVAWGTCH)/($val->AVAWGTCL+$val->AVAWGTCH+$val->AVAWGTOP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">{{number_format($val->AVLWGTCL,0)}}</td>
<td class="text-right">{{number_format($val->AVLWGTCH,0)}}</td>
<td class="text-right"><a href="./whsePerfDetails?for=l&date={{ date('Y-m-d',strtotime($val->AVDATE)) }}">{{number_format($val->AVLWGTOP,0)}}</a></td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVLWGTCL+$val->AVLWGTCH)/($val->AVLWGTCL+$val->AVLWGTCH+$val->AVLWGTOP)*100,0)<$pct_array['ltl_weight'])
<span style="color:red">
@endif
@if (number_format(($val->AVLWGTCL+$val->AVLWGTCH)/($val->AVLWGTCL+$val->AVLWGTCH+$val->AVLWGTOP)*100,0)>=$pct_array['ltl_weight'])
<span style="color:green">
@endif
{{ (($val->AVLWGTCL+$val->AVLWGTCH+$val->AVLWGTOP)!='0'?number_format(($val->AVLWGTCL+$val->AVLWGTCH)/($val->AVLWGTCL+$val->AVLWGTCH+$val->AVLWGTOP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">{{number_format($val->AVPWGTCL,0)}}</td>
<td class="text-right">{{number_format($val->AVPWGTCH,0)}}</td>
<td class="text-right"><a href="./whsePerfDetails?for=p&date={{ date('Y-m-d',strtotime($val->AVDATE)) }}">{{number_format($val->AVPWGTOP,0)}}</a></td>
<td class="text-right" style="width:20px">
@if (number_format(($val->AVPWGTCL+$val->AVPWGTCH)/($val->AVPWGTCL+$val->AVPWGTCH+$val->AVPWGTOP)*100,0)<$pct_array['parcel_weight'])
<span style="color:red">
@endif
@if (number_format(($val->AVPWGTCL+$val->AVPWGTCH)/($val->AVPWGTCL+$val->AVPWGTCH+$val->AVPWGTOP)*100,0)>=$pct_array['parcel_weight'])
<span style="color:green">
@endif
{{ (($val->AVPWGTCL+$val->AVPWGTCH+$val->AVPWGTOP)!='0'?number_format(($val->AVPWGTCL+$val->AVPWGTCH)/($val->AVPWGTCL+$val->AVPWGTCH+$val->AVPWGTOP)*100,0):'0') }}%
</span>
</td>
<td></td>
<td class="text-right">{{number_format($val->AVIWGTCL,0)}}</td>
<td class="text-right"><a href="./whsePerfDetails?for=i&date={{ date('Y-m-d',strtotime($val->AVDATE)) }}">{{number_format($val->AVIWGTOP,0)}}</a></td>
</tr>
<tr>
<td style="background-color:grey" colspan=19></td>
</tr>
@endforeach
</tbody>
</table>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
// var myTable = $('#datatablesSimple1').DataTable({
// "aaSorting": false,
// //"lengthMenu": [ [10,25,50,-1], [10,25,50,"All"] ],
// "sPaginationType": "full_numbers",
// "dom": 'Bfrtip', // Needs button container
// "responsive": true,
// "orderCellsTop": false,
// //"order": [ [0, 'desc'] ],
// //"pageLength": 30,
// "columnDefs": [
// {
// orderable: false,
// searchable: false,
// targets: -1
// }
// ],
// // MAK
// "initComplete": function() {
// // Apply initial filter for Active records only
// //this.api().column(4).search('^Active$', true, false).draw();
// }
// });
// MAK
// Status filter dropdown change event
// $('#date_in').on('change', function() {
// });
});
</script>
@endsection
@@ -0,0 +1,91 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Solon Sentinel Portal - Warehouse Performance Metrics
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Warehouse Performance Metrics Details dated {{$date_in}} for {{ $for="a"?"All":$for="l"?"LTL":$for="p"?"Parcel":$for="i"?"I&O":"" }}</h1>
<div class="card mb-4">
<!-- Add to class the justify content between and align items center -->
<div class="card-header d-flex justify-content-between align-items-center">
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover table-sm" id="datatablesSimple5" style="width:60%">
<thead>
<tr>
<th class="text-center">Picker</th>
<th class="text-center">Customer</th>
<th class="text-center">Dollars</th>
<th class="text-center">Weight</th>
<th class="text-center">Source</th>
<th class="text-center">Interco</th>
<th class="text-center">Mode</th>
<th class="text-center">Type</th>
</tr>
</thead>
<tbody>
<!-- a5macpkr,a4shshnm,sum(dollarvalue) as dollarvalue,sum(weight) as weight,max(source) as source -->
@foreach($perfDetails as $key=>$val)
<tr>
<td class="text-center">{{ $val->A5MACPKR }}</td>
<td class="text-left">{{ $val->A4SHSHNM }}</td>
<td class="text-right">$ {{number_format($val->DOLLARVALUE,2)}}</td>
<td class="text-right">{{number_format($val->WEIGHT,2)}}</td>
<td class="text-center">{{$val->SOURCE}}</td>
<td class="text-center">{{$val->INTERCO}}</td>
<td class="text-center">{{$val->A4SHIPVIA1}}</td>
<td class="text-center">{{trim($val->A4SHIPTYPE)=="SmallPack"?"Parcel":$val->A4SHIPTYPE}}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// DataTable init
var myTable = $('#datatablesSimple5').DataTable({
"aaSorting": false,
"lengthMenu": [ [10,25,50,-1], [10,25,50,"All"] ],
"sPaginationType": "full_numbers",
"dom": 'Bfrtip', // Needs button container
"responsive": true,
"orderCellsTop": true,
"order": [ [4, 'asc'] ],
"pageLength": 30,
"columnDefs": [
{
orderable: true,
searchable: true,
targets: -1
}
],
// MAK
"initComplete": function() {
// Apply initial filter for Active records only
//this.api().column(4).search('^Active$', true, false).draw();
}
});
// MAK
// Status filter dropdown change event
// $('#date_in').on('change', function() {
// });
});
</script>
@endsection
@@ -0,0 +1,76 @@
@extends('m3::liberty-theme.layout.main')
@section('title')
Sentinel Doc Archive
@endsection
@section('content')
<!-- /.row -->
<div class="container-fluid px-4">
<h1 class="mt-4">Warehouse Performance Metrics</h1>
<div class="card mb-4">
<div class="card-header">
<div class="row">
<div class="col-12 mt-1">
<form class="needs-validation" enctype="multipart/form-data" method="GET" action="{{ route("m3.whsePerfShow") }}">
{{-- @csrf --}}
<div class="mb-2 row">
<label for="date" class="col-sm-1 col-form-label">Select Year and Month</label>
<div class="col-sm-1">
<select aria-label="Date In Yr" name="date_in_yr" id="date_in_yr">
@for($x=date('Y',strtotime(date('Y').'- 5 years'));$x<date('Y');$x++)
<option value={{$x}}>{{$x}}</option>
@endfor
<option value={{date('Y')}} SELECTED>{{date('Y')}}</option>
</select>
<select name="date_in_mth" id="date_in_mth">
@for($x=1;$x<=12;$x++)
@if($x==date('m'))
<option value={{str_pad($x,2,"0",STR_PAD_LEFT)}} SELECTED>{{str_pad($x,2,"0",STR_PAD_LEFT)}}</option>
@else
<option value={{str_pad($x,2,"0",STR_PAD_LEFT)}}>{{str_pad($x,2,"0",STR_PAD_LEFT)}}</option>
@endif
@endfor
</select>
</div>
</div>
<label for="sonar-input-54ed629414" class="visually-hidden">sonar input 54ed629414</label>
<input type=submit class="btn btn-primary" value="Display table" id="sonar-input-54ed629414">
&nbsp;&nbsp;
<button type="button" class="btn btn-warning" id="exportExcel">Download to Excel</button>
</form>
{{-- Form for Export --}}
<form enctype="multipart/form-data" method="POST" action="{{ route("m3.whsePerfExcel") }}" id="exporttoExcelForm">
@csrf
<input type="hidden" name="date_in_yr" id="date_in_yr1" value="">
<input type="hidden" name="date_in_mth" id="date_in_mth1" value="">
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
$(document).on('click','#exportExcel', function () {
var date_in_yr = $('#date_in_yr').val().trim();
var date_in_mth = $('#date_in_mth').val().trim();
date_in_yr = $("#date_in_yr").val();
date_in_mth = $("#date_in_mth").val();
$("#date_in_yr1").val(date_in_yr);
$("#date_in_mth1").val(date_in_mth);
$("#exporttoExcelForm").submit();
});
});
</script>
@endsection
@@ -0,0 +1,8 @@
<div class="container-fluid px-4">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; MPBA</div>
<div>
<span id="currentWHSPAN">{{ Str::upper($WDWNAM) }}</span> ( {{ env('APP_ENV_FOOTER') }} )
</div>
</div>
</div>
@@ -0,0 +1,146 @@
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
@if($execUser!='Y' )
@if($csr!="Y" )
<a class="nav-link" href="/">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Dashboard
</a>
{{-- <a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#collapseLayouts" aria-expanded="true" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="fas fa-users"></i></div>
{{ trans('cruds.userManagement.title') }}
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a> --}}
<a class="nav-link {{ request()->is('replenishmentSettings') || request()->is('replenishmentSettings/*') ? 'active' : '' }}"
href="{{ route('m3.replenishmentSettings.index') }}">
<i class="fa-fw fas fa-briefcase mr-1"></i>
Replenishment settings
</a>
<a class="nav-link {{ request()->is('M3ErrorsDisplay') || request()->is('M3ErrorsDisplay/*') ? 'active' : '' }}"
href="{{ route('m3.M3ErrorsDisplay.index') }}">
<i class="fa-fw fas fa-briefcase mr-1"></i>
Transaction log for M3/Sentinel interface
</a>
@endif
<a class="nav-link {{ request()->is('M3GetPDFFromCache') || request()->is('M3GetPDFFromCache/*') ? 'active' : '' }}"
href="{{ route('m3.M3GetPDFFromCache.index') }}">
<i class="fa-fw fas fa-briefcase mr-1"></i>
Sentinel Doc Archive
</a>
@if($csr!="Y")
<a class="nav-link {{ request()->is('userControl') || request()->is('userControl/*') ? 'active' : '' }}"
href="{{ route('m3.userControl') }}">
<i class="fa-fw fas fa-briefcase mr-1"></i>
User Control
</a>
@if($power_users=='Y' || $admin_users=='Y')
<a class="nav-link {{ request()->is('carrierMaint') || request()->is('carrierMaint/*') ? 'active' : '' }}"
href="{{ route('m3.carrierMaint') }}">
<i class="fa-fw fas fa-briefcase mr-1"></i>
Carrier Master Maintenance
</a>
@endif
<a class="nav-link {{ request()->is('palletQty') || request()->is('palletQty/*') ? 'active' : '' }}"
href="{{ route('m3.palletQty') }}">
<i class="fa-fw fas fa-briefcase mr-1"></i>
ERP/TMS Part Data
</a>
<a class="nav-link {{ request()->is('M3Delivery') || request()->is('M3Delivery/*') ? 'active' : '' }}"
href="{{ route('m3.M3Delivery') }}">
<i class="fa-fw fas fa-briefcase mr-1"></i>
M3 Delivery Methods
</a>
<a class="nav-link {{ request()->is('OrderLinesOfClosedOrder') || request()->is('OrderLinesOfClosedOrder/*') ? 'active' : '' }}"
href="{{ route('m3.OrderLinesOfClosedOrder') }}">
<i class="fa-fw fas fa-file-excel mr-1"></i>
Daily Closed order lines report
</a>
@if($power_users=='Y' || $admin_users=='Y')
<a class="nav-link {{ request()->is('UserPickingStats4') || request()->is('UserPickingStats4/*') ? 'active' : '' }}"
href="{{ route('m3.UserPickingStats4') }}">
<i class="fa-fw fas fa-user-friends mr-1"></i>
Daily User Efficiency
</a>
<a class="nav-link {{ request()->is('UserPickingStats5') || request()->is('UserPickingStats5/*') ? 'active' : '' }}"
href="{{ route('m3.UserPickingStats5') }}">
<i class="fa-fw fas fa-chart-bar mr-1"></i>
Graph User Efficiency
</a>
<!-- #732 -->
<a class="nav-link {{ request()->is('pendingClosure') || request()->is('pendingClosure/*') ? 'active' : '' }}"
href="{{ route('m3.pendingClosure') }}">
<i class="fa-fw fas fa-chart-bar mr-1"></i>
Truck pending closure in M3
</a>
@endif
{{-- Distribution whs addresses --}}
<a class="nav-link {{ request()->is('ship-to') || request()->is('ship-to/*') ? 'active' : '' }}" href="{{ url('ship-to') }}">
<i class="fa-fw fas fa-file-excel mr-1"></i>
Distribution whs addresses
</a>
{{-- KPI execSummaryChart --}}
<a class="nav-link {{ request()->is('execsummary') || request()->is('execsummary/*') ? 'active' : '' }}" href="{{ url('execsummary') }}">
<i class="fa-fw fas fa-chart-bar mr-1"></i>
KPI1 bar
</a>
<a class="nav-link {{ request()->is('execsummaryline') || request()->is('execsummaryline/*') ? 'active' : '' }}" href="{{ url('execsummaryline') }}">
<i class="fa-fw fas fa-chart-line mr-1"></i>
KPI1 line
</a>
{{-- KPI2 OTTC --}}
<a class="nav-link {{ request()->is('whsePerf') || request()->is('whsePerf/*') ? 'active' : '' }}"
href="{{ route('m3.whsePerf') }}">
<i class="fa-fw fas fa-chart-bar mr-1"></i>
OTTC
</a>
{{-- Scan Boxes to Pallet --}}
{{-- <a class="nav-link {{ request()->is('BoxPackToPallet') || request()->is('BoxPackToPallet/*') ? 'active' : '' }}"
href="{{ route('m3.BoxPackToPallet') }}">
<i class="fa-fw fas fa-chart-bar mr-1"></i>
Scan Boxes to Pallet
</a> --}}
{{-- Sentinel Home --}}
<a class="nav-link " href="{{ env("APP_URL") }}/php/SentinelHome.php">
<i class="fa-fw fas fa-chart-bar mr-1"></i>Sentinel Home</a>
@endif
@endif {{-- Exec User --}}
@if ($execUser=='Y')
<a class="nav-link " href="{{ env("APP_URL") }}/php/SentinelHomeexec.php">
<i class="fa-fw fas fa-chart-bar mr-1"></i>Sentinel Home</a>
@endif
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Logged in as:</div>
{{ m3_user() }}
{{-- @if($execUser=='Y')
<a class="link-primary" href="/userprofile">{{ m3_user() }}</a>
@else
{{ m3_user() }}
@endif --}}
</div>
</nav>
</div>
@@ -0,0 +1,67 @@
<form id="frmAdd">
<div class="modal" id="M3DeliveryAdd" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Add</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="M3DeliveryAddData">
<input type="hidden" id="addAVCO" name="addAVCO" value="{{$power_user->R428CO}}">
<input type="hidden" id="addAVPLANT" name="addAVPLANT" value="{{$power_user->R428PL}}">
<input type="hidden" id="addAVWHS" name="addAVWHS" value="{{$power_user->R428WH}}">
<table role="presentation" class="table table-condensed" >
<thead>
</thead>
<tbody>
<tr>
<td><b>Delivery Method</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="addAVDELMETH" class="visually-hidden">addAVDELMETH</label>
<input type="text" maxlength="4" length="4" class="myinput" name="addAVDELMETH" id="addAVDELMETH">
</td>
</tr>
<tr>
<td><b>Ship Via</b></td> <!-- ALPHA -->
<td class="text-right">
<select aria-label="Addavshpvia" id="addAVSHPVIA" name="addAVSHPVIA">
<option value="">Select Ship Via</option>
@foreach($shipvia as $key=>$val)
<option value="{{$val->AXCODE}}">{{$val->AXCODE}} - {{$val->AXDESC}}</option>
@endforeach
</select>
</td>
</tr>
<tr>
<td><b>Sentinel Route</b></td> <!-- ALPHA -->
<td class="text-right">
<select aria-label="Addavshsrt" id="addAVSHSRT" name="addAVSHSRT">
<option value=" "></option>
<option value="GR">GR</option>
<option value="PU">PU</option>
</select>
</td>
</tr>
<tr>
<td><b>International Code</b></td> <!-- ALPHA -->
<td class="text-right">
<select aria-label="Addavshorcl" id="addAVSHORCL" name="addAVSHORCL">
<option value=" " selected></option>
<option value="Y">002 - International</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeAdd">Close</button>
<button type="button" id="submitM3DeliveryAdd" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,72 @@
<form id="frmEdit">
<div class="modal" id="M3DeliveryEdit" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Edit</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="M3DeliveryEditData">
<input type="hidden" id="AVCO" name="AVCO" value="{{$power_user->R428CO}}">
<input type="hidden" id="AVPLANT" name="AVPLANT" value="{{$power_user->R428PL}}">
<input type="hidden" id="AVWHS" name="AVWHS" value="{{$power_user->R428WH}}">
<table role="presentation" class="table table-condensed">
<tbody>
<tr>
<td><b>Delivery Method</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_AVDELMETH" id="OLD_AVDELMETH">
<label for="AVDELMETH" class="visually-hidden">AVDELMETH</label>
<input type="text" maxlength="4" length="4" class="myinput" name="AVDELMETH" id="AVDELMETH" readonly>
</td>
</tr>
<tr>
<td><b>Ship Via</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="OLD_AVSHPVIA" class="visually-hidden">OLD AVSHPVIA</label>
<input type="hidden" name="OLD_AVSHPVIA" id="OLD_AVSHPVIA">
<select aria-label="Avshpvia" id="AVSHPVIA" name="AVSHPVIA">
<option value="">Select Ship Via</option>
@foreach($shipvia as $key=>$val)
<option value="{{$val->AXCODE}}">{{$val->AXCODE}} - {{$val->AXDESC}}</option>
@endforeach
</select>
</td>
</tr>
<tr>
<td><b>Sentinel Route</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="OLD_AVSHSRT" class="visually-hidden">OLD AVSHSRT</label>
<input type="hidden" name="OLD_AVSHSRT" id="OLD_AVSHSRT">
<select aria-label="Avshsrt" id="AVSHSRT" name="AVSHSRT">
<option value=" "></option>
<option value="GR">GR</option>
<option value="PU">PU</option>
</select>
</td>
</tr>
<tr>
<td><b>International Code</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="OLD_AVSHORCL" class="visually-hidden">OLD AVSHORCL</label>
<input type="hidden" name="OLD_AVSHORCL" id="OLD_AVSHORCL">
<select aria-label="Avshorcl" id="AVSHORCL" name="AVSHORCL">
<option value=" " selected></option>
<option value="Y">002 - International</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeEdit">Close</button>
<button type="button" id="submitM3DeliveryEdit" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,18 @@
<div class="modal" tabindex="-1" id="blank-modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body blank-body">
</div>
<div class="modal-footer">
<a style="cursor:pointer" id="blank-close" class="btn btn-secondary">Close</a>
<a style="cursor:pointer" id="blank-submit" class="btn btn-primary">Save changes</a>
</div>
</div>
</div>
</div>
@@ -0,0 +1,81 @@
<form id="frmAdd">
<div class="modal" id="carrierAdd" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Carrier Master Add</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="carrierAddData">
<table role="presentation" class="table table-condensed" >
<thead>
</thead>
<tbody>
<tr>
<td><b>Carrier Number</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="addCANUM" class="visually-hidden">addCANUM</label>
<input type="text" maxlength="5" class="myinput" name="addCANUM" id="addCANUM" required>
</td>
</tr>
<tr>
<td><b>Carrier Name</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="addCANAM" class="visually-hidden">addCANAM</label>
<input type="text" maxlength="30" class="myinput" name="addCANAM" id="addCANAM">
</td>
</tr>
<tr>
<td><b>2ship Carrier Code</b></td> <!-- NUMERIC -->
<td class="text-right">
<label for="addTWOSHIPCARRIERCODE" class="visually-hidden">addTWOSHIPCARRIERCODE</label>
<input type="number" min="1" max="999" increment="1" pattern="[0-9]{3}" class="myinput" name="addTWOSHIPCARRIERCODE" id="addTWOSHIPCARRIERCODE"
onkeypress='return ((event.charCode >= 48 && event.charCode <= 57) || (event.charCode == 32))'>
</td>
</tr>
<tr>
<td><b>Parcel Carrier Code</b></td> <!-- Switch -->
<td class="text-right">
LTL
<div class="col-sm-1 form-check form-check-inline form-switch">
<label for="addPARCELCARRIERCODE" class="visually-hidden">addPARCELCARRIERCODE</label>
<input type="checkbox" class="form-check-input" role="switch" id="addPARCELCARRIERCODE" name="addPARCELCARRIERCODE" data-on="X" data-off="" aria-checked="false">
Parcel
</div>
</td>
</tr>
<tr>
<td><b>ERP Carrier Code</b></td> <!-- ALPHA -->
<td class="text-right">
<!--#553 <label for="addCASPR10A01" class="visually-hidden">addCASPR10A01</label>
<input type="number" min="1" max="999999" increment="1" pattern="[0-9]{6}" class="myinput" name="addCASPR10A01" id="addCASPR10A01"
onkeypress='return ((event.charCode >= 48 && event.charCode <= 57) || (event.charCode == 32))'> -->
<label for="addCASPR10A01" class="visually-hidden">addCASPR10A01</label>
<input type="text" maxlength="10"class="myinput" name="addCASPR10A01" id="addCASPR10A01" required>
</td>
</tr>
<tr>
<td><b>Timing of M3 closing</b></td> <!-- Switch -->
<td class="text-right">
Overnight
<div class="col-sm-1 form-check form-check-inline form-switch">
<label for="addCASPR1A01" class="visually-hidden">addCASPR1A01</label>
<input type="checkbox" class="form-check-input" role="switch" id="addCASPR1A01" name="addCASPR1A01" data-on="Y" data-off="" aria-checked="false">
</div>
When closing truck
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeAdd">Close</button>
<button type="button" id="submitCarrierAdd" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,85 @@
<form id="frmEdit">
<div class="modal" id="carrierEdit" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Carrier Master Edit</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="carrierEditData">
<table role="presentation" class="table table-condensed">
<tbody>
<tr>
<td><b>Carrier Number</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_CANUM" id="OLD_CANUM">
<label for="CANUM" class="visually-hidden">CANUM</label>
<input type="text" maxlength="5" class="myinput" name="CANUM" id="CANUM" readonly>
</td>
</tr>
<tr>
<td><b>Carrier Name</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_CANAM" id="OLD_CANAM">
<label for="CANAM" class="visually-hidden">CANAM</label>
<input type="text" maxlength="30" class="myinput" name="CANAM" id="CANAM">
</td>
</tr>
<tr>
<td><b>2ship Carrier Code</b></td> <!-- NUMERIC -->
<td class="text-right">
<input type="hidden" name="OLD_TWOSHIPCARRIERCODE" id="OLD_TWOSHIPCARRIERCODE">
<label for="TWOSHIPCARRIERCODE" class="visually-hidden">TWOSHIPCARRIERCODE</label>
<input type="number" min="1" max="999" step="1" pattern="[0-9]{3}" class="myinput" name="TWOSHIPCARRIERCODE" id="TWOSHIPCARRIERCODE"
onkeypress='return ((event.charCode >= 48 && event.charCode <= 57) || (event.charCode == 32))' required>
</td>
</tr>
<tr>
<td><b>Parcel Carrier Code</b></td> <!-- Switch -->
<td class="text-right">
LTL
<div class="col-sm-1 form-check form-check-inline form-switch">
<input type="hidden" name="OLD_PARCELCARRIERCODE" id="OLD_PARCELCARRIERCODE">
<label for="PARCELCARRIERCODE" class="visually-hidden">PARCELCARRIERCODE</label>
<input type="checkbox" class="form-check-input" role="switch" id="PARCELCARRIERCODE" name="PARCELCARRIERCODE" data-on="X" data-off="" aria-checked="false">
Parcel
</div>
</td>
</tr>
<tr>
<td><b>ERP Carrier Code</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_CASPR10A01" id="OLD_CASPR10A01">
<!--#553 <label for="CASPR10A01" class="visually-hidden">CASPR10A01</label>
<input type="number" min="1" max="999999" step="1" class="myinput" pattern="[0-9]{6}" name="CASPR10A01" id="CASPR10A01"
onkeypress='return ((event.charCode >= 48 && event.charCode <= 57) || (event.charCode == 32))' required> -->
<label for="CASPR10A01" class="visually-hidden">CASPR10A01</label>
<input type="text" maxlength="10" class="myinput" name="CASPR10A01" id="CASPR10A01" required>
</td>
</tr>
<tr>
<td><b>Timing of M3 closing</b></td> <!-- Switch -->
<td class="text-right">
Overnight
<div class="col-sm-1 form-check form-check-inline form-switch">
<input type="hidden" name="OLD_CASPR1A01" id="OLD_CASPR1A01">
<label for="CASPR1A01" class="visually-hidden">CASPR1A01</label>
<input type="checkbox" class="form-check-input" role="switch" id="CASPR1A01" name="CASPR1A01" data-on="Y" data-off="" aria-checked="false">
</div>
When closing truck
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeEdit">Close</button>
<button type="button" id="submitCarrierEdit" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,68 @@
<form id="frmAdd">
<div class="modal" id="qtyAdd" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">ERP/TMS Part Data Add</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="qtyAddData">
<table role="presentation" class="table table-condensed" >
<thead>
</thead>
<tbody>
<tr>
<td><label for="AT9DPW" class="col-form-label"><b>Div-Plt-Whs:</b></label></td>
<td>
<div class="mb-3">
<select aria-label="Addat9dpw" class="form-select-sm" id="addAT9DPW"
@if($power_user->R428PWRUSR=="N")
disabled
@endif
>
@foreach ($IC670M as $key => $IC670MR)
<option selected value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}"
data-AT9CO="{{ trim($IC670MR->WDCO) }}" data-AT9PLT="{{ trim($IC670MR->WDPL) }}" data-AT9WHS="{{ trim($IC670MR->WDWHS) }}"
data-AT9DPW="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}">
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
</td>
</tr>
<tr>
<td><b>Part</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="addAT9PART" class="visually-hidden">addAT9PART</label>
<input type="text" maxlength="15" class="myinput" name="addAT9PART" id="addAT9PART" required>
</td>
</tr>
<tr>
<td><b>Pallet Qty</b></td> <!-- NUMERIC -->
<td class="text-right">
<label for="addAT9QTY" class="visually-hidden">addAT9QTY</label>
<input type="number" min="1" max="999999999" increment=1 class="myinput" name="addAT9QTY" id="addAT9QTY" required>
</td>
</tr>
<tr>
<td><b>Hazardous Material</b></td> <!-- ALPHA -->
<td class="text-right">
<label for="addAT9WRN" class="visually-hidden">addAT9WRN</label>
<input type="text" maxlength="5" class="myinput" name="addAT9WRN" id="addAT9WRN">
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeAdd">Close</button>
<button type="button" id="submitQtyAdd" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,66 @@
<form id="frmEdit">
<div class="modal" id="qtyEdit" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">ERP/TMS Part Data Edit</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="qtyEditData">
<table role="presentation" class="table table-condensed">
<tbody>
<tr>
<td><label for="AT9DPW" class="col-form-label"><b>Div-Plt-Whs:</b></label></td>
<td>
<input type="hidden" name="USERDPW" id="USERDPW">
<div class="mb-3">
<input type="hidden" name="OLD_AT9DPW" id="OLD_AT9DPW">
<select class="form-select-sm" name="AT9DPW" id="AT9DPW" required>
@foreach ($IC670M as $key => $IC670MR)
<option selected value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}"
data-AT9CO="{{ trim($IC670MR->WDCO) }}" data-AT9PLT="{{ trim($IC670MR->WDPL) }}" data-AT9WHS="{{ trim($IC670MR->WDWHS) }}" >
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
</td>
</tr>
<tr>
<td><b>Part</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_AT9PART" id="OLD_AT9PART">
<label for="AT9PART" class="visually-hidden">AT9PART</label>
<input type="text" maxlength="15" class="myinput" name="AT9PART" id="AT9PART" readonly>
</td>
</tr>
<tr>
<td><b>Pallet Qty</b></td> <!-- NUMERIC -->
<td class="text-right">
<input type="hidden" name="OLD_AT9QTY" id="OLD_AT9QTY">
<label for="AT9QTY" class="visually-hidden">AT9QTY</label>
<input type="number" min="1" max="999999999" increment=1 class="myinput" name="AT9QTY" id="AT9QTY" required>
</td>
</tr>
<tr>
<td><b>Hazardous Material</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_AT9WRN" id="OLD_AT9WRN">
<label for="AT9WRN" class="visually-hidden">AT9WRN</label>
<input type="text" maxlength="5" class="myinput" name="AT9WRN" id="AT9WRN">
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeEdit">Close</button>
<button type="button" id="submitQtyEdit" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,31 @@
<div class="modal" id="shipToCheckBox" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Address checker</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-group">
<div class="col-xs-5">
<label class="checkbox-inline">
<input type="checkbox" name="check1" id="check1" value="1"> Ignore address checker for all future releases of this order
</label>
</div>
</div>
<div class="form-group" style="clear: both; margin-top:20px;">
<div class="col-xs-5">
<label class="checkbox-inline">
<input type="checkbox" name="check2" id="check2" value="1"> Ignore address checker if the above address is re-used on a future order
</label>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" id= "submitShipToCheckBox" class="btn btn-primary">Submit</button>
</div>
</div>
</div>
</div>
@@ -0,0 +1,76 @@
<div class="modal" id="shipToEdit" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Ship to Edit</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="shipToEditData">
<table role="presentation" class="table table-condensed" >
<thead>
<tr>
<td></td>
<td class="text-center"><strong>Original</strong></td>
<td class="text-center"><strong>Current</strong></td>
<td class="text-center"><strong>New Values</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td><b>Name</b></td><!-- ALPHA -->
<td class="text-left smalltxt">{!! (isset($original->PSHNM)&&trim($original->PSHNM)!=''?trim($original->PSHNM):'') !!}</td>
<td class="text-left smalltxt">{!! (isset($order->SHSHNM)&&trim($order->SHSHNM)!=''?trim($order->SHSHNM):'') !!}</td>
<td class="text-left smalltxt">{!! (isset($order->SHSHNM)&&trim($order->SHSHNM)!=''?trim($order->SHSHNM):'') !!}</td>
</tr>
<tr>
<td><b>Address line 1</b></td> <!-- MAX -->
<td class="text-left smalltxt" id="ORIG_PSHA1">{!! (isset($original->PSHA1)&&trim($original->PSHA1)!=''?trim($original->PSHA1):'') !!}</td>
<td class="text-left smalltxt" id="OLD_SHSHA1">{!! (isset($order->SHSHA1)&&trim($order->SHSHA1)!=''?trim($order->SHSHA1):'') !!}</td>
<td class="text-right"><label for="sonar-input-deb2f9aedc" class="visually-hidden">SHSHA1</label>
<input maxlength="30" class="myinput toUpper" type="text" name="SHSHA1" value="{!! (isset($order->SHSHA1)&&trim($order->SHSHA1)!=''?trim($order->SHSHA1):' ') !!}" id="sonar-input-deb2f9aedc"></td>
</tr>
<tr>
<td><b>Address line 2</b></td> <!-- MAX -->
<td class="text-left smalltxt" id="ORIG_PSHA2">{!! (isset($original->PSHA2)&&trim($original->PSHA2)!=''?trim($original->PSHA2):'') !!}</td>
<td class="text-left smalltxt" id="OLD_SHSHA2">{!! (isset($order->SHSHA2)&&trim($order->SHSHA2)!=''?trim($order->SHSHA2):'') !!}</td>
<td class="text-right"><label for="sonar-input-bf4a0acc70" class="visually-hidden">SHSHA2</label>
<input maxlength="30" class="myinput toUpper" type="text" name="SHSHA2" value="{!! (isset($order->SHSHA2)&&trim($order->SHSHA2)!=''?trim($order->SHSHA2):' ') !!}" id="sonar-input-bf4a0acc70"></td>
</tr>
<tr>
<td><b>City</b></td> <!-- ALPHA MAX -->
<td class="text-left smalltxt" id="ORIG_PSHCI">{!! (isset($original->PSHCI)&&trim($original->PSHCI)!=''?trim($original->PSHCI):'') !!}</td>
<td class="text-left smalltxt" id="OLD_SHSHCI">{!! (isset($order->SHSHCI)&&trim($order->SHSHCI)!=''?trim($order->SHSHCI):'') !!}</td>
<td class="text-right"><label for="sonar-input-e043dfd88b" class="visually-hidden">sonar input e043dfd88b</label>
<input id="sonar-input-e043dfd88b" aria-label="Shshci" maxlength="17" onkeypress='return ((event.charCode >= 65 && event.charCode <= 90) || (event.charCode >= 97 && event.charCode <= 122) || (event.charCode == 32))' class="myinput toUpper" type="text" name="SHSHCI" value="{!! (isset($order->SHSHCI)&&trim($order->SHSHCI)!=''?trim($order->SHSHCI):' ') !!}"></td>
</tr>
<tr>
<td><b>State</b></td> <!-- ALPHA MAX -->
<td class="text-left smalltxt" id="ORIG_PSHST">{!! (isset($original->PSHST)&&trim($original->PSHST)!=''?trim($original->PSHST):'') !!}</td>
<td class="text-left smalltxt" id="OLD_SHSHST">{!! (isset($order->SHSHST)&&trim($order->SHSHST)!=''?trim($order->SHSHST):'') !!}</td>
<td class="text-right"><label for="sonar-input-967e1c005d" class="visually-hidden">sonar input 967e1c005d</label>
<input id="sonar-input-967e1c005d" aria-label="Shshst" maxlength="2" onkeypress='return ((event.charCode >= 65 && event.charCode <= 90) || (event.charCode >= 97 && event.charCode <= 122) || (event.charCode == 32))' class="myinput toUpper" type="text" name="SHSHST" value="{!! (isset($order->SHSHST)&&trim($order->SHSHST)!=''?trim($order->SHSHST):' ') !!}"></td>
<tr>
<td><b>Zip</b></td> <!-- MAX -->
<td class="text-left smalltxt" id="ORIG_PSHZP">{!! (isset($original->PSHZP)&&trim($original->PSHZP)!=''?trim($original->PSHZP):'') !!}</td>
<td class="text-left smalltxt" id="OLD_SHSHZP">{!! (isset($order->SHSHZP)&&trim($order->SHSHZP)!=''?trim($order->SHSHZP):'') !!}</td>
<td class="text-right"><label for="sonar-input-d755055c65" class="visually-hidden">SHSHZP</label>
<input maxlength="9" class="myinput toUpper" type="text" name="SHSHZP" value="{!! (isset($order->SHSHZP)&&trim($order->SHSHZP)!=''?trim($order->SHSHZP):' ') !!}" id="sonar-input-d755055c65"></td>
</tr>
<tr>
<td><b>Country</b></td> <!-- ALPHA MAX -->
<td class="text-left smalltxt">{!! (isset($original->PSHCT)&&trim($original->PSHCT)!=''?trim($original->PSHCT):'') !!}</td>
<td class="text-left smalltxt">{!! (isset($order->SHSHCT)&&trim($order->SHSHCT)!=''?trim($order->SHSHCT):'') !!}</td>
<td class="text-left smalltxt">{!! (isset($order->SHSHCT)&&trim($order->SHSHCT)!=''?trim($order->SHSHCT):'') !!}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal">Close</button>
<button type="button" id="submitShipToEdit" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
@@ -0,0 +1,252 @@
<form id="frmAdd">
<div class="modal" id="userAdd" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">User Add</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="userAddData">
<table role="presentation" class="table table-condensed">
<tbody>
<!-- R428DV R428PL R428WHS R428STS R428US R428FIRST R428FAMILY R428EMAIL R428EMPCDE R428ADMUSR R428PWRUSR -->
<tr>
<td>
<table role="presentation" class="table table-condensed">
<tr>
<input type="hidden" id="R428CO" name="R428CO">
<input type="hidden" id="R428PL" name="R428PL">
<input type="hidden" id="R428WH" name="R428WH">
<td><b>Status</b></td> <!-- Switch Active/Inactive -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-63da19b195" class="visually-hidden">R428STS</label>
<input class="form-check-input" type="checkbox" role="switch" name="R428STS" value="A" checked data-on="A" data-off="I" aria-checked="false" id="sonar-input-63da19b195">
</div>
</td>
</tr>
<tr>
<td><b>User profile</b></td> <!-- ALPHA -->
<td class="text-right"><label for="sonar-input-afd6168b6c" class="visually-hidden">R428US</label>
<input type="text" maxlength="10" class="myinput" oninput="this.value = this.value.toUpperCase()" name="R428US" required id="sonar-input-afd6168b6c"></td>
</tr>
<tr>
<td><b>First Name</b></td> <!-- ALPHA -->
<td class="text-right"><label for="sonar-input-9e6c6eaa8b" class="visually-hidden">R428FIRST</label>
<input type="text" maxlength="20" class="myinput" oninput="this.value = this.value.toUpperCase()" name="R428FIRST" required id="sonar-input-9e6c6eaa8b"></td>
</tr>
<tr>
<td><b>Family Name</b></td> <!-- ALPHA -->
<td class="text-right"><label for="sonar-input-22147e2614" class="visually-hidden">R428FAMILY</label>
<input type="text" maxlength="30" class="myinput" oninput="this.value = this.value.toUpperCase()" name="R428FAMILY" required id="sonar-input-22147e2614"></td>
</tr>
<tr>
<td><b>Email</b></td> <!-- ALPHA -->
<td class="text-right"><label for="sonar-input-a7fe91c914" class="visually-hidden">R428EMAIL</label>
<input type="text" maxlength="100" class="myinput" oninput="this.value = this.value.toLowerCase()" name="R428EMAIL" required id="sonar-input-a7fe91c914"></td>
</tr>
<tr>
<td><b>Employee code</b></td> <!-- MAX -->
<td class="text-right"><label for="sonar-input-8e3a421fd3" class="visually-hidden">R428EMPCDE</label>
<input type="number" min=0 max=9999 class="myinput" name="R428EMPCDE" value=0 required id="sonar-input-8e3a421fd3"></td>
</tr>
<tr>
<td><label for="R428DPW1" class="col-form-label"><b>Div-Plt-Whs:</b></label></td>
<td>
<div class="mb-3">
<select class="form-select-sm myinput" name="R428DPW1" id="R428DPW1" aria-label="Div-Plt-Whs" required>
<option value="" selected disabled hidden>Select a value</option>
@foreach ($IC670M as $key => $IC670MR)
<option value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}"
data-co="{{ trim($IC670MR->WDCO) }}" data-pl="{{ trim($IC670MR->WDPL) }}" data-wh="{{ trim($IC670MR->WDWHS) }}"
data-dpw="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}" >
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
</td>
</tr>
<!-- <tr> -->
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table class="table table-condensed">
<tr>
<td><b>Admin user</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-d30d801b67" class="visually-hidden">R428ADMUSR</label>
<input class="form-check-input" type="checkbox" role="switch" name="R428ADMUSR" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-d30d801b67">
</div>
</td>
<td><b>Power user</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-aeca45ced5" class="visually-hidden">R428PWRUSR</label>
<input class="form-check-input" type="checkbox" role="switch" name="R428PWRUSR" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-aeca45ced5">
</div>
</td>
<td><b>CSR</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-41e1a8347c" class="visually-hidden">R42811A</label>
<input class="form-check-input" type="checkbox" role="switch" name="R42811A" value="N" data-on="C" data-off="" aria-checked="false" id="sonar-input-41e1a8347c">
</div>
</td>
<td><b>Executive</b></td> <!-- SWITCH Y/N -->
<td class="text-right">
<div class="form-check form-switch">
<label for="sonar-input-34ca226a28" class="visually-hidden">R42821A</label>
<input type="checkbox" class="form-check-input" role="switch" name="R42821A" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-34ca226a28">
</div>
</td>
</tr>
<tr>
<td colspan=2> </td><td colspan=2> </td><td colspan=2> </td>
</tr>
<tr>
<th scope="col" colspan=2><u>Inventory Options menu</u></th><th scope="col" colspan=2><u>Replenishment menu</u></th><th scope="col" colspan=2><u>Document Reprints</u></th>
</tr>
<td><b>Picking</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-6600a098cd" class="visually-hidden">MENU2OPT3</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU2OPT3" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-6600a098cd">
</div>
</td>
<td><b>Ticket processing</b></td> <!-- SWITCH Y/N Replenishment menu -->
<td class="text-right">
<div class="form-check form-switch">
<label for="sonar-input-34905fd14f" class="visually-hidden">MENU3OPT1</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU3OPT1" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-34905fd14f">
</div>
</td>
<td><b>Document Reprints1</b></td> <!-- SWITCH Y/N Document Reprints menu -->
<td class="text-right">
<div class="form-check form-switch">
<label for="sonar-input-962b09fa8c" class="visually-hidden">MENU4OPT1</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU4OPT1" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-962b09fa8c">
</div>
</td>
</tr>
<tr>
<td><b>Stock View Program</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-2d1307dd34" class="visually-hidden">MENU2OPT7</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU2OPT7" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-2d1307dd34">
</div>
</td>
<td><b>Ticket reset</b></td> <!-- SWITCH Y/N Replenishment menu -->
<td class="text-right">
<div class="form-check form-switch">
<label for="sonar-input-c82fe0a38a" class="visually-hidden">MENU3OPT2</label>
<input class="form-check-input" type="checkbox" role="switch"name="MENU3OPT2" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-c82fe0a38a">
</div>
</td>
<td><b>Document Reprints2</b></td> <!-- SWITCH Y/N Document Reprints menu -->
<td class="text-right">
<div class="form-check form-switch">
<label for="sonar-input-9de73b8a95" class="visually-hidden">MENU4OPT2</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU4OPT2" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-9de73b8a95">
</div>
</td>
</tr>
<td><b>Split Box Labels</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-5afc785c7f" class="visually-hidden">MENU2OPT8</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU2OPT8" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-5afc785c7f">
</div>
</td>
<td colspan=2></td>
<td><b>Document Reprints3</b></td> <!-- SWITCH Y/N Document Reprints menu -->
<td class="text-right">
<div class="form-check form-switch">
<label for="sonar-input-d11c3d9636" class="visually-hidden">MENU4OPT3</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU4OPT3" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-d11c3d9636">
</div>
</td>
</tr>
<tr>
<th scope="col" colspan=2><u>Loading menu</u></th><th scope="col" colspan=2><u>Main menu</u></th>
</tr>
<tr>
<td><b>Small parcel loading/closing</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-7f45697209" class="visually-hidden">MENU5OPT1</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU5OPT1" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-7f45697209">
</div>
</td>
<td><b>Weekly Labor card entry</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-97bd3e4192" class="visually-hidden">MENU6OPT1</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU6OPT1" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-97bd3e4192">
</div>
</td>
</tr>
<tr>
<td><b>Open dock door</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-2a6256fe9b" class="visually-hidden">MENU5OPT2</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU5OPT2" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-2a6256fe9b">
</div>
</td>
<td><b>MACPAC</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-ad632b9e62" class="visually-hidden">MENU6OPT2</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU6OPT2" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-ad632b9e62">
</div>
</td>
</tr>
<tr>
<td><b>Close dock door</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-a07d5c2573" class="visually-hidden">MENU5OPT3</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU5OPT3" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-a07d5c2573">
</div>
</td>
<td><b>2Ship send/aggregate</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-36ffe64b74" class="visually-hidden">MENU6OPT3</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU6OPT3" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-36ffe64b74">
</div>
</td>
</tr>
<tr>
<td><b>LTL loading</b></td> <!-- SWITCH Y/N -->
<td class="text-center">
<div class="form-check form-switch">
<label for="sonar-input-debe99b4bd" class="visually-hidden">MENU5OPT5</label>
<input class="form-check-input" type="checkbox" role="switch" name="MENU5OPT5" value="N" data-on="Y" data-off="N" aria-checked="false" id="sonar-input-debe99b4bd">
</div>
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeAdd">Close</button>
<button type="button" id="submitUserAdd" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,290 @@
<form id="frmEdit">
<div class="modal" id="userEdit" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">User Edit</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="userEditData">
<table role="presentation" class="table table-condensed">
<tbody>
<!-- R428DV R428PL R428WHS R428STS R428US R428FIRST R428FAMILY R428EMAIL R428EMPCDE R428ADMUSR R428PWRUSR -->
<tr>
<td>
<table role="presentation" class="table table-condensed">
<tr>
<input type="hidden" id="OLD_R428CO" name="OLD_R428CO">
<input type="hidden" id="OLD_R428PL" name="OLD_R428PL">
<input type="hidden" id="OLD_R428WH" name="OLD_R428WH">
<input type="hidden" id="R428CO" name="R428CO">
<input type="hidden" id="R428PL" name="R428PL">
<input type="hidden" id="R428WH" name="R428WH">
<td><b>Status</b></td> <!-- Switch Active/Inactive -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_R428STS" name="OLD_R428STS">
<label for="R428STS" class="visually-hidden">R428STS</label>
<input type="checkbox" class="form-check-input" role="switch" id="R428STS" name="R428STS" data-on="A" data-off="I" aria-checked="false">
</div>
</td>
</tr>
<tr>
<td><b>User profile</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_R428US" id="OLD_R428US">
<label for="R428US" class="visually-hidden">R428US</label>
<input type="text" maxlength="10" class="myinput toUpper" oninput="this.value = this.value.toUpperCase()" name="R428US" id="R428US" readonly>
</td>
</tr>
<tr>
<td><b>First Name</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_R428FIRST" id="OLD_R428FIRST">
<label for="R428FIRST" class="visually-hidden">R428FIRST</label>
<input type="text" maxlength="20" class="myinput" oninput="this.value = this.value.toUpperCase()" name="R428FIRST" id="R428FIRST" required>
</td>
</tr>
<tr>
<td><b>Family Name</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_R428FAMILY" id="OLD_R428FAMILY">
<label for="R428FAMILY" class="visually-hidden">R428FAMILY</label>
<input type="text" maxlength="30" class="myinput" oninput="this.value = this.value.toUpperCase()" name="R428FAMILY" id="R428FAMILY" required>
</td>
</tr>
<tr>
<td><b>Email</b></td> <!-- ALPHA -->
<td class="text-right">
<input type="hidden" name="OLD_R428EMAIL" id="OLD_R428EMAIL">
<label for="R428EMAIL" class="visually-hidden">R428EMAIL</label>
<input type="text" maxlength="100" class="myinput" oninput="this.value = this.value.toLowerCase()" id="R428EMAIL" required>
</td>
</tr>
<tr>
<td><b>Employee code</b></td> <!-- MAX -->
<td class="text-right">
<input type="hidden" name="OLD_R428EMPCDE" id="OLD_R428EMPCDE">
<label for="R428EMPCDE" class="visually-hidden">R428EMPCDE</label>
<input type="number" min=0 max=9999 class="myinput" name="R428EMPCDE" id="R428EMPCDE" value=0 required>
</td>
</tr>
<tr>
<td><label for="R428DPW" class="col-form-label"><b>Div-Plt-Whs:</b></label></td>
<td>
<div class="mb-3">
<input type="hidden" name="OLD_R428DPW" id="OLD_R428DPW">
<select class="form-select-sm" id="R428DPW" required>
<option value="" selected disabled hidden>Select</option>
@foreach ($IC670M as $key => $IC670MR)
<option value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}"
data-co="{{ trim($IC670MR->WDCO) }}" data-pl="{{ trim($IC670MR->WDPL) }}" data-wh="{{ trim($IC670MR->WDWHS) }}" >
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
</td>
</tr>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table class="table table-condensed">
<tr>
<td><b>Admin user</b></td> <!-- SWITCH Y/N -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_R428ADMUSR" name="OLD_R428ADMUSR">
<label for="R428ADMUSR" class="visually-hidden">R428ADMUSR</label>
<input type="checkbox" class="form-check-input" role="switch" id="R428ADMUSR" name="R428ADMUSR" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>Power user</b></td> <!-- SWITCH Y/N -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_R428PWRUSR" name="OLD_R428PWRUSR">
<label for="R428PWRUSR" class="visually-hidden">R428PWRUSR</label>
<input type="checkbox" class="form-check-input" role="switch" id="R428PWRUSR" name="R428PWRUSR" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>CSR</b></td> <!-- SWITCH Y/N -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_R42811A" name="OLD_R42811A">
<label for="R42811A" class="visually-hidden">R42811A</label>
<input type="checkbox" class="form-check-input" role="switch" id="R42811A" name="R42811A" data-on="C" data-off="" aria-checked="false">
</div>
</td>
<td><b>Executive</b></td> <!-- SWITCH Y/N -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_R42821A" name="OLD_R42821A">
<label for="R42821A" class="visually-hidden">R42821A</label>
<input type="checkbox" class="form-check-input" role="switch" id="R42821A" name="R42821A" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
<tr>
<td colspan=2> </td>
</tr>
<tr>
<th scope="col" colspan=2><u>Inventory Options menu</u></th><th scope="col" colspan=2><u>Replenishment menu</u></th><th scope="col" colspan=2><u>Document Reprints</u></th>
</tr>
<tr>
<td><b>Picking</b></td> <!-- SWITCH Y/N Inventory Options menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU2OPT3" name="OLD_MENU2OPT3">
<label for="MENU2OPT3" class="visually-hidden">MENU2OPT3</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU2OPT3" name="MENU2OPT3" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>Ticket processing</b></td> <!-- SWITCH Y/N Replenishment menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU3OPT1" name="OLD_MENU3OPT1">
<label for="MENU3OPT1" class="visually-hidden">MENU3OPT1</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU3OPT1" name="MENU3OPT1" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>Document Reprints1</b></td> <!-- SWITCH Y/N Document Reprints menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU4OPT1" name="OLD_MENU4OPT1">
<label for="MENU4OPT1" class="visually-hidden">MENU4OPT1</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU4OPT1" name="MENU4OPT1" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
<tr>
<td><b>Stock View Program</b></td> <!-- SWITCH Y/N Inventory Options menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU2OPT7" name="OLD_MENU2OPT7">
<label for="MENU2OPT7" class="visually-hidden">MENU2OPT7</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU2OPT7" name="MENU2OPT7" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>Ticket reset</b></td> <!-- SWITCH Y/N Replenishment menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU3OPT2" name="OLD_MENU3OPT2">
<label for="MENU3OPT2" class="visually-hidden">MENU3OPT2</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU3OPT2" name="MENU3OPT2" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>Document Reprints2</b></td> <!-- SWITCH Y/N Document Reprints menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU4OPT2" name="OLD_MENU4OPT2">
<label for="MENU4OPT2" class="visually-hidden">MENU4OPT2</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU4OPT2" name="MENU4OPT2" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
<tr>
<td><b>Split Box Labels</b></td> <!-- SWITCH Y/N Inventory Options menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU2OPT8" name="OLD_MENU2OPT8">
<label for="MENU2OPT8" class="visually-hidden">MENU2OPT8</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU2OPT8" name="MENU2OPT8" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td></td><td></td>
<td><b>Document Reprints3</b></td> <!-- SWITCH Y/N Document Reprints menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU4OPT3" name="OLD_MENU4OPT3">
<label for="MENU4OPT3" class="visually-hidden">MENU4OPT3</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU4OPT3" name="MENU4OPT3" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
<tr>
<th scope="col" colspan=2><u>Loading menu</u></th><th scope="col" colspan=2><u>Main menu</u></th><th scope="col" colspan=2></th>
</tr>
<tr>
<td><b>Small parcel loading/closing</b></td> <!-- SWITCH Y/N Loading menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU5OPT1" name="OLD_MENU5OPT1">
<label for="MENU5OPT1" class="visually-hidden">MENU5OPT1</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU5OPT1" name="MENU5OPT1" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>Weekly Labor card entry</b></td> <!-- SWITCH Y/N Loading menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU6OPT1" name="OLD_MENU6OPT1">
<label for="MENU6OPT1" class="visually-hidden">MENU6OPT1</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU6OPT1" name="MENU6OPT1" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
<tr>
<td><b>Open dock door</b></td> <!-- SWITCH Y/N Loading menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU5OPT2" name="OLD_MENU5OPT2">
<label for="MENU5OPT2" class="visually-hidden">MENU5OPT2</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU5OPT2" name="MENU5OPT2" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>MACPAC</b></td> <!-- SWITCH Y/N Loading menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU6OPT2" name="OLD_MENU6OPT2">
<label for="MENU6OPT2" class="visually-hidden">MENU6OPT2</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU6OPT2" name="MENU6OPT2" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
<tr>
<td><b>Close dock door</b></td> <!-- SWITCH Y/N Loading menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU5OPT3" name="OLD_MENU5OPT3">
<label for="MENU5OPT3" class="visually-hidden">MENU5OPT3</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU5OPT3" name="MENU5OPT3" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
<td><b>2Ship send/aggregate</b></td> <!-- SWITCH Y/N Loading menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU6OPT3" name="OLD_MENU6OPT3">
<label for="MENU6OPT3" class="visually-hidden">MENU6OPT3</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU6OPT3" name="MENU6OPT3" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
<tr>
<td><b>LTL loading</b></td> <!-- SWITCH Y/N Loading menu -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" id="OLD_MENU5OPT5" name="OLD_MENU5OPT5">
<label for="MENU5OPT5" class="visually-hidden">MENU5OPT5</label>
<input type="checkbox" class="form-check-input" role="switch" id="MENU5OPT5" name="MENU5OPT5" data-on="Y" data-off="N" aria-checked="false">
</div>
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closeEdit">Close</button>
<button type="button" id="submitUserEdit" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,41 @@
<form id="frmPassword">
<div class="modal" id="userPassword" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Enter Password to re-enable user</h5>
<button type="button" class="btn-close close-modal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="table-responsive" id="userPasswordData">
<table role="presentation" class="table table-condensed">
<tbody>
<tr>
<td>
<table role="presentation" class="table table-condensed">
<tr>
<td><b>Enter a new password to re-enable user</b></td> <!-- Password -->
<td class="text-right">
<div class="form-check form-switch">
<input type="hidden" name="R428US_PWD" id="R428US_PWD" value="">
<label for="NEW_PASSWORD" class="visually-hidden">NEW PASSWORD</label>
<input type="password" maxlength="10" length="7" class="myinput" name="NEW_PASSWORD" id="NEW_PASSWORD" required>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary close-modal" data-bs-dismiss="modal" id="closePassword">Close</button>
<button type="button" id="submitUserPassword" data-R428US_PWD="" class="btn btn-primary" data-bs-dismiss="modal">Save changes</button>
</div>
</div>
</div>
</div>
</form>
@@ -0,0 +1,24 @@
<nav class="m3-module-nav" aria-label="M3 navigation">
<a class="m3-module-nav-link {{ request()->routeIs('m3.index') ? 'is-active' : '' }}" href="{{ route('m3.index') }}"><i class="fas fa-gauge-high"></i><span>Dashboard</span></a>
@if($execUser !== 'Y')
@if($csr !== 'Y')
<a class="m3-module-nav-link {{ request()->routeIs('m3.replenishmentSettings.*') ? 'is-active' : '' }}" href="{{ route('m3.replenishmentSettings.index') }}"><i class="fas fa-arrows-rotate"></i><span>Replenishment</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.M3ErrorsDisplay.*') ? 'is-active' : '' }}" href="{{ route('m3.M3ErrorsDisplay.index') }}"><i class="fas fa-list-check"></i><span>Transactions</span></a>
@endif
<a class="m3-module-nav-link {{ request()->routeIs('m3.M3GetPDFFromCache.*') ? 'is-active' : '' }}" href="{{ route('m3.M3GetPDFFromCache.index') }}"><i class="fas fa-file-pdf"></i><span>Documents</span></a>
@if($csr !== 'Y')
<a class="m3-module-nav-link {{ request()->routeIs('m3.userControl') ? 'is-active' : '' }}" href="{{ route('m3.userControl') }}"><i class="fas fa-users-gear"></i><span>Users</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.palletQty') ? 'is-active' : '' }}" href="{{ route('m3.palletQty') }}"><i class="fas fa-boxes-stacked"></i><span>Part Data</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.M3Delivery') ? 'is-active' : '' }}" href="{{ route('m3.M3Delivery') }}"><i class="fas fa-truck"></i><span>Delivery</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.OrderLinesOfClosedOrder') ? 'is-active' : '' }}" href="{{ route('m3.OrderLinesOfClosedOrder') }}"><i class="fas fa-file-excel"></i><span>Closed Orders</span></a>
@if($power_users === 'Y' || $admin_users === 'Y')
<a class="m3-module-nav-link {{ request()->routeIs('m3.carrierMaint') ? 'is-active' : '' }}" href="{{ route('m3.carrierMaint') }}"><i class="fas fa-route"></i><span>Carriers</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.UserPickingStats4') || request()->routeIs('m3.UserPickingStats5') ? 'is-active' : '' }}" href="{{ route('m3.UserPickingStats4') }}"><i class="fas fa-chart-line"></i><span>Efficiency</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.pendingClosure') ? 'is-active' : '' }}" href="{{ route('m3.pendingClosure') }}"><i class="fas fa-clock"></i><span>Pending Closure</span></a>
@endif
<a class="m3-module-nav-link {{ request()->routeIs('m3.ship-to.*') ? 'is-active' : '' }}" href="{{ route('m3.ship-to.index') }}"><i class="fas fa-warehouse"></i><span>Ship-to</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.execsummary') || request()->routeIs('m3.execsummaryline') ? 'is-active' : '' }}" href="{{ route('m3.execsummary') }}"><i class="fas fa-chart-column"></i><span>KPI</span></a>
<a class="m3-module-nav-link {{ request()->routeIs('m3.whsePerf*') ? 'is-active' : '' }}" href="{{ route('m3.whsePerf') }}"><i class="fas fa-chart-area"></i><span>OTTC</span></a>
@endif
@endif
</nav>
@@ -0,0 +1,78 @@
<!-- jQuery -->
<script src="{{ route('m3.assets', ['path' => 'liberty-theme/js/jquery.min.js']) }}"></script>
<!-- SB Admin -->
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity= "sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
@php
// ReplenishSettingsController
$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
// dump($controllerAction);
list($controller, $action) = explode('@', $controllerAction);
// dump($controller);
@endphp
@if($controller != 'ReplenishSettingsController' && $controller != 'M3ErrorsDispController')
<script src="{{ route('m3.assets', ['path' => 'liberty-theme/js/scripts.js']) }}"></script>
@endif
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" crossorigin="anonymous"></script>
<script src="{{ route('m3.assets', ['path' => 'liberty-theme/assets/demo/chart-area-demo.js']) }}"></script>
<script src="{{ route('m3.assets', ['path' => 'liberty-theme/assets/demo/chart-bar-demo.js']) }}"></script>
<script src="https://cdn.jsdelivr.net/npm/simple-datatables@latest" crossorigin="anonymous"></script>
<!-- Datatable -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/pdfmake.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/vfs_fonts.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/v/bs5/jszip-2.5.0/dt-1.11.3/af-2.3.7/b-2.0.1/b-colvis-2.0.1/b-html5-2.0.1/b-print-2.0.1/cr-1.5.4/date-1.1.1/fc-4.0.0/fh-3.2.0/kt-2.6.4/r-2.2.9/rg-1.1.3/rr-1.2.8/sc-2.0.5/sb-1.2.2/sp-1.4.0/sl-1.3.3/datatables.min.js"></script>
<script type="text/javascript" src="{{ route('m3.assets', ['path' => 'liberty-theme/js/datatables-simple-demo.js']) }}"></script>
{{-- Data Bootstrap Responsive --}}
<script type="text/javascript" src="https://cdn.datatables.net/responsive/2.4.1/js/dataTables.responsive.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/responsive/2.4.1/js/responsive.bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.js"></script>
<script src="{{ route('m3.assets', ['path' => 'liberty-theme/js/dataTables.altEditor.free.js']) }}"></script>
<!-- Morris Charts -->
<script src="{{ route('m3.assets', ['path' => 'liberty-theme/js/morris.min.js']) }}"></script>
<script src="{{ route('m3.assets', ['path' => 'liberty-theme/js/raphael.min.js']) }}"></script>
<!-- Date range picker -->
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<!-- highcharts -->
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/sunburst.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
<!-- Fontawesome -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/js/all.min.js" crossorigin="anonymous"></script>
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
window.addEventListener('DOMContentLoaded', event => {
// Toggle the side navigation
const sidebarToggle = document.body.querySelector('#sidebarToggle');
if (sidebarToggle) {
// Uncomment Below to persist sidebar toggle between refreshes
if (localStorage.getItem('sb|sidebar-toggle') === 'true') {
document.body.classList.toggle('sb-sidenav-toggled');
}
sidebarToggle.addEventListener('click', event => {
event.preventDefault();
document.body.classList.toggle('sb-sidenav-toggled');
localStorage.setItem('sb|sidebar-toggle', document.body.classList.contains('sb-sidenav-toggled'));
});
}
});
</script>
@@ -0,0 +1,17 @@
<link href="https://cdn.jsdelivr.net/npm/simple-datatables@latest/dist/style.css" rel="stylesheet" />
<link href="{{ route('m3.assets', ['path' => 'liberty-theme/css/styles.css']) }}" rel="stylesheet" />
<link href="{{ route('m3.assets', ['path' => 'liberty-theme/css/morris.css']) }}" rel="stylesheet" />
<!-- Date range picker -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
<!-- Datatable -->
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs5/jszip-2.5.0/dt-1.11.3/af-2.3.7/b-2.0.1/b-colvis-2.0.1/b-html5-2.0.1/b-print-2.0.1/cr-1.5.4/date-1.1.1/fc-4.0.0/fh-3.2.0/kt-2.6.4/r-2.2.9/rg-1.1.3/rr-1.2.8/sc-2.0.5/sb-1.2.2/sp-1.4.0/sl-1.3.3/datatables.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.0/css/dataTables.bootstrap5.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/responsive/2.4.1/css/responsive.bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/2.0.0/css/buttons.bootstrap5.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/select/1.3.3/css/select.bootstrap5.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/datetime/1.1.1/css/dataTables.dateTime.min.css" />
<link rel="stylesheet" type="text/css" href="https://editor.datatables.net/extensions/Editor/css/editor.bootstrap5.min.css" />
@@ -0,0 +1,49 @@
<div style="margin:10px 10px 0 10px;">
<div class="row">
<div class="col-sm-12">
<div class="card text-white bg-secondary mb-3">
<div class="card-body">
<p class="card-text" style="color:#FFF">
<b>Current Hold Code:</b> {{ $order->SHHLDC }}<br>
<b>Order number:</b> {{ $request->order }}<br>
<b>Order Date:</b> {{ date('m/d/Y', strtotime($order->SHORDT)) }}<br>
<b>Order Status:</b> {{ $order->SHOST }}<br>
<b>Fill Code:</b> {{ $order->SHALBO }}<br>
@foreach ($releases as $key=>$val)
<b>Open Releases on this order:</b> <a href="./{{ $val->SLONO }}-{{ $val->SLRLNO }}" style="color:white" >{{ $val->SLONO }}-{{ $val->SLRLNO }}
<i class="fa fa-eye pull-right"></i></a><br>
@endforeach
</p>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-header" style="margin-bottom:20px">
<div class="row">
<div class="col-sm-6">
<h5 class="card-title"><b>Order number:</b> {{ $request->order }}</h5>
</div>
<div class="col-sm-6 text-end">
<h5 class="card-title"><b>Order Date:</b> {{ date('m/d/Y', strtotime($order->SHORDT)) }}</h5>
</div>
</div>
</div>
<table id="example" class="table table-striped" style="width:100%;margin-top:20px">
<thead>
<tr>
<th>Id</th>
<th>User</th>
<th>Created Date</th>
<th>Reminder Date</th>
<th>Comment</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
@@ -0,0 +1,78 @@
<div style="margin:10px 10px 0 10px;">
<div class="row">
<div class="col-sm-12">
<div class="card text-white bg-secondary mb-3">
<div class="card-body">
<p class="card-text" style="color:#FFF">
<b>Current Hold Code:</b> {{ $order->SHHLDC }}<br>
<b>Order number:</b> {{ $request->order }}<br>
<b>Order Date:</b> {{ date('m/d/Y', strtotime($order->SHORDT)) }}<br>
<b>Order Status:</b> {{ $order->SHOST }}<br>
<b>Fill Code:</b> {{ $order->SHALBO }}<br>
@foreach ($releases as $key=>$val)
<b>Open Releases on this order:</b> <a href="./{{ $val->SLONO }}-{{ $val->SLRLNO }}" style="color:white" >{{ $val->SLONO }}-{{ $val->SLRLNO }}
<i class="fa fa-eye pull-right"></i></a><br>
@endforeach
</p>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-header">
<div class="row">
<div class="col-sm-6">
<h5 class="card-title"><b>Order number:</b> {{ $request->order }}</h5>
</div>
<div class="col-sm-6 text-end">
<h5 class="card-title"><b>Order Date:</b> {{ date('m/d/Y', strtotime($order->SHORDT)) }}</h5>
</div>
</div>
</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td><strong>Status</strong></td>
<td><strong>Src Whse</strong></td>
<td><strong>Part</strong></td>
<td><strong>Description</strong></td>
<td><strong>Fill Code</strong></td>
<td><strong>Ord</strong></td>
<td><strong>Bal</strong></td>
<td><strong>Res</strong></td>
<td><strong>onPick</strong></td>
<td><strong>Price</strong></td>
<td><strong>Extension</strong></td>
<td><strong>Promise Date</strong></td>
</tr>
</thead>
<tbody>
@foreach ($details as $key=>$detail)
<tr>
<td>{{ $detail->SLLNST }}</td>
<td>{{ $detail->SLSRWH }}</td>
<td>{{ $detail->SLPTNO }}</td>
<td>{{ $detail->SLPTD1 }}</td>
<td>{{ $detail->SLALBO }}</td>
<td>{{ $detail->SLORQY }}</td>
<td>{{ $detail->BALANCE }}</td>
<td>{{ $detail->RESERVED }}</td>
<td>{{ $detail->ONPICK }}</td>
<td>{{ $detail->SLUNPR }}</td>
<td>{{ $detail->SLEXPR }}</td>
<td>{{ $detail->SLPRDT }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
@@ -0,0 +1,166 @@
<div style="margin:10px 10px 0 10px;">
<div class="row">
<div class="col-sm-12">
<div class="card text-white bg-secondary mb-3">
<div class="card-body">
<p class="card-text" style="color:#FFF">
<b>Current Hold Code:</b> {{ $order->SHHLDC }}<br>
<b>Order number:</b> {{ $request->order }}<br>
<b>Order Date:</b> {{ date('m/d/Y', strtotime($order->SHORDT)) }}<br>
<b>Order Status:</b> {{ $order->SHOST }}<br>
<b>Fill Code:</b> {{ $order->SHALBO }}<br>
@foreach ($releases as $key=>$val)
<b>Open Releases on this order:</b> <a href="./{{ $val->SLONO }}-{{ $val->SLRLNO }}" style="color:white"> {{ $val->SLONO }}-{{ $val->SLRLNO }}
<i class="fa fa-eye pull-right"></i></a><br>
@endforeach
</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="card text-white bg-info mb-3" id="div1">
<div class="card-header"><h5 class="card-title">Billed To <span class="text-end"># {{$order->SHCSTN}}</span></h5></div>
<div class="card-body">
<p class="card-text">
{!! (isset($order->SHSLNM)&&trim($order->SHSLNM)!=''?'<b>'.$order->SHSLNM."</b><br>":'') !!}
{!! (isset($order->SHSLA1)&&trim($order->SHSLA1)!=''?$order->SHSLA1."<br>":'') !!}
{!! (isset($order->SHSLA2)&&trim($order->SHSLA2)!=''?$order->SHSLA2."<br>":'') !!}
{!! (isset($order->SHSLCI)&&trim($order->SHSLCI)!=''?$order->SHSLCI.", ":'') !!}
{!! (isset($order->SHSLST)&&trim($order->SHSLST)!=''?$order->SHSLST.", ":'') !!}
{!! (isset($order->SHSLZP)&&trim($order->SHSLZP)!=''?$order->SHSLZP."<br>":'') !!}
{!! (isset($order->SHSLCT)&&trim($order->SHSLCT)!=''?$order->SHSLCT."<br>":'') !!}
</p>
</div>
</div>
</div>
<div class="col-sm-6">
<div id="shipTo">
<div class="card text-white bg-info mb-3" id="div2">
<div class="card-header">
<div class="row">
<div class="col-sm-6">
<h5 class="card-title">Shipped To <span class="text-end"># {{$order->SHSTCN}}</span></h5>
</div>
<div class="col-sm-6 text-end">
@if ($order->SHHLDC=="F" && $order->SHOST=="Open" && $authuser[0]->COUNT!=0)
<h5 class="card-title" id="shipToEdit_click" data-toggle="modal" style="cursor:pointer"><i class="fa fa-edit pull-right" ></i></h5>
@endif
</div>
</div>
</div>
<div class="card-body">
<p class="card-text">
{!! (isset($order->SHSHNM)&&trim($order->SHSHNM)!=''?'<b>'.$order->SHSHNM."</b><br>":'') !!}
{!! (isset($order->SHSHA1)&&trim($order->SHSHA1)!=''?$order->SHSHA1."<br>":'') !!}
{!! (isset($order->SHSHA2)&&trim($order->SHSHA2)!=''?$order->SHSHA2."<br>":'') !!}
{!! (isset($order->SHSHA3)&&trim($order->SHSHA3)!=''?$order->SHSHA3."<br>":'') !!}
{!! (isset($order->SHSHCI)&&trim($order->SHSHCI)!=''?$order->SHSHCI.", ":'') !!}
{!! (isset($order->SHSHST)&&trim($order->SHSHST)!=''?$order->SHSHST.", ":'') !!}
{!! (isset($order->SHSHZP)&&trim($order->SHSHZP)!=''?$order->SHSHZP."<br>":'') !!}
{!! (isset($order->SHSHCT)&&trim($order->SHSHCT)!=''?$order->SHSHCT."<br>":'') !!}
@if ($order->SHHLDC=="F" && $order->SHOST=="Open" && $authuser[0]->COUNT!=0)
<div class="btn btn-light" style="cursor:pointer; margin-top:15px; display:block" id="shipToCheckBox_click" data-toggle="modal">Ignore address checker error and process as is</div>
@endif
</p>
</div>
</div>
</div>
</div>
</div>
<div id="orderData">
@if($order->SHHLDC=="F" && count($reasonForF)>=1)
<div class="card">
<div class="card-body">
<div class="card-header">
<h5 class="card-title">Reasons for code F</h5>
</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td><strong>Date/Time</strong></td>
<td><strong>Message</strong></td>
<td class="text-end"><strong>Code</strong></td>
</tr>
</thead>
<tbody>
@foreach ($reasonForF as $key=>$whyF)
<tr>
<td>{{ date('m/d/Y', strtotime($whyF->AMDATENT ))}} {{ date('H:i:s', strtotime($whyF->AMTIMENT ))}}</td>
<td>{{ $whyF->AMCOMM }}</td>
<td class="text-end">{{ $whyF->AMERRCDE }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<div style="height:20px;"></div>
@endif
@if($order->SHHLDC!="F" && count($reasonOther['message'])>=1)
<div class="card">
<div class="card-body">
<div class="card-header">
<h5 class="card-title">Exemption Reasons</h5>
</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td><strong>Message</strong></td>
</tr>
</thead>
<tbody>
@foreach ($reasonOther['message'] as $key=>$why)
<tr>
<td>{{ $why }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<div style="height:20px;"></div>
@endif
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td><strong>Date</strong></td>
<td><strong>Comment</strong></td>
<td class="text-end"><strong>Print Code</strong></td>
</tr>
</thead>
<tbody>
@foreach ($comments as $key=>$comment)
<tr>
<td>{{ date('m/d/Y', strtotime($comment->SCCRDT ))}}</td>
<td>{{ $comment->SCCM }}</td>
<td class="text-end">{{ $comment->SCCMPR }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,36 @@
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<!-- Navbar Brand-->
<a class="navbar-brand ps-3" href="index.html">Sentinel API Dashboard</a>
<!-- Sidebar Toggle-->
<button class="btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0" id="sidebarToggle" href="#!"><i class="fas fa-bars"></i></button>
<div class="d-none d-md-inline-block form-inline ms-auto me-0 me-md-3 my-2 my-md-0"></div>
<!-- Navbar-->
<ul class="navbar-nav ms-auto ms-md-0 me-3 me-lg-4">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="/logout">Logout</a></li>
@if($execUser=='Y' || $csr=="Y" || $admin_users=='Y')
{{-- <li><a class="dropdown-item" href="/userprofile">Change Warehouse</a></li> --}}
<li>
<div class="form-group">
<label for="R428DPWSel">Div-Plt-Whs</label>
<select class="form-select" id="R428DPWSel">
<option value="" disabled hidden>Select</option>
@foreach ($IC670MAllWHS as $key => $IC670MR)
@php
$selected = $UserCO == $IC670MR->WDCO && $UserWHS == $IC670MR->WDWHS && $UserPL == $IC670MR->WDPL ? 'selected' : '';
@endphp
<option value="{{ trim($IC670MR->WDCO).trim($IC670MR->WDPL).trim($IC670MR->WDWHS) }}" {{ $selected }}>
{{ trim(Str::upper($IC670MR->WDWNAM)) }}
</option>
@endforeach
</select>
</div>
</li>
@endif
</ul>
</li>
</ul>
</nav>