Enhance ListRecords pages with tab functionality and default sorting

- Added getTabs method to ListCardPinOrders, ListLoanOrders, and ListLoanOrderMobiles pages to display order statuses for system users.
- Implemented default sorting by 'created_at' in LoanOrdersTable and LoanOrderMobilesTable for improved data organization.
- Updated ManageCards page to ensure proper type declaration for getTitle method.
This commit is contained in:
Mekan1206
2025-12-21 05:21:53 +05:00
parent 5a53b90272
commit 5e37bd1a76
29 changed files with 111 additions and 28 deletions

View File

@@ -11,7 +11,7 @@ class ManageCards extends ManageRecords
{ {
protected static string $resource = CardResource::class; protected static string $resource = CardResource::class;
public function getTitle(): string | Htmlable public function getTitle(): string|Htmlable
{ {
return __('My cards'); return __('My cards');
} }

View File

@@ -3,8 +3,10 @@
namespace App\Filament\Clusters\Cards\Resources\CardPinOrders\Pages; namespace App\Filament\Clusters\Cards\Resources\CardPinOrders\Pages;
use App\Filament\Clusters\Cards\Resources\CardPinOrders\CardPinOrderResource; use App\Filament\Clusters\Cards\Resources\CardPinOrders\CardPinOrderResource;
use App\Modules\OrderStatus\Repositories\OrderStatusRepository;
use Filament\Actions\CreateAction; use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ListRecords;
use Filament\Schemas\Components\Tabs\Tab;
class ListCardPinOrders extends ListRecords class ListCardPinOrders extends ListRecords
{ {
@@ -16,4 +18,23 @@ class ListCardPinOrders extends ListRecords
CreateAction::make(), CreateAction::make(),
]; ];
} }
public function getTabs(): array
{
if (! user()->isSystemUser()) {
return [];
}
$data = [];
foreach (array_keys(OrderStatusRepository::statusClasses()) as $status) {
if ($status === '') {
$data[null] = Tab::make(__('All'));
} else {
$data[$status] = Tab::make(OrderStatusRepository::statusFormatted($status))->query(fn ($query) => $query->where('status', $status));
}
}
return $data;
}
} }

View File

@@ -3,8 +3,10 @@
namespace App\Filament\Clusters\Loans\LoanOrders\Pages; namespace App\Filament\Clusters\Loans\LoanOrders\Pages;
use App\Filament\Clusters\Loans\LoanOrders\LoanOrderResource; use App\Filament\Clusters\Loans\LoanOrders\LoanOrderResource;
use App\Modules\OrderStatus\Repositories\OrderStatusRepository;
use Filament\Actions\CreateAction; use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ListRecords;
use Filament\Schemas\Components\Tabs\Tab;
class ListLoanOrders extends ListRecords class ListLoanOrders extends ListRecords
{ {
@@ -16,4 +18,23 @@ class ListLoanOrders extends ListRecords
CreateAction::make(), CreateAction::make(),
]; ];
} }
public function getTabs(): array
{
if (! user()->isSystemUser()) {
return [];
}
$data = [];
foreach (array_keys(OrderStatusRepository::statusClasses()) as $status) {
if ($status === '') {
$data[null] = Tab::make(__('All'));
} else {
$data[$status] = Tab::make(OrderStatusRepository::statusFormatted($status))->query(fn ($query) => $query->where('status', $status));
}
}
return $data;
}
} }

View File

@@ -25,6 +25,7 @@ class LoanOrdersTable
DefaultQueryForResourceIndexRepository::make($query); DefaultQueryForResourceIndexRepository::make($query);
}) })
->defaultSort('created_at', 'desc')
->columns([ ->columns([
TextColumn::make('id') TextColumn::make('id')
->label('ID') ->label('ID')

View File

@@ -3,8 +3,10 @@
namespace App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages; namespace App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\LoanOrderMobileResource; use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\LoanOrderMobileResource;
use App\Modules\OrderStatus\Repositories\OrderStatusRepository;
use Filament\Actions\CreateAction; use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ListRecords;
use Filament\Schemas\Components\Tabs\Tab;
class ListLoanOrderMobiles extends ListRecords class ListLoanOrderMobiles extends ListRecords
{ {
@@ -16,4 +18,23 @@ class ListLoanOrderMobiles extends ListRecords
CreateAction::make(), CreateAction::make(),
]; ];
} }
public function getTabs(): array
{
if (! user()->isSystemUser()) {
return [];
}
$data = [];
foreach (array_keys(OrderStatusRepository::statusClasses()) as $status) {
if ($status === '') {
$data[null] = Tab::make(__('All'));
} else {
$data[$status] = Tab::make(OrderStatusRepository::statusFormatted($status))->query(fn ($query) => $query->where('status', $status));
}
}
return $data;
}
} }

View File

@@ -25,6 +25,7 @@ class LoanOrderMobilesTable
DefaultQueryForResourceIndexRepository::make($query); DefaultQueryForResourceIndexRepository::make($query);
}) })
->defaultSort('created_at', 'desc')
->columns([ ->columns([
TextColumn::make('id') TextColumn::make('id')
->label('ID') ->label('ID')

View File

@@ -3,8 +3,10 @@
namespace App\Filament\Clusters\Loans\Resources\LoanPaidOffLetters\Pages; namespace App\Filament\Clusters\Loans\Resources\LoanPaidOffLetters\Pages;
use App\Filament\Clusters\Loans\Resources\LoanPaidOffLetters\LoanPaidOffLetterResource; use App\Filament\Clusters\Loans\Resources\LoanPaidOffLetters\LoanPaidOffLetterResource;
use App\Modules\OrderStatus\Repositories\OrderStatusRepository;
use Filament\Actions\CreateAction; use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ListRecords;
use Filament\Schemas\Components\Tabs\Tab;
class ListLoanPaidOffLetters extends ListRecords class ListLoanPaidOffLetters extends ListRecords
{ {
@@ -16,4 +18,23 @@ class ListLoanPaidOffLetters extends ListRecords
CreateAction::make(), CreateAction::make(),
]; ];
} }
public function getTabs(): array
{
if (! user()->isSystemUser()) {
return [];
}
$data = [];
foreach (array_keys(OrderStatusRepository::statusClasses()) as $status) {
if ($status === '') {
$data[null] = Tab::make(__('All'));
} else {
$data[$status] = Tab::make(OrderStatusRepository::statusFormatted($status))->query(fn ($query) => $query->where('status', $status));
}
}
return $data;
}
} }

View File

@@ -20,6 +20,7 @@ class LoanPaidOffLettersTable
->modifyQueryUsing(function (Builder $query) { ->modifyQueryUsing(function (Builder $query) {
DefaultQueryForResourceIndexRepository::make($query); DefaultQueryForResourceIndexRepository::make($query);
}) })
->defaultSort('created_at', 'desc')
->columns([ ->columns([
TextColumn::make('id') TextColumn::make('id')
->label('ID') ->label('ID')

View File

@@ -150,7 +150,7 @@ class VisaMasterPaymentOrderForm
AdvancedFileUpload::make('sender_passport_local') AdvancedFileUpload::make('sender_passport_local')
->spatieMediaLibrary(collection: 'sender_passport_local') ->spatieMediaLibrary(collection: 'sender_passport_local')
->multiple(), ->multiple(),
SpatieMediaLibraryFileUpload::make('sender_passport_international') SpatieMediaLibraryFileUpload::make('sender_passport_international')
->collection('sender_passport_international') ->collection('sender_passport_international')
->label(__('Ugradyja degişli Türkmenistandan çykmak we Türkmenistana girmek üçin pasportynyň asyl görnüşi we göçürmesi')), ->label(__('Ugradyja degişli Türkmenistandan çykmak we Türkmenistana girmek üçin pasportynyň asyl görnüşi we göçürmesi')),

View File

@@ -2,6 +2,7 @@
namespace App\Filament\Clusters\VisaMasterPayments\Resources\VisaMasterPaymentOrders\Tables; namespace App\Filament\Clusters\VisaMasterPayments\Resources\VisaMasterPaymentOrders\Tables;
use App\Modules\DefaultQueryForResourceIndex\Repositories\DefaultQueryForResourceIndexRepository;
use App\Modules\OrderStatus\Repositories\OrderStatusRepository; use App\Modules\OrderStatus\Repositories\OrderStatusRepository;
use App\Modules\Region\Repositories\RegionRepository; use App\Modules\Region\Repositories\RegionRepository;
use Filament\Actions\BulkActionGroup; use Filament\Actions\BulkActionGroup;
@@ -14,6 +15,7 @@ use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class VisaMasterPaymentOrdersTable class VisaMasterPaymentOrdersTable
@@ -21,6 +23,9 @@ class VisaMasterPaymentOrdersTable
public static function configure(Table $table): Table public static function configure(Table $table): Table
{ {
return $table return $table
->modifyQueryUsing(function (Builder $query) {
DefaultQueryForResourceIndexRepository::make($query);
})
->defaultSort('created_at', direction: 'desc') ->defaultSort('created_at', direction: 'desc')
->columns([ ->columns([
TextColumn::make('id') TextColumn::make('id')

View File

@@ -32,7 +32,7 @@ class UserForm
->unique(ignoreRecord: true) ->unique(ignoreRecord: true)
->mask('99 99 99 99') ->mask('99 99 99 99')
->prefix('+993') ->prefix('+993')
->dehydrateStateUsing(fn($state) => unMaskTurkmenNumber($state)) ->dehydrateStateUsing(fn ($state) => unMaskTurkmenNumber($state))
->rules([ ->rules([
new PhoneNumberVerificationRule, new PhoneNumberVerificationRule,
]) ])

View File

@@ -4,9 +4,9 @@ namespace App\Models;
use App\Modules\UserAdjustments\Traits\UserAdjustments; use App\Modules\UserAdjustments\Traits\UserAdjustments;
use Filament\Models\Contracts\FilamentUser; use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasAvatar;
use Filament\Panel; use Filament\Panel;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Filament\Models\Contracts\HasAvatar;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\Date;

View File

@@ -2,4 +2,4 @@
return [ return [
'card_order_created' => 'Kart sargydyňyz :order_id belgi bilen hasaba alyndy. Sargydy tassyklamak üçin operatorymyz habarlaşar.', 'card_order_created' => 'Kart sargydyňyz :order_id belgi bilen hasaba alyndy. Sargydy tassyklamak üçin operatorymyz habarlaşar.',
]; ];

View File

@@ -47,4 +47,3 @@ class OnlinePaymentPolicy
return $user->can('ForceDelete:OnlinePayment'); return $user->can('ForceDelete:OnlinePayment');
} }
} }

View File

@@ -15,7 +15,8 @@ class SmsRepository
public static function sendSMS(string|int $phone, string|int $message): mixed public static function sendSMS(string|int $phone, string|int $message): mixed
{ {
if (app()->environment('local')) { if (app()->environment('local')) {
info('Sending SMS to ' . $phone . ' with message: ' . $message); info('Sending SMS to '.$phone.' with message: '.$message);
return true; return true;
} }

View File

@@ -37,7 +37,7 @@ use Spatie\MediaLibrary\InteractsWithMedia;
* @property \Illuminate\Support\Carbon|null $updated_at * @property \Illuminate\Support\Carbon|null $updated_at
* @property \Illuminate\Support\Carbon|null $deleted_at * @property \Illuminate\Support\Carbon|null $deleted_at
*/ */
class VisaMasterPaymentOrder extends Model implements HasMedia, BelongsToBranch class VisaMasterPaymentOrder extends Model implements BelongsToBranch, HasMedia
{ {
use InteractsWithMedia; use InteractsWithMedia;
use SoftDeletes; use SoftDeletes;

View File

@@ -47,4 +47,3 @@ class VisaMasterPaymentOrderItemPolicy
return $user->can('ForceDelete:VisaMasterPaymentOrderItem'); return $user->can('ForceDelete:VisaMasterPaymentOrderItem');
} }
} }

View File

@@ -47,4 +47,3 @@ class VisaMasterPaymentOrderPolicy
return $user->can('ForceDelete:VisaMasterPaymentOrder'); return $user->can('ForceDelete:VisaMasterPaymentOrder');
} }
} }

View File

@@ -47,4 +47,3 @@ class VisaMasterSettingsPolicy
return $user->can('ForceDelete:VisaMasterSettings'); return $user->can('ForceDelete:VisaMasterSettings');
} }
} }

View File

@@ -20,4 +20,4 @@ class BranchesMigrator
->insert($data); ->insert($data);
} }
} }
} }

View File

@@ -20,4 +20,4 @@ class CardOrdersMigrator
->insert($data); ->insert($data);
} }
} }
} }

View File

@@ -26,4 +26,4 @@ class CardPinOrdersMigrator
->insert($data); ->insert($data);
} }
} }
} }

View File

@@ -20,4 +20,4 @@ class CardStatesMigrator
->insert($data); ->insert($data);
} }
} }
} }

View File

@@ -20,4 +20,4 @@ class CardTypesMigrator
->insert($data); ->insert($data);
} }
} }
} }

View File

@@ -20,4 +20,4 @@ class LoanOrderRequiredDocsMigrator
->insert($data); ->insert($data);
} }
} }
} }

View File

@@ -2,19 +2,16 @@
namespace Database\Seeders\Migrators; namespace Database\Seeders\Migrators;
use JsonMachine\JsonMachine;
use JsonMachine\Items;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
use Illuminate\Support\LazyCollection; use JsonMachine\Items;
use Cerbero\LazyJson\LazyJson;
class LoanOrdersMigrator class LoanOrdersMigrator
{ {
public function migrate(): void public function migrate(): void
{ {
// Running on seeder file, may not work. // Running on seeder file, may not work.
DB::table('loan_orders')->truncate(); DB::table('loan_orders')->truncate();
$path = database_path('data/nurmuhammetsdb/loan_orders.json'); $path = database_path('data/nurmuhammetsdb/loan_orders.json');
@@ -29,4 +26,4 @@ class LoanOrdersMigrator
DB::table('loan_orders')->insert((array) $item); DB::table('loan_orders')->insert((array) $item);
} }
} }
} }

View File

@@ -20,4 +20,4 @@ class ProvincesMigrator
->insert($data); ->insert($data);
} }
} }
} }

View File

@@ -3,7 +3,6 @@
namespace Database\Seeders\Migrators; namespace Database\Seeders\Migrators;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use JsonMachine\JsonMachine;
use JsonMachine\Items; use JsonMachine\Items;
class VisaMasterPaymentOrdersMigrator class VisaMasterPaymentOrdersMigrator
@@ -21,7 +20,6 @@ class VisaMasterPaymentOrdersMigrator
continue; continue;
} }
$sender_datas = json_decode($item->sender_datas); $sender_datas = json_decode($item->sender_datas);
$payment_reciever = json_decode($item->payment_reciever); $payment_reciever = json_decode($item->payment_reciever);
@@ -63,4 +61,4 @@ class VisaMasterPaymentOrdersMigrator
]); ]);
} }
} }
} }

View File

@@ -1,7 +1,6 @@
<?php <?php
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Database\Seeders\Migrators\VisaMasterPaymentOrdersMigrator;
Route::redirect('/', filament_path()); Route::redirect('/', filament_path());