netgescon-day0/app/Filament/Pages/SuperAdmin/CodiciRitenutePrevidenziali.php

116 lines
4.4 KiB
PHP

<?php
namespace App\Filament\Pages\SuperAdmin;
use App\Models\FeRitenutaPrevidenziale;
use App\Models\User;
use BackedEnum;
use Filament\Actions\Action;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Pages\Page;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Schema;
use UnitEnum;
class CodiciRitenutePrevidenziali extends Page implements HasTable
{
use InteractsWithTable;
protected static ?string $navigationLabel = 'Codici ritenute (RT..)';
protected static ?string $title = 'Codici ritenute previdenziali (RT..)';
protected static BackedEnum|string|null $navigationIcon = 'heroicon-o-clipboard-document-list';
protected static UnitEnum|string|null $navigationGroup = 'Super Admin';
protected static ?int $navigationSort = 20;
protected static ?string $slug = 'superadmin/codici-ritenute-previdenziali';
protected string $view = 'filament.pages.gescon.table';
public static function canAccess(): bool
{
$user = Auth::user();
return $user instanceof User
&& $user->hasAnyRole(['super-admin', 'admin'])
&& Schema::hasTable('fe_ritenute_previdenziali');
}
public function mount(): void
{
$this->mountInteractsWithTable();
}
protected function getTableQuery(): Builder
{
return FeRitenutaPrevidenziale::query();
}
public function table(Table $table): Table
{
return $table
->striped()
->defaultSort('codice')
->columns([
TextColumn::make('codice')->label('Codice')->searchable()->sortable(),
TextColumn::make('descrizione')->label('Descrizione')->searchable()->sortable(),
IconColumn::make('attivo')->label('Attivo')->boolean()->sortable(),
TextColumn::make('updated_at')->label('Aggiornato')->dateTime('d/m/Y H:i')->toggleable(isToggledHiddenByDefault: true),
])
->headerActions([
Action::make('create')
->label('Nuovo')
->icon('heroicon-o-plus')
->form([
TextInput::make('codice')->label('Codice')->required()->maxLength(10),
TextInput::make('descrizione')->label('Descrizione')->required()->maxLength(255),
Toggle::make('attivo')->label('Attivo')->default(true),
])
->action(function (array $data): void {
FeRitenutaPrevidenziale::query()->create([
'codice' => strtoupper(trim((string) ($data['codice'] ?? ''))),
'descrizione' => (string) ($data['descrizione'] ?? ''),
'attivo' => (bool) ($data['attivo'] ?? true),
]);
}),
])
->actions([
Action::make('edit')
->label('Modifica')
->icon('heroicon-o-pencil-square')
->form([
TextInput::make('descrizione')->label('Descrizione')->required()->maxLength(255),
Toggle::make('attivo')->label('Attivo')->default(true),
])
->fillForm(fn(FeRitenutaPrevidenziale $record): array => [
'descrizione' => $record->descrizione,
'attivo' => (bool) $record->attivo,
])
->action(function (FeRitenutaPrevidenziale $record, array $data): void {
$record->fill([
'descrizione' => (string) ($data['descrizione'] ?? ''),
'attivo' => (bool) ($data['attivo'] ?? true),
]);
$record->save();
}),
Action::make('delete')
->label('Elimina')
->icon('heroicon-o-trash')
->color('danger')
->requiresConfirmation()
->action(fn(FeRitenutaPrevidenziale $record) => $record->delete()),
]);
}
}