PaymentsRelationManager.php
TLDR
This file contains the PaymentsRelationManager
class, which is a relation manager for the "payments" relationship. It defines form and table configurations for managing payments.
Methods
form
This method defines the form configuration for managing payments. It includes fields for selecting an order, entering a reference, amount, currency, provider, and method.
table
This method defines the table configuration for displaying and managing payments. It includes columns for the order number, reference, amount, provider, and method. It also includes actions for creating, editing, and deleting payments.
Classes
PaymentsRelationManager
This class is a relation manager for the "payments" relationship. It provides form and table configurations for managing payments.
<?php
namespace App\Filament\Resources\Shop\CustomerResource\RelationManagers;
use Akaunting\Money\Currency;
use App\Filament\Resources\Shop\OrderResource;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Str;
class PaymentsRelationManager extends RelationManager
{
protected static string $relationship = 'payments';
protected static ?string $recordTitleAttribute = 'reference';
public function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Select::make('order_id')
->label('Order')
->relationship(
'order',
'number',
fn (Builder $query, RelationManager $livewire) => $query->whereBelongsTo($livewire->ownerRecord)
)
->searchable()
->hiddenOn('edit')
->required(),
Forms\Components\TextInput::make('reference')
->columnSpan(fn (string $operation) => $operation === 'edit' ? 2 : 1)
->required(),
Forms\Components\TextInput::make('amount')
->numeric()
->rules(['regex:/^\d{1,6}(\.\d{0,2})?$/'])
->required(),
Forms\Components\Select::make('currency')
->options(collect(Currency::getCurrencies())->mapWithKeys(fn ($item, $key) => [$key => data_get($item, 'name')]))
->searchable()
->required(),
Forms\Components\Select::make('provider')
->options([
'stripe' => 'Stripe',
'paypal' => 'PayPal',
])
->required()
->native(false),
Forms\Components\Select::make('method')
->options([
'credit_card' => 'Credit card',
'bank_transfer' => 'Bank transfer',
'paypal' => 'PayPal',
])
->required()
->native(false),
]);
}
public function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('order.number')
->url(fn ($record) => OrderResource::getUrl('edit', [$record->order]))
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('reference')
->searchable(),
Tables\Columns\TextColumn::make('amount')
->sortable()
->money(fn ($record) => $record->currency),
Tables\Columns\TextColumn::make('provider')
->formatStateUsing(fn ($state) => Str::headline($state))
->sortable(),
Tables\Columns\TextColumn::make('method')
->formatStateUsing(fn ($state) => Str::headline($state))
->sortable(),
])
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->groupedBulkActions([
Tables\Actions\DeleteBulkAction::make(),
]);
}
}