From c8b978984a9aa912916f0c5a864b0b0b0c9aef93 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Fri, 29 May 2026 13:38:21 +0530 Subject: [PATCH] Changed logic in quality validation for based on count displying text boxes --- .../Resources/QualityValidationResource.php | 3343 +++++++++++------ 1 file changed, 2220 insertions(+), 1123 deletions(-) diff --git a/app/Filament/Resources/QualityValidationResource.php b/app/Filament/Resources/QualityValidationResource.php index 34806b6..592c5f9 100644 --- a/app/Filament/Resources/QualityValidationResource.php +++ b/app/Filament/Resources/QualityValidationResource.php @@ -528,37 +528,72 @@ class QualityValidationResource extends Resource } } - foreach ($serialnumber as $field) { - if ($get("{$field}_visible")) { - $set($field, $serialNumber); - $colFld = $field; - if (str_ends_with($colFld, '_qr')) { - $colFld = substr($colFld, 0, -3); + // foreach ($serialnumber as $field) { + // if ($get("{$field}_visible")) { + // $set($field, $serialNumber); + // $colFld = $field; + // if (str_ends_with($colFld, '_qr')) { + // $colFld = substr($colFld, 0, -3); + // } + // $set($colFld, '1'); + // break; + // } + // } + $serialAssigned = false; + + foreach ($serialFields as $column) { + + $colFld = $column; + + if (str_ends_with($colFld, '_qr')) { + $colFld = substr($colFld, 0, -3); + } + + $count = (int) ($stickerMaster->$colFld ?? 0); + + // visibility always + $set($column . '_count', $count); + + $set($column . '_visible', $count > 0); + + // assign serial only once + if (!$serialAssigned && $count > 0) { + + // single textbox + if ($count == 1) { + $set($column . '_1', $serialNumber); } + + // multiple textbox + if ($count > 1) { + + for ($i = 1; $i <= $count; $i++) { + + $set($column . '_' . $i, $serialNumber); + } + } + $set($colFld, '1'); - break; + + $serialAssigned = true; } } - $set('serial_number', $serialNumber); + $set('serial_number', $serialNumber); // Find item based on scanned code $item = Item::where('code', $itemCode) ->where('plant_id', $plantId)->first(); if (! $item) { $set('part_validation_type_options', []); - return; } // Find sticker master - $sticker = StickerMaster::where('plant_id', $plantId) - ->where('item_id', $item->id) - ->first(); + $sticker = StickerMaster::where('plant_id', $plantId)->where('item_id', $item->id)->first(); if (! $sticker) { $set('part_validation_type_options', []); - return; } @@ -809,1438 +844,2500 @@ class QualityValidationResource extends Resource Forms\Components\Hidden::make('serial_number_motor'), - Forms\Components\TextInput::make('serial_number_motor_qr') - ->label('Serial Number Motor') - ->reactive() - ->readOnly(fn (callable $get) => ! $get('id')) - ->hidden(fn (callable $get) => ! $get('serial_number_motor_qr_visible')) // Controls visibility - ->default(''), + // Forms\Components\TextInput::make('serial_number_motor_qr') + // ->label('Serial Number Motor') + // ->reactive() + // ->readOnly(fn (callable $get) => ! $get('id')) + // ->hidden(fn (callable $get) => ! $get('serial_number_motor_qr_visible')) // Controls visibility + // ->default(''), + Forms\Components\Group::make() + ->schema(function (callable $get) { + + $fields = []; + + $count = (int) ($get('serial_number_motor_qr_count') ?? 0); + + for ($i = 1; $i <= $count; $i++) { + + $fields[] = Forms\Components\TextInput::make("serial_number_motor_qr_$i") + ->label("Serial Number Motor $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { + + $set("serial_number_motor_error_$i", null); + + if (empty($state)) { + return; + } + + $visibleSerialNumber = $get('serial_number'); + + if (strpos($state, '|') == false) { + + if (strlen($state) < 9) { + $set("serial_number_motor_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } + + if (!ctype_alnum($state)) { + $set("serial_number_motor_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } + + if ($visibleSerialNumber != $state) { + $set("serial_number_motor_error_$i", 'Serial number does not match.'); + $set("serial_number_motor_qr_$i", null); + return; + } + + $set("serial_number_motor_qr_$i", $state); + $set('serial_number_motor', '1'); + return; + } + + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("serial_number_motor_error_$i", 'Scan valid QR code.'); + return; + } + + $parts = explode('|', $state); + + $itemCode = trim($parts[0]); + + $serialNumber = trim($parts[1]); + + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); + + if ($itemCode != $get('item_id')) { + $set("serial_number_motor_error_$i", 'Item code does not match.'); + return; + } + + if ($visibleSerialNumber != $serialNumber) { + $set("serial_number_motor_error_$i", 'Serial number does not match.'); + $set("serial_number_motor_qr_$i", null); + return; + } + + $set("serial_number_motor_error_$i", null); + $set("serial_number_motor_qr_$i", $serialNumber); + $set('serial_number_motor', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("serial_number_motor_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("serial_number_motor_error_$i")) + ->hintColor('danger'); + } + + return $fields; + }) + ->columns(2), Forms\Components\Hidden::make('serial_number_pump'), - Forms\Components\TextInput::make('serial_number_pump_qr') - ->label('Serial Number Pump') - ->reactive() - ->required() - ->hidden(fn (callable $get) => ! $get('serial_number_pump_qr_visible')) - ->default('') - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // Forms\Components\TextInput::make('serial_number_pump_qr') + // ->label('Serial Number Pump') + // ->reactive() + // ->required() + // ->hidden(fn (callable $get) => ! $get('serial_number_pump_qr_visible')) + // ->default('') + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('serial_number_pump_error', null); + // $set('serial_number_pump_error', null); - if (empty($state)) { - $set('serial_number_pump_error', null); + // if (empty($state)) { + // $set('serial_number_pump_error', null); - return; + // return; + // } + + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; + + // if ($visibleSerialNumber != $serialNumber) { + // $set('serial_number_pump_error', 'Serial number does not match.'); + // $set('serial_number_pump_qr', null); + + // return; + // } else { + // $set('serial_number_pump_error', null); + // $set('serial_number_pump_qr', $serialNumber); + // $set('serial_number_pump', '1'); + + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('serial_number_pump_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('serial_number_pump_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('serial_number_pump_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('serial_number_pump_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('serial_number_pump_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('serial_number_pump_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('serial_number_pump_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('serial_number_pump_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('serial_number_pump_error', 'Item code does not match.'); + + // return; + // } + + // $set('serial_number_pump_qr', $serialNumber); + // $set('serial_number_pump', '1'); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('serial_number_pump_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('serial_number_pump_error', 'Serial number does not match.'); + // $set('serial_number_pump_qr', null); + + // return; + // } else { + // $set('serial_number_pump_error', null); + // $set('serial_number_pump_qr', $serialNumber); + // $set('serial_number_pump', '1'); + // } + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('serial_number_pump_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('serial_number_pump_error') ? $get('serial_number_pump_error') : null) + // ->hintColor('danger'), + + + Forms\Components\Group::make() + ->schema(function (callable $get) { + + $fields = []; + + $count = (int) ($get('serial_number_pump_qr_count') ?? 0); + + for ($i = 1; $i <= $count; $i++) { + + $fields[] = Forms\Components\TextInput::make("serial_number_pump_qr_$i") + ->label("Serial Number Pump $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { + + $set("serial_number_pump_error_$i", null); + + if (empty($state)) { + $set("serial_number_pump_error_$i", null); + return; + } + + if (strpos($state, '|') == false) { + + if (strlen($state) < 9) { + $set("serial_number_pump_error_$i",'Serial Number must be at least 9 digits.'); + return; + } + + if (!ctype_alnum($state)) { + $set("serial_number_pump_error_$i",'Serial Number must contain alpha-numeric values.'); + return; + } + + $visibleSerialNumber = $get('serial_number'); + + if ($visibleSerialNumber != $state) { + $set("serial_number_pump_error_$i",'Serial number does not match.'); + $set("serial_number_pump_qr_$i", null); + return; + } + else{ + $set("serial_number_pump_qr_$i", $state); + $set("serial_number_pump", '1'); + return; + } + } + + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/',$state)) + { + $set("serial_number_pump_error_$i",'Scan valid QR code.'); + return; + } + + $parts = explode('|', $state); + + $itemCode = trim($parts[0]); + + $serialNumber = trim($parts[1]); + + $serialNumber = preg_replace('/\/[MmPpCc]$/','',$serialNumber); + + $expectedItemCode = trim((string) $get('item_id')); + + if ($itemCode != $expectedItemCode) { + $set("serial_number_pump_error_$i",'Item code does not match.'); + return; + } + + $visibleSerialNumber = $get('serial_number'); + + if ($visibleSerialNumber != $serialNumber) { + + $set("serial_number_pump_error_$i",'Serial number does not match.'); + $set("serial_number_pump_qr_$i", null); + return; + } + else + { + $set("serial_number_pump_error_$i", null); + $set("serial_number_pump_qr_$i", $serialNumber); + $set("serial_number_pump", '1'); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("serial_number_pump_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("serial_number_pump_error_$i")) + ->hintColor('danger'); } - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; - - if ($visibleSerialNumber != $serialNumber) { - $set('serial_number_pump_error', 'Serial number does not match.'); - $set('serial_number_pump_qr', null); - - return; - } else { - $set('serial_number_pump_error', null); - $set('serial_number_pump_qr', $serialNumber); - $set('serial_number_pump', '1'); - - return; - } - } - - if (strlen($state) < 9) { - $set('serial_number_pump_error', 'Serial Number must be at least 9 digits.'); - - return; - } elseif (! ctype_alnum($state)) { - $set('serial_number_pump_error', 'Serial Number must contain alpha-numeric values.'); - - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; - - if (! ctype_alnum($iCode)) { - $set('serial_number_pump_error', 'Item code must contain alpha-numeric values.'); - - return; - } elseif (strlen($iCode) < 6) { - $set('serial_number_pump_error', 'Item code must be at least 6 digits.'); - - return; - } elseif (strlen($sNumber) < 9) { - $set('serial_number_pump_error', 'Serial Number must be at least 9 digits.'); - - return; - } elseif (! ctype_alnum($sNumber)) { - $set('serial_number_pump_error', 'Serial Number must contain alpha-numeric values.'); - - return; - } - - $set('serial_number_pump_error', 'Scan valid QR code.'); - - return; - } else { - $set('serial_number_pump_error', null); - } - - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); - - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove - - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - - $visibleSerialNumber = $get('serial_number'); - - $expectedItemCode = trim((string) $get('item_id')); - - if ($itemCode != $expectedItemCode) { - $set('serial_number_pump_error', 'Item code does not match.'); - - return; - } - - $set('serial_number_pump_qr', $serialNumber); - $set('serial_number_pump', '1'); - - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); - - if (! $serialNumber || trim($serialNumber) == '') { - $set('serial_number_pump_error', null); - - return; - } - - if (! $isMatch) { - $set('serial_number_pump_error', 'Serial number does not match.'); - $set('serial_number_pump_qr', null); - - return; - } else { - $set('serial_number_pump_error', null); - $set('serial_number_pump_qr', $serialNumber); - $set('serial_number_pump', '1'); - } + return $fields; }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('serial_number_pump_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('serial_number_pump_error') ? $get('serial_number_pump_error') : null) - ->hintColor('danger'), + ->columns(2), Forms\Components\Hidden::make('serial_number_pumpset'), - Forms\Components\TextInput::make('serial_number_pumpset_qr') - ->label('Serial Number PumpSet') - ->reactive() - ->readOnly(fn (callable $get) => ! $get('id')) - ->hidden(fn (callable $get) => ! $get('serial_number_pumpset_qr_visible')) - ->default(''), + Forms\Components\Group::make() + ->schema(function (callable $get) { + + $fields = []; + + $count = (int) ($get('serial_number_pumpset_qr_count') ?? 0); + + for ($i = 1; $i <= $count; $i++) { + + $fields[] = Forms\Components\TextInput::make("serial_number_pumpset_qr_$i") + ->label("Serial Number PumpSet $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { + + $set("serial_number_pumpset_error_$i", null); + + if (empty($state)) { + return; + } + + $visibleSerialNumber = $get('serial_number'); + + if (strpos($state, '|') == false) { + + if (strlen($state) < 9) { + $set("serial_number_pumpset_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } + + if (!ctype_alnum($state)) { + $set("serial_number_pumpset_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } + + if ($visibleSerialNumber != $state) { + $set("serial_number_pumpset_error_$i", 'Serial number does not match.'); + $set("serial_number_pumpset_qr_$i", null); + return; + } + + $set("serial_number_pumpset_qr_$i", $state); + $set('serial_number_pumpset', '1'); + return; + } + + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("serial_number_pumpset_error_$i", 'Scan valid QR code.'); + return; + } + + $parts = explode('|', $state); + + $itemCode = trim($parts[0]); + + $serialNumber = trim($parts[1]); + + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); + + if ($itemCode != $get('item_id')) { + $set("serial_number_pumpset_error_$i", 'Item code does not match.'); + return; + } + + if ($visibleSerialNumber != $serialNumber) { + $set("serial_number_pumpset_error_$i", 'Serial number does not match.'); + $set("serial_number_pumpset_qr_$i", null); + return; + } + + $set("serial_number_pumpset_error_$i", null); + $set("serial_number_pumpset_qr_$i", $serialNumber); + $set('serial_number_pumpset', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("serial_number_pumpset_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("serial_number_pumpset_error_$i")) + ->hintColor('danger'); + } + + return $fields; + }) + ->columns(2), + + // Forms\Components\TextInput::make('serial_number_pumpset_qr') + // ->label('Serial Number PumpSet') + // ->reactive() + // ->readOnly(fn (callable $get) => ! $get('id')) + // ->hidden(fn (callable $get) => ! $get('serial_number_pumpset_qr_visible')) + // ->default(''), Forms\Components\Hidden::make('pack_slip_motor'), - Forms\Components\TextInput::make('pack_slip_motor_qr') - ->label('Pack Slip Motor') - ->hidden(fn (callable $get) => ! $get('pack_slip_motor_qr_visible')) - ->default('') - ->reactive() - ->required() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // Forms\Components\TextInput::make('pack_slip_motor_qr') + // ->label('Pack Slip Motor') + // ->hidden(fn (callable $get) => ! $get('pack_slip_motor_qr_visible')) + // ->default('') + // ->reactive() + // ->required() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('pack_slip_motor_error', null); + // $set('pack_slip_motor_error', null); - if (empty($state)) { - $set('pack_slip_motor_error', null); + // if (empty($state)) { + // $set('pack_slip_motor_error', null); - return; - } + // return; + // } - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - if ($visibleSerialNumber != $serialNumber) { - $set('pack_slip_motor_error', 'Serial number does not match.'); - $set('pack_slip_motor_qr', null); + // if ($visibleSerialNumber != $serialNumber) { + // $set('pack_slip_motor_error', 'Serial number does not match.'); + // $set('pack_slip_motor_qr', null); - return; - } else { - $set('pack_slip_motor_error', null); - $set('pack_slip_motor_qr', $serialNumber); - $set('pack_slip_motor', '1'); + // return; + // } else { + // $set('pack_slip_motor_error', null); + // $set('pack_slip_motor_qr', $serialNumber); + // $set('pack_slip_motor', '1'); + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('pack_slip_motor_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('pack_slip_motor_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('pack_slip_motor_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('pack_slip_motor_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('pack_slip_motor_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('pack_slip_motor_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('pack_slip_motor_error', 'Scan valid QR code'); + + // return; + // } else { + // $set('pack_slip_motor_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor_qr')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('pack_slip_motor_error', 'Item code does not match.'); + + // return; + // } + + // $set('pack_slip_motor_qr', $serialNumber); + + // $set('pack_slip_motor', '1'); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('pack_slip_motor_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('pack_slip_motor_error', 'Serial number does not match.'); + // $set('pack_slip_motor_qr', null); + + // return; + // } else { + // $set('pack_slip_motor_error', null); + // $set('pack_slip_motor_qr', $serialNumber); + // $set('pack_slip_motor', '1'); + // } + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('pack_slip_motor_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('pack_slip_motor_error') ? $get('pack_slip_motor_error') : null) + // ->hintColor('danger'), + + Forms\Components\Group::make() + ->schema(function (callable $get) { + + $fields = []; + + $count = (int) ($get('pack_slip_motor_qr_count') ?? 0); + + for ($i = 1; $i <= $count; $i++) { + + $fields[] = Forms\Components\TextInput::make("pack_slip_motor_qr_$i") + ->label("Pack Slip Motor $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { + + $set("pack_slip_motor_error_$i", null); + + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('pack_slip_motor_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('pack_slip_motor_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("pack_slip_motor_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('pack_slip_motor_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("pack_slip_motor_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('pack_slip_motor_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("pack_slip_motor_error_$i", 'Serial number does not match.'); + $set("pack_slip_motor_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('pack_slip_motor_error', 'Serial Number must be at least 9 digits.'); + $set("pack_slip_motor_qr_$i", $state); + $set('pack_slip_motor', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('pack_slip_motor_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("pack_slip_motor_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('pack_slip_motor_error', 'Scan valid QR code'); + $itemCode = trim($parts[0]); - return; - } else { - $set('pack_slip_motor_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("pack_slip_motor_error_$i", 'Item code does not match.'); + return; + } - // // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor_qr')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); + if ($visibleSerialNumber != $serialNumber) { + $set("pack_slip_motor_error_$i", 'Serial number does not match.'); + $set("pack_slip_motor_qr_$i", null); + return; + } - $visibleSerialNumber = $get('serial_number'); + $set("pack_slip_motor_error_$i", null); + $set("pack_slip_motor_qr_$i", $serialNumber); + $set('pack_slip_motor', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("pack_slip_motor_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("pack_slip_motor_error_$i")) + ->hintColor('danger'); + } - $expectedItemCode = trim((string) $get('item_id')); - - if ($itemCode != $expectedItemCode) { - $set('pack_slip_motor_error', 'Item code does not match.'); - - return; - } - - $set('pack_slip_motor_qr', $serialNumber); - - $set('pack_slip_motor', '1'); - - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); - - if (! $serialNumber || trim($serialNumber) == '') { - $set('pack_slip_motor_error', null); - - return; - } - - if (! $isMatch) { - $set('pack_slip_motor_error', 'Serial number does not match.'); - $set('pack_slip_motor_qr', null); - - return; - } else { - $set('pack_slip_motor_error', null); - $set('pack_slip_motor_qr', $serialNumber); - $set('pack_slip_motor', '1'); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('pack_slip_motor_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('pack_slip_motor_error') ? $get('pack_slip_motor_error') : null) - ->hintColor('danger'), + return $fields; + }) + ->columns(2), Forms\Components\Hidden::make('pack_slip_pump'), - Forms\Components\TextInput::make('pack_slip_pump_qr') - ->label('Pack Slip Pump') - ->hidden(fn (callable $get) => ! $get('pack_slip_pump_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // Forms\Components\TextInput::make('pack_slip_pump_qr') + // ->label('Pack Slip Pump') + // ->hidden(fn (callable $get) => ! $get('pack_slip_pump_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('pack_slip_pump_error', null); + // $set('pack_slip_pump_error', null); - if (empty($state)) { - $set('pack_slip_pump_error', null); + // if (empty($state)) { + // $set('pack_slip_pump_error', null); - return; - } + // return; + // } - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - if ($visibleSerialNumber != $serialNumber) { - $set('pack_slip_pump_error', 'Serial number does not match.'); - $set('pack_slip_pump_qr', null); + // if ($visibleSerialNumber != $serialNumber) { + // $set('pack_slip_pump_error', 'Serial number does not match.'); + // $set('pack_slip_pump_qr', null); - return; - } else { - $set('pack_slip_pump_error', null); - $set('pack_slip_pump_qr', $serialNumber); - $set('pack_slip_pump', '1'); + // return; + // } else { + // $set('pack_slip_pump_error', null); + // $set('pack_slip_pump_qr', $serialNumber); + // $set('pack_slip_pump', '1'); + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('pack_slip_pump_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('pack_slip_pump_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('pack_slip_pump_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('pack_slip_pump_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('pack_slip_pump_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('pack_slip_pump_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('pack_slip_pump_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('pack_slip_pump_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('pack_slip_pump_error', 'Item code does not match.'); + + // return; + // } + + // $set('pack_slip_pump_qr', $serialNumber); + // $set('pack_slip_pump', '1'); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('pack_slip_pump_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('pack_slip_pump_error', 'Serial number does not match.'); + // $set('pack_slip_pump_qr', null); + + // return; + // } else { + // $set('pack_slip_pump_error', null); + // $set('pack_slip_pump_qr', $serialNumber); + // $set('pack_slip_pump', '1'); + // } + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('pack_slip_pump_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('pack_slip_pump_error') ? $get('pack_slip_pump_error') : null) + // ->hintColor('danger'), + Forms\Components\Group::make() + ->schema(function (callable $get) { + + $fields = []; + + $count = (int) ($get('pack_slip_pump_qr_count') ?? 0); + + for ($i = 1; $i <= $count; $i++) { + + $fields[] = Forms\Components\TextInput::make("pack_slip_pump_qr_$i") + ->label("Pack Slip Pump $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { + + $set("pack_slip_pump_error_$i", null); + + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('pack_slip_pump_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('pack_slip_pump_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("pack_slip_pump_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('pack_slip_pump_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("pack_slip_pump_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('pack_slip_pump_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("pack_slip_pump_error_$i", 'Serial number does not match.'); + $set("pack_slip_pump_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('pack_slip_pump_error', 'Serial Number must be at least 9 digits.'); + $set("pack_slip_pump_qr_$i", $state); + $set('pack_slip_pump', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('pack_slip_pump_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("pack_slip_pump_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('pack_slip_pump_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('pack_slip_pump_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("pack_slip_pump_error_$i", 'Item code does not match.'); + return; + } - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - $visibleSerialNumber = $get('serial_number'); + if ($visibleSerialNumber != $serialNumber) { + $set("pack_slip_pump_error_$i", 'Serial number does not match.'); + $set("pack_slip_pump_qr_$i", null); + return; + } - $expectedItemCode = trim((string) $get('item_id')); + $set("pack_slip_pump_error_$i", null); + $set("pack_slip_pump_qr_$i", $serialNumber); + $set('pack_slip_pump', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("pack_slip_pump_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("pack_slip_pump_error_$i")) + ->hintColor('danger'); + } - if ($itemCode != $expectedItemCode) { - $set('pack_slip_pump_error', 'Item code does not match.'); - - return; - } - - $set('pack_slip_pump_qr', $serialNumber); - $set('pack_slip_pump', '1'); - - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); - - if (! $serialNumber || trim($serialNumber) == '') { - $set('pack_slip_pump_error', null); - - return; - } - - if (! $isMatch) { - $set('pack_slip_pump_error', 'Serial number does not match.'); - $set('pack_slip_pump_qr', null); - - return; - } else { - $set('pack_slip_pump_error', null); - $set('pack_slip_pump_qr', $serialNumber); - $set('pack_slip_pump', '1'); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('pack_slip_pump_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('pack_slip_pump_error') ? $get('pack_slip_pump_error') : null) - ->hintColor('danger'), + return $fields; + }) + ->columns(2), Forms\Components\Hidden::make('pack_slip_pumpset'), - Forms\Components\TextInput::make('pack_slip_pumpset_qr') - ->label('Pack Slip PumpSet') - ->hidden(fn (callable $get) => ! $get('pack_slip_pumpset_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + Forms\Components\Group::make() + ->schema(function (callable $get) { - $set('pack_slip_pumpset_error', null); + $fields = []; - if (empty($state)) { - $set('pack_slip_pumpset_error', null); + $count = (int) ($get('pack_slip_pumpset_qr_count') ?? 0); - return; - } + for ($i = 1; $i <= $count; $i++) { - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; + $fields[] = Forms\Components\TextInput::make("pack_slip_pumpset_qr_$i") + ->label("Pack Slip PumpSet $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { - if ($visibleSerialNumber != $serialNumber) { - $set('pack_slip_pumpset_error', 'Serial number does not match.'); - $set('pack_slip_pumpset_qr', null); - - return; - } else { - $set('pack_slip_pumpset_error', null); - $set('pack_slip_pumpset_qr', $serialNumber); - $set('pack_slip_pumpset', '1'); + $set("pack_slip_pumpset_error_$i", null); + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('pack_slip_pumpset_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('pack_slip_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("pack_slip_pumpset_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('pack_slip_pumpset_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("pack_slip_pumpset_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('pack_slip_pumpset_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("pack_slip_pumpset_error_$i", 'Serial number does not match.'); + $set("pack_slip_pumpset_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('pack_slip_pumpset_error', 'Serial Number must be at least 9 digits.'); + $set("pack_slip_pumpset_qr_$i", $state); + $set('pack_slip_pumpset', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('pack_slip_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("pack_slip_pumpset_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('pack_slip_pumpset_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('pack_slip_pumpset_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("pack_slip_pumpset_error_$i", 'Item code does not match.'); + return; + } - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); + if ($visibleSerialNumber != $serialNumber) { + $set("pack_slip_pumpset_error_$i", 'Serial number does not match.'); + $set("pack_slip_pumpset_qr_$i", null); + return; + } - $visibleSerialNumber = $get('serial_number'); + $set("pack_slip_pumpset_error_$i", null); + $set("pack_slip_pumpset_qr_$i", $serialNumber); + $set('pack_slip_pumpset', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("pack_slip_pumpset_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("pack_slip_pumpset_error_$i")) + ->hintColor('danger'); + } - $expectedItemCode = trim((string) $get('item_id')); + return $fields; + }) + ->columns(2), - if ($itemCode != $expectedItemCode) { - $set('pack_slip_pumpset_error', 'Item code does not match.'); + // Forms\Components\TextInput::make('pack_slip_pumpset_qr') + // ->label('Pack Slip PumpSet') + // ->hidden(fn (callable $get) => ! $get('pack_slip_pumpset_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - return; - } + // $set('pack_slip_pumpset_error', null); - $set('pack_slip_pumpset_qr', $serialNumber); - $set('pack_slip_pumpset', '1'); + // if (empty($state)) { + // $set('pack_slip_pumpset_error', null); - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); + // return; + // } - if (! $serialNumber || trim($serialNumber) == '') { - $set('pack_slip_pumpset_error', null); + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - return; - } + // if ($visibleSerialNumber != $serialNumber) { + // $set('pack_slip_pumpset_error', 'Serial number does not match.'); + // $set('pack_slip_pumpset_qr', null); - if (! $isMatch) { - $set('pack_slip_pumpset_error', 'Serial number does not match.'); - $set('pack_slip_pumpset_qr', null); + // return; + // } else { + // $set('pack_slip_pumpset_error', null); + // $set('pack_slip_pumpset_qr', $serialNumber); + // $set('pack_slip_pumpset', '1'); - return; - } else { - $set('pack_slip_pumpset_error', null); - $set('pack_slip_pumpset_qr', $serialNumber); - $set('pack_slip_pumpset', '1'); - } + // return; + // } + // } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('pack_slip_pumpset_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('pack_slip_pumpset_error') ? $get('pack_slip_pumpset_error') : null) - ->hintColor('danger'), + // if (strlen($state) < 9) { + // $set('pack_slip_pumpset_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('pack_slip_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('pack_slip_pumpset_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('pack_slip_pumpset_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('pack_slip_pumpset_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('pack_slip_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('pack_slip_pumpset_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('pack_slip_pumpset_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('pack_slip_pumpset_error', 'Item code does not match.'); + // return; + // } + + // $set('pack_slip_pumpset_qr', $serialNumber); + // $set('pack_slip_pumpset', '1'); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('pack_slip_pumpset_error', null); + // return; + // } + + // if (! $isMatch) { + // $set('pack_slip_pumpset_error', 'Serial number does not match.'); + // $set('pack_slip_pumpset_qr', null); + // return; + // } else { + // $set('pack_slip_pumpset_error', null); + // $set('pack_slip_pumpset_qr', $serialNumber); + // $set('pack_slip_pumpset', '1'); + // } + + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('pack_slip_pumpset_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('pack_slip_pumpset_error') ? $get('pack_slip_pumpset_error') : null) + // ->hintColor('danger'), Forms\Components\Hidden::make('name_plate_motor'), - Forms\Components\TextInput::make('name_plate_motor_qr') - ->label('Name Plate Motor') - ->hidden(fn (callable $get) => ! $get('name_plate_motor_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + Forms\Components\Group::make() + ->schema(function (callable $get) { - $set('name_plate_motor_error', null); + $fields = []; - if (empty($state)) { - $set('name_plate_motor_error', null); + $count = (int) ($get('name_plate_motor_qr_count') ?? 0); - return; - } + for ($i = 1; $i <= $count; $i++) { - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; + $fields[] = Forms\Components\TextInput::make("name_plate_motor_qr_$i") + ->label("Name Plate Motor $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { - if ($visibleSerialNumber != $serialNumber) { - $set('name_plate_motor_error', 'Serial number does not match.'); - $set('name_plate_motor_qr', null); - - return; - } else { - $set('name_plate_motor_error', null); - $set('name_plate_motor_qr', $serialNumber); - $set('name_plate_motor', '1'); + $set("name_plate_motor_error_$i", null); + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('name_plate_motor_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('name_plate_motor_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("name_plate_motor_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('name_plate_motor_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("name_plate_motor_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('name_plate_motor_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("name_plate_motor_error_$i", 'Serial number does not match.'); + $set("name_plate_motor_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('name_plate_motor_error', 'Serial Number must be at least 9 digits.'); + $set("name_plate_motor_qr_$i", $state); + $set('name_plate_motor', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('name_plate_motor_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("name_plate_motor_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('name_plate_motor_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('name_plate_motor_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("name_plate_motor_error_$i", 'Item code does not match.'); + return; + } - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - $visibleSerialNumber = $get('serial_number'); + if ($visibleSerialNumber != $serialNumber) { + $set("name_plate_motor_error_$i", 'Serial number does not match.'); + $set("name_plate_motor_qr_$i", null); + return; + } - $expectedItemCode = trim((string) $get('item_id')); + $set("name_plate_motor_error_$i", null); + $set("name_plate_motor_qr_$i", $serialNumber); + $set('name_plate_motor', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("name_plate_motor_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("name_plate_motor_error_$i")) + ->hintColor('danger'); + } - if ($itemCode != $expectedItemCode) { - $set('name_plate_motor_error', 'Item code does not match.'); + return $fields; + }) + ->columns(2), - return; - } + // Forms\Components\TextInput::make('name_plate_motor_qr') + // ->label('Name Plate Motor') + // ->hidden(fn (callable $get) => ! $get('name_plate_motor_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('name_plate_motor_error', $serialNumber); + // $set('name_plate_motor_error', null); - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); + // if (empty($state)) { + // $set('name_plate_motor_error', null); - if (! $serialNumber || trim($serialNumber) == '') { - $set('name_plate_motor_error', null); + // return; + // } - return; - } + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - if (! $isMatch) { - $set('name_plate_motor_error', 'Serial number does not match.'); - $set('name_plate_motor_qr', null); + // if ($visibleSerialNumber != $serialNumber) { + // $set('name_plate_motor_error', 'Serial number does not match.'); + // $set('name_plate_motor_qr', null); - return; - } else { - $set('name_plate_motor_error', null); - $set('name_plate_motor_qr', $serialNumber); - $set('name_plate_motor', '1'); - } + // return; + // } else { + // $set('name_plate_motor_error', null); + // $set('name_plate_motor_qr', $serialNumber); + // $set('name_plate_motor', '1'); - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('name_plate_motor_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('name_plate_motor_error') ? $get('name_plate_motor_error') : null) - ->hintColor('danger'), + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('name_plate_motor_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('name_plate_motor_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('name_plate_motor_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('name_plate_motor_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('name_plate_motor_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('name_plate_motor_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('name_plate_motor_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('name_plate_motor_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('name_plate_motor_error', 'Item code does not match.'); + + // return; + // } + + // $set('name_plate_motor_error', $serialNumber); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('name_plate_motor_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('name_plate_motor_error', 'Serial number does not match.'); + // $set('name_plate_motor_qr', null); + + // return; + // } else { + // $set('name_plate_motor_error', null); + // $set('name_plate_motor_qr', $serialNumber); + // $set('name_plate_motor', '1'); + // } + + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('name_plate_motor_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('name_plate_motor_error') ? $get('name_plate_motor_error') : null) + // ->hintColor('danger'), Forms\Components\Hidden::make('name_plate_pump'), - Forms\Components\TextInput::make('name_plate_pump_qr') - ->label('Name Plate Pump') - ->hidden(fn (callable $get) => ! $get('name_plate_pump_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + Forms\Components\Group::make() + ->schema(function (callable $get) { - $set('name_plate_pump_error', null); + $fields = []; - if (empty($state)) { - $set('name_plate_pump_error', null); + $count = (int) ($get('name_plate_pump_qr_count') ?? 0); - return; - } + for ($i = 1; $i <= $count; $i++) { - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; + $fields[] = Forms\Components\TextInput::make("name_plate_pump_qr_$i") + ->label("Name Plate Pump $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { - if ($visibleSerialNumber != $serialNumber) { - $set('name_plate_pump_error', 'Serial number does not match.'); - $set('name_plate_pump_qr', null); - - return; - } else { - $set('name_plate_pump_error', null); - $set('name_plate_pump_qr', $serialNumber); - $set('name_plate_pump', '1'); + $set("name_plate_pump_error_$i", null); + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('name_plate_pump_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('name_plate_pump_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("name_plate_pump_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('name_plate_pump_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("name_plate_pump_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('name_plate_pump_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("name_plate_pump_error_$i", 'Serial number does not match.'); + $set("name_plate_pump_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('name_plate_pump_error', 'Serial Number must be at least 9 digits.'); + $set("name_plate_pump_qr_$i", $state); + $set('name_plate_pump', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('name_plate_pump_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("name_plate_pump_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('name_plate_pump_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('name_plate_pump_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("name_plate_pump_error_$i", 'Item code does not match.'); + return; + } - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - $visibleSerialNumber = $get('serial_number'); + if ($visibleSerialNumber != $serialNumber) { + $set("name_plate_pump_error_$i", 'Serial number does not match.'); + $set("name_plate_pump_qr_$i", null); + return; + } - $expectedItemCode = trim((string) $get('item_id')); + $set("name_plate_pump_error_$i", null); + $set("name_plate_pump_qr_$i", $serialNumber); + $set('name_plate_pump', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("name_plate_pump_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("name_plate_pump_error_$i")) + ->hintColor('danger'); + } - if ($itemCode != $expectedItemCode) { - $set('name_plate_pump_error', 'Item code does not match.'); + return $fields; + }) + ->columns(2), - return; - } + // Forms\Components\TextInput::make('name_plate_pump_qr') + // ->label('Name Plate Pump') + // ->hidden(fn (callable $get) => ! $get('name_plate_pump_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('name_plate_pump_error', $serialNumber); + // $set('name_plate_pump_error', null); - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); + // if (empty($state)) { + // $set('name_plate_pump_error', null); - if (! $serialNumber || trim($serialNumber) == '') { - $set('name_plate_pump_error', null); + // return; + // } - return; - } + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - if (! $isMatch) { - $set('name_plate_pump_error', 'Serial number does not match.'); - $set('name_plate_pump_qr', null); + // if ($visibleSerialNumber != $serialNumber) { + // $set('name_plate_pump_error', 'Serial number does not match.'); + // $set('name_plate_pump_qr', null); - return; - } else { - $set('name_plate_pump_error', null); - $set('name_plate_pump_qr', $serialNumber); - $set('name_plate_pump', '1'); - } + // return; + // } else { + // $set('name_plate_pump_error', null); + // $set('name_plate_pump_qr', $serialNumber); + // $set('name_plate_pump', '1'); - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('name_plate_pump_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('name_plate_pump_error') ? $get('name_plate_pump_error') : null) - ->hintColor('danger'), + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('name_plate_pump_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('name_plate_pump_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('name_plate_pump_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('name_plate_pump_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('name_plate_pump_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('name_plate_pump_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('name_plate_pump_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('name_plate_pump_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('name_plate_pump_error', 'Item code does not match.'); + + // return; + // } + + // $set('name_plate_pump_error', $serialNumber); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('name_plate_pump_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('name_plate_pump_error', 'Serial number does not match.'); + // $set('name_plate_pump_qr', null); + + // return; + // } else { + // $set('name_plate_pump_error', null); + // $set('name_plate_pump_qr', $serialNumber); + // $set('name_plate_pump', '1'); + // } + + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('name_plate_pump_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('name_plate_pump_error') ? $get('name_plate_pump_error') : null) + // ->hintColor('danger'), Forms\Components\Hidden::make('name_plate_pumpset'), - Forms\Components\TextInput::make('name_plate_pumpset_qr') - ->label('Name Plate PumpSet') - ->hidden(fn (callable $get) => ! $get('name_plate_pumpset_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + Forms\Components\Group::make() + ->schema(function (callable $get) { - $set('name_plate_pumpset_error', null); + $fields = []; - if (empty($state)) { - $set('name_plate_pumpset_error', null); + $count = (int) ($get('name_plate_pumpset_qr_count') ?? 0); - return; - } + for ($i = 1; $i <= $count; $i++) { - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; + $fields[] = Forms\Components\TextInput::make("name_plate_pumpset_qr_$i") + ->label("Name Plate PumpSet $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { - if ($visibleSerialNumber != $serialNumber) { - $set('name_plate_pumpset_error', 'Serial number does not match.'); - $set('name_plate_pumpset_qr', null); - - return; - } else { - $set('name_plate_pumpset_error', null); - $set('name_plate_pumpset_qr', $serialNumber); - $set('name_plate_pumpset', '1'); + $set("name_plate_pumpset_error_$i", null); + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('name_plate_pumpset_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('name_plate_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("name_plate_pumpset_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('name_plate_pumpset_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("name_plate_pumpset_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('name_plate_pumpset_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("name_plate_pumpset_error_$i", 'Serial number does not match.'); + $set("name_plate_pumpset_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('name_plate_pumpset_error', 'Serial Number must be at least 9 digits.'); + $set("name_plate_pumpset_qr_$i", $state); + $set('name_plate_pumpset', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('name_plate_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("name_plate_pumpset_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('name_plate_pumpset_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('name_plate_pumpset_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("name_plate_pumpset_error_$i", 'Item code does not match.'); + return; + } - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - $visibleSerialNumber = $get('serial_number'); + if ($visibleSerialNumber != $serialNumber) { + $set("name_plate_pumpset_error_$i", 'Serial number does not match.'); + $set("name_plate_pumpset_qr_$i", null); + return; + } - $expectedItemCode = trim((string) $get('item_id')); + $set("name_plate_pumpset_error_$i", null); + $set("name_plate_pumpset_qr_$i", $serialNumber); + $set('name_plate_pumpset', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("name_plate_pumpset_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("name_plate_pumpset_error_$i")) + ->hintColor('danger'); + } - if ($itemCode != $expectedItemCode) { - $set('name_plate_pumpset_error', 'Item code does not match.'); + return $fields; + }) + ->columns(2), - return; - } + // Forms\Components\TextInput::make('name_plate_pumpset_qr') + // ->label('Name Plate PumpSet') + // ->hidden(fn (callable $get) => ! $get('name_plate_pumpset_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('name_plate_pumpset_error', $serialNumber); + // $set('name_plate_pumpset_error', null); - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); + // if (empty($state)) { + // $set('name_plate_pumpset_error', null); - if (! $serialNumber || trim($serialNumber) == '') { - $set('name_plate_pumpset_error', null); + // return; + // } - return; - } + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - if (! $isMatch) { - $set('name_plate_pumpset_error', 'Serial number does not match.'); - $set('name_plate_pumpset_qr', null); + // if ($visibleSerialNumber != $serialNumber) { + // $set('name_plate_pumpset_error', 'Serial number does not match.'); + // $set('name_plate_pumpset_qr', null); - return; - } else { - $set('name_plate_pumpset_error', null); - $set('name_plate_pumpset_qr', $serialNumber); - $set('name_plate_pumpset', '1'); - } + // return; + // } else { + // $set('name_plate_pumpset_error', null); + // $set('name_plate_pumpset_qr', $serialNumber); + // $set('name_plate_pumpset', '1'); - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('name_plate_pumpset_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('name_plate_pumpset_error') ? $get('name_plate_pumpset_error') : null) - ->hintColor('danger'), + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('name_plate_pumpset_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('name_plate_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('name_plate_pumpset_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('name_plate_pumpset_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('name_plate_pumpset_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('name_plate_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('name_plate_pumpset_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('name_plate_pumpset_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('name_plate_pumpset_error', 'Item code does not match.'); + + // return; + // } + + // $set('name_plate_pumpset_error', $serialNumber); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('name_plate_pumpset_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('name_plate_pumpset_error', 'Serial number does not match.'); + // $set('name_plate_pumpset_qr', null); + + // return; + // } else { + // $set('name_plate_pumpset_error', null); + // $set('name_plate_pumpset_qr', $serialNumber); + // $set('name_plate_pumpset', '1'); + // } + + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('name_plate_pumpset_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('name_plate_pumpset_error') ? $get('name_plate_pumpset_error') : null) + // ->hintColor('danger'), Forms\Components\Hidden::make('tube_sticker_motor'), - Forms\Components\TextInput::make('tube_sticker_motor_qr') - ->label('Tube Sticker Motor') - ->hidden(fn (callable $get) => ! $get('tube_sticker_motor_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + Forms\Components\Group::make() + ->schema(function (callable $get) { - $set('tube_sticker_motor_error', null); + $fields = []; - // $mPorder = $get('production_order'); + $count = (int) ($get('tube_sticker_motor_qr_count') ?? 0); - // $mPlantId = $get('plant_id'); - // $plant = Plant::find($mPlantId); - // $plantCodePart4 = $plant?->code; + for ($i = 1; $i <= $count; $i++) { - // $mlineId = $get('line_id'); + $fields[] = Forms\Components\TextInput::make("tube_sticker_motor_qr_$i") + ->label("Tube Sticker Motor $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { - // $mLine = Line::find($mlineId); - // $mLinePart = $mLine?->name; - - if (empty($state)) { - $set('tube_sticker_motor_error', null); - - return; - } - - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; - - if ($visibleSerialNumber != $serialNumber) { - $set('tube_sticker_motor_error', 'Serial number does not match.'); - $set('tube_sticker_motor_qr', null); - - return; - } else { - $set('tube_sticker_motor_error', null); - $set('tube_sticker_motor_qr', $serialNumber); - $set('tube_sticker_motor', '1'); + $set("tube_sticker_motor_error_$i", null); + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('tube_sticker_motor_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('tube_sticker_motor_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("tube_sticker_motor_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('tube_sticker_motor_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("tube_sticker_motor_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('tube_sticker_motor_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("tube_sticker_motor_error_$i", 'Serial number does not match.'); + $set("tube_sticker_motor_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('tube_sticker_motor_error', 'Serial Number must be at least 9 digits.'); + $set("tube_sticker_motor_qr_$i", $state); + $set('tube_sticker_motor', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('tube_sticker_motor_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("tube_sticker_motor_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('tube_sticker_motor_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('tube_sticker_motor_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("tube_sticker_motor_error_$i", 'Item code does not match.'); + return; + } - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - $visibleSerialNumber = $get('serial_number'); + if ($visibleSerialNumber != $serialNumber) { + $set("tube_sticker_motor_error_$i", 'Serial number does not match.'); + $set("tube_sticker_motor_qr_$i", null); + return; + } - $expectedItemCode = trim((string) $get('item_id')); + $set("tube_sticker_motor_error_$i", null); + $set("tube_sticker_motor_qr_$i", $serialNumber); + $set('tube_sticker_motor', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("tube_sticker_motor_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("tube_sticker_motor_error_$i")) + ->hintColor('danger'); + } - if ($itemCode != $expectedItemCode) { - $set('tube_sticker_motor_error', 'Item code does not match.'); + return $fields; + }) + ->columns(2), - return; - } + // Forms\Components\TextInput::make('tube_sticker_motor_qr') + // ->label('Tube Sticker Motor') + // ->hidden(fn (callable $get) => ! $get('tube_sticker_motor_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('tube_sticker_motor_error', $serialNumber); + // $set('tube_sticker_motor_error', null); - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); + // // $mPorder = $get('production_order'); - if (! $serialNumber || trim($serialNumber) == '') { - $set('tube_sticker_motor_error', null); + // // $mPlantId = $get('plant_id'); + // // $plant = Plant::find($mPlantId); + // // $plantCodePart4 = $plant?->code; - return; - } + // // $mlineId = $get('line_id'); - if (! $isMatch) { - $set('tube_sticker_motor_error', 'Serial number does not match.'); + // // $mLine = Line::find($mlineId); + // // $mLinePart = $mLine?->name; - // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); + // if (empty($state)) { + // $set('tube_sticker_motor_error', null); - // $mPlantName = $mailData['plant_name']; - // $emails = $mailData['emails']; - // $mUserName = Filament::auth()->user()->name; + // return; + // } - // if (!empty($emails)) - // { - // //Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType)); - // Mail::to($emails)->send( - // new InvalidQualityMail($state, $mPorder, $mPlantName,$mLinePart, $mUserName, 'InvalidTubeStickerMotor') - // ); - // } - // else - // { - // \Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial."); - // } - $set('tube_sticker_motor_qr', null); + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - return; - } else { - $set('tube_sticker_motor_error', null); - $set('tube_sticker_motor_qr', $serialNumber); - $set('tube_sticker_motor', '1'); - } + // if ($visibleSerialNumber != $serialNumber) { + // $set('tube_sticker_motor_error', 'Serial number does not match.'); + // $set('tube_sticker_motor_qr', null); - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('tube_sticker_motor_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('tube_sticker_motor_error') ? $get('tube_sticker_motor_error') : null) - ->hintColor('danger'), + // return; + // } else { + // $set('tube_sticker_motor_error', null); + // $set('tube_sticker_motor_qr', $serialNumber); + // $set('tube_sticker_motor', '1'); + + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('tube_sticker_motor_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('tube_sticker_motor_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('tube_sticker_motor_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('tube_sticker_motor_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('tube_sticker_motor_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('tube_sticker_motor_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('tube_sticker_motor_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('tube_sticker_motor_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('tube_sticker_motor_error', 'Item code does not match.'); + + // return; + // } + + // $set('tube_sticker_motor_error', $serialNumber); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('tube_sticker_motor_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('tube_sticker_motor_error', 'Serial number does not match.'); + + // // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); + + // // $mPlantName = $mailData['plant_name']; + // // $emails = $mailData['emails']; + // // $mUserName = Filament::auth()->user()->name; + + // // if (!empty($emails)) + // // { + // // //Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType)); + // // Mail::to($emails)->send( + // // new InvalidQualityMail($state, $mPorder, $mPlantName,$mLinePart, $mUserName, 'InvalidTubeStickerMotor') + // // ); + // // } + // // else + // // { + // // \Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial."); + // // } + // $set('tube_sticker_motor_qr', null); + + // return; + // } else { + // $set('tube_sticker_motor_error', null); + // $set('tube_sticker_motor_qr', $serialNumber); + // $set('tube_sticker_motor', '1'); + // } + + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('tube_sticker_motor_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('tube_sticker_motor_error') ? $get('tube_sticker_motor_error') : null) + // ->hintColor('danger'), Forms\Components\Hidden::make('tube_sticker_pump'), - Forms\Components\TextInput::make('tube_sticker_pump_qr') - ->label('Tube Sticker Pump') - ->hidden(fn (callable $get) => ! $get('tube_sticker_pump_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state, $livewire) { + Forms\Components\Group::make() + ->schema(function (callable $get) { - $set('tube_sticker_pump_error', null); + $fields = []; - // $mPorder = $get('production_order'); + $count = (int) ($get('tube_sticker_pump_qr_count') ?? 0); - // $mPlantId = $get('plant_id'); - // $plant = Plant::find($mPlantId); - // $mPlantName = $plant?->name; + for ($i = 1; $i <= $count; $i++) { - // $mlineId = $get('line_id'); + $fields[] = Forms\Components\TextInput::make("tube_sticker_pump_qr_$i") + ->label("Tube Sticker Pump $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { - // $mLine = Line::find($mlineId); - // $mLinePart = $mLine?->name; - - // $mPorder = $get('production_order'); - // $mPlantId = $get('plant_id'); - // $mlineId = $get('line_id'); - // $mUserName = Filament::auth()->user()?->name ?? 'Unknown'; - - // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); - - // $mPlantName = $mailData['plant_name']; - // $emails = $mailData['emails']; - // $mUserName = Filament::auth()->user()->name; - - if (empty($state)) { - $set('tube_sticker_pump_error', null); - - return; - } - - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; - - if ($visibleSerialNumber != $serialNumber) { - $set('tube_sticker_pump_error', 'Serial number does not match.'); - $set('tube_sticker_pump_qr', null); - - return; - } else { - $set('tube_sticker_pump_error', null); - $set('tube_sticker_pump_qr', $serialNumber); - $set('tube_sticker_pump', '1'); + $set("tube_sticker_pump_error_$i", null); + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('tube_sticker_pump_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('tube_sticker_pump_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("tube_sticker_pump_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('tube_sticker_pump_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("tube_sticker_pump_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('tube_sticker_pump_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("tube_sticker_pump_error_$i", 'Serial number does not match.'); + $set("tube_sticker_pump_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('tube_sticker_pump_error', 'Serial Number must be at least 9 digits.'); + $set("tube_sticker_pump_qr_$i", $state); + $set('tube_sticker_pump', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('tube_sticker_pump_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("tube_sticker_pump_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('tube_sticker_pump_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('tube_sticker_pump_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + if ($itemCode != $get('item_id')) { + $set("tube_sticker_pump_error_$i", 'Item code does not match.'); + return; + } - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - $visibleSerialNumber = $get('serial_number'); + if ($visibleSerialNumber != $serialNumber) { + $set("tube_sticker_pump_error_$i", 'Serial number does not match.'); + $set("tube_sticker_pump_qr_$i", null); + return; + } - $expectedItemCode = trim((string) $get('item_id')); + $set("tube_sticker_pump_error_$i", null); + $set("tube_sticker_pump_qr_$i", $serialNumber); + $set('tube_sticker_pump', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("tube_sticker_pump_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("tube_sticker_pump_error_$i")) + ->hintColor('danger'); + } - if ($itemCode != $expectedItemCode) { - $set('tube_sticker_pump_error', 'Item code does not match.'); + return $fields; + }) + ->columns(2), - return; - } + // Forms\Components\TextInput::make('tube_sticker_pump_qr') + // ->label('Tube Sticker Pump') + // ->hidden(fn (callable $get) => ! $get('tube_sticker_pump_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state, $livewire) { - $set('tube_sticker_pump_error', $serialNumber); + // $set('tube_sticker_pump_error', null); - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); + // // $mPorder = $get('production_order'); - if (! $serialNumber || trim($serialNumber) == '') { - $set('tube_sticker_pump_error', null); + // // $mPlantId = $get('plant_id'); + // // $plant = Plant::find($mPlantId); + // // $mPlantName = $plant?->name; - return; - } + // // $mlineId = $get('line_id'); - if (! $isMatch) { - $set('tube_sticker_pump_error', 'Serial number does not match.'); - $set('tube_sticker_pump_qr', null); - // $user = User::where('name', $mUserName)->first(); + // // $mLine = Line::find($mlineId); + // // $mLinePart = $mLine?->name; - // if ($user) { - // $user->notify(new StatusUpdated($state)); - // } + // // $mPorder = $get('production_order'); + // // $mPlantId = $get('plant_id'); + // // $mlineId = $get('line_id'); + // // $mUserName = Filament::auth()->user()?->name ?? 'Unknown'; - // $currentUser = Filament::auth()->user(); + // // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); - // if ($currentUser) { - // $currentUser->notify(new StatusUpdated($state)); // standard Laravel DB notification + // // $mPlantName = $mailData['plant_name']; + // // $emails = $mailData['emails']; + // // $mUserName = Filament::auth()->user()->name; - // // refresh Filament bell - // $livewire->dispatch('refreshFilamentNotifications'); - // } + // if (empty($state)) { + // $set('tube_sticker_pump_error', null); - // Notification::make() - // ->title('Status Updated') - // ->body("Serial number scanned: $state") - // ->danger() - // ->sendToDatabase($currentUser); + // return; + // } - // $user->notify(new StatusUpdated($state)); + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - // Notification::send($user, new StatusUpdated($state)); + // if ($visibleSerialNumber != $serialNumber) { + // $set('tube_sticker_pump_error', 'Serial number does not match.'); + // $set('tube_sticker_pump_qr', null); - // dd($user); - // $user->notify(new StatusUpdated($state)); - // Inside a Filament page or resource - // $this->notify('success', "Serial number scanned: $state"); + // return; + // } else { + // $set('tube_sticker_pump_error', null); + // $set('tube_sticker_pump_qr', $serialNumber); + // $set('tube_sticker_pump', '1'); - // dispatch(new SendInvalidQualityMailJob( - // $state, $mPorder, $mPlantId, $mlineId, $mUserName, 'InvalidTubeStickerPump' - // ))->afterResponse(); + // return; + // } + // } - // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); + // if (strlen($state) < 9) { + // $set('tube_sticker_pump_error', 'Serial Number must be at least 9 digits.'); - // $mPlantName = $mailData['plant_name']; - // $emails = $mailData['emails']; - // $mUserName = Filament::auth()->user()->name; + // return; + // } elseif (! ctype_alnum($state)) { + // $set('tube_sticker_pump_error', 'Serial Number must contain alpha-numeric values.'); - // if (!empty($emails)) - // { - // //Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType)); - // Mail::to($emails)->queue( - // new InvalidQualityMail($state, $mPorder, $mPlantName,$mLinePart, $mUserName, 'InvalidTubeStickerPumpset') - // ); - // } - // else - // { - // \Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial."); - // } + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; - return; - } else { - $set('tube_sticker_pump_error', null); - $set('tube_sticker_pump_qr', $serialNumber); - $set('tube_sticker_pump', '1'); - } + // if (! ctype_alnum($iCode)) { + // $set('tube_sticker_pump_error', 'Item code must contain alpha-numeric values.'); - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('tube_sticker_pump_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('tube_sticker_pump_error') ? $get('tube_sticker_pump_error') : null) - ->hintColor('danger'), + // return; + // } elseif (strlen($iCode) < 6) { + // $set('tube_sticker_pump_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('tube_sticker_pump_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('tube_sticker_pump_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('tube_sticker_pump_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('tube_sticker_pump_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + // $visibleSerialNumber = $get('serial_number'); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('tube_sticker_pump_error', 'Item code does not match.'); + + // return; + // } + + // $set('tube_sticker_pump_error', $serialNumber); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('tube_sticker_pump_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('tube_sticker_pump_error', 'Serial number does not match.'); + // $set('tube_sticker_pump_qr', null); + // // $user = User::where('name', $mUserName)->first(); + + // // if ($user) { + // // $user->notify(new StatusUpdated($state)); + // // } + + // // $currentUser = Filament::auth()->user(); + + // // if ($currentUser) { + // // $currentUser->notify(new StatusUpdated($state)); // standard Laravel DB notification + + // // // refresh Filament bell + // // $livewire->dispatch('refreshFilamentNotifications'); + // // } + + // // Notification::make() + // // ->title('Status Updated') + // // ->body("Serial number scanned: $state") + // // ->danger() + // // ->sendToDatabase($currentUser); + + // // $user->notify(new StatusUpdated($state)); + + // // Notification::send($user, new StatusUpdated($state)); + + // // dd($user); + // // $user->notify(new StatusUpdated($state)); + // // Inside a Filament page or resource + // // $this->notify('success', "Serial number scanned: $state"); + + // // dispatch(new SendInvalidQualityMailJob( + // // $state, $mPorder, $mPlantId, $mlineId, $mUserName, 'InvalidTubeStickerPump' + // // ))->afterResponse(); + + // // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); + + // // $mPlantName = $mailData['plant_name']; + // // $emails = $mailData['emails']; + // // $mUserName = Filament::auth()->user()->name; + + // // if (!empty($emails)) + // // { + // // //Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType)); + // // Mail::to($emails)->queue( + // // new InvalidQualityMail($state, $mPorder, $mPlantName,$mLinePart, $mUserName, 'InvalidTubeStickerPumpset') + // // ); + // // } + // // else + // // { + // // \Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial."); + // // } + + // return; + // } else { + // $set('tube_sticker_pump_error', null); + // $set('tube_sticker_pump_qr', $serialNumber); + // $set('tube_sticker_pump', '1'); + // } + + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('tube_sticker_pump_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('tube_sticker_pump_error') ? $get('tube_sticker_pump_error') : null) + // ->hintColor('danger'), Forms\Components\Hidden::make('tube_sticker_pumpset'), - Forms\Components\TextInput::make('tube_sticker_pumpset_qr') - ->label('Tube Sticker PumpSet') - ->hidden(fn (callable $get) => ! $get('tube_sticker_pumpset_qr_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + Forms\Components\Group::make() + ->schema(function (callable $get) { - $set('tube_sticker_pumpset_error', null); + $fields = []; - $mPorder = $get('production_order'); + $count = (int) ($get('tube_sticker_pumpset_qr_count') ?? 0); - $mPlantId = $get('plant_id'); - // $plant = Plant::find($mPlantId); - // $plantCodePart4 = $plant?->code; + for ($i = 1; $i <= $count; $i++) { - $mlineId = $get('line_id'); + $fields[] = Forms\Components\TextInput::make("tube_sticker_pumpset_qr_$i") + ->label("Tube Sticker PumpSet $i") + ->reactive() + ->required() + ->default('') + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) use ($i) { - $mLine = Line::find($mlineId); - $mLinePart = $mLine?->name; - - if (empty($state)) { - $set('tube_sticker_pumpset_error', null); - - return; - } - - if (strpos($state, '|') == false) { - if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { - $visibleSerialNumber = $get('serial_number'); - $serialNumber = $state; - - if ($visibleSerialNumber != $serialNumber) { - $set('tube_sticker_pumpset_error', 'Serial number does not match.'); - $set('tube_sticker_pumpset_qr', null); - - return; - } else { - $set('tube_sticker_pumpset_error', null); - $set('tube_sticker_pumpset_qr', $serialNumber); - $set('tube_sticker_pumpset', '1'); + $set("tube_sticker_pumpset_error_$i", null); + if (empty($state)) { return; } - } - if (strlen($state) < 9) { - $set('tube_sticker_pumpset_error', 'Serial Number must be at least 9 digits.'); + $visibleSerialNumber = $get('serial_number'); - return; - } elseif (! ctype_alnum($state)) { - $set('tube_sticker_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + if (strpos($state, '|') == false) { - return; - } - } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { - $splits = explode('|', $state); - $iCode = trim($splits[0]); - $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + if (strlen($state) < 9) { + $set("tube_sticker_pumpset_error_$i", 'Serial Number must be at least 9 digits.'); + return; + } - if (! ctype_alnum($iCode)) { - $set('tube_sticker_pumpset_error', 'Item code must contain alpha-numeric values.'); + if (!ctype_alnum($state)) { + $set("tube_sticker_pumpset_error_$i", 'Serial Number must contain alpha-numeric values.'); + return; + } - return; - } elseif (strlen($iCode) < 6) { - $set('tube_sticker_pumpset_error', 'Item code must be at least 6 digits.'); + if ($visibleSerialNumber != $state) { + $set("tube_sticker_pumpset_error_$i", 'Serial number does not match.'); + $set("tube_sticker_pumpset_qr_$i", null); + return; + } - return; - } elseif (strlen($sNumber) < 9) { - $set('tube_sticker_pumpset_error', 'Serial Number must be at least 9 digits.'); + $set("tube_sticker_pumpset_qr_$i", $state); + $set('tube_sticker_pumpset', '1'); + return; + } - return; - } elseif (! ctype_alnum($sNumber)) { - $set('tube_sticker_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + if (!preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + $set("tube_sticker_pumpset_error_$i", 'Scan valid QR code.'); + return; + } - return; - } + $parts = explode('|', $state); - $set('tube_sticker_pumpset_error', 'Scan valid QR code.'); + $itemCode = trim($parts[0]); - return; - } else { - $set('tube_sticker_pumpset_error', null); - } + $serialNumber = trim($parts[1]); - // Split state by pipeline "|" - $parts = explode('|', $state); - $itemCode = trim($parts[0]); + $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); - $serialNumber = trim($parts[1]); - // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove - $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove - // Retrieve visible serial numbers - // $visibleSerialNumbers = array_filter([ - // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, - // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, - // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, - // ]); - $visibleSerialNumber = $get('serial_number'); + if ($itemCode != $get('item_id')) { + $set("tube_sticker_pumpset_error_$i", 'Item code does not match.'); + return; + } - // dd($parts); + if ($visibleSerialNumber != $serialNumber) { + $set("tube_sticker_pumpset_error_$i", 'Serial number does not match.'); + $set("tube_sticker_pumpset_qr_$i", null); + return; + } - $expectedItemCode = trim((string) $get('item_id')); + $set("tube_sticker_pumpset_error_$i", null); + $set("tube_sticker_pumpset_qr_$i", $serialNumber); + $set('tube_sticker_pumpset', '1'); + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get("tube_sticker_pumpset_error_$i") + ? 'border-red-500' + : '', + ]) + ->hint(fn ($get) => $get("tube_sticker_pumpset_error_$i")) + ->hintColor('danger'); + } - if ($itemCode != $expectedItemCode) { - $set('tube_sticker_pumpset_error', 'Item code does not match.'); + return $fields; + }) + ->columns(2), - return; - } + // Forms\Components\TextInput::make('tube_sticker_pumpset_qr') + // ->label('Tube Sticker PumpSet') + // ->hidden(fn (callable $get) => ! $get('tube_sticker_pumpset_qr_visible')) + // ->default('') + // ->required() + // ->reactive() + // ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - $set('tube_sticker_pumpset_error', $serialNumber); + // $set('tube_sticker_pumpset_error', null); - // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); - $isMatch = ($visibleSerialNumber == $serialNumber); + // $mPorder = $get('production_order'); - if (! $serialNumber || trim($serialNumber) == '') { - $set('tube_sticker_pumpset_error', null); + // $mPlantId = $get('plant_id'); + // // $plant = Plant::find($mPlantId); + // // $plantCodePart4 = $plant?->code; - return; - } + // $mlineId = $get('line_id'); - if (! $isMatch) { - $set('tube_sticker_pumpset_error', 'Serial number does not match.'); - // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); + // $mLine = Line::find($mlineId); + // $mLinePart = $mLine?->name; - // $mPlantName = $mailData['plant_name']; - // $emails = $mailData['emails']; - // $mUserName = Filament::auth()->user()->name; + // if (empty($state)) { + // $set('tube_sticker_pumpset_error', null); - // if (!empty($emails)) - // { - // //Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType)); - // Mail::to($emails)->send( - // new InvalidQualityMail($state, $mPorder, $mPlantName,$mLinePart, $mUserName, 'InvalidTubeStickerPumpset') - // ); - // } - // else - // { - // \Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial."); - // } - $set('tube_sticker_pumpset_qr', null); + // return; + // } - return; - } else { - $set('tube_sticker_pumpset_error', null); - $set('tube_sticker_pumpset_qr', $serialNumber); - $set('tube_sticker_pumpset', '1'); - } + // if (strpos($state, '|') == false) { + // if (preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $state)) { + // $visibleSerialNumber = $get('serial_number'); + // $serialNumber = $state; - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('tube_sticker_pumpset_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('tube_sticker_pumpset_error') ? $get('tube_sticker_pumpset_error') : null) - ->hintColor('danger'), + // if ($visibleSerialNumber != $serialNumber) { + // $set('tube_sticker_pumpset_error', 'Serial number does not match.'); + // $set('tube_sticker_pumpset_qr', null); + + // return; + // } else { + // $set('tube_sticker_pumpset_error', null); + // $set('tube_sticker_pumpset_qr', $serialNumber); + // $set('tube_sticker_pumpset', '1'); + + // return; + // } + // } + + // if (strlen($state) < 9) { + // $set('tube_sticker_pumpset_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($state)) { + // $set('tube_sticker_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + // } elseif (strpos($state, '|') == true && ! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $state)) { + // $splits = explode('|', $state); + // $iCode = trim($splits[0]); + // $sNumber = isset($splits[1]) ? trim($splits[1]) : null; + + // if (! ctype_alnum($iCode)) { + // $set('tube_sticker_pumpset_error', 'Item code must contain alpha-numeric values.'); + + // return; + // } elseif (strlen($iCode) < 6) { + // $set('tube_sticker_pumpset_error', 'Item code must be at least 6 digits.'); + + // return; + // } elseif (strlen($sNumber) < 9) { + // $set('tube_sticker_pumpset_error', 'Serial Number must be at least 9 digits.'); + + // return; + // } elseif (! ctype_alnum($sNumber)) { + // $set('tube_sticker_pumpset_error', 'Serial Number must contain alpha-numeric values.'); + + // return; + // } + + // $set('tube_sticker_pumpset_error', 'Scan valid QR code.'); + + // return; + // } else { + // $set('tube_sticker_pumpset_error', null); + // } + + // // Split state by pipeline "|" + // $parts = explode('|', $state); + // $itemCode = trim($parts[0]); + + // $serialNumber = trim($parts[1]); + // // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + // $serialNumber = preg_replace('/\/[MmPpCc]$/', '', $serialNumber); // Remove + // // Retrieve visible serial numbers + // // $visibleSerialNumbers = array_filter([ + // // $get('serial_number_motor_qr_visible') ? trim((string) $get('serial_number_motor')) : null, + // // $get('serial_number_pump_qr_visible') ? trim((string) $get('serial_number_pump')) : null, + // // $get('serial_number_pumpset_qr_visible') ? trim((string) $get('serial_number_pumpset')) : null, + // // ]); + // $visibleSerialNumber = $get('serial_number'); + + // // dd($parts); + + // $expectedItemCode = trim((string) $get('item_id')); + + // if ($itemCode != $expectedItemCode) { + // $set('tube_sticker_pumpset_error', 'Item code does not match.'); + + // return; + // } + + // $set('tube_sticker_pumpset_error', $serialNumber); + + // // $isMatch = in_array($serialNumber, $visibleSerialNumbers, true); + // $isMatch = ($visibleSerialNumber == $serialNumber); + + // if (! $serialNumber || trim($serialNumber) == '') { + // $set('tube_sticker_pumpset_error', null); + + // return; + // } + + // if (! $isMatch) { + // $set('tube_sticker_pumpset_error', 'Serial number does not match.'); + // // $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($mPlantId); + + // // $mPlantName = $mailData['plant_name']; + // // $emails = $mailData['emails']; + // // $mUserName = Filament::auth()->user()->name; + + // // if (!empty($emails)) + // // { + // // //Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType)); + // // Mail::to($emails)->send( + // // new InvalidQualityMail($state, $mPorder, $mPlantName,$mLinePart, $mUserName, 'InvalidTubeStickerPumpset') + // // ); + // // } + // // else + // // { + // // \Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial."); + // // } + // $set('tube_sticker_pumpset_qr', null); + + // return; + // } else { + // $set('tube_sticker_pumpset_error', null); + // $set('tube_sticker_pumpset_qr', $serialNumber); + // $set('tube_sticker_pumpset', '1'); + // } + + // }) + // ->extraAttributes(fn ($get) => [ + // 'class' => $get('tube_sticker_pumpset_error') ? 'border-red-500' : '', + // ]) + // ->hint(fn ($get) => $get('tube_sticker_pumpset_error') ? $get('tube_sticker_pumpset_error') : null) + // ->hintColor('danger'), Forms\Components\Hidden::make('warranty_card'),