comparatore bookmaker odds wip

This commit is contained in:
salam committed 2025-12-12 16:30:00 +01:00
1 parent adaec7b3dc
commit 218c1e6e1c
59 files changed
+470 -129

No files matched your search

@@ -0,0 +1,42 @@
<?php
namespace App\Filament\Resources\Multilines;
use App\Filament\Clusters\Settings\SettingsCluster;
use App\Filament\Resources\Multilines\Pages\ListMultilines;
use App\Filament\Resources\Multilines\Schemas\MultilineForm;
use App\Filament\Resources\Multilines\Tables\MultilinesTable;
use App\Models\Multiline;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
class MultilineResource extends Resource
{
protected static ?string $model = Multiline::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::Bars3;
protected static ?string $cluster = SettingsCluster::class;
// protected static string|\UnitEnum|null $navigationGroup = 'Settings';
public static function form(Schema $schema): Schema
{
return MultilineForm::configure($schema);
}
public static function table(Table $table): Table
{
return MultilinesTable::configure($table);
}
public static function getPages(): array
{
return [
'index' => ListMultilines::route('/'),
];
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\Multilines\Pages;
use App\Filament\Resources\Multilines\MultilineResource;
use Filament\Resources\Pages\CreateRecord;
class CreateMultiline extends CreateRecord
{
protected static string $resource = MultilineResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\Multilines\Pages;
use App\Filament\Resources\Multilines\MultilineResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditMultiline extends EditRecord
{
protected static string $resource = MultilineResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Filament\Resources\Multilines\Pages;
use App\Filament\Resources\Multilines\MultilineResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListMultilines extends ListRecords
{
protected static string $resource = MultilineResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make()
->createAnother(false)
->hidden(! auth()->user()->super_admin),
];
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Filament\Resources\Multilines\Schemas;
use App\Models\Bettype;
use App\Models\Bookmaker;
use App\Models\Matchpart;
use App\Models\Sport;
use Filament\Forms\Components\Select;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Schema;
class MultilineForm
{
public static $bettypes = [1, 2, 3, 4, 16, 2001, 2002, 2021, 3001, 3002, 3021];
public static function configure(Schema $schema): Schema
{
return $schema
->components([
Select::make('sport_id')
->live()
->options(Sport::where('is_active', 1)->pluck('name', 'id'))
->preload(),
Select::make('matchpart_id')
->options(Matchpart::where('is_active', 1)->pluck('name', 'id'))
->preload(),
Select::make('bettype_id')
->options(fn (Get $get) => Bettype::where('sport_id', $get('sport_id'))->whereIn('bettype_id', self::$bettypes)->pluck('name', 'bettype_id')),
Select::make('bookmaker_id')
->options(Bookmaker::where('is_active', 1)->pluck('name', 'txid'))
->preload()
->searchable(),
]);
}
}
@@ -0,0 +1,48 @@
<?php
namespace App\Filament\Resources\Multilines\Tables;
use App\Filament\Tables\Columns\BookmakerIcon;
use Filament\Actions\Action;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class MultilinesTable
{
public static function configure(Table $table): Table
{
return $table
->reorderRecordsTriggerAction(
fn (Action $action, bool $isReordering) => $action
->button()
->label($isReordering ? 'Disable reordering' : 'Enable reordering'),
)
->reorderable('sort')
->columns([
IconColumn::make('sport.icon')
->label('')
->width('1rem')
->icon(function ($record): string {
return $record->sport->icon;
}),
TextColumn::make('sport.name'),
TextColumn::make('matchpart.name'),
TextColumn::make('bettype.name'),
TextColumn::make('bookmaker.name'),
BookmakerIcon::make('bookmaker.icon')->label('Icon'),
])
->filters([
//
])
->recordActions([
EditAction::make()
->mutateDataUsing(function (array $data): array {
$data['client_id'] = auth()->user()->client_id;
return $data;
}),
]);
}
}