From c16c9677570406e5bde953b1cb56a8aeeff65847 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Thu, 27 Nov 2025 10:18:36 +0530 Subject: [PATCH] feat: Add validation rules for Machine and Work Center names; enhance ProcessOrder table sorting; refactor StickerMasterResource for improved readability and functionality --- app/Filament/Resources/ItemResource.php | 391 +++++--- app/Filament/Resources/MachineResource.php | 2 + .../Resources/ProcessOrderResource.php | 3 +- .../Resources/StickerMasterResource.php | 838 +++++++++--------- 4 files changed, 682 insertions(+), 552 deletions(-) diff --git a/app/Filament/Resources/ItemResource.php b/app/Filament/Resources/ItemResource.php index ac44fc6..5cbba4d 100644 --- a/app/Filament/Resources/ItemResource.php +++ b/app/Filament/Resources/ItemResource.php @@ -12,24 +12,24 @@ use App\Models\StickerMaster; use Filament\Actions\Exports\Enums\ExportFormat; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\FileUpload; +use Filament\Forms\Components\Section; +use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Forms\Get; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Actions\ExportAction; use Filament\Tables\Actions\ImportAction; +use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Forms\Components\Select; -use Filament\Notifications\Notification; use Illuminate\Validation\Rule; use Maatwebsite\Excel\Facades\Excel; -use Storage; -use Str; class ItemResource extends Resource { @@ -48,125 +48,125 @@ class ItemResource extends Resource Section::make('') ->schema([ Forms\Components\Select::make('plant_id') - ->relationship('plant', 'name') - ->required() + ->relationship('plant', 'name') + ->required() // ->preload() // ->nullable(), - ->reactive() - ->options(function (callable $get) { - $userHas = Filament::auth()->user()->plant_id; - return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); - }) - ->default(function () { - return optional(Item::latest()->first())->plant_id; - }) - ->disabled(fn (Get $get) => !empty($get('id'))) - // ->afterStateUpdated(fn ($set) => $set('block_id', null) & $set('name', null) & $set('start_time', null) & $set('duration', null) & $set('end_time', null)) - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $plantId = $get('plant_id'); - // Ensure `linestop_id` is not cleared - if (!$plantId) { - $set('iPlantError', 'Please select a plant first.'); - return; - } - else - { - $set('iPlantError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('iPlantError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('iPlantError') ? $get('iPlantError') : null) - ->hintColor('danger'), - Forms\Components\TextInput::make('category') - ->label('Category') - ->placeholder('Scan the Category'), - Forms\Components\TextInput::make('code') - ->required() - ->placeholder('Scan the valid code') - ->autofocus(true) - // ->unique(ignoreRecord: true) - ->alphaNum() - ->minLength(6) - // ->autocapitalize('characters') - ->reactive() - ->disabled(fn (Get $get) => !empty($get('id'))) - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $code = $get('code'); - // Ensure `linestop_id` is not cleared - if (!$code) { - $set('iCodeError', 'Scan the valid code.'); - return; - } - else - { - if (strlen($code) < 6) { - $set('iCodeError', 'Item code must be at least 6 digits.'); - return; - } - else if (!preg_match('/^[a-zA-Z0-9]{6,}$/', $code)) { - $set('code',null); - $set('iCodeError', 'Item code must contain only alpha-numeric characters.'); - return; - } - $set('iCodeError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('iCodeError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('iCodeError') ? $get('iCodeError') : null) - ->hintColor('danger') - ->rule(function (callable $get) { - return Rule::unique('items', 'code') - ->where('plant_id', $get('plant_id')) - ->ignore($get('id')); // Ignore current record during updates - }), - Forms\Components\TextInput::make('hourly_quantity') - ->required() - ->label('Hourly Quantity') - ->placeholder('Scan the valid quantity') - ->integer() - ->default(1) - ->minValue(1) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $hourQuan = $get('hourly_quantity'); - // Ensure `linestop_id` is not cleared - if (!$hourQuan) { - $set('iHourQuanError', 'Scan the valid hourly quantity.'); - return; - } - else - { - if (!preg_match('/^[0-9]{1,}$/', $hourQuan)) { - $set('hourly_quantity',null); - $set('iHourQuanError', 'Quantity must be integer value.'); - return; - } - $set('iHourQuanError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('iHourQuanError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('iHourQuanError') ? $get('iHourQuanError') : null) - ->hintColor('danger'), - Forms\Components\TextInput::make('uom') - ->required() - ->label('Unit of Measure') - ->placeholder('Scan the valid uom'), + ->reactive() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - Forms\Components\TextInput::make('description') - ->placeholder('Scan the valid description') - ->required() - ->minLength(5) - ->columnSpan(['default' => 1, 'sm' => 1]), + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); + }) + ->default(function () { + return optional(Item::latest()->first())->plant_id; + }) + ->disabled(fn (Get $get) => ! empty($get('id'))) + // ->afterStateUpdated(fn ($set) => $set('block_id', null) & $set('name', null) & $set('start_time', null) & $set('duration', null) & $set('end_time', null)) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $plantId = $get('plant_id'); + // Ensure `linestop_id` is not cleared + if (! $plantId) { + $set('iPlantError', 'Please select a plant first.'); + + return; + } else { + $set('iPlantError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('iPlantError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('iPlantError') ? $get('iPlantError') : null) + ->hintColor('danger'), + Forms\Components\TextInput::make('category') + ->label('Category') + ->placeholder('Scan the Category'), + Forms\Components\TextInput::make('code') + ->required() + ->placeholder('Scan the valid code') + ->autofocus(true) + // ->unique(ignoreRecord: true) + ->alphaNum() + ->minLength(6) + // ->autocapitalize('characters') + ->reactive() + ->disabled(fn (Get $get) => ! empty($get('id'))) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $code = $get('code'); + // Ensure `linestop_id` is not cleared + if (! $code) { + $set('iCodeError', 'Scan the valid code.'); + + return; + } else { + if (strlen($code) < 6) { + $set('iCodeError', 'Item code must be at least 6 digits.'); + + return; + } elseif (! preg_match('/^[a-zA-Z0-9]{6,}$/', $code)) { + $set('code', null); + $set('iCodeError', 'Item code must contain only alpha-numeric characters.'); + + return; + } + $set('iCodeError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('iCodeError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('iCodeError') ? $get('iCodeError') : null) + ->hintColor('danger') + ->rule(function (callable $get) { + return Rule::unique('items', 'code') + ->where('plant_id', $get('plant_id')) + ->ignore($get('id')); // Ignore current record during updates + }), + Forms\Components\TextInput::make('hourly_quantity') + ->required() + ->label('Hourly Quantity') + ->placeholder('Scan the valid quantity') + ->integer() + ->default(1) + ->minValue(1) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $hourQuan = $get('hourly_quantity'); + // Ensure `linestop_id` is not cleared + if (! $hourQuan) { + $set('iHourQuanError', 'Scan the valid hourly quantity.'); + + return; + } else { + if (! preg_match('/^[0-9]{1,}$/', $hourQuan)) { + $set('hourly_quantity', null); + $set('iHourQuanError', 'Quantity must be integer value.'); + + return; + } + $set('iHourQuanError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('iHourQuanError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('iHourQuanError') ? $get('iHourQuanError') : null) + ->hintColor('danger'), + Forms\Components\TextInput::make('uom') + ->required() + ->label('Unit of Measure') + ->placeholder('Scan the valid uom'), + + Forms\Components\TextInput::make('description') + ->placeholder('Scan the valid description') + ->required() + ->minLength(5) + ->columnSpan(['default' => 1, 'sm' => 1]), // ->columnSpanFull(), - Forms\Components\TextInput::make('id') - ->hidden() - ->readOnly(), + Forms\Components\TextInput::make('id') + ->hidden() + ->readOnly(), ]) ->columns(3), ]); @@ -187,6 +187,7 @@ class ItemResource extends Resource $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') @@ -236,9 +237,143 @@ class ItemResource extends Resource ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) + // ->filters([ + // Tables\Filters\TrashedFilter::make(), + // ]) ->filters([ Tables\Filters\TrashedFilter::make(), + Filter::make('advanced_filters') + ->label('Advanced Filters') + ->form([ + Select::make('Plant') + ->label('Select Plant') + ->nullable() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; + + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); + }) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get): void { + $set('item_id', null); + $set('operator_id', null); + }), + Select::make('code') + ->label('Search by Item Code') + ->nullable() + // ->options(function (callable $get) { + // $plantId = $get('Plant'); + // return $plantId + // ? Item::where('plant_id', $plantId)->pluck('code', 'id') + // : Item::pluck('code', 'id'); + // }) + ->options(function (callable $get) { + $plantId = $get('Plant'); + + return $plantId + ? Item::where('plant_id', $plantId)->pluck('code', 'id') + : []; + }) + ->searchable() + ->reactive(), + TextInput::make('description') + ->label('Search by Description') + ->placeholder(placeholder: 'Enter Description'), + TextInput::make('category') + ->label('Search by Category') + ->placeholder(placeholder: 'Enter Category'), + TextInput::make('uom') + ->label('Search by UOM') + ->placeholder(placeholder: 'Enter UOM'), + DateTimePicker::make(name: 'created_from') + ->label('Created From') + ->placeholder(placeholder: 'Select From DateTime') + ->reactive() + ->native(false), + DateTimePicker::make('created_to') + ->label('Created To') + ->placeholder(placeholder: 'Select To DateTime') + ->reactive() + ->native(false), + ]) + ->query(function ($query, array $data) { + // Hide all records initially if no filters are applied + if ( + empty($data['Plant']) && + empty($data['item_id']) && + empty($data['description']) && + empty($data['uom']) && + empty($data['category']) && + empty($data['created_from']) && + empty($data['created_to']) + ) { + return $query->whereRaw('1 = 0'); + } + + if (! empty($data['Plant'])) { // $plant = $data['Plant'] ?? null + $query->where('plant_id', $data['Plant']); + } + + if (! empty($data['item_id'])) { + $query->where('item_id', $data['item_id']); + } + + if (! empty($data['description'])) { + $query->where('description', '%'.$data['description'].'%'); + } + + if (! empty($data['uom'])) { + $query->where('uom', 'like', '%'.$data['uom'].'%'); + } + + if (! empty($data['category'])) { + $query->where('category', '%'.$data['category'].'%'); + } + + if (! empty($data['created_from'])) { + $query->where('created_at', '>=', $data['created_from']); + } + + if (! empty($data['created_to'])) { + $query->where('created_at', '<=', $data['created_to']); + } + + }) + ->indicateUsing(function (array $data) { + $indicators = []; + + if (! empty($data['Plant'])) { + $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name'); + } + + if (! empty($data['item_id'])) { + $indicators[] = 'Item Code: '.$data['item_id']; + } + + if (! empty($data['description'])) { + $indicators[] = 'Description: '.$data['description']; + } + + if (! empty($data['uom'])) { + $indicators[] = 'UOM: '.$data['uom']; + } + + if (! empty($data['category'])) { + $indicators[] = 'Category: '.$data['category']; + } + + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; + } + + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; + } + + return $indicators; + }), ]) + ->filtersFormMaxHeight('280px') ->actions([ Tables\Actions\ViewAction::make(), Tables\Actions\EditAction::make(), @@ -251,7 +386,6 @@ class ItemResource extends Resource ]), ]) ->headerActions([ - // Tables\Actions\Action::make('Import Items') // ->label('Import Items') // ->form([ @@ -402,7 +536,6 @@ class ItemResource extends Resource // return; // } - // $uniqueCodes = array_unique($materialCodes); // $matchedItems = StickerMaster::with('item') @@ -483,23 +616,23 @@ class ItemResource extends Resource ->label('Import Items') ->color('warning') ->importer(ItemImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import item'); }), - // ->maxRows(100000), + // ->maxRows(100000), ExportAction::make() // ->columnMapping(true) ->label('Export Items') ->color('warning') // ->fileName("Items Report " . date('Y-m-d H:i:s')) ->exporter(ItemExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export item'); }), - // ->formats([ - // ExportFormat::Xlsx, - // ExportFormat::Csv, - // ]), + // ->formats([ + // ExportFormat::Xlsx, + // ExportFormat::Csv, + // ]), ]); } diff --git a/app/Filament/Resources/MachineResource.php b/app/Filament/Resources/MachineResource.php index fb08409..c99a1f0 100644 --- a/app/Filament/Resources/MachineResource.php +++ b/app/Filament/Resources/MachineResource.php @@ -159,6 +159,7 @@ class MachineResource extends Resource ->hintColor('danger'), Forms\Components\TextInput::make('name') ->label('Name') + ->minLength(5) ->placeholder('Scan the valid Machine Name') ->required() ->rule(function (callable $get) { @@ -169,6 +170,7 @@ class MachineResource extends Resource }), Forms\Components\TextInput::make('work_center') ->label('Work Center') + ->minLength(6) ->placeholder('Scan the valid Work Center') ->required() ->rule(function (callable $get) { diff --git a/app/Filament/Resources/ProcessOrderResource.php b/app/Filament/Resources/ProcessOrderResource.php index cbad930..862f13d 100644 --- a/app/Filament/Resources/ProcessOrderResource.php +++ b/app/Filament/Resources/ProcessOrderResource.php @@ -370,8 +370,7 @@ class ProcessOrderResource extends Resource ->label('Created At') ->alignCenter() ->dateTime() - ->sortable() - ->toggleable(isToggledHiddenByDefault: true), + ->sortable(), Tables\Columns\TextColumn::make('created_by') ->label('Created By') ->alignCenter() diff --git a/app/Filament/Resources/StickerMasterResource.php b/app/Filament/Resources/StickerMasterResource.php index 66b20ac..0f53c9c 100644 --- a/app/Filament/Resources/StickerMasterResource.php +++ b/app/Filament/Resources/StickerMasterResource.php @@ -3,35 +3,33 @@ 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\Models\Item; use App\Models\Plant; -//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\Components\DateTimePicker; +use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; use Filament\Forms\Form; +use Filament\Forms\Get; +use Filament\Forms\Set; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; +use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Get; -use Filament\Forms\Set; -use Filament\Tables\Actions\ExportAction; -use Filament\Tables\Actions\ImportAction; use Illuminate\Support\Facades\Storage; -use Filament\Forms\Components\FileUpload; -use Filament\Notifications\Notification; -use Filament\Forms\Components\DateTimePicker; -use Filament\Forms\Components\Radio; -use Filament\Forms\Components\TextInput; -use Filament\Tables\Filters\Filter; -use App\Models\InvoiceValidation; // use Illuminate\Validation\Rule; @@ -55,14 +53,14 @@ class StickerMasterResource extends Resource ->nullable() ->options(function (callable $get) { $userHas = Filament::auth()->user()->plant_id; + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); }) ->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 + ->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) & @@ -77,7 +75,7 @@ class StickerMasterResource extends Resource $set('laser_part_validation1', null) & $set('laser_part_validation2', null) & $set('serial_number_motor', false) & - $set('serial_number_pump', false) & + $set('serial_number_pump', false) & $set('serial_number_pumpset', false) & $set('pack_slip_motor', false) & $set('pack_slip_pump', false) & @@ -95,7 +93,7 @@ class StickerMasterResource extends Resource Forms\Components\Select::make('item_id') ->label('Item Code') ->options(function (callable $get) { - if (!$get('plant_id')) { + if (! $get('plant_id')) { return []; } @@ -118,29 +116,33 @@ class StickerMasterResource extends Resource $plantId = $get('plant_id'); $itemId = $get('item_id'); - //If plant_id is changed or empty, reset everything + // 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; } $availableItems = \App\Models\Item::where('plant_id', $plantId)->exists(); - if (!$availableItems) { + if (! $availableItems) { $set('item_error', null); + return; } // Ensure `item_id` is not cleared - if (!$plantId || !$itemId) { + if (! $plantId || ! $itemId) { $set('item_description', null); + return; } @@ -158,8 +160,7 @@ class StickerMasterResource extends Resource $duplicateSticker = StickerMaster::where('plant_id', $plantId) ->where('item_id', $itemId) ->exists(); - if(!$get('id')) - { + if (! $get('id')) { $set('item_error', $duplicateSticker ? 'Item Code already exists for the selected plant.' : null); } }) @@ -229,7 +230,7 @@ class StickerMasterResource extends Resource ->required() ->disabled(function ($get) { return $get('material_type'); - }) + }) ->integer(), Forms\Components\Select::make('material_type') @@ -242,38 +243,31 @@ class StickerMasterResource extends Resource ->reactive() ->afterStateUpdated(function ($state, callable $set, callable $get) { - if ($state) - { + if ($state) { $set('panel_box_code', null); $set('load_rate', 0); } - if ($state !== "2") - { + if ($state !== '2') { $set('bundle_quantity', null); - } - else - { + } else { $set('bundle_quantity', 2); } - //$plantId = $get('plant_id'); + // $plantId = $get('plant_id'); }) ->nullable(), Forms\Components\TextInput::make('bundle_quantity') ->label('Bundle Quantity') ->integer() - ->readOnly(fn (callable $get) => $get('material_type') !== "2") + ->readOnly(fn (callable $get) => $get('material_type') !== '2') ->nullable() ->minValue(2) ->reactive() - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if($get('material_type') !== "2") - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('material_type') !== '2') { $set('bundle_quantity', null); - } - else if ($get('bundle_quantity') < 2) - { + } elseif ($get('bundle_quantity') < 2) { $set('bundle_quantity', 2); } }), @@ -283,9 +277,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('serial_number_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('serial_number_motor')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('serial_number_motor')) { $set('serial_number_pumpset', false); } }) @@ -296,9 +289,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('serial_number_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('serial_number_pump')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('serial_number_pump')) { $set('serial_number_pumpset', false); } }) @@ -309,9 +301,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('serial_number_motor') || $get('serial_number_pump'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('serial_number_pumpset')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('serial_number_pumpset')) { $set('serial_number_motor', false); $set('serial_number_pump', false); } @@ -323,9 +314,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('pack_slip_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('pack_slip_motor')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('pack_slip_motor')) { $set('pack_slip_pumpset', false); } }) @@ -336,9 +326,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('pack_slip_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('pack_slip_pump')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('pack_slip_pump')) { $set('pack_slip_pumpset', false); } }) @@ -349,9 +338,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('pack_slip_motor') || $get('pack_slip_pump'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('pack_slip_pumpset')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('pack_slip_pumpset')) { $set('pack_slip_motor', false); $set('pack_slip_pump', false); } @@ -363,9 +351,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('name_plate_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('name_plate_motor')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('name_plate_motor')) { $set('name_plate_pumpset', false); } }) @@ -376,9 +363,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('name_plate_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('name_plate_pump')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('name_plate_pump')) { $set('name_plate_pumpset', false); } }) @@ -389,9 +375,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('name_plate_motor') || $get('name_plate_pump'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('name_plate_pumpset')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('name_plate_pumpset')) { $set('name_plate_motor', false); $set('name_plate_pump', false); } @@ -403,9 +388,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('tube_sticker_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('tube_sticker_motor')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('tube_sticker_motor')) { $set('tube_sticker_pumpset', false); } }) @@ -416,9 +400,8 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('tube_sticker_pumpset'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('tube_sticker_pump')) - { + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($get('tube_sticker_pump')) { $set('tube_sticker_pumpset', false); } }) @@ -430,14 +413,13 @@ class StickerMasterResource extends Resource // ->disabled(function ($get) { // return $get('tube_sticker_motor') || $get('tube_sticker_pump'); // }) - ->afterStateUpdated(function ($state, callable $set,callable $get) { - if ($get('tube_sticker_pumpset')) - { + ->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 + ->dehydrateStateUsing(fn ($state) => $state ? $state : null), // to pass null value Forms\Components\Checkbox::make('warranty_card') ->nullable() @@ -452,301 +434,316 @@ class StickerMasterResource extends Resource public static function table(Table $table): Table { return $table + ->columns([ + // Tables\Columns\TextColumn::make('id') + // ->label('ID') + // ->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; - ->columns([ - // Tables\Columns\TextColumn::make('id') - // ->label('ID') - // ->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; - }), - Tables\Columns\TextColumn::make('plant.name') - ->label('Plant') - ->alignCenter() - ->sortable() - ->searchable(), - Tables\Columns\TextColumn::make('item.code') - ->label('Item Code') - ->alignCenter() - ->sortable() - ->searchable(), - Tables\Columns\CheckboxColumn::make('serial_number_motor') - ->label('Serial Number Motor') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('serial_number_pump') - ->label('Serial Number Pump') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('serial_number_pumpset') - ->label('Serial Number Pumpset') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('pack_slip_motor') - ->label('Pack Slip Motor') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('pack_slip_pump') - ->label('Pack Slip Pump') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('pack_slip_pumpset') - ->label('Pack Slip Pumpset') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('name_plate_motor') - ->label('Name Plate Motor') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('name_plate_pump') - ->label('Name Plate Pump') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('name_plate_pumpset') - ->label('Name Plate Pumpset') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('tube_sticker_motor') - ->label('Tube Sticker Motor') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('tube_sticker_pump') - ->label('Tube Sticker Pump') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('tube_sticker_pumpset') - ->label('Tube Sticker Pumpset') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\CheckboxColumn::make('warranty_card') - ->label('Warranty Card') - ->disabled(true) - ->alignCenter() - ->sortable(), - Tables\Columns\TextColumn::make('part_validation1') - ->label('Part Validation 1') - ->alignCenter(), - Tables\Columns\TextColumn::make('part_validation2') - ->label('Part Validation 2') - ->alignCenter(), - Tables\Columns\TextColumn::make('part_validation3') - ->label('Part Validation 3') - ->alignCenter(), - Tables\Columns\TextColumn::make('part_validation4') - ->label('Part Validation 4') - ->alignCenter(), - Tables\Columns\TextColumn::make('part_validation5') - ->label('Part Validation 5') - ->alignCenter(), - Tables\Columns\TextColumn::make('laser_part_validation1') - ->label('Laser Part Validation 1') - ->alignCenter(), - Tables\Columns\TextColumn::make('laser_part_validation2') - ->label('Laser Part Validation 2') - ->alignCenter(), - Tables\Columns\TextColumn::make('panel_box_code') - ->label('Panel Box Code') - ->alignCenter(), - Tables\Columns\TextColumn::make('load_rate') - ->label('Load Rate') - ->alignCenter() - ->sortable(), - Tables\Columns\TextColumn::make('bundle_quantity') - ->label('Bundle Quantity') - ->alignCenter(), - Tables\Columns\TextColumn::make('material_type') - ->label('Material Type') - ->alignCenter() - ->formatStateUsing(function ($state) { - if (is_null($state) || $state === '') { - return ''; - } - return match ($state) { - 1 => 'Individual', - 2 => 'Bundle', - 3 => 'Quantity', - default => '', - }; - }), - Tables\Columns\TextColumn::make('created_at') - ->label('Created At') - ->dateTime() - ->alignCenter() - ->sortable(), - Tables\Columns\TextColumn::make('updated_at') - ->label('Updated At') - ->dateTime() - ->alignCenter() - ->sortable() - ->toggleable(isToggledHiddenByDefault: true), - Tables\Columns\TextColumn::make('deleted_at') - ->label('Deleted At') - ->dateTime() - ->alignCenter() - ->sortable() - ->toggleable(isToggledHiddenByDefault: true), - ]) - // ->filters([ - // Tables\Filters\TrashedFilter::make(), - // ]) - ->filters([ - Tables\Filters\TrashedFilter::make(), - Filter::make('advanced_filters') - ->label('Advanced Filters') - ->form([ - Select::make('Plant') - ->label('Select Plant') - ->nullable() - ->options(function (callable $get) { - $userHas = Filament::auth()->user()->plant_id; - return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); - }) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get): void { - $set('item_id', null); - $set('operator_id', null); - }), - Select::make('item_id') - ->label('Search by Item Code') - ->nullable() - // ->options(function (callable $get) { - // $plantId = $get('Plant'); - // return $plantId - // ? Item::where('plant_id', $plantId)->pluck('code', 'id') - // : Item::pluck('code', 'id'); - // }) - ->options(function (callable $get) { - $plantId = $get('Plant'); - return $plantId - ? Item::where('plant_id', $plantId)->pluck('code', 'id') - : []; - }) - ->searchable() - ->reactive(), - Select::make('material_type') - ->label('Material Type') - ->options([ + return ($currentPage - 1) * $perPage + $rowLoop->iteration; + }), + Tables\Columns\TextColumn::make('plant.name') + ->label('Plant') + ->alignCenter() + ->sortable() + ->searchable(), + Tables\Columns\TextColumn::make('item.code') + ->label('Item Code') + ->alignCenter() + ->sortable() + ->searchable(), + Tables\Columns\CheckboxColumn::make('serial_number_motor') + ->label('Serial Number Motor') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('serial_number_pump') + ->label('Serial Number Pump') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('serial_number_pumpset') + ->label('Serial Number Pumpset') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('pack_slip_motor') + ->label('Pack Slip Motor') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('pack_slip_pump') + ->label('Pack Slip Pump') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('pack_slip_pumpset') + ->label('Pack Slip Pumpset') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('name_plate_motor') + ->label('Name Plate Motor') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('name_plate_pump') + ->label('Name Plate Pump') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('name_plate_pumpset') + ->label('Name Plate Pumpset') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('tube_sticker_motor') + ->label('Tube Sticker Motor') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('tube_sticker_pump') + ->label('Tube Sticker Pump') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('tube_sticker_pumpset') + ->label('Tube Sticker Pumpset') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\CheckboxColumn::make('warranty_card') + ->label('Warranty Card') + ->disabled(true) + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('part_validation1') + ->label('Part Validation 1') + ->alignCenter(), + Tables\Columns\TextColumn::make('part_validation2') + ->label('Part Validation 2') + ->alignCenter(), + Tables\Columns\TextColumn::make('part_validation3') + ->label('Part Validation 3') + ->alignCenter(), + Tables\Columns\TextColumn::make('part_validation4') + ->label('Part Validation 4') + ->alignCenter(), + Tables\Columns\TextColumn::make('part_validation5') + ->label('Part Validation 5') + ->alignCenter(), + Tables\Columns\TextColumn::make('laser_part_validation1') + ->label('Laser Part Validation 1') + ->alignCenter(), + Tables\Columns\TextColumn::make('laser_part_validation2') + ->label('Laser Part Validation 2') + ->alignCenter(), + Tables\Columns\TextColumn::make('panel_box_code') + ->label('Panel Box Code') + ->alignCenter(), + Tables\Columns\TextColumn::make('load_rate') + ->label('Load Rate') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('bundle_quantity') + ->label('Bundle Quantity') + ->alignCenter(), + Tables\Columns\TextColumn::make('material_type') + ->label('Material Type') + ->alignCenter() + ->formatStateUsing(function ($state) { + if (is_null($state) || $state === '') { + return ''; + } + + return match ($state) { 1 => 'Individual', 2 => 'Bundle', 3 => 'Quantity', - ]) - ->reactive(), + default => '', + }; + }), + Tables\Columns\TextColumn::make('created_at') + ->label('Created At') + ->dateTime() + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('updated_at') + ->label('Updated At') + ->dateTime() + ->alignCenter() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('deleted_at') + ->label('Deleted At') + ->dateTime() + ->alignCenter() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + ]) + // ->filters([ + // Tables\Filters\TrashedFilter::make(), + // ]) + ->filters([ + Tables\Filters\TrashedFilter::make(), + Filter::make('advanced_filters') + ->label('Advanced Filters') + ->form([ + Select::make('Plant') + ->label('Select Plant') + ->nullable() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - TextInput::make('panel_box_code') - ->label('Panel Box Code') - ->placeholder(placeholder: 'Enter Panel Box Code'), - DateTimePicker::make(name: 'created_from') - ->label('Created From') - ->placeholder(placeholder: 'Select From DateTime') - ->reactive() - ->native(false), - DateTimePicker::make('created_to') - ->label('Created To') - ->placeholder(placeholder: 'Select To DateTime') - ->reactive() - ->native(false), - ]) - ->query(function ($query, array $data) { - // Hide all records initially if no filters are applied - if ( - empty($data['material_type']) && - empty($data['Plant']) && - empty($data['item_id']) && - empty($data['panel_box_code']) && - empty($data['created_from']) && - empty($data['created_to']) - ) { - return $query->whereRaw('1 = 0'); - } + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); + }) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get): void { + $set('item_id', null); + $set('operator_id', null); + }), + Select::make('item_id') + ->label('Search by Item Code') + ->nullable() + // ->options(function (callable $get) { + // $plantId = $get('Plant'); + // return $plantId + // ? Item::where('plant_id', $plantId)->pluck('code', 'id') + // : Item::pluck('code', 'id'); + // }) + ->options(function (callable $get) { + $plantId = $get('Plant'); - if (!empty($data['Plant'])) { //$plant = $data['Plant'] ?? null - $query->where('plant_id', $data['Plant']); - } + return $plantId + ? Item::where('plant_id', $plantId)->pluck('code', 'id') + : Item::pluck('code', 'id'); + }) + ->searchable() + ->reactive(), + Select::make('material_type') + ->label('Material Type') + ->options([ + 1 => 'Individual', + 2 => 'Bundle', + 3 => 'Quantity', + ]) + ->reactive(), - if (!empty($data['item_id'])) { - $query->where('item_id', $data['item_id']); - } + TextInput::make('panel_box_code') + ->label('Panel Box Code') + ->placeholder(placeholder: 'Enter Panel Box Code'), + DateTimePicker::make(name: 'created_from') + ->label('Created From') + ->placeholder(placeholder: 'Select From DateTime') + ->reactive() + ->native(false), + DateTimePicker::make('created_to') + ->label('Created To') + ->placeholder(placeholder: 'Select To DateTime') + ->reactive() + ->native(false), + ]) + ->query(function ($query, array $data) { + // Hide all records initially if no filters are applied + if ( + empty($data['Plant']) && + empty($data['item_id']) && + empty($data['material_type']) && + empty($data['panel_box_code']) && + empty($data['created_from']) && + empty($data['created_to']) + ) { + return $query->whereRaw('1 = 0'); + } - if (!empty($data['material_type'])) { - $query->where('material_type', $data['material_type']); - } + if (! empty($data['Plant'])) { // $plant = $data['Plant'] ?? null + $query->where('plant_id', $data['Plant']); + } - if (!empty($data['panel_box_code'])) { - $query->where('panel_box_code', 'like', '%' . $data['panel_box_code'] . '%'); - } + if (! empty($data['item_id'])) { + $query->where('item_id', $data['item_id']); + } - if (!empty($data['created_from'])) { - $query->where('created_at', '>=', $data['created_from']); - } + if (! empty($data['material_type'])) { + $query->where('material_type', $data['material_type']); + } - if (!empty($data['created_to'])) { - $query->where('created_at', '<=', $data['created_to']); - } + if (! empty($data['panel_box_code'])) { + $query->where('panel_box_code', 'like', '%'.$data['panel_box_code'].'%'); + } - }) - ->indicateUsing(function (array $data) { - $indicators = []; + if (! empty($data['created_from'])) { + $query->where('created_at', '>=', $data['created_from']); + } - if (!empty($data['Plant'])) { - $indicators[] = 'Plant: ' . Plant::where('id', $data['Plant'])->value('name'); - } + if (! empty($data['created_to'])) { + $query->where('created_at', '<=', $data['created_to']); + } - if (!empty($data['item_id'])) { - $indicators[] = 'Item Code: ' . $data['item_id']; - } + }) + ->indicateUsing(function (array $data) { + $indicators = []; - if (!empty($data['panel_box_code'])) { - $indicators[] = 'Panel Box Code: ' . $data['panel_box_code']; - } + if (! empty($data['Plant'])) { + $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name'); + } - if (!empty($data['created_from'])) { - $indicators[] = 'From: ' . $data['created_from']; - } + if (! empty($data['item_id'])) { + $indicators[] = 'Item Code: '.Item::where('id', $data['item_id'])->value('code'); + } - if (!empty($data['created_to'])) { - $indicators[] = 'To: ' . $data['created_to']; - } + if (! empty($data['material_type'])) { + if ($data['material_type'] == 1) { + $indicators[] = 'Material Type: Individual'; + } elseif ($data['material_type'] == 2) { + $indicators[] = 'Material Type: Bundle'; + } elseif ($data['material_type'] == 3) { + $indicators[] = 'Material Type: Quantity'; + } + // $indicators[] = 'Material Type: '.$data['material_type']; + } - return $indicators; - }) - ]) - ->filtersFormMaxHeight('280px') - ->actions([ - Tables\Actions\ViewAction::make(), - Tables\Actions\EditAction::make(), - ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), - Tables\Actions\ForceDeleteBulkAction::make(), - Tables\Actions\RestoreBulkAction::make(), - ]), - ]) - ->headerActions([ - Tables\Actions\Action::make('upload_part_validation_image') + if (! empty($data['panel_box_code'])) { + $indicators[] = 'Panel Box Code: '.$data['panel_box_code']; + } + + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; + } + + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; + } + + return $indicators; + }), + ]) + ->filtersFormMaxHeight('280px') + ->actions([ + Tables\Actions\ViewAction::make(), + Tables\Actions\EditAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + Tables\Actions\ForceDeleteBulkAction::make(), + Tables\Actions\RestoreBulkAction::make(), + ]), + ]) + ->headerActions([ + Tables\Actions\Action::make('upload_part_validation_image') ->label('Upload Part Validation Image') ->form([ Select::make('plant_id') ->options(function (callable $get) { $userHas = Filament::auth()->user()->plant_id; + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); }) ->label('Select Plant') @@ -757,65 +754,65 @@ class StickerMasterResource extends Resource }) ->reactive(), Select::make('item_id') - ->options(function (callable $get) { - $plantId = $get('plant_id'); + ->options(function (callable $get) { + $plantId = $get('plant_id'); - if (!$plantId) { - return []; - } + if (! $plantId) { + return []; + } - return StickerMaster::where('plant_id', $plantId) - ->where(function ($q) { - $q->whereNotNull('part_validation1') - ->orWhereNotNull('part_validation2') - ->orWhereNotNull('part_validation3') - ->orWhereNotNull('part_validation4'); - }) - ->with('item') - ->get() - ->pluck('item.code', 'item_id') - ->toArray(); - }) - ->label('Item Code') - ->required() - ->searchable() - ->afterStateUpdated(fn ($state, callable $set) => $set('part_validation_upload', null)) - ->reactive(), + return StickerMaster::where('plant_id', $plantId) + ->where(function ($q) { + $q->whereNotNull('part_validation1') + ->orWhereNotNull('part_validation2') + ->orWhereNotNull('part_validation3') + ->orWhereNotNull('part_validation4'); + }) + ->with('item') + ->get() + ->pluck('item.code', 'item_id') + ->toArray(); + }) + ->label('Item Code') + ->required() + ->searchable() + ->afterStateUpdated(fn ($state, callable $set) => $set('part_validation_upload', null)) + ->reactive(), Select::make('validation_type') ->label('Select Validation') ->options(function (callable $get) { $plantId = $get('plant_id'); - $itemId = $get('item_id'); + $itemId = $get('item_id'); - if (!$plantId || !$itemId) { + if (! $plantId || ! $itemId) { return []; } $sticker = StickerMaster::where('plant_id', $plantId) - ->where('item_id', $itemId) - ->first(); + ->where('item_id', $itemId) + ->first(); - if (!$sticker) { + if (! $sticker) { return []; } $options = []; - if (!empty($sticker->part_validation1)) { + if (! empty($sticker->part_validation1)) { $options['part_validation1'] = 'Part Validation 1'; } - if (!empty($sticker->part_validation2)) { + if (! empty($sticker->part_validation2)) { $options['part_validation2'] = 'Part Validation 2'; } - if (!empty($sticker->part_validation3)) { + if (! empty($sticker->part_validation3)) { $options['part_validation3'] = 'Part Validation 3'; } - if (!empty($sticker->part_validation4)) { + if (! empty($sticker->part_validation4)) { $options['part_validation4'] = 'Part Validation 4'; } @@ -835,15 +832,15 @@ class StickerMasterResource extends Resource ->storeFiles(false) // prevent auto-storing, we will store manually ->reactive() ->required() - ->disk('local') //'local' refers to the local storage disk defined in config/filesystems.php, typically pointing to storage/app. - ->visible(fn (Get $get) => !empty($get('plant_id'))) + ->disk('local') // 'local' refers to the local storage disk defined in config/filesystems.php, typically pointing to storage/app. + ->visible(fn (Get $get) => ! empty($get('plant_id'))) ->directory('uploads/PartValidation'), ]) ->action(function (array $data) { $uploadedFile = $data['part_validation_upload']; - $plantId = $data['plant_id']; - $itemId = $data['item_id']; - $column = $data['validation_type']; + $plantId = $data['plant_id']; + $itemId = $data['item_id']; + $column = $data['validation_type']; $plant = Plant::find($plantId); @@ -853,32 +850,32 @@ class StickerMasterResource extends Resource ->where('item_id', $itemId) ->first(); - if (!$sticker) { - Notification::make() - ->title('Unknown Sticker Master') - ->body("Sticker Master data not found.") - ->danger() - ->seconds(2) - ->send(); + if (! $sticker) { + Notification::make() + ->title('Unknown Sticker Master') + ->body('Sticker Master data not found.') + ->danger() + ->seconds(2) + ->send(); } $value = $sticker->{$column}; if (empty($value)) { Notification::make() - ->title('Unknown Part validation') - ->body("Selected validation '$column' has no value.") - ->danger() - ->seconds(2) - ->send(); + ->title('Unknown Part validation') + ->body("Selected validation '$column' has no value.") + ->danger() + ->seconds(2) + ->send(); } - $newFileName = $value . '.png'; + $newFileName = $value.'.png'; $directory = "uploads/PartValidation/{$plantCode}"; $disk = Storage::disk('local'); - if (!$disk->exists($directory)) { + if (! $disk->exists($directory)) { $disk->makeDirectory($directory, 0755, true); } @@ -887,21 +884,20 @@ class StickerMasterResource extends Resource // $newFileName, // 'local' // ); - try - { + try { $path = $uploadedFile->storeAs( $directory, $newFileName, 'local' ); - } - catch (\Exception $e) { + } catch (\Exception $e) { Notification::make() ->title('Upload Failed') - ->body("Failed to upload image: " . $e->getMessage()) + ->body('Failed to upload image: '.$e->getMessage()) ->danger() ->seconds(3) ->send(); + return; } @@ -909,29 +905,29 @@ class StickerMasterResource extends Resource Notification::make() ->title('Success') - ->body("Uploaded part validation image successfully") + ->body('Uploaded part validation image successfully') ->success() ->seconds(2) ->send(); }) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import part validation'); }), - ImportAction::make() - ->label('Import Sticker Masters') - ->color('warning') - ->importer(StickerMasterImporter::class) - ->visible(function() { - return Filament::auth()->user()->can('view import sticker master'); - }), - ExportAction::make() - ->label('Export Sticker Masters') - ->color('warning') - ->exporter(StickerMasterExporter::class) - ->visible(function() { - return Filament::auth()->user()->can('view export sticker master'); - }), - ]); + ImportAction::make() + ->label('Import Sticker Masters') + ->color('warning') + ->importer(StickerMasterImporter::class) + ->visible(function () { + return Filament::auth()->user()->can('view import sticker master'); + }), + ExportAction::make() + ->label('Export Sticker Masters') + ->color('warning') + ->exporter(StickerMasterExporter::class) + ->visible(function () { + return Filament::auth()->user()->can('view export sticker master'); + }), + ]); } public static function getRelations(): array -- 2.49.1