From 3b11781132f136de460aa7efed7e9cb6c2251090 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Sat, 3 Jan 2026 13:02:44 +0530 Subject: [PATCH] changed to plant code for product characteritics master importer and exporter --- .../ProductCharacteristicsMasterExporter.php | 17 +- .../ProductCharacteristicsMasterImporter.php | 241 +++++++++--------- 2 files changed, 127 insertions(+), 131 deletions(-) diff --git a/app/Filament/Exports/ProductCharacteristicsMasterExporter.php b/app/Filament/Exports/ProductCharacteristicsMasterExporter.php index 60967f0..a2a05c4 100644 --- a/app/Filament/Exports/ProductCharacteristicsMasterExporter.php +++ b/app/Filament/Exports/ProductCharacteristicsMasterExporter.php @@ -14,6 +14,7 @@ class ProductCharacteristicsMasterExporter extends Exporter public static function getColumns(): array { static $rowNumber = 0; + return [ ExportColumn::make('no') ->label('NO') @@ -21,12 +22,12 @@ class ProductCharacteristicsMasterExporter extends Exporter // Increment and return the row number return ++$rowNumber; }), - ExportColumn::make('plant.name') - ->label('PLANT'), + ExportColumn::make('plant.code') + ->label('PLANT CODE'), ExportColumn::make('item.code') ->label('ITEM CODE'), ExportColumn::make('line.name') - ->label('LINE NAME'), //machine.workGroupMaster.name + ->label('LINE NAME'), // machine.workGroupMaster.name ExportColumn::make('machine.workGroupMaster.name') ->label('WORK GROUP MASTER'), ExportColumn::make('machine.work_center') @@ -34,15 +35,15 @@ class ProductCharacteristicsMasterExporter extends Exporter ExportColumn::make('characteristics_type') ->label('CHARACTERISTICS TYPE'), ExportColumn::make('name') - ->label('NAME'), + ->label('CHARACTERISTICS NAME'), ExportColumn::make('inspection_type') ->label('INSPECTION TYPE'), - ExportColumn::make('upper') - ->label('UPPER'), ExportColumn::make('lower') ->label('LOWER'), ExportColumn::make('middle') ->label('MIDDLE'), + ExportColumn::make('upper') + ->label('UPPER'), ExportColumn::make('created_at') ->label('CREATED AT'), ExportColumn::make('updated_at') @@ -59,10 +60,10 @@ class ProductCharacteristicsMasterExporter extends Exporter public static function getCompletedNotificationBody(Export $export): string { - $body = 'Your product characteristics master export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.'; + $body = 'Your product characteristics master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.'; if ($failedRowsCount = $export->getFailedRowsCount()) { - $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.'; + $body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.'; } return $body; diff --git a/app/Filament/Imports/ProductCharacteristicsMasterImporter.php b/app/Filament/Imports/ProductCharacteristicsMasterImporter.php index 650c9b4..23711db 100644 --- a/app/Filament/Imports/ProductCharacteristicsMasterImporter.php +++ b/app/Filament/Imports/ProductCharacteristicsMasterImporter.php @@ -9,12 +9,12 @@ use App\Models\Plant; use App\Models\ProductCharacteristicsMaster; use App\Models\User; use App\Models\WorkGroupMaster; +use Filament\Actions\Imports\Exceptions\RowImportFailedException; use Filament\Actions\Imports\ImportColumn; use Filament\Actions\Imports\Importer; use Filament\Actions\Imports\Models\Import; -use Str; -use Filament\Actions\Imports\Exceptions\RowImportFailedException; use Illuminate\Support\Facades\Auth; +use Str; class ProductCharacteristicsMasterImporter extends Importer { @@ -25,38 +25,38 @@ class ProductCharacteristicsMasterImporter extends Importer return [ ImportColumn::make('plant') ->requiredMapping() - ->exampleHeader('Plant Name') - ->example('Ransar Industries-I') - ->label('Plant Name') - ->relationship(resolveUsing:'name') + ->exampleHeader('Plant Code') + ->example('1000') + ->label('Plant Code') + ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('item') ->requiredMapping() ->exampleHeader('Item Code') ->example('630214') ->label('Item Code') - ->relationship(resolveUsing:'code') + ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('line') ->requiredMapping() - ->exampleHeader('Line') + ->exampleHeader('Line Name') ->example('4 inch pump line') - ->label('Line') - ->relationship(resolveUsing:'name') + ->label('Line Name') + ->relationship(resolveUsing: 'name') ->rules(['required']), ImportColumn::make('work_group_master_id') ->label('Group Work Center') ->requiredMapping() ->exampleHeader('Group Work Center') ->example('RMGCGABC') - ->relationship(resolveUsing:'name') + ->relationship(resolveUsing: 'name') ->rules(['required']), ImportColumn::make('machine') ->requiredMapping() ->exampleHeader('Work Center') ->example('RMGCE001') ->label('Work Center') - ->relationship(resolveUsing:'work_center') + ->relationship(resolveUsing: 'work_center') ->rules(['required']), ImportColumn::make('characteristics_type') ->exampleHeader('Characteristics Type') @@ -64,9 +64,9 @@ class ProductCharacteristicsMasterImporter extends Importer ->label('Characteristics Type') ->rules(['required']), ImportColumn::make('name') - ->exampleHeader('Name') + ->exampleHeader('Characteristics Name') ->example('Body') - ->label('Name') + ->label('Characteristics Name') ->rules(['required']), ImportColumn::make('inspection_type') ->exampleHeader('Inspection Type') @@ -93,7 +93,7 @@ class ProductCharacteristicsMasterImporter extends Importer ->exampleHeader('Created By') ->example('Admin') ->label('Created By'), - //ImportColumn::make('updated_by'), + // ImportColumn::make('updated_by'), ]; } @@ -102,132 +102,127 @@ class ProductCharacteristicsMasterImporter extends Importer { $warnMsg = []; - $plant = Plant::where('name', $this->data['plant'])->first(); - if (!$plant) { - $warnMsg[] = "Plant not found"; - } + $plantCod = $this->data['plant']; + $plant = null; + if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) { + $warnMsg[] = 'Invalid plant code found'; + } else { + $plant = Plant::where('code', $plantCod)->first(); + if (! $plant) { + $warnMsg[] = 'Plant not found'; + } else { + $itemExists = Item::where('code', $this->data['item'])->first(); + if (! $itemExists) { + $warnMsg[] = 'Item not found'; + } - $itemExists = Item::where('code', $this->data['item'])->first(); - if (!$itemExists) { - $warnMsg[] = "Item not found"; - } + $itemAgainstPlant = Item::where('code', $this->data['item']) + ->where('plant_id', $plant->id) + ->first(); + if (! $itemAgainstPlant) { + $warnMsg[] = 'Item code not found for the given plant'; + } else { + $itemId = $itemAgainstPlant->id; + } - $itemAgainstPlant = Item::where('code', $this->data['item']) - ->where('plant_id', $plant->id) - ->first(); - if (!$itemAgainstPlant) { - $warnMsg[] = "Item code not found for the given plant"; - } - else { - $itemId = $itemAgainstPlant->id; - } + $lineExists = Line::where('name', $this->data['line'])->first(); + if (! $lineExists) { + $warnMsg[] = 'Line not found'; + } - $lineExists = Line::where('name', $this->data['line'])->first(); - if (!$lineExists) { - $warnMsg[] = "Line not found"; - } + $lineAgainstPlant = Line::where('name', $this->data['line']) + ->where('plant_id', $plant->id) + ->first(); - $lineAgainstPlant = Line::where('name', $this->data['line']) - ->where('plant_id', $plant->id) - ->first(); + if (! $lineAgainstPlant) { + $warnMsg[] = 'Line not found for the given plant'; + } else { + $LineId = $lineAgainstPlant->id; + } - if (!$lineAgainstPlant) { - $warnMsg[] = "Line not found for the given plant"; - } - else - { - $LineId = $lineAgainstPlant->id; - } + $WorkgroupMaster = WorkGroupMaster::where('name', $this->data['work_group_master_id'])->where('plant_id', $plant->id)->first(); + if (! $WorkgroupMaster) { + $warnMsg[] = 'Work Group Master value not found'; + } else { - $WorkgroupMaster = WorkGroupMaster::where('name', $this->data['work_group_master_id'])->where('plant_id', $plant->id)->first(); - if (!$WorkgroupMaster) { - $warnMsg[] = "Work Group Master value not found"; - } - else { + $workGroupMasterId = $WorkgroupMaster->id; - $workGroupMasterId = $WorkgroupMaster->id; + // 2. Now check if this WorkGroupMaster id exists in ANY of the 10 columns + $existsInLine = Line::where('plant_id', $plant->id) + ->where(function ($q) use ($workGroupMasterId) { + for ($i = 1; $i <= 10; $i++) { + $q->orWhere("work_group{$i}_id", $workGroupMasterId); + } + }) + ->exists(); - // 2. Now check if this WorkGroupMaster id exists in ANY of the 10 columns - $existsInLine = Line::where('plant_id', $plant->id) - ->where(function ($q) use ($workGroupMasterId) { - for ($i = 1; $i <= 10; $i++) { - $q->orWhere("work_group{$i}_id", $workGroupMasterId); + if (! $existsInLine) { + $warnMsg[] = "Work Group Master '{$WorkgroupMaster->name}' is not mapped to any line in this plant"; + } else { + $workGroupMasterId = $WorkgroupMaster->id; } - }) - ->exists(); + } - if (!$existsInLine) { - $warnMsg[] = "Work Group Master '{$WorkgroupMaster->name}' is not mapped to any line in this plant"; - } - else { - $workGroupMasterId = $WorkgroupMaster->id; + $machine = Machine::where('work_center', $this->data['machine'])->first(); + if (! $machine) { + $warnMsg[] = 'Work Center not found'; + } else { + $machineId = $machine->id; + } + + $machineAgainstPlant = Machine::where('work_center', $this->data['machine']) + ->where('plant_id', $plant->id) + ->first(); + + if (! $machineAgainstPlant) { + $warnMsg[] = 'Work Center not found for the given plant'; + } else { + $machineId = $machineAgainstPlant->id; + } + + $user = User::where('name', $this->data['created_by'])->first(); + if (! $user) { + $warnMsg[] = 'Operator ID not found'; + } + + if (($this->data['inspection_type'] ?? null) == 'Value') { + $upper = $this->data['upper'] ?? null; + $lower = $this->data['lower'] ?? null; + $middle = $this->data['middle'] ?? null; + + if (is_null($upper) || is_null($lower) || is_null($middle)) { + $warnMsg[] = "For 'Value' inspection type, Upper, Lower, and Middle values are required."; + } elseif (! is_numeric($upper) || ! is_numeric($lower) || ! is_numeric($middle)) { + $warnMsg[] = 'Upper, Lower, and Middle values must be numeric.'; + } elseif (! ($lower <= $middle && $middle <= $upper)) { + $warnMsg[] = "For 'Value' inspection type, values must satisfy: Lower ≤ Middle ≤ Upper."; + } + } } } - - $machine = Machine::where('work_center', $this->data['machine'])->first(); - if (!$machine) { - $warnMsg[] = "Work Center not found"; - } - else { - $machineId = $machine->id; - } - - $machineAgainstPlant = Machine::where('work_center', $this->data['machine']) - ->where('plant_id', $plant->id) - ->first(); - - if (!$machineAgainstPlant) { - $warnMsg[] = "Work Center not found for the given plant"; - } - else - { - $machineId = $machineAgainstPlant->id; - } - - $user = User::where('name', $this->data['created_by'])->first(); - if (!$user) { - $warnMsg[] = "Operator ID not found"; - } - - if (($this->data['inspection_type'] ?? null) == 'Value') { - $upper = $this->data['upper'] ?? null; - $lower = $this->data['lower'] ?? null; - $middle = $this->data['middle'] ?? null; - - if (is_null($upper) || is_null($lower) || is_null($middle)) { - $warnMsg[] = "For 'Value' inspection type, Upper, Lower, and Middle values are required."; - } elseif (!is_numeric($upper) || !is_numeric($lower) || !is_numeric($middle)) { - $warnMsg[] = "Upper, Lower, and Middle values must be numeric."; - } elseif (!($lower <= $middle && $middle <= $upper)) { - $warnMsg[] = "For 'Value' inspection type, values must satisfy: Lower ≤ Middle ≤ Upper."; - } - } - - if (!empty($warnMsg)) { + if (! empty($warnMsg)) { throw new RowImportFailedException(implode(', ', $warnMsg)); - } - else - { + } else { $record = ProductCharacteristicsMaster::firstOrNew([ - 'plant_id' => $plant->id, - 'item_id' => $itemId, - 'line_id' => $LineId, + 'plant_id' => $plant->id, + 'item_id' => $itemId, + 'line_id' => $LineId, 'work_group_master_id' => $workGroupMasterId, - 'machine_id' => $machineId, + 'machine_id' => $machineId, ]); $currentUser = Auth::check() ? Auth::user()->name : ($this->data['created_by'] ?? 'System'); // If record is new, fill all fields - if (!$record->exists) { - $record->name = $this->data['name']; + if (! $record->exists) { + $record->name = $this->data['name']; $record->characteristics_type = $this->data['characteristics_type']; - $record->inspection_type = $this->data['inspection_type']; - $record->upper = $this->data['upper'] ?? null; - $record->lower = $this->data['lower'] ?? null; - $record->middle = $this->data['middle'] ?? null; - $record->created_by = $currentUser; + $record->inspection_type = $this->data['inspection_type']; + $record->upper = $this->data['upper'] ?? null; + $record->lower = $this->data['lower'] ?? null; + $record->middle = $this->data['middle'] ?? null; + $record->created_by = $currentUser; } else { // Record exists → update only updated_by and updated_at $record->updated_by = $currentUser; @@ -264,17 +259,17 @@ class ProductCharacteristicsMasterImporter extends Importer // return null; // } - //return new WorkGroupMaster(); + // return new WorkGroupMaster(); - // return new ProductCharacteristicsMaster(); + // return new ProductCharacteristicsMaster(); } public static function getCompletedNotificationBody(Import $import): string { - $body = 'Your product characteristics master import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.'; + $body = 'Your product characteristics master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.'; if ($failedRowsCount = $import->getFailedRowsCount()) { - $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.'; + $body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.'; } return $body;