requiredMapping() ->exampleHeader('PLANT CODE') ->example('1000') ->label('PLANT CODE') ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('item') ->requiredMapping() ->exampleHeader('ITEM CODE') ->example('123456') ->label('ITEM CODE') ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('process_order') ->exampleHeader('PROCESS ORDER') ->example('202500123456') ->label('PROCESS ORDER') ->rules(['required']), ImportColumn::make('order_quantity') ->exampleHeader('ORDER QUANTITY') ->example('100') ->label('ORDER QUANTITY') ->rules(['required']), // ImportColumn::make('created_by') // ->exampleHeader('CREATED BY') // ->example('RAW01234') // ->label('CREATED BY') // ->rules(['required']), ]; } public function resolveRecord(): ?ProcessOrder { $warnMsg = []; $plantCod = $this->data['plant']; $plant = null; $iCode = trim($this->data['item']); $processOrder = trim($this->data['process_order'] ?? ''); $user = Filament::auth()->user(); $operatorName = $user->name; 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'; } } if (Str::length($iCode) < 6 || ! ctype_alnum($iCode)) { $warnMsg[] = 'Invalid item code found'; } else { $itemCode = Item::where('code', $iCode)->first(); if (! $itemCode) { $warnMsg[] = 'Item Code not found'; } } if ($processOrder == '') { $warnMsg[] = 'Process Order cannot be empty'; } // $user = User::where('name', $this->data['created_by'])->first(); // if (! $user) { // $warnMsg[] = 'User not found'; // } if ($plant && $itemCode && $processOrder != '') { $existingOrder = ProcessOrder::where('plant_id', $plant->id) ->where('process_order', $processOrder) ->first(); if ($existingOrder && $existingOrder->item_id !== ($itemCode->id ?? null)) { $warnMsg[] = 'Same Process Order already exists for this Plant with a different Item Code'; } } if (! empty($warnMsg)) { throw new RowImportFailedException(implode(', ', $warnMsg)); } return ProcessOrder::create([ 'plant_id' => $plant->id, 'item_id' => $itemCode->id, 'process_order' => trim($this->data['process_order']), 'coil_number' => '0', 'order_quantity' => 0, 'received_quantity' => 0, 'created_by' => $operatorName, ]); // return new ProcessOrder(); } public static function getCompletedNotificationBody(Import $import): string { $body = 'Your process order 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; } }