From cac91722c3191010e306604cdb5ca10f514c3492 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Fri, 5 Sep 2025 17:27:24 +0530 Subject: [PATCH] Refactor form schema in StickerMasterResource for improved clarity and organization --- .../Resources/StickerMasterResource.php | 726 +++++++++--------- 1 file changed, 365 insertions(+), 361 deletions(-) diff --git a/app/Filament/Resources/StickerMasterResource.php b/app/Filament/Resources/StickerMasterResource.php index 1adad80..a87a817 100644 --- a/app/Filament/Resources/StickerMasterResource.php +++ b/app/Filament/Resources/StickerMasterResource.php @@ -3,12 +3,12 @@ namespace App\Filament\Resources; use App\Filament\Exports\StickerMasterExporter; -use App\Filament\Imports\ShiftImporter; +//use App\Filament\Imports\ShiftImporter; use App\Filament\Imports\StickerMasterImporter; use App\Filament\Resources\StickerMasterResource\Pages; -use App\Filament\Resources\StickerMasterResource\RelationManagers; +//use App\Filament\Resources\StickerMasterResource\RelationManagers; use App\Models\StickerMaster; -use Closure; +//use Closure; use Filament\Facades\Filament; use Filament\Forms; use Filament\Forms\Form; @@ -36,397 +36,401 @@ class StickerMasterResource extends Resource public static function form(Form $form): Form { return $form - ->schema([ - Forms\Components\Select::make('plant_id') - ->relationship('plant', 'name') - ->reactive() - ->nullable() - ->default(function () { - return optional(StickerMaster::latest()->first())->plant_id; - }) - ->disabled(fn (Get $get) => !empty($get('id'))) //disable in edit if user try to change - ->afterStateUpdated(fn (callable $set) => - $set('item_id', null) & //when plant changed remove all the data which is in text input box - $set('item_description', null) & - $set('item_error', null) & - $set('panel_box_code', null) & - $set('load_rate', null) & - $set('bundle_quantity', null) & - $set('material_type', null) & - $set('part_validation1', null) & - $set('part_validation2', null) & - $set('part_validation3', null) & - $set('part_validation4', null) & - $set('part_validation5', null) & - $set('laser_part_validation1', null) & - $set('laser_part_validation2', null) & - $set('serial_number_motor', false) & - $set('serial_number_pump', false) & - $set('serial_number_pumpset', false) & - $set('pack_slip_motor', false) & - $set('pack_slip_pump', false) & - $set('pack_slip_pumpset', false) & - $set('name_plate_motor', false) & - $set('name_plate_pump', false) & - $set('name_plate_pumpset', false) & - $set('tube_sticker_motor', false) & - $set('tube_sticker_pump', false) & - $set('tube_sticker_pumpset', false) & - $set('warranty_card', false) - ) - ->required(), + ->schema([ + Forms\Components\Select::make('plant_id') + ->relationship('plant', 'name') + ->reactive() + ->nullable() + ->default(function () { + return optional(StickerMaster::latest()->first())->plant_id; + }) + ->disabled(fn (Get $get) => !empty($get('id'))) //disable in edit if user try to change + ->afterStateUpdated(fn (callable $set) => + $set('item_id', null) & //when plant changed remove all the data which is in text input box + $set('item_description', null) & + $set('item_error', null) & + $set('panel_box_code', null) & + $set('load_rate', null) & + $set('bundle_quantity', null) & + $set('material_type', null) & + $set('part_validation1', null) & + $set('part_validation2', null) & + $set('part_validation3', null) & + $set('part_validation4', null) & + $set('part_validation5', null) & + $set('laser_part_validation1', null) & + $set('laser_part_validation2', null) & + $set('serial_number_motor', false) & + $set('serial_number_pump', false) & + $set('serial_number_pumpset', false) & + $set('pack_slip_motor', false) & + $set('pack_slip_pump', false) & + $set('pack_slip_pumpset', false) & + $set('name_plate_motor', false) & + $set('name_plate_pump', false) & + $set('name_plate_pumpset', false) & + $set('tube_sticker_motor', false) & + $set('tube_sticker_pump', false) & + $set('tube_sticker_pumpset', false) & + $set('warranty_card', false) + ) + ->required(), - Forms\Components\Select::make('item_id') - ->label('Item Code') - ->options(function (callable $get) { - if (!$get('plant_id')) { - return []; - } + Forms\Components\Select::make('item_id') + ->label('Item Code') + ->options(function (callable $get) { + if (!$get('plant_id')) { + return []; + } - return \App\Models\Item::where('plant_id', $get('plant_id')) - ->pluck('code', 'id') - ->toArray(); - }) - // ->rule(function (callable $get) { - // return Rule::unique('items', 'code') - // ->where('plant_id', $get('plant_id')) - // ->ignore($get('id')); // Ignore current record during updates - // }) - ->required() - ->nullable() - ->searchable() - ->reactive() - // ->disabled(fn (Get $get) => !empty($get('id'))) - ->live(debounce: 500) // Enable live updates - ->afterStateUpdated(function ($state, callable $set, callable $get) { + return \App\Models\Item::where('plant_id', $get('plant_id')) + ->pluck('code', 'id') + ->toArray(); + }) + // ->rule(function (callable $get) { + // return Rule::unique('items', 'code') + // ->where('plant_id', $get('plant_id')) + // ->ignore($get('id')); // Ignore current record during updates + // }) + ->required() + ->nullable() + ->searchable() + ->reactive() + // ->disabled(fn (Get $get) => !empty($get('id'))) + ->live(debounce: 500) // Enable live updates + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $plantId = $get('plant_id'); + $itemId = $get('item_id'); - $plantId = $get('plant_id'); - $itemId = $get('item_id'); + //If plant_id is changed or empty, reset everything + if (blank($plantId)) { + $set('item_id', null); + $set('item_error', null); + $set('item_description', null); + return; + } - //If plant_id is changed or empty, reset everything - if (blank($plantId)) { - $set('item_id', null); - $set('item_error', null); - $set('item_description', null); - return; - } + if (blank($itemId)) { + $set('item_error', null); + $set('item_description', null); + return; + } - if (blank($itemId)) { - $set('item_error', null); - $set('item_description', null); - return; - } + $availableItems = \App\Models\Item::where('plant_id', $plantId)->exists(); + if (!$availableItems) { + $set('item_error', null); + return; + } - $availableItems = \App\Models\Item::where('plant_id', $plantId)->exists(); - if (!$availableItems) { - $set('item_error', null); - return; - } + // Ensure `item_id` is not cleared + if (!$plantId || !$itemId) { + $set('item_description', null); + return; + } - // Ensure `item_id` is not cleared - if (!$plantId || !$itemId) { - $set('item_description', null); - return; - } + // Check if item exists for the selected plant + $item = \App\Models\Item::where('plant_id', $plantId) + ->where('id', $itemId) + ->first(); - // Check if item exists for the selected plant - $item = \App\Models\Item::where('plant_id', $plantId) - ->where('id', $itemId) - ->first(); - - if ($item) { - $set('item_description', $item->description); - } else { - $set('item_description', null); - } - - $duplicateSticker = StickerMaster::where('plant_id', $plantId) - ->where('item_id', $itemId) - ->exists(); - if(!$get('id')) - { - $set('item_error', $duplicateSticker ? 'Item Code already exists for the selected plant.' : null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('item_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('item_error') ? $get('item_error') : null) - ->hintColor('danger'), - - Forms\Components\TextInput::make('item_description') - ->label('Description') - ->required() - ->afterStateHydrated(function ($component, $state, Get $get, Set $set) { - if ($get('id')) { - $itemId = StickerMaster::where('id', $get('id'))->first()?->item_id; - if ($itemId) { - $item = \App\Models\Item::where('id', $itemId)->first()?->description; - if ($item) { - $set('item_description', $item); - } else { - $set('item_description', null); - } + if ($item) { + $set('item_description', $item->description); } else { $set('item_description', null); } - } - }) - ->reactive() - ->readOnly(true), - Forms\Components\TextInput::make('part_validation1') - ->nullable(), + $duplicateSticker = StickerMaster::where('plant_id', $plantId) + ->where('item_id', $itemId) + ->exists(); + if(!$get('id')) + { + $set('item_error', $duplicateSticker ? 'Item Code already exists for the selected plant.' : null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('item_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('item_error') ? $get('item_error') : null) + ->hintColor('danger'), - Forms\Components\TextInput::make('part_validation2') - ->nullable(), + Forms\Components\TextInput::make('item_description') + ->label('Description') + ->required() + ->afterStateHydrated(function ($component, $state, Get $get, Set $set) { + if ($get('id')) { + $itemId = StickerMaster::where('id', $get('id'))->first()?->item_id; + if ($itemId) { + $item = \App\Models\Item::where('id', $itemId)->first()?->description; + if ($item) { + $set('item_description', $item); + } else { + $set('item_description', null); + } + } else { + $set('item_description', null); + } + } + }) + ->reactive() + ->readOnly(true), - Forms\Components\TextInput::make('part_validation3') - ->nullable(), + Forms\Components\TextInput::make('part_validation1') + ->label('Part Validation 1') + ->nullable(), - Forms\Components\TextInput::make('part_validation4') - ->nullable(), + Forms\Components\TextInput::make('part_validation2') + ->label('Part Validation 2') + ->nullable(), - Forms\Components\TextInput::make('part_validation5') - ->nullable(), + Forms\Components\TextInput::make('part_validation3') + ->label('Part Validation 3') + ->nullable(), - Forms\Components\TextInput::make('laser_part_validation1') - ->nullable(), + Forms\Components\TextInput::make('part_validation4') + ->label('Part Validation 4') + ->nullable(), - Forms\Components\TextInput::make('laser_part_validation2') - ->nullable(), + Forms\Components\TextInput::make('part_validation5') + ->label('Part Validation 5 (Capacitor QR)') + ->nullable(), - Forms\Components\TextInput::make('panel_box_code') - ->label('Panel Box Code') - ->readOnly(fn (callable $get) => $get('material_type')) - ->nullable(), + Forms\Components\TextInput::make('laser_part_validation1') + ->label('Laser Part Validation 1') + ->nullable(), - Forms\Components\TextInput::make('load_rate') - ->label('Load Rate') - ->default(0) - ->disabled(function ($get) { - return $get('material_type'); - }) - ->integer() - ->nullable(), + Forms\Components\TextInput::make('laser_part_validation2') + ->label('Laser Part Validation 1') + ->nullable(), + Forms\Components\TextInput::make('panel_box_code') + ->label('Panel Box Code') + ->readOnly(fn (callable $get) => $get('material_type')) + ->nullable(), - Forms\Components\Select::make('material_type') - ->label('Material Type') - ->options([ - '1' => 'Individual', - '2' => 'Bundle', - '3' => 'Quantity', - ]) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { + Forms\Components\TextInput::make('load_rate') + ->label('Load Rate') + ->default(0) + ->disabled(function ($get) { + return $get('material_type'); + }) + ->integer() + ->nullable(), - if ($state) - { - $set('panel_box_code', null); - $set('load_rate', 0); - } + Forms\Components\Select::make('material_type') + ->label('Material Type') + ->options([ + '1' => 'Individual', + '2' => 'Bundle', + '3' => 'Quantity', + ]) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { - if ($state !== "2") - { - $set('bundle_quantity', null); - } - else - { - $set('bundle_quantity', 2); - } - //$plantId = $get('plant_id'); - }) - ->nullable(), + if ($state) + { + $set('panel_box_code', null); + $set('load_rate', 0); + } - Forms\Components\TextInput::make('bundle_quantity') - ->label('Bundle Quantity') - ->integer() - ->readOnly(fn (callable $get) => $get('material_type') !== "2") - ->nullable() - ->minValue(2) - ->reactive() - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if($get('material_type') !== "2") - { - $set('bundle_quantity', null); - } - else if ($get('bundle_quantity') < 2) - { - $set('bundle_quantity', 2); - } - }), + if ($state !== "2") + { + $set('bundle_quantity', null); + } + else + { + $set('bundle_quantity', 2); + } + //$plantId = $get('plant_id'); + }) + ->nullable(), - Forms\Components\Checkbox::make('serial_number_motor') - ->reactive() - ->disabled(function ($get) { - return $get('serial_number_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('serial_number_pumpset')) - { - $set('serial_number_motor', false); - } - }) - ->dehydrateStateUsing(fn ($state): mixed => $state ? $state : null), + Forms\Components\TextInput::make('bundle_quantity') + ->label('Bundle Quantity') + ->integer() + ->readOnly(fn (callable $get) => $get('material_type') !== "2") + ->nullable() + ->minValue(2) + ->reactive() + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if($get('material_type') !== "2") + { + $set('bundle_quantity', null); + } + else if ($get('bundle_quantity') < 2) + { + $set('bundle_quantity', 2); + } + }), - Forms\Components\Checkbox::make('serial_number_pump') - ->reactive() - ->disabled(function ($get) { - return $get('serial_number_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('serial_number_pumpset')) - { - $set('serial_number_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('serial_number_motor') + ->reactive() + ->disabled(function ($get) { + return $get('serial_number_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('serial_number_pumpset')) + { + $set('serial_number_motor', false); + } + }) + ->dehydrateStateUsing(fn ($state): mixed => $state ? $state : null), - Forms\Components\Checkbox::make('serial_number_pumpset') - ->reactive() - ->disabled(function ($get) { - return $get('serial_number_motor') || $get('serial_number_pump'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('serial_number_pumpset')) - { - $set('serial_number_motor', false); - $set('serial_number_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('serial_number_pump') + ->reactive() + ->disabled(function ($get) { + return $get('serial_number_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('serial_number_pumpset')) + { + $set('serial_number_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('pack_slip_motor') - ->reactive() - ->disabled(function ($get) { - return $get('pack_slip_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('pack_slip_pumpset')) - { - $set('pack_slip_motor', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('serial_number_pumpset') + ->reactive() + ->disabled(function ($get) { + return $get('serial_number_motor') || $get('serial_number_pump'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('serial_number_pumpset')) + { + $set('serial_number_motor', false); + $set('serial_number_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('pack_slip_pump') - ->reactive() - ->disabled(function ($get) { - return $get('pack_slip_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('pack_slip_pumpset')) - { - $set('pack_slip_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('pack_slip_motor') + ->reactive() + ->disabled(function ($get) { + return $get('pack_slip_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('pack_slip_pumpset')) + { + $set('pack_slip_motor', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('pack_slip_pumpset') - ->reactive() - ->disabled(function ($get) { - return $get('pack_slip_motor') || $get('pack_slip_pump'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('pack_slip_pumpset')) - { - $set('pack_slip_motor', false); - $set('pack_slip_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('pack_slip_pump') + ->reactive() + ->disabled(function ($get) { + return $get('pack_slip_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('pack_slip_pumpset')) + { + $set('pack_slip_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('name_plate_motor') - ->reactive() - ->disabled(function ($get) { - return $get('name_plate_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('name_plate_pumpset')) - { - $set('name_plate_motor', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('pack_slip_pumpset') + ->reactive() + ->disabled(function ($get) { + return $get('pack_slip_motor') || $get('pack_slip_pump'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('pack_slip_pumpset')) + { + $set('pack_slip_motor', false); + $set('pack_slip_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('name_plate_pump') - ->reactive() - ->disabled(function ($get) { - return $get('name_plate_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('name_plate_pumpset')) - { - $set('name_plate_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('name_plate_motor') + ->reactive() + ->disabled(function ($get) { + return $get('name_plate_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('name_plate_pumpset')) + { + $set('name_plate_motor', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('name_plate_pumpset') - ->reactive() - ->disabled(function ($get) { - return $get('name_plate_motor') || $get('name_plate_pump'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('name_plate_pumpset')) - { - $set('name_plate_motor', false); - $set('name_plate_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('name_plate_pump') + ->reactive() + ->disabled(function ($get) { + return $get('name_plate_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('name_plate_pumpset')) + { + $set('name_plate_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('tube_sticker_motor') - ->reactive() - ->disabled(function ($get) { - return $get('tube_sticker_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('tube_sticker_pumpset')) - { - $set('tube_sticker_motor', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('name_plate_pumpset') + ->reactive() + ->disabled(function ($get) { + return $get('name_plate_motor') || $get('name_plate_pump'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('name_plate_pumpset')) + { + $set('name_plate_motor', false); + $set('name_plate_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('tube_sticker_pump') - ->reactive() - ->disabled(function ($get) { - return $get('tube_sticker_pumpset'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('tube_sticker_pumpset')) - { - $set('tube_sticker_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('tube_sticker_motor') + ->reactive() + ->disabled(function ($get) { + return $get('tube_sticker_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('tube_sticker_pumpset')) + { + $set('tube_sticker_motor', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('tube_sticker_pumpset') - ->nullable() - ->reactive() - ->disabled(function ($get) { - return $get('tube_sticker_motor') || $get('tube_sticker_pump'); - }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('tube_sticker_pumpset')) - { - $set('tube_sticker_motor', false); - $set('tube_sticker_pump', false); - } - }) - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), //to pass null value + Forms\Components\Checkbox::make('tube_sticker_pump') + ->reactive() + ->disabled(function ($get) { + return $get('tube_sticker_pumpset'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('tube_sticker_pumpset')) + { + $set('tube_sticker_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - Forms\Components\Checkbox::make('warranty_card') - ->nullable() - ->dehydrateStateUsing(fn ($state) => $state ? $state : null), + Forms\Components\Checkbox::make('tube_sticker_pumpset') + ->nullable() + ->reactive() + ->disabled(function ($get) { + return $get('tube_sticker_motor') || $get('tube_sticker_pump'); + }) + ->afterStateUpdated(function ($state, callable $set,callable $get) { + if ($get('tube_sticker_pumpset')) + { + $set('tube_sticker_motor', false); + $set('tube_sticker_pump', false); + } + }) + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), //to pass null value - Forms\Components\TextInput::make('id') - ->hidden() - ->readOnly(), + Forms\Components\Checkbox::make('warranty_card') + ->nullable() + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), - ]); + Forms\Components\TextInput::make('id') + ->hidden() + ->readOnly(), + ]); } public static function table(Table $table): Table @@ -439,13 +443,13 @@ class StickerMasterResource extends Resource // ->numeric() // ->sortable(), Tables\Columns\TextColumn::make('No.') - ->label('No.') - ->getStateUsing(function ($record, $livewire, $column, $rowLoop) { - $paginator = $livewire->getTableRecords(); - $perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10; - $currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1; - return ($currentPage - 1) * $perPage + $rowLoop->iteration; - }), + ->label('No.') + ->getStateUsing(function ($record, $livewire, $column, $rowLoop) { + $paginator = $livewire->getTableRecords(); + $perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10; + $currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1; + return ($currentPage - 1) * $perPage + $rowLoop->iteration; + }), Tables\Columns\TextColumn::make('plant.name') ->label('Plant') ->alignCenter()