requiredMapping() ->exampleHeader('Plant Name') ->example('Ransar Industries-I') ->label('Plant Name') ->relationship(resolveUsing:'name') ->rules(['required']), ImportColumn::make('item') ->requiredMapping() ->exampleHeader('Item Code') ->example('630214') ->label('Item Code') ->relationship(resolveUsing:'code') ->rules(['required']), ImportColumn::make('line') ->requiredMapping() ->exampleHeader('Line') ->example('4 inch pump line') ->label('Line') ->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') ->rules(['required']), ImportColumn::make('machine') ->requiredMapping() ->exampleHeader('Work Center') ->example('RMGCE001') ->label('Work Center') ->relationship(resolveUsing:'work_center') ->rules(['required']), ImportColumn::make('characteristics_type') ->exampleHeader('Characteristics Type') ->example('Process or Product') ->label('Characteristics Type') ->rules(['required']), ImportColumn::make('name') ->exampleHeader('Name') ->example('Body') ->label('Name') ->rules(['required']), ImportColumn::make('inspection_type') ->exampleHeader('Inspection Type') ->example('Visual or Value') ->label('Inspection Type') ->rules(['required']), ImportColumn::make('lower') ->exampleHeader('Lower') ->example('-0.2') ->label('Lower') ->rules(['numeric']), ImportColumn::make('middle') ->exampleHeader('Middle') ->example('1') ->label('Middle') ->numeric() ->rules(['numeric']), ImportColumn::make('upper') ->exampleHeader('Upper') ->example('0.2') ->label('Upper') ->rules(['numeric']), ImportColumn::make('created_by') ->exampleHeader('Created By') ->example('Admin') ->label('Created By'), //ImportColumn::make('updated_by'), ]; } public function resolveRecord(): ?ProductCharacteristicsMaster { $warnMsg = []; $plant = Plant::where('name', $this->data['plant'])->first(); if (!$plant) { $warnMsg[] = "Plant 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; } $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(); 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 { $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(); 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."; } } if (!empty($warnMsg)) { throw new RowImportFailedException(implode(', ', $warnMsg)); } else { $record = ProductCharacteristicsMaster::firstOrNew([ 'plant_id' => $plant->id, 'item_id' => $itemId, 'line_id' => $LineId, 'work_group_master_id' => $workGroupMasterId, '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']; $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; } else { // Record exists → update only updated_by and updated_at $record->updated_by = $currentUser; $record->touch(); } $record->save(); return null; } // else // { // ProductCharacteristicsMaster::updateOrCreate( // [ // 'plant_id' => $plant->id, // 'item_id' => $itemId, // 'line_id' => $LineId, // 'work_group_master_id' => $workGroupMasterId, // 'machine_id'=> $machineId, // ], // [ // 'name' => $this->data['name'], // 'characteristics_type' => $this->data['characteristics_type'], // 'inspection_type' => $this->data['inspection_type'], // 'upper' => $this->data['upper'] ?? null, // 'lower' => $this->data['lower'] ?? null, // 'middle' => $this->data['middle'] ?? null, // //'created_by' => user ?? $this->data['created_by'], // 'created_by' => Auth::check() ? Auth::user()->name :($this->data['created_by'] ?? null) // ] // ); // return null; // } //return new WorkGroupMaster(); // 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.'; if ($failedRowsCount = $import->getFailedRowsCount()) { $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.'; } return $body; } }