requiredMapping() ->exampleHeader('PLANT CODE') ->example('1000') ->label('PLANT CODE') ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('line') ->requiredMapping() ->exampleHeader('LINE NAME') ->example(' Polywrapped line') ->label('LINE NAME') ->relationship(resolveUsing: 'name'), 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('coil_number') ->exampleHeader('COIL NUMBER') ->example('01') ->label('COIL NUMBER') ->rules(['required']), ImportColumn::make('order_quantity') ->exampleHeader('ORDER QUANTITY') ->example('100') ->label('ORDER QUANTITY') ->rules(['required']), ImportColumn::make('received_quantity') ->exampleHeader('RECEIVED QUANTITY') ->example('01') ->label('RECEIVED QUANTITY') ->rules(['required']), ImportColumn::make('sfg_number') ->exampleHeader('SFG NUMBER') ->example('200000220613-72') ->label('SFG NUMBER'), ImportColumn::make('machine_name') ->exampleHeader('MACHINE NAME') ->example('WMIWRM13 - 2-L2') ->label('MACHINE NAME'), ImportColumn::make('scrap_quantity') ->exampleHeader('SCRAP QUANTITY') ->example('0') ->label('SCRAP QUANTITY'), ImportColumn::make('rework_status') ->exampleHeader('REWORK STATUS') ->example('0') ->label('REWORK STATUS'), ImportColumn::make('created_at') ->exampleHeader('CREATED AT') ->example('2026-02-20 13:00:00') ->label('CREATED AT') ->rules(['required']), ImportColumn::make('updated_at') ->exampleHeader('UPDATED AT') ->example('2026-02-20 13:00:00') ->label('UPDATED AT'), ImportColumn::make('created_by') ->exampleHeader('CREATED BY') ->example('RAW01234') ->label('CREATED BY'), ImportColumn::make('updated_by') ->exampleHeader('UPDATED BY') ->example('RAW01234') ->label('UPDATED BY'), ]; } public function resolveRecord(): ?ProcessOrder { $warnMsg = []; $plantCod = $this->data['plant']; $plant = null; $iCode = trim($this->data['item']); $lineName = trim($this->data['line']); $coilNo = trim($this->data['coil_number'] ?? ''); $sfgNo = trim($this->data['sfg_number'] ?? ''); $machineName = trim($this->data['machine_name'] ?? ''); $scrapQuan = trim($this->data['scrap_quantity'] ?? ''); $reworkStatus = trim($this->data['rework_status'] ?? ''); $orderQuan = trim($this->data['order_quantity'] ?? ''); $recQuan = trim($this->data['received_quantity'] ?? ''); $processOrder = trim($this->data['process_order'] ?? ''); $createdAt = trim($this->data['created_at'] ?? ''); $createdBy = trim($this->data['created_by'] ?? ''); $updatedAt = trim($this->data['updated_at'] ?? ''); $updatedBy = trim($this->data['updated_by'] ?? ''); // $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'; } if($lineName != null && $lineName != ''){ $lineAgaPlant = Line::where('plant_id', $plant->id)->where('name', $lineName)->first(); if(! $lineAgaPlant){ $warnMsg[] = "Line not found against plant code $plantCod"; } else{ $lineId = $lineAgaPlant->id; } } if($scrapQuan == null || $scrapQuan == ''){ $scrapQuan = 0; } // $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)); } $lineId = null; if($lineName != null && $lineName != ''){ $existingCoil = ProcessOrder::where('plant_id', $plant->id) ->where('process_order', $processOrder) ->where('line_id', $lineId) ->where('coil_number', $coilNo) ->first(); if (! $existingCoil) { ProcessOrder::Create( [ 'plant_id' => $plant->id, 'line_id' => $lineId, 'process_order' => $processOrder, 'item_id' => $itemCode->id, 'coil_number' => $coilNo, 'order_quantity' => $orderQuan, 'received_quantity' => $recQuan, 'scrap_quantity' => $scrapQuan, 'sfg_number' => $sfgNo, 'machine_name' => $machineName, 'rework_status' => $reworkStatus, 'created_at' => $createdAt, 'updated_at' => $updatedAt, 'created_by' => $createdBy, 'updated_by' => $updatedBy, ] ); } else { ProcessOrder::where('plant_id', $plant->id) ->where('process_order', $processOrder) ->where('line_id', $lineId) ->where('coil_number', $coilNo) ->update([ // 'order_quantity' => $orderQty, 'received_quantity' => $recQuan, 'scrap_quantity' => $scrapQuan, // 'sfg_number' => $sfgNo, // 'machine_name' => $machineId, 'rework_status' => $reworkStatus, 'updated_by' => $updatedBy, 'updated_at' => $updatedAt, ]); } } else if($lineName == null || $lineName == ''){ $existing = ProcessOrder::where('plant_id', $plant->id) ->where('process_order', $processOrder) ->where('coil_number', $coilNo) ->first(); if(!$existing){ ProcessOrder::Create( [ 'plant_id' => $plant->id, 'line_id' => null, 'process_order' => $processOrder, 'item_id' => $itemCode->id, 'coil_number' => $coilNo, 'order_quantity' => $orderQuan, 'received_quantity' => $recQuan, 'scrap_quantity' => $scrapQuan ?? 0, 'sfg_number' => $sfgNo, 'machine_name' => $machineName, 'rework_status' => $reworkStatus, 'created_at' => $createdAt, 'updated_at' => $updatedAt, 'created_by' => $createdBy, 'updated_by' => $updatedBy, ] ); } else { ProcessOrder::where('plant_id', $plant->id) ->where('process_order', $processOrder) ->where('line_id', $lineId) ->where('coil_number', $coilNo) ->update([ // 'order_quantity' => $orderQty, 'received_quantity' => $recQuan, 'scrap_quantity' => $scrapQuan, // 'sfg_number' => $sfgNo, // 'machine_name' => $machineId, 'rework_status' => $reworkStatus, 'updated_by' => $updatedBy, 'updated_at' => $updatedAt, ]); } } return null; // 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; } }