From e776eb0211f3ca7ab844ad7f726ed7c8a6c20de8 Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Mon, 21 Sep 2026 12:05:53 +0100 Subject: [PATCH] M3 Integration fixes --- .../StoreDocumentationDocumentRequest.php | 6 +++-- .../UpdateDocumentationDocumentRequest.php | 6 +++-- .../M3/Http/Controllers/API/CloseShipment.php | 4 ++-- .../M3/Http/Controllers/UserPickingStats5.php | 6 ++++- .../public/liberty-theme/js/scripts.js | 3 +-- Modules/M3/Services/PostgresProgramBridge.php | 22 ++++++------------- resources/js/app.js | 4 ++-- 7 files changed, 25 insertions(+), 26 deletions(-) diff --git a/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php b/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php index b2931ecf..e52c3130 100755 --- a/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php +++ b/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php @@ -23,6 +23,8 @@ class StoreDocumentationDocumentRequest extends FormRequest */ public function rules(): array { + $maxUploadKb = min(max((int) config('documentation.max_upload_kb', 10240), 1), 10240); + return [ 'documentation_category_id' => ['nullable', 'integer', 'exists:documentation_categories,id'], 'title' => ['required', 'string', 'max:220'], @@ -33,9 +35,9 @@ class StoreDocumentationDocumentRequest extends FormRequest 'is_featured' => ['nullable', 'boolean'], 'version' => ['required', 'string', 'max:50'], 'reference' => ['nullable', 'string', 'max:100'], - 'attachment' => ['nullable', 'file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachment' => ['nullable', 'file', 'max:' . $maxUploadKb, 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], 'attachments' => ['nullable', 'array'], - 'attachments.*' => ['file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachments.*' => ['file', 'max:' . $maxUploadKb, 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], ]; } } diff --git a/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php b/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php index 6d64014f..35b6ef3a 100755 --- a/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php +++ b/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php @@ -23,6 +23,8 @@ class UpdateDocumentationDocumentRequest extends FormRequest */ public function rules(): array { + $maxUploadKb = min(max((int) config('documentation.max_upload_kb', 10240), 1), 10240); + /** @var DocumentationDocument|null $document */ $document = $this->route('document'); @@ -36,9 +38,9 @@ class UpdateDocumentationDocumentRequest extends FormRequest 'is_featured' => ['nullable', 'boolean'], 'version' => ['required', 'string', 'max:50'], 'reference' => ['nullable', 'string', 'max:100'], - 'attachment' => ['nullable', 'file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachment' => ['nullable', 'file', 'max:' . $maxUploadKb, 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], 'attachments' => ['nullable', 'array'], - 'attachments.*' => ['file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachments.*' => ['file', 'max:' . $maxUploadKb, 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], 'remove_attachment' => ['nullable', 'boolean'], ]; } diff --git a/Modules/M3/Http/Controllers/API/CloseShipment.php b/Modules/M3/Http/Controllers/API/CloseShipment.php index b428386a..c7bae56e 100755 --- a/Modules/M3/Http/Controllers/API/CloseShipment.php +++ b/Modules/M3/Http/Controllers/API/CloseShipment.php @@ -260,7 +260,7 @@ class CloseShipment extends Controller // ->get(); // PFC : Check that Picked / Packed are all Equal - foreach ($iCM688M2SL as $key => $ICM688M2SLR) { + foreach ($iCM688M2SL as $ICM688M2SLR) { $a5PICKED = isset($ICM688M2SLR->A5PICKED) ? $ICM688M2SLR->A5PICKED : 0; $a5RSVQTY = isset($ICM688M2SLR->A5RSVQTY) ? $ICM688M2SLR->A5RSVQTY : 0; $a5ShortShipQty = (int) $a5RSVQTY - (int) $a5PICKED; @@ -295,7 +295,7 @@ class CloseShipment extends Controller ->orderBy('AYINTBOX') ->get(); - foreach ($iCM695M1JOINTMP as $ICM695M1JOINR) { + foreach ($iCM695M1JOINTMP as $key => $ICM695M1JOINR) { $a4SHIPVIA = isset($ICM695M1JOINR->A4SHIPVIA) ? trim(str_replace('&', '_', $ICM695M1JOINR->A4SHIPVIA)) : ''; $sHIPTYPE = trim($ICM695M1JOINR->A4SHIPTYPE); diff --git a/Modules/M3/Http/Controllers/UserPickingStats5.php b/Modules/M3/Http/Controllers/UserPickingStats5.php index 9117ce36..72277a71 100755 --- a/Modules/M3/Http/Controllers/UserPickingStats5.php +++ b/Modules/M3/Http/Controllers/UserPickingStats5.php @@ -128,7 +128,11 @@ class UserPickingStats5 extends Controller try { $response = Http::withBasicAuth((string) $request->header('php-auth-user'), (string) $request->header('php-auth-pw')) ->get($url, ['dates' => $date, 'user' => $request->user, 'format' => 'json']); - $data = $response->successful() ? (json_decode($response->body(), true) ?: []) : []; + $data = []; + if ($response->successful()) { + $decoded = json_decode($response->body(), true); + $data = is_array($decoded) ? $decoded : []; + } } catch (\Throwable $e) { Log::warning('M3 picking statistics unavailable', ['date' => $date, 'exception' => $e->getMessage()]); $data = []; diff --git a/Modules/M3/Resources/public/liberty-theme/js/scripts.js b/Modules/M3/Resources/public/liberty-theme/js/scripts.js index 593d1fe6..ee20611d 100755 --- a/Modules/M3/Resources/public/liberty-theme/js/scripts.js +++ b/Modules/M3/Resources/public/liberty-theme/js/scripts.js @@ -102,8 +102,7 @@ $(function() { 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]; + for (const cellIndex of cellIndexes) { let tblRow = cellIndex['row']+3; // adjusted from 0 indexed let tblCol = cellIndex['column']; // adjusted from 0 indexed let xlCol = numberToLetters(tblCol); diff --git a/Modules/M3/Services/PostgresProgramBridge.php b/Modules/M3/Services/PostgresProgramBridge.php index 1ea9c677..3a901017 100755 --- a/Modules/M3/Services/PostgresProgramBridge.php +++ b/Modules/M3/Services/PostgresProgramBridge.php @@ -22,33 +22,25 @@ class PostgresProgramBridge public function setOptions(array $options): self { - unset($options); - return $this; } - public function addParameterChar(string $io, int $size, string $comment = '', string $name = '', mixed $value = null, mixed ...$rest): array + public function AddParameterChar(string $io, int $size, string $comment = '', string $name = '', mixed $value = null, mixed ...$rest): array { - unset($rest); - return compact('io', 'size', 'comment', 'name', 'value'); } - public function addParameterPackDec(string $io, int $length, int $scale, string $comment = '', string $name = '', mixed $value = null, mixed ...$rest): array + public function AddParameterPackDec(string $io, int $length, int $scale, string $comment = '', string $name = '', mixed $value = null, mixed ...$rest): array { - unset($rest); - - return compact('io', 'length', 'scale', 'comment', 'name', 'value'); + return ['type' => 'packed_decimal'] + compact('io', 'length', 'scale', 'comment', 'name', 'value'); } - public function addParameterZoned(string $io, int $length, int $scale, string $comment = '', string $name = '', mixed $value = null, mixed ...$rest): array + public function AddParameterZoned(string $io, int $length, int $scale, string $comment = '', string $name = '', mixed $value = null, mixed ...$rest): array { - unset($rest); - - return compact('io', 'length', 'scale', 'comment', 'name', 'value'); + return ['type' => 'zoned_decimal'] + compact('io', 'length', 'scale', 'comment', 'name', 'value'); } - public function pgmCall(string $program, ?string $library = null, array $parameters = [], array $returnParameters = [], array $options = []): array|false + public function PgmCall(string $program, ?string $library = null, array $parameters = [], array $returnParameters = [], array $options = []): array|false { return $this->queue('program', $program, $library, [ 'parameters' => $parameters, @@ -57,7 +49,7 @@ class PostgresProgramBridge ]); } - public function clCommand(string $command): array|false + public function CLCommand(string $command): array|false { return $this->queue('command', $command, null, []); } diff --git a/resources/js/app.js b/resources/js/app.js index cf78a4cc..bea37323 100755 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -51,7 +51,7 @@ function renderWmsCharts() { return; } - const type = canvas.getAttribute('data-wms-chart'); + const type = canvas.dataset.wmsChart; const labels = parseJsonAttribute(canvas, 'data-labels'); const series = parseJsonAttribute(canvas, 'data-series'); const values = parseJsonAttribute(canvas, 'data-values'); @@ -146,7 +146,7 @@ function livewireComponentFor(element) { let current = element; while (current && current !== document.documentElement) { - if (current.hasAttribute?.('wire:id')) { + if (current.hasAttribute && current.hasAttribute('wire:id')) { if (!window.Livewire) { return null; }