recordTitleAttribute('id') ->columns([ TextColumn::make('reference_code') ->label('Reference #') ->searchable(), TextColumn::make('points') ->numeric() ->label('Points') ->formatStateUsing(function ($state, $record) { $points = number_format($state, 0); // format as integer, no decimals if ($record->type === Type::Earn) { return '+ ' . $points; } if ($record->type === Type::Redeem) { return '- ' . $points; } if ($record->type === Type::AdjustmentAdd) { return '+ ' . $points; } if ($record->type === Type::AdjustmentSubtract) { return '- ' . $points; } return $points; }) ->summarize([ Summarizer::make() ->label('Points from Buying (Filtered)') ->using(function () { $record = $this->getOwnerRecord(); $from = request()->input('tableFilters.created_ts.created_from'); $to = request()->input('tableFilters.created_ts.created_to'); $query = Transaction::query() ->where('member_id', $record->id) ->where('type', Type::EarnFromBuying); if ($from) { $query->where('created_ts', '>=', Carbon::parse($from)->startOfDay()->timestamp); } if ($to) { $query->where('created_ts', '<=', Carbon::parse($to)->endOfDay()->timestamp); } return number_format($query->sum('points'), 2); }), Summarizer::make() ->label('Points from Selling (Filtered)') ->using(function () { $record = $this->getOwnerRecord(); $from = request()->input('tableFilters.created_ts.created_from'); $to = request()->input('tableFilters.created_ts.created_to'); $query = Transaction::query() ->where('member_id', $record->id) ->where('type', Type::EarnFromSelling); if ($from) { $query->where('created_ts', '>=', Carbon::parse($from)->startOfDay()->timestamp); } if ($to) { $query->where('created_ts', '<=', Carbon::parse($to)->endOfDay()->timestamp); } return number_format($query->sum('points'), 2); }), ]), ]) ->defaultSort('created_ts', 'desc') ->paginationPageOptions([5,10,25]) ->filters([ Tables\Filters\Filter::make('created_ts') ->label('Transaction Date') ->form([ DatePicker::make('created_from') ->label('Transaction From') ->maxDate(Carbon::today()), DatePicker::make('created_to') ->label('Transaction To') ->maxDate(Carbon::today()), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['created_from'], fn (Builder $query, $date): Builder => $query->where('created_ts', '>=', Carbon::parse($date)->startOfDay()->timestamp), ) ->when( $data['created_to'], fn (Builder $query, $date): Builder => $query->where('created_ts', '<=', Carbon::parse($date)->endOfDay()->timestamp), ); }) ]) ->headerActions([ ExportAction::make() ->exporter(TransactionExporter::class) ->color('info') ->icon('heroicon-m-arrow-down-tray') ]) ->actions([ // Tables\Actions\EditAction::make(), // Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ // Tables\Actions\BulkActionGroup::make([ // Tables\Actions\DeleteBulkAction::make(), // ]), ]); } }