netgescon-day0/app/Livewire/Contabilita/MovimentiBancaTable.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]);
}
}