Date Filters for Payment From/Until

Date Filters for Payment From/Until

2024-10-18 وقت القراءه : 3 دقائق

كما نلاحظ بداخل الدالة table أنها تأتي بشكل إفتراضي مع الدالة filters

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('created_at')->label('Payment time'),
            Tables\Columns\TextColumn::make('product.name'),
            Tables\Columns\TextColumn::make('user.name')->label('User name'),
            Tables\Columns\TextColumn::make('user.email')->label('User email'),
            Tables\Columns\TextColumn::make('voucher.code'),
            Tables\Columns\TextColumn::make('subtotal')->money('usd'),
            Tables\Columns\TextColumn::make('taxes')->money('usd'),
            Tables\Columns\TextColumn::make('total')->money('usd'),
        ])
        ->filters([
            //
        ])
        ->actions([


        ])
        ->bulkActions([


        ]);
}

في هذا المثال سنقوم بعمل filter للبيانات حسب created_at اي ان يظهر لنا المدفوعات من تاريخ إلى تاريخ، لذلك نذهب للدالة filter ونقوم بإضافة الحقل created_at وكذلك تحديد محددات عملية الفرز وهي created_at, crated_until

->defaultSort('created_at','desc')
->filters([
    Tables\Filters\Filter::make('created_at')
        ->form([
            Forms\Components\DatePicker::make('created_from'),
            Forms\Components\DatePicker::make('created_until'),
        ])
])

الأن لو ذهبنا إلى admin panel سنرى ايقونه جديد للـ filter وعند الضغط عليها سيظهر لدينا الحقلين crated_at, created_until

الأن نحن بحاجه لإضافة query وكتابة الكود الخاص بعملية filter وذلك من خلال إضافة query

->filters([
    Tables\Filters\Filter::make('created_at')
        ->form([
            Forms\Components\DatePicker::make('created_from'),
            Forms\Components\DatePicker::make('created_until'),
        ])
        ->query(function ($query, array $data) {
            return $query
                ->when($data['created_from'],
                    fn($query) => $query->whereDate('created_at', '>=', $data['created_from']))
                ->when($data['created_until'],
                    fn($query) => $query->whereDate('created_at', '<=', $data['created_until']));
        })
])

وبذك يمكن لنا عمل filter

ليصبح لدينا الكود بشكل كامل كالتالي

<?php


namespace App\Filament\Resources;


use App\Filament\Resources\PaymentResource\Pages;
use App\Filament\Resources\PaymentResource\RelationManagers;
use App\Models\Payment;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use PHPUnit\Util\Filter;


class PaymentResource extends Resource
{
    protected static ?string $model = Payment::class;


    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';


    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                //
            ]);
    }


    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                Tables\Columns\TextColumn::make('created_at')->label('Payment time')->sortable(),
                Tables\Columns\TextColumn::make('product.name'),
                Tables\Columns\TextColumn::make('user.name')->label('User name'),
                Tables\Columns\TextColumn::make('user.email')->label('User email'),
                Tables\Columns\TextColumn::make('voucher.code'),
                Tables\Columns\TextColumn::make('subtotal')->money('usd'),
                Tables\Columns\TextColumn::make('taxes')->money('usd'),
                Tables\Columns\TextColumn::make('total')->money('usd'),
            ])
            ->defaultSort('created_at','desc')
            ->filters([
                Tables\Filters\Filter::make('created_at')
                    ->form([
                        Forms\Components\DatePicker::make('created_from'),
                        Forms\Components\DatePicker::make('created_until'),
                    ])
                    ->query(function ($query, array $data) {
                        return $query
                            ->when($data['created_from'],
                                fn($query) => $query->whereDate('created_at', '>=', $data['created_from']))
                            ->when($data['created_until'],
                                fn($query) => $query->whereDate('created_at', '<=', $data['created_until']));
                    })
            ])
            ->actions([


            ])
            ->bulkActions([


            ]);
    }


    public static function getRelations(): array
    {
        return [
            //
        ];
    }


    public static function getPages(): array
    {
        return [
            'index' => Pages\ListPayments::route('/'),
            //'create' => Pages\CreatePayment::route('/create'),
            //'edit' => Pages\EditPayment::route('/{record}/edit'),
        ];
    }


    public static function canCreate() : bool
    {
        return false;
    }


    public static function canDeleteAny() : bool
    {
        return false;
    }
}


إضافة تعليق
Loading...