From b4a2cf132cbfa751ca260315131c7e76f6dccefc Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Sat, 8 Nov 2025 01:12:53 +0530 Subject: [PATCH] Added logic for checking document number against plant in invoice data validations screen --- .../InvoiceDataValidationResource.php | 87 +++++++++++++++---- 1 file changed, 70 insertions(+), 17 deletions(-) diff --git a/app/Filament/Resources/InvoiceDataValidationResource.php b/app/Filament/Resources/InvoiceDataValidationResource.php index 3b1a9b3..b4f76ac 100644 --- a/app/Filament/Resources/InvoiceDataValidationResource.php +++ b/app/Filament/Resources/InvoiceDataValidationResource.php @@ -215,6 +215,8 @@ class InvoiceDataValidationResource extends Resource $seenPlantDoc = []; $duplicateEntries = []; $duplicateEntriesExcel = []; + $duplicateGroupedByPlant = []; + $duplicateGroupedByPlantExcel = []; foreach ($rows as $index => $row) { @@ -271,13 +273,13 @@ class InvoiceDataValidationResource extends Resource if ($exists) { - $duplicateEntries[] = "Duplicate found at Row {$index}: Document {$DocNo} already exists for Plant {$plant->name}"; + $duplicateEntries[] = "Duplicate record: Document Number '{$DocNo}' already exists for Plant {$plant->name}"; } //Also check duplicates within the same file --- $uniqueKey = $plantCode . '_' . $DocNo; if (in_array($uniqueKey, $seenPlantDoc)) { - $duplicateEntriesExcel[] = "Duplicate in file at Row {$index}: Document {$DocNo} already processed for Plant {$plant->name}"; + $duplicateEntriesExcel[] = "Duplicate in file at Row {$index}: Document Number '{$DocNo}' already exist for Plant {$plant->name}"; } $seenPlantDoc[] = $uniqueKey; @@ -344,43 +346,94 @@ class InvoiceDataValidationResource extends Resource } return; } - // if (!empty($plantCode) && !empty($DocNo)) { - // $key = $plantCode . '|' . $DocNo; - // if (isset($seenPlantDoc[$key])) { - // // Duplicate found - // $duplicateEntries[] = "Row {$index}: Duplicate document number '{$DocNo}' found in plant '{$plantCode}' (also in Row {$seenPlantDoc[$key]})"; - // } else { - // $seenPlantDoc[$key] = $index; // store first occurrence - // } - // } - if(!empty($duplicateEntries)) + foreach ($duplicateEntries as $message) { - $errorMsg = 'Duplicate Entries found:
' . implode('
', $duplicateEntries); + if (preg_match("/Document Number '([^']+)' already exists for Plant (.+)/", $message, $matches)) { + $docNo = $matches[1]; + $plantName = trim($matches[2]); + $duplicateGroupedByPlant[$plantName][] = $docNo; + } + } + + foreach ($duplicateEntriesExcel as $message) { + if (preg_match("/Document Number '([^']+)' already exist(?:s)?(?: for Plant (.+))?/", $message, $matches)) { + $docNo = $matches[1]; + $plantName = $matches[2] ?? 'Unknown'; + $duplicateGroupedByPlantExcel[$plantName][] = $docNo; + } + } + + if (!empty($duplicateGroupedByPlant)) { + $errorMsg = 'Duplicate Entries in Database:
'; + + foreach ($duplicateGroupedByPlant as $plant => $docNumbers) { + $count = count($docNumbers); + + if ($count > 10) + { + $errorMsg .= "Duplicate record(s) for Plant {$plant}: {$count} document numbers already exist in DB
"; + } + else + { + $errorMsg .= "Duplicate record(s) for Plant {$plant}: " + . implode(', ', $docNumbers) + . " already exist
"; + } + } + Notification::make() - ->title('Duplicate Entries in Database') + //->title('Duplicate Entries in Database') ->body($errorMsg) ->danger() ->send(); + if ($disk->exists($path)) { $disk->delete($path); } return; } - if(!empty($duplicateEntriesExcel)) + if (!empty($duplicateGroupedByPlantExcel)) { - $errorMsg = 'Duplicate Entries found in the uploaded file:
' . implode('
', $duplicateEntriesExcel); + + $errorMsg = 'Duplicate Entries found in Uploaded File:
'; + + foreach ($duplicateGroupedByPlantExcel as $plant => $docNumbers) + { + // Remove duplicate document numbers for each plant + $uniqueDocNumbers = array_unique($docNumbers); + $count = count($uniqueDocNumbers); + + if ($count > 10) { + $errorMsg .= "Duplicate record(s) for Plant {$plant}: {$count} document numbers already exist in uploaded file
"; + } else { + $errorMsg .= "Duplicate record(s) for Plant {$plant}: " + . implode(', ', $uniqueDocNumbers) + . " already exist
"; + } + } + Notification::make() - ->title('Duplicate Entries in Uploaded File') + //->title('Duplicate Entries in Uploaded File') ->body($errorMsg) ->danger() ->send(); + if ($disk->exists($path)) { $disk->delete($path); } return; } + // if(!empty($duplicateEntriesExcel)) + // { + // //$errorMsg = 'Duplicate Entries found in the uploaded file:
' . implode('
', $duplicateEntriesExcel); + // $errorMsg = buildDuplicateMessage($duplicateEntriesExcel, 'Duplicate Entries found in Uploaded File'); + // Notification::make() + // ->title('Duplicate Entries in Uploaded File') + // ->body($errorMsg) + + $successCount = 0; $failCount = 0;