From 558f0a39bd8a765ca585f37eb4ea55190705d00a Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Tue, 10 Nov 2026 14:11:15 +0530 Subject: [PATCH 1/2] Added item code duplicate validation in production plan resource page --- .../Resources/ProductionPlanResource.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/Filament/Resources/ProductionPlanResource.php b/app/Filament/Resources/ProductionPlanResource.php index 4946f935..ad655f12 100644 --- a/app/Filament/Resources/ProductionPlanResource.php +++ b/app/Filament/Resources/ProductionPlanResource.php @@ -826,6 +826,39 @@ class ProductionPlanResource extends Resource ->label('Import Production Plans') ->color('warning') ->importer(ProductionPlanImporter::class) + ->fileRules([ + fn (): \Closure => function ($attribute, $value, $fail) { + + $csv = \League\Csv\Reader::createFromPath( + $value->getRealPath(), + 'r' + ); + + $csv->setHeaderOffset(0); + + $itemCodes = []; + + foreach ($csv->getRecords() as $record) { + $itemCode = trim((string) ($record['Item Code'] ?? '')); + + if ($itemCode !== '') { + $itemCodes[] = $itemCode; + } + } + + $duplicates = collect($itemCodes) + ->duplicates() + ->unique() + ->values(); + + if ($duplicates->isNotEmpty()) { + $fail( + 'Duplicate Item Codes found: ' . + $duplicates->implode(', ') + ); + } + }, + ]) ->visible(function () { return Filament::auth()->user()->can('view import production plan'); }), From 6eda73b4e15018f0f11b9373b5f624d58413b4ab Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Tue, 10 Nov 2026 14:15:57 +0530 Subject: [PATCH 2/2] Changed logic in production plan page against plant code checking item code --- .../Resources/ProductionPlanResource.php | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/Filament/Resources/ProductionPlanResource.php b/app/Filament/Resources/ProductionPlanResource.php index ad655f12..f6c409c6 100644 --- a/app/Filament/Resources/ProductionPlanResource.php +++ b/app/Filament/Resources/ProductionPlanResource.php @@ -839,22 +839,32 @@ class ProductionPlanResource extends Resource $itemCodes = []; foreach ($csv->getRecords() as $record) { - $itemCode = trim((string) ($record['Item Code'] ?? '')); - if ($itemCode !== '') { - $itemCodes[] = $itemCode; + $values = array_values($record); + + $plantCode = trim((string) ($values[0] ?? '')); + $itemCode = trim((string) ($values[1] ?? '')); + + if ($plantCode === '' || $itemCode === '') { + continue; } + + $key = $plantCode . '|' . $itemCode; + + $itemCodes[] = $key; } $duplicates = collect($itemCodes) ->duplicates() ->unique() + ->values() + ->map(fn ($duplicate) => explode('|', $duplicate)[1]) + ->unique() ->values(); if ($duplicates->isNotEmpty()) { $fail( - 'Duplicate Item Codes found: ' . - $duplicates->implode(', ') + 'Duplicate Item Codes found: ' . $duplicates->implode(', ') ); } },