diff --git a/app/Filament/Resources/RequestCharacteristicResource.php b/app/Filament/Resources/RequestCharacteristicResource.php index c20f0b0..631e03e 100644 --- a/app/Filament/Resources/RequestCharacteristicResource.php +++ b/app/Filament/Resources/RequestCharacteristicResource.php @@ -9,7 +9,10 @@ use App\Models\Machine; use App\Models\RequestCharacteristic; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; use Filament\Forms\Form; +use Filament\Forms\Get; +use Filament\Forms\Set; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; @@ -54,317 +57,503 @@ class RequestCharacteristicResource extends Resource return $form ->schema([ - Forms\Components\Select::make('plant_id') - ->label('Plant') - ->relationship('plant', 'name') - ->required() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\Select::make('machine_id') - ->label('Work Center') - // ->relationship('machine', 'name') - ->reactive() - ->searchable() - ->options(function (callable $get) { - $plantId = $get('plant_id'); - if (empty($plantId)) { - return []; - } + Section::make('') + ->schema([ + Forms\Components\Select::make('plant_id') + ->label('Plant') + ->reactive() + ->relationship('plant', 'name') + ->required() + ->default(function () { + return optional(RequestCharacteristic::latest()->first())->plant_id; + }) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $plantId = $get('plant_id'); + $updRec = $get('id'); + $set('machine_id', null); + $set('item_id', null); + $set('aufnr', null); + $set('machine_name', null); + $set('characteristic_approver_master_id', null); + if (! $updRec && $plantId) { + $set('work_flow_id', self::isNewWorkFlow($get)); + } + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(fn ($get) => self::isFieldDisabled($get)), + Forms\Components\Select::make('machine_id') + ->label('Work Center') + // ->relationship('machine', 'name') + ->reactive() + ->searchable() + ->options(function (callable $get) { + $plantId = $get('plant_id'); + if (! $plantId) { + return []; + } - return Machine::where('plant_id', $plantId)->pluck('work_center', 'id'); - }) - ->required() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\TextInput::make('work_flow_id') - ->label('Work Flow ID') - ->readOnly() - ->reactive(), - // ->rule(function (callable $get) { - // return Rule::unique('request_characteristics', 'work_flow_id') - // ->where('plant_id', $get('plant_id')) - // ->ignore($get('id')); - // }), - Forms\Components\Select::make('item_id') - ->label('Item') - // ->relationship('item', 'id') - ->reactive() - ->searchable() - ->options(function (callable $get) { - $plantId = $get('plant_id'); - if (empty($plantId)) { - return []; - } + return Machine::where('plant_id', $plantId)->pluck('work_center', 'id'); + }) + ->required() + ->default(function () { + return optional(RequestCharacteristic::latest()->first())->machine_id ?? []; + }) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('item_id', null); + $set('aufnr', null); + $set('machine_name', null); + $set('characteristic_approver_master_id', null); + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(fn ($get) => self::isFieldDisabled($get)), + Forms\Components\TextInput::make('work_flow_id') + ->label('Work Flow ID') + ->readOnly() + ->reactive() + ->default(function ($state, callable $set, callable $get) { + $updRec = $get('id'); + if (! $updRec) { + return self::isNewWorkFlow($get); + } + $set('updated_by', Filament::auth()->user()?->name); + }), + // ->rule(function (callable $get) { + // return Rule::unique('request_characteristics', 'work_flow_id') + // ->where('plant_id', $get('plant_id')) + // ->ignore($get('id')); + // }), + Forms\Components\Select::make('item_id') + ->label('Item') + // ->relationship('item', 'id') + ->reactive() + ->searchable() + ->options(function (callable $get) { + $plantId = $get('plant_id'); + if (! $plantId) { + return []; + } - return Item::where('plant_id', $plantId)->pluck('code', 'id'); - }) - ->required() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\Select::make('characteristic_approver_master_id') - ->label('Characteristic Approver') - // ->relationship('characteristicApproverMaster', 'id') - ->reactive() - ->searchable() - ->options(function (callable $get) { - $plantId = $get('plant_id'); + return Item::where('plant_id', $plantId)->pluck('code', 'id'); + }) + ->required() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('aufnr', null); + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(fn ($get) => self::isFieldDisabled($get)), + Forms\Components\TextInput::make('aufnr') + ->label('Aufnr') + ->reactive() + ->required() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(fn ($get) => self::isFieldDisabled($get)), + Forms\Components\Select::make('machine_name') + ->label('Machines') + ->reactive() + ->nullable() + ->searchable() + ->options(function (callable $get) { + $plantId = $get('plant_id'); + $machineId = $get('machine_id'); - $machineId = $get('machine_id'); + if (! $plantId || ! $machineId) { + return []; + } - if (! $plantId) { - return []; - } + return CharacteristicApproverMaster::where('plant_id', $plantId)->where('machine_id', $machineId)->pluck('machine_name', 'id')->unique(); + }) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('characteristic_approver_master_id', null); + $set('updated_by', Filament::auth()->user()?->name); + }) + ->default(function () { + return optional(RequestCharacteristic::latest()->first())->characteristic_approver_master_id ?? []; + }) + ->afterStateHydrated(function ($component, $state, Get $get, Set $set) { + if ($get('id')) { + $reqId = RequestCharacteristic::where('id', $get('id'))->first()?->characteristic_approver_master_id; + if ($reqId) { + $reqMac = CharacteristicApproverMaster::where('id', $reqId)->first()?->machine_name; + if ($reqMac) { + $set('machine_name', $reqMac); + } else { + $set('machine_name', null); + } + } else { + $set('machine_name', null); + } + } + }) + ->required(), + Forms\Components\Select::make('characteristic_approver_master_id') + ->label('Master Characteristic') + ->relationship('characteristicApproverMaster', 'characteristic_field') + ->reactive() + ->nullable() + ->searchable() + ->options(function (callable $get) { + $plantId = $get('plant_id'); + $machineId = $get('machine_id'); + $machineName = $get('machine_name'); - $approvers = CharacteristicApproverMaster::where('plant_id', $plantId) - ->where('machine_id', $machineId) - ->get(); + if (! $plantId || ! $machineId || ! $machineName) { + return []; + } - $options = []; + return CharacteristicApproverMaster::where('plant_id', $plantId)->where('machine_id', $machineId)->where('machine_name', $machineName)->pluck('characteristic_field', 'id'); + }) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->required(), + // ->disabled(fn ($get) => self::isFieldDisabled($get)) + Section::make('Request Characteristic') + // ->columnSpan(['default' => 2, 'sm' => 4]) + ->reactive() + ->schema([ + Forms\Components\TextInput::make('characteristic_name') + ->label('Characteristic Name') + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(fn ($get) => self::isFieldDisabled($get)), + Forms\Components\TextInput::make('current_value') + ->label('Current Value') + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(fn ($get) => self::isFieldDisabled(get: $get)), + Forms\Components\TextInput::make('update_value') + ->label('Update Value') + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(fn ($get) => self::isFieldDisabled($get)), + ]) + ->collapsible() + ->columns(['default' => 1, 'sm' => 3]), + Section::make(function ($get): string { + $approverId = $get('characteristic_approver_master_id'); + $approverName = $approverId ? CharacteristicApproverMaster::find($approverId)?->name1 : null; - foreach ($approvers as $approver) { - if ($approver->name1) { - $options[$approver->id.'_name1'] = $approver->name1; - } - if ($approver->name2) { - $options[$approver->id.'_name2'] = $approver->name2; - } - if ($approver->name3) { - $options[$approver->id.'_name3'] = $approver->name3; - } - } + return 'Approver - 1'.($approverName ? " ( {$approverName} )" : ''); + }) + ->reactive() + // ->description(fn (Get $get) => CharacteristicApproverMaster::find($get('characteristic_approver_master_id'))?->name1 ?? 'Select approver above' + // ) + ->schema([ + Forms\Components\Select::make('approver_status1') + ->label('Approver Status') + ->reactive() + ->options([ + 'Approved' => 'Approved', + 'Hold' => 'Hold', + 'Rejected' => 'Rejected', + ]) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($state && empty($get('approved1_at'))) { + $set('approved1_at', now()); + } + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); + $approverId = $get('characteristic_approver_master_id'); - return $options; - }) - ->dehydrateStateUsing(function ($state, callable $set) { + if (! $approverId) { + return true; + } - if (empty($state) || ! str_contains($state, '_')) { - return $state; - } + if (str_contains($approverId, '_')) { + [$approverId, $level] = explode('_', $approverId); + } - $parts = explode('_', $state); + $approver = CharacteristicApproverMaster::find($approverId); + if (! $approver) { + return true; + } - if (count($parts) != 2) { - return null; - } + // Super Admin can edit any + if ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; // field enabled + } - [$id, $level] = $parts; + // Otherwise, enable only if the user's name matches + return $approver->name1 != $currentUser?->name; + }), + Forms\Components\TextInput::make('approver_remark1') + ->label('Approver Remark') + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); + $updId = $get('id'); - $set('approver_level', $level); + if (! $updId) { + return true; + } elseif ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; + } else { + return true; + } + }), + Forms\Components\DateTimePicker::make('approved1_at') + // ->label('Approved At') + ->label(fn (callable $get): string => match ($get('approver_status1')) { + 'Approved' => 'Approved At', + 'Hold' => 'Hold At', + 'Rejected' => 'Rejected At', + default => 'Updated At', + }) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); // logged-in user + $approverId = $get('characteristic_approver_master_id'); - return (int) $id; - }) - ->required() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\TextInput::make('aufnr') - ->label('Aufnr') - ->reactive() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\TextInput::make('characteristic_name') - ->label('Characteristic Name') - ->reactive() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\TextInput::make('current_value') - ->label('Current Value') - ->reactive() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\TextInput::make('update_value') - ->label('Update Value') - ->reactive() - ->disabled(fn ($get) => self::isFieldDisabled($get)), - Forms\Components\Select::make('approver_status1') - ->label('Approver Status 1') - ->reactive() - ->options([ - 'Approved' => 'Approved', - 'Hold' => 'Hold', - 'Rejected' => 'Rejected', + if (! $approverId) { + return true; + } + + if (str_contains($approverId, '_')) { + [$approverId, $level] = explode('_', $approverId); + } + + $approver = CharacteristicApproverMaster::find($approverId); + if (! $approver) { + return true; + } + if ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; + } + + return $approver->name1 != $currentUser?->name; + }), + ]) + ->collapsed()// collapsible() + ->columns(['default' => 1, 'sm' => 3]), + Section::make(function ($get): string { + $approverId = $get('characteristic_approver_master_id'); + $approverName = $approverId ? CharacteristicApproverMaster::find($approverId)?->name2 : null; + + return 'Approver - 2'.($approverName ? " ( {$approverName} )" : ''); + }) + ->reactive() + ->schema([ + Forms\Components\Select::make('approver_status2') + ->label('Approver Status') + ->reactive() + ->options([ + 'Approved' => 'Approved', + 'Hold' => 'Hold', + 'Rejected' => 'Rejected', + ]) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($state && empty($get('approved2_at'))) { + $set('approved2_at', now()); + } + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); // get the User object + $approverId = $get('characteristic_approver_master_id'); + + if (! $approverId) { + return true; + } + + if (str_contains($approverId, '_')) { + [$approverId, $level] = explode('_', $approverId); + } + + $approver = CharacteristicApproverMaster::find($approverId); + if (! $approver) { + return true; + } + + // Super Admin can always edit + if ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; // ENABLE field + } + + // Otherwise, enable only if the user's name matches + return $approver->name2 != $currentUser?->name; + }), + Forms\Components\TextInput::make('approver_remark2') + ->label('Approver Remark') + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); + $updId = $get('id'); + + if (! $updId) { + return true; + } elseif ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; + } else { + return true; + } + }), + Forms\Components\DateTimePicker::make('approved2_at') + ->label(fn (callable $get): string => match ($get('approver_status2')) { + 'Approved' => 'Approved At', + 'Hold' => 'Hold At', + 'Rejected' => 'Rejected At', + default => 'Updated At', + }) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); // logged-in user + $approverId = $get('characteristic_approver_master_id'); + + if (! $approverId) { + return true; + } + + if (str_contains($approverId, '_')) { + [$approverId, $level] = explode('_', $approverId); + } + + $approver = CharacteristicApproverMaster::find($approverId); + if (! $approver) { + return true; + } + if ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; + } + + return $approver->name2 != $currentUser?->name; + }), + // ->dehydrated(true), + ]) + ->collapsed()// collapsible() + ->columns(['default' => 1, 'sm' => 3]), + Section::make(function ($get): string { + $approverId = $get('characteristic_approver_master_id'); + $approverName = $approverId ? CharacteristicApproverMaster::find($approverId)?->name3 : null; + + return 'Approver - 3'.($approverName ? " ( {$approverName} )" : ''); + }) + ->reactive() + ->schema([ + Forms\Components\Select::make('approver_status3') + ->label('Approver Status') + ->reactive() + ->options([ + 'Approved' => 'Approved', + 'Hold' => 'Hold', + 'Rejected' => 'Rejected', + ]) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + if ($state && empty($get('approved3_at'))) { + $set('approved3_at', now()); + } + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); + $approverId = $get('characteristic_approver_master_id'); + + if (! $approverId) { + return true; + } + + if (str_contains($approverId, '_')) { + [$approverId, $level] = explode('_', $approverId); + } + + $approver = CharacteristicApproverMaster::find($approverId); + if (! $approver) { + return true; + } + + if ($currentUser->hasRole('Super Admin')) { + return false; + } else { + return $approver->name3 != $currentUser?->name; + } + + }), + Forms\Components\TextInput::make('approver_remark3') + ->label('Approver Remark') + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); + $updId = $get('id'); + + if (! $updId) { + return true; + } elseif ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; + } else { + return true; + } + }), + Forms\Components\DateTimePicker::make('approved3_at') + ->label(fn (callable $get): string => match ($get('approver_status3')) { + 'Approved' => 'Approved At', + 'Hold' => 'Hold At', + 'Rejected' => 'Rejected At', + default => 'Updated At', + }) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('updated_by', Filament::auth()->user()?->name); + }) + ->disabled(function ($get) { + $currentUser = Filament::auth()->user(); // logged-in user + $approverId = $get('characteristic_approver_master_id'); + + if (! $approverId) { + return true; + } + + if (str_contains($approverId, '_')) { + [$approverId, $level] = explode('_', $approverId); + } + + $approver = CharacteristicApproverMaster::find($approverId); + if (! $approver) { + return true; + } + if ($currentUser && $currentUser->hasRole('Super Admin')) { + return false; + } + + return $approver->name3 != $currentUser?->name; + }), + ]) + ->collapsed()// collapsible() + ->columns(['default' => 1, 'sm' => 3]), + Forms\Components\Hidden::make('created_by') + ->label('Created By') + ->default(Filament::auth()->user()?->name), + Forms\Components\Hidden::make('updated_by') + ->label('Updated By') + ->default(Filament::auth()->user()?->name), + Forms\Components\TextInput::make('id') + ->hidden() + ->readOnly(), ]) - ->disabled(function ($get) { - $currentUser = Filament::auth()->user(); - $approverId = $get('characteristic_approver_master_id'); - - if (! $approverId) { - return true; - } - - if (str_contains($approverId, '_')) { - [$approverId, $level] = explode('_', $approverId); - } - - $approver = CharacteristicApproverMaster::find($approverId); - if (! $approver) { - return true; - } - - // Super Admin can edit any - if ($currentUser && $currentUser->hasRole('Super Admin')) { - return false; // field enabled - } - - // Otherwise, enable only if the user's name matches - return $approver->name1 != $currentUser?->name; - }), - Forms\Components\TextInput::make('approver_remark1') - ->label('Approver Remark 1') - ->reactive(), - Forms\Components\DateTimePicker::make('approved1_at') - ->label('Approved At 1') - ->reactive() - ->disabled(function ($get) { - $currentUser = Filament::auth()->user(); // logged-in user - $approverId = $get('characteristic_approver_master_id'); - - if (! $approverId) { - return true; - } - - if (str_contains($approverId, '_')) { - [$approverId, $level] = explode('_', $approverId); - } - - $approver = CharacteristicApproverMaster::find($approverId); - if (! $approver) { - return true; - } - if ($currentUser && $currentUser->hasRole('Super Admin')) { - return false; - } - - return $approver->name1 != $currentUser?->name; - }), - Forms\Components\Select::make('approver_status2') - ->label('Approver Status 2') - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - if ($state && empty($get('approved2_at'))) { - $set('approved2_at', now()); - } - }) - ->options([ - 'Approved' => 'Approved', - 'Hold' => 'Hold', - 'Rejected' => 'Rejected', - ]) - ->disabled(function ($get) { - $currentUser = Filament::auth()->user(); // get the User object - $approverId = $get('characteristic_approver_master_id'); - - if (! $approverId) { - return true; - } - - if (str_contains($approverId, '_')) { - [$approverId, $level] = explode('_', $approverId); - } - - $approver = CharacteristicApproverMaster::find($approverId); - if (! $approver) { - return true; - } - - // Super Admin can always edit - if ($currentUser && $currentUser->hasRole('Super Admin')) { - return false; // ENABLE field - } - - // Otherwise, enable only if the user's name matches - return $approver->name2 != $currentUser?->name; - }), - Forms\Components\TextInput::make('approver_remark2') - ->label('Approver Remark 2') - ->reactive(), - Forms\Components\DateTimePicker::make('approved2_at') - ->label('Approverd At 2') - ->reactive() - ->disabled(function ($get) { - $currentUser = Filament::auth()->user(); // logged-in user - $approverId = $get('characteristic_approver_master_id'); - - if (! $approverId) { - return true; - } - - if (str_contains($approverId, '_')) { - [$approverId, $level] = explode('_', $approverId); - } - - $approver = CharacteristicApproverMaster::find($approverId); - if (! $approver) { - return true; - } - if ($currentUser && $currentUser->hasRole('Super Admin')) { - return false; - } - - return $approver->name2 != $currentUser?->name; - }) - ->dehydrated(true), - Forms\Components\Select::make('approver_status3') - ->label('Approver Status 3') - ->reactive() - ->options([ - 'Approved' => 'Approved', - 'Hold' => 'Hold', - 'Rejected' => 'Rejected', - ]) - ->disabled(function ($get) { - $currentUser = Filament::auth()->user(); - $approverId = $get('characteristic_approver_master_id'); - - if (! $approverId) { - return true; - } - - if (str_contains($approverId, '_')) { - [$approverId, $level] = explode('_', $approverId); - } - - $approver = CharacteristicApproverMaster::find($approverId); - if (! $approver) { - return true; - } - - if ($currentUser->hasRole('Super Admin')) { - return false; - } else { - return $approver->name3 != $currentUser?->name; - } - - }), - Forms\Components\TextInput::make('approver_remark3') - ->label('Approver Remark 3') - ->reactive(), - Forms\Components\DateTimePicker::make('approved3_at') - ->label('Approverd At 3') - ->reactive() - ->disabled(function ($get) { - $currentUser = Filament::auth()->user(); // logged-in user - $approverId = $get('characteristic_approver_master_id'); - - if (! $approverId) { - return true; - } - - if (str_contains($approverId, '_')) { - [$approverId, $level] = explode('_', $approverId); - } - - $approver = CharacteristicApproverMaster::find($approverId); - if (! $approver) { - return true; - } - if ($currentUser && $currentUser->hasRole('Super Admin')) { - return false; - } - - return $approver->name3 != $currentUser?->name; - }), - Forms\Components\Hidden::make('created_by') - ->label('Created By') - ->default(Filament::auth()->user()?->name), - Forms\Components\Hidden::make('updated_by') - ->label('Updated By') - ->default(Filament::auth()->user()?->name), - Forms\Components\TextInput::make('id') - ->hidden() - ->readOnly(), + ->columns(['default' => 1, 'sm' => 3]), ]); } @@ -399,6 +588,36 @@ class RequestCharacteristicResource extends Resource ]); } + protected static function isNewWorkFlow($get): string + { + $year = now()->format('y'); + $month = now()->format('m'); + $date = now()->format('d'); + $prefix = "WF-{$year}{$month}{$date}-"; + + $lastWorkflow = RequestCharacteristic::where('work_flow_id', 'like', "{$prefix}%") + // ->where('machine_id', $MachineId) + ->where('work_flow_id', 'like', "{$prefix}%") + ->orderByDesc('work_flow_id') + ->first(); + + if ($lastWorkflow) { + $lastSerial = substr($lastWorkflow->work_flow_id, strlen($prefix)); + $nextSerial = str_pad( + intval($lastSerial) + 1, + 3, + '0', + STR_PAD_LEFT + ); + } else { + $nextSerial = '001'; + } + + $workFlowId = "{$prefix}{$nextSerial}"; + + return $workFlowId; + } + public static function table(Table $table): Table { return $table @@ -436,10 +655,24 @@ class RequestCharacteristicResource extends Resource ->alignCenter() ->searchable() ->sortable(), + Tables\Columns\TextColumn::make('characteristicApproverMaster.machine_name') + ->label('Machine') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('characteristicApproverMaster.characteristic_field') + ->label('Master Characteristic') + ->alignCenter() + ->searchable() + ->formatStateUsing(fn (string $state): string => strtoupper(__($state))) + ->extraAttributes(['class' => 'uppercase']) + ->sortable(), Tables\Columns\TextColumn::make('characteristic_name') ->label('Characteristic Name') ->alignCenter() ->searchable() + ->formatStateUsing(fn (string $state): string => strtoupper(__($state))) + ->extraAttributes(['class' => 'uppercase']) ->sortable(), Tables\Columns\TextColumn::make('current_value') ->label('Current Value') @@ -458,6 +691,17 @@ class RequestCharacteristicResource extends Resource ->sortable(), Tables\Columns\TextColumn::make('approver_status1') ->label('Approver Status 1') + ->color(fn (string $state): string => match ($state) { + 'Approved' => 'success', + 'Hold' => 'warning', + 'Rejected' => 'danger', + default => 'gray', + }) + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('approver_remark1') + ->label('Approver Remark 1') // ->color('success') ->alignCenter() ->searchable() @@ -475,7 +719,18 @@ class RequestCharacteristicResource extends Resource ->sortable(), Tables\Columns\TextColumn::make('approver_status2') ->label('Approver Status 2') - // ->color('danger') + ->color(fn (string $state): string => match ($state) { + 'Approved' => 'success', + 'Hold' => 'warning', + 'Rejected' => 'danger', + default => 'gray', + }) + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('approver_remark2') + ->label('Approver Remark 2') + // ->color('success') ->alignCenter() ->searchable() ->sortable(), @@ -492,7 +747,18 @@ class RequestCharacteristicResource extends Resource ->sortable(), Tables\Columns\TextColumn::make('approver_status3') ->label('Approver Status 3') - // ->color('primary') + ->color(fn (string $state): string => match ($state) { + 'Approved' => 'success', + 'Hold' => 'warning', + 'Rejected' => 'danger', + default => 'gray', + }) + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('approver_remark3') + ->label('Approver Remark 3') + // ->color('success') ->alignCenter() ->searchable() ->sortable(), @@ -503,26 +769,31 @@ class RequestCharacteristicResource extends Resource ->searchable() ->sortable(), Tables\Columns\TextColumn::make('created_at') + ->label('Created At') ->dateTime() ->alignCenter() ->searchable() ->sortable(), Tables\Columns\TextColumn::make('created_by') + ->label('Created By') ->alignCenter() ->searchable() ->sortable(), Tables\Columns\TextColumn::make('updated_at') + ->label('Updated At') ->dateTime() ->alignCenter() ->searchable() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_by') + ->label('Updated By') ->alignCenter() ->searchable() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('deleted_at') + ->label('Deleted At') ->dateTime() ->alignCenter() ->searchable()