111 lines
3.9 KiB
PHP
111 lines
3.9 KiB
PHP
<?php
|
||
|
||
namespace App\Filament\Admin\Resources\Projects\Tables;
|
||
|
||
use Filament\Actions\BulkActionGroup;
|
||
use Filament\Actions\DeleteBulkAction;
|
||
use Filament\Actions\EditAction;
|
||
use Filament\Actions\Action;
|
||
use Filament\Tables\Columns\TextColumn;
|
||
use Filament\Tables\Filters\SelectFilter;
|
||
use Filament\Tables\Table;
|
||
|
||
class ProjectsTable
|
||
{
|
||
public static function configure(Table $table): Table
|
||
{
|
||
return $table
|
||
->columns([
|
||
TextColumn::make('title')
|
||
->label('Proje Adı')
|
||
->searchable()
|
||
->sortable()
|
||
->limit(40),
|
||
|
||
TextColumn::make('client_name')
|
||
->label('Müşteri')
|
||
->searchable()
|
||
->sortable()
|
||
->limit(30),
|
||
|
||
TextColumn::make('progress_percent')
|
||
->label('İlerleme')
|
||
->formatStateUsing(fn ($state) => "%{$state}")
|
||
->badge()
|
||
->color(fn ($state) => match (true) {
|
||
$state >= 100 => 'success',
|
||
$state >= 50 => 'info',
|
||
$state >= 25 => 'warning',
|
||
default => 'danger',
|
||
})
|
||
->sortable(),
|
||
|
||
TextColumn::make('status')
|
||
->label('Durum')
|
||
->badge()
|
||
->color(fn (string $state): string => match ($state) {
|
||
'planning' => 'gray',
|
||
'in_progress' => 'info',
|
||
'on_hold' => 'warning',
|
||
'completed' => 'success',
|
||
'cancelled' => 'danger',
|
||
default => 'gray',
|
||
})
|
||
->formatStateUsing(fn (string $state): string => match ($state) {
|
||
'planning' => 'Planlama',
|
||
'in_progress' => 'Devam Ediyor',
|
||
'on_hold' => 'Beklemede',
|
||
'completed' => 'Tamamlandı',
|
||
'cancelled' => 'İptal',
|
||
default => $state,
|
||
}),
|
||
|
||
TextColumn::make('client_access_code')
|
||
->label('Müşteri PIN')
|
||
->copyable()
|
||
->badge()
|
||
->color('gray'),
|
||
|
||
TextColumn::make('target_date')
|
||
->label('Hedef Bitiş')
|
||
->date('d.m.Y')
|
||
->sortable(),
|
||
|
||
TextColumn::make('created_at')
|
||
->label('Oluşturulma')
|
||
->dateTime('d.m.Y H:i')
|
||
->sortable()
|
||
->toggleable(isToggledHiddenByDefault: true),
|
||
])
|
||
->filters([
|
||
SelectFilter::make('status')
|
||
->label('Durum')
|
||
->options([
|
||
'planning' => 'Planlama',
|
||
'in_progress' => 'Devam Ediyor',
|
||
'on_hold' => 'Beklemede',
|
||
'completed' => 'Tamamlandı',
|
||
'cancelled' => 'İptal',
|
||
]),
|
||
])
|
||
->recordActions([
|
||
EditAction::make()
|
||
->label('Düzenle'),
|
||
])
|
||
->actions([
|
||
Action::make('view_client_portal')
|
||
->label('Müşteri Ekranı')
|
||
->icon('heroicon-o-arrow-top-right-on-square')
|
||
->url(fn ($record) => route('projects.show', $record->slug))
|
||
->openUrlInNewTab(),
|
||
])
|
||
->bulkActions([
|
||
BulkActionGroup::make([
|
||
DeleteBulkAction::make()
|
||
->label('Sil'),
|
||
]),
|
||
])
|
||
->defaultSort('created_at', 'desc');
|
||
}
|
||
}
|