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
Regular → Executable
+25 -3
View File
@@ -63,9 +63,6 @@ select:focus[data-flux-control] {
@apply outline-hidden ring-2 ring-accent ring-offset-2 ring-offset-accent-foreground;
}
/* \[:where(&)\]:size-4 {
@apply size-4;
} */
@layer components {
.wms-app-shell {
@@ -1696,3 +1693,28 @@ html[data-wms-sidebar="collapsed"] .wms-sidebar {
color: rgb(191 219 254);
}
}
/* Authentication pages use normal document scrolling. The application shell
intentionally locks html/body scrolling, so auth must explicitly opt out. */
html.auth-page,
html.auth-page body {
width: 100% !important;
height: auto !important;
min-height: 100% !important;
overflow-x: hidden !important;
overflow-y: auto !important;
overscroll-behavior-y: auto !important;
}
html.auth-page body {
position: static !important;
inset: auto !important;
min-height: 100vh !important;
}
@supports (min-height: 100dvh) {
html.auth-page body,
html.auth-page .wms-auth-page {
min-height: 100dvh !important;
}
}
Regular → Executable
View File
Regular → Executable
View File
View File
View File
+3 -2
View File
@@ -27,10 +27,11 @@ const proxyChecked = computed({
<template>
<input
<label for="sonar-input-26eb253f2c" class="visually-hidden">sonar input 26eb253f2c</label>
<input
v-model="proxyChecked"
type="checkbox"
:value="value"
class="rounded dark:bg-gray-900 border-gray-300 dark:border-gray-700 text-indigo-600 shadow-sm focus:ring-indigo-500 dark:focus:ring-indigo-600 dark:focus:ring-offset-gray-800"
>
id="sonar-input-26eb253f2c">
</template>
View File
View File
View File
View File
View File
View File
View File
Regular → Executable
+1 -1
View File
@@ -77,7 +77,7 @@ function renderWmsCharts() {
},
];
new Chart(canvas, {
canvas.wmsChart = new Chart(canvas, {
type,
data: {
labels,
+11 -11
View File
@@ -2,7 +2,7 @@
'use strict';
function cssVar(name, fallback) {
var value = getComputedStyle(document.documentElement).getPropertyValue(name);
let value = getComputedStyle(document.documentElement).getPropertyValue(name);
return value && value.trim() !== '' ? value.trim() : fallback;
}
@@ -18,8 +18,8 @@
}
function enrichDataset(dataset, index, type) {
var colours = palette();
var colour = colours[index % colours.length];
let colours = palette();
let colour = colours[index % colours.length];
if (type === 'doughnut' || type === 'pie') {
dataset.backgroundColor = colours;
@@ -39,10 +39,10 @@
}
function optionsFor(type) {
var textColour = cssVar('--wms-chart-text', '#334155');
var gridColour = cssVar('--wms-chart-grid', 'rgba(148, 163, 184, 0.25)');
let textColour = cssVar('--wms-chart-text', '#334155');
let gridColour = cssVar('--wms-chart-grid', 'rgba(148, 163, 184, 0.25)');
var options = {
let options = {
responsive: true,
maintainAspectRatio: false,
interaction: {
@@ -100,7 +100,7 @@
}
function normaliseConfig(rawConfig, type) {
var config = rawConfig || {};
let config = rawConfig || {};
config.labels = config.labels || [];
config.datasets = (config.datasets || []).map(function (dataset, index) {
return enrichDataset(dataset, index, type);
@@ -115,9 +115,9 @@
}
document.querySelectorAll('[data-wms-chart]').forEach(function (canvas) {
var type = canvas.getAttribute('data-chart-type') || 'line';
var raw = canvas.getAttribute('data-chart-config') || '{}';
var config = {};
let type = canvas.getAttribute('data-chart-type') || 'line';
let raw = canvas.getAttribute('data-chart-config') || '{}';
let config = {};
try {
config = JSON.parse(raw);
@@ -125,7 +125,7 @@
config = { labels: [], datasets: [] };
}
new Chart(canvas, {
canvas.wmsChart = new Chart(canvas, {
type: type,
data: normaliseConfig(config, type),
options: optionsFor(type)
Regular → Executable
View File
View File

Before

Width:  |  Height:  |  Size: 683 B

After

Width:  |  Height:  |  Size: 683 B

View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+1 -1
View File
@@ -23,7 +23,7 @@
}
code {
font-family: monospace, monospace;
font-family: monospace;
font-size: 1em
}
View File
View File
View File
View File
View File
View File
View File
+24 -7
View File
@@ -231,7 +231,7 @@
</div>
@endif
<div class="wms-sidebar-group" data-wms-menu-group="integration-reporting">
<div class="wms-sidebar-group" data-wms-menu-group="integration-reporting" @if (request()->routeIs('m3.*')) data-wms-selected="true" data-wms-has-active="true" data-wms-menu-open="true" @endif>
<button type="button" class="wms-sidebar-heading wms-sidebar-heading-button" data-wms-menu-toggle
data-wms-sidebar-label aria-expanded="false">
<span class="wms-sidebar-heading-content">
@@ -241,13 +241,30 @@
</button>
<div class="wms-sidebar-group-items" data-wms-menu-items>
@if (Route::has('m3-integration.index'))
<a href="{{ route('m3-integration.index') }}" wire:navigate
class="wms-sidebar-link @if (request()->routeIs('m3-integration.*')) is-active @endif"
title="{{ __('M3 Integration') }}">
<i class="fa-solid fa-plug-circle-bolt wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('M3 Integration') }}</span>
@if (Route::has('m3.index'))
<a href="{{ route('m3.index') }}"
class="wms-sidebar-link @if (request()->routeIs('m3.*')) is-active @endif"
title="{{ __('M3') }}">
<i class="fa-solid fa-cubes-stacked wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('M3') }}</span>
</a>
@if (request()->routeIs('m3.*'))
<div class="wms-m3-submenu space-y-1 border-l border-zinc-200/70 pl-3 dark:border-zinc-700/70" data-wms-sidebar-label>
<a href="{{ route('m3.index') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.index')) is-active @endif"><i class="fa-solid fa-gauge-high wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('Dashboard') }}</span></a>
@if (Route::has('m3.replenishmentSettings.index'))<a href="{{ route('m3.replenishmentSettings.index') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.replenishmentSettings.*')) is-active @endif"><i class="fa-solid fa-sliders wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('Replenishment Settings') }}</span></a>@endif
@if (Route::has('m3.M3ErrorsDisplay.index'))<a href="{{ route('m3.M3ErrorsDisplay.index') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.M3ErrorsDisplay*')) is-active @endif"><i class="fa-solid fa-list-check wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('Transaction Log') }}</span></a>@endif
@if (Route::has('m3.M3GetPDFFromCache.index'))<a href="{{ route('m3.M3GetPDFFromCache.index') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.M3GetPDFFromCache*')) is-active @endif"><i class="fa-solid fa-box-archive wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('Sentinel Doc Archive') }}</span></a>@endif
@if (Route::has('m3.userControl'))<a href="{{ route('m3.userControl') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.userControl*')) is-active @endif"><i class="fa-solid fa-users-gear wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('User Control') }}</span></a>@endif
@if (Route::has('m3.palletQty'))<a href="{{ route('m3.palletQty') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.palletQty*')) is-active @endif"><i class="fa-solid fa-boxes-stacked wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('ERP/TMS Part Data') }}</span></a>@endif
@if (Route::has('m3.M3Delivery'))<a href="{{ route('m3.M3Delivery') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.M3Delivery*')) is-active @endif"><i class="fa-solid fa-truck-fast wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('M3 Delivery Methods') }}</span></a>@endif
@if (Route::has('m3.OrderLinesOfClosedOrder'))<a href="{{ route('m3.OrderLinesOfClosedOrder') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.OrderLinesOfClosedOrder')) is-active @endif"><i class="fa-solid fa-file-excel wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('Closed Order Lines') }}</span></a>@endif
@if (Route::has('m3.carrierMaint'))<a href="{{ route('m3.carrierMaint') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.carrierMaint*')) is-active @endif"><i class="fa-solid fa-location-dot wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('Distribution WHS Addresses') }}</span></a>@endif
@if (Route::has('m3.UserPickingStats4'))<a href="{{ route('m3.UserPickingStats4') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.UserPickingStats4')) is-active @endif"><i class="fa-solid fa-chart-column wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('KPI1 Bar') }}</span></a>@endif
@if (Route::has('m3.UserPickingStats5'))<a href="{{ route('m3.UserPickingStats5') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.UserPickingStats5')) is-active @endif"><i class="fa-solid fa-chart-line wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('KPI1 Line') }}</span></a>@endif
@if (Route::has('m3.execsummary'))<a href="{{ route('m3.execsummary') }}" class="wms-sidebar-link wms-m3-submenu-link @if (request()->routeIs('m3.execsummary*')) is-active @endif"><i class="fa-solid fa-chart-simple wms-sidebar-icon" aria-hidden="true"></i><span>{{ __('OTTC') }}</span></a>@endif
</div>
@endif
@endif
@if (Route::has('sentinel-integration.index'))
View File
View File
+32 -14
View File
@@ -1,26 +1,44 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="dark">
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="dark auth-page">
<head>
@include('partials.head')
<style>
html.auth-page,
html.auth-page body {
width: 100% !important;
height: auto !important;
min-height: 100% !important;
overflow-x: hidden !important;
overflow-y: auto !important;
overscroll-behavior-y: auto !important;
}
html.auth-page body {
position: static !important;
inset: auto !important;
min-height: 100vh !important;
min-height: 100dvh !important;
}
.wms-auth-page {
width: 100%;
min-height: 100vh;
min-height: 100dvh;
overflow: visible;
}
</style>
</head>
<body class="min-h-screen bg-white antialiased dark:bg-linear-to-b dark:from-neutral-950 dark:to-neutral-900">
<body class="bg-white antialiased dark:bg-linear-to-b dark:from-neutral-950 dark:to-neutral-900">
<div data-dusk="page-ready" style="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);"
aria-hidden="true"></div>
<div class="bg-background flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10">
<div class="flex w-full max-w-sm flex-col gap-2">
<a href="{{ route('home') }}" class="flex flex-col items-center gap-2 font-medium" wire:navigate>
<span class="flex h-9 w-9 mb-1 items-center justify-center rounded-md">
<x-app-logo-icon class="size-9 fill-current text-black dark:text-white" />
</span>
<span class="sr-only">{{ config('app.name', 'Laravel') }}</span>
</a>
<div class="flex flex-col gap-6">
{{ $slot }}
</div>
<main class="wms-auth-page flex flex-col items-center px-6 py-8 md:px-10 md:py-10">
<div class="flex w-full max-w-md flex-col gap-6">
{{ $slot }}
</div>
</div>
</main>
@persist('toast')
<flux:toast.group>
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+3 -2
View File
@@ -169,8 +169,9 @@
<flux:icon.loading variant="mini" />
</div>
@else
<input type="text" readonly value="{{ $manualSetupKey }}"
class="w-full p-3 bg-transparent outline-none text-stone-900 dark:text-stone-100" />
<label for="sonar-input-b757771a44" class="visually-hidden">sonar input b757771a44</label>
<input type="text" readonly value="{{ $manualSetupKey }}"
class="w-full p-3 bg-transparent outline-none text-stone-900 dark:text-stone-100" id="sonar-input-b757771a44">
<button @click="copy()"
class="px-3 transition-colors border-l cursor-pointer border-stone-200 dark:border-stone-600">
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File

Some files were not shown because too many files have changed in this diff Show More