columns([ TextColumn::make('reference_number') ->label('No. Referensi') ->searchable() ->sortable(), TextColumn::make('purchase_date') ->label('Tanggal Belanja') ->date('l, d F Y') ->sortable(), TextColumn::make('items_summary') ->label('Item Pakan') ->getStateUsing(function ($record): array { return $record->items ->map(function ($item) { $feedName = $item->feed?->name ?? '-'; $feedUnit = $item->feed?->unit?->name ?? '-'; $quantity = number_format($item->quantity, 0, ',', '.'); $subtotal = $item->formatted_subtotal; return sprintf( '
%s x%s %s
Rp %s
', e($feedName), $quantity, $feedUnit, $subtotal, ); }) ->toArray(); }) ->listWithLineBreaks() ->html() ->toggleable(), TextColumn::make('total_price') ->label('Total Harga') ->money('IDR', decimalPlaces: 0) ->sortable(), TextColumn::make('note') ->label('Catatan') ->wrap() ->toggleable(), ...TimestampColumns::make(), ]) ->filters([ TrashedFilter::make() ->native(false) ->visible(fn (): bool => auth()->user()->hasRole(RoleEnum::DEVELOPER)), ]) ->recordActions([ EditAction::make() ->label('Ubah'), DeleteAction::make(), ForceDeleteAction::make(), RestoreAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ ...DefaultBulkActions::make('Belanja Pakan'), ]), ]) ->emptyStateIcon(Heroicon::Banknotes) ->emptyStateDescription('Setelah Anda membuat data pertama, maka akan muncul disini.') ->defaultSort('created_at', 'desc') ->deferFilters(false); } }