72 lines
2.4 KiB
PHP
72 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Contabilita;
|
|
|
|
use App\Modules\Contabilita\Models\MovimentoBanca;
|
|
use Filament\Tables\Columns\IconColumn;
|
|
use Filament\Tables\Columns\TextColumn;
|
|
use Filament\Tables\Filters\Filter;
|
|
use Filament\Tables\Table;
|
|
use Filament\Tables\TableComponent;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class MovimentiBancaTable extends TableComponent
|
|
{
|
|
public int $contoId;
|
|
|
|
protected function getTableQuery(): Builder
|
|
{
|
|
return MovimentoBanca::query()
|
|
->where('conto_id', $this->contoId)
|
|
->orderByDesc('data')
|
|
->orderByDesc('id');
|
|
}
|
|
|
|
public function table(Table $table): Table
|
|
{
|
|
return $table
|
|
->striped()
|
|
->columns([
|
|
TextColumn::make('data')
|
|
->label('Data')
|
|
->date('d/m/Y')
|
|
->sortable(),
|
|
|
|
TextColumn::make('descrizione')
|
|
->label('Descrizione')
|
|
->wrap()
|
|
->searchable(),
|
|
|
|
TextColumn::make('importo')
|
|
->label('Importo')
|
|
->formatStateUsing(fn($state) => number_format((float) $state, 2, ',', '.'))
|
|
->alignEnd(),
|
|
|
|
IconColumn::make('registrazione_id')
|
|
->label('Riconciliato')
|
|
->boolean()
|
|
->trueColor('success')
|
|
->falseColor('gray')
|
|
->state(fn(MovimentoBanca $record) => ! empty($record->registrazione_id)),
|
|
])
|
|
->filters([
|
|
Filter::make('periodo')
|
|
->label('Periodo')
|
|
->form([
|
|
\Filament\Forms\Components\DatePicker::make('from')->label('Dal'),
|
|
\Filament\Forms\Components\DatePicker::make('to')->label('Al'),
|
|
])
|
|
->query(function (Builder $query, array $data): Builder {
|
|
$from = $data['from'] ?? null;
|
|
$to = $data['to'] ?? null;
|
|
|
|
return $query
|
|
->when($from, fn(Builder $q) => $q->whereDate('data', '>=', $from))
|
|
->when($to, fn(Builder $q) => $q->whereDate('data', '<=', $to));
|
|
}),
|
|
])
|
|
->paginated([25, 50, 100]);
|
|
}
|
|
}
|