multiline wip

This commit is contained in:
salam committed 2025-12-14 13:09:09 +01:00
1 parent 988a148850
commit 245255756c
84 files changed
+663 -94

No files matched your search

+12
View File
@@ -0,0 +1,12 @@
<?php
namespace App\Actions;
class AlarmGenerator
{
public static function run($record)
{
dd($record);
}
}
+21 -25
View File
@@ -3,42 +3,38 @@
namespace App\Actions; namespace App\Actions;
use App\Models\Multiline; use App\Models\Multiline;
use App\Models\MultilineSetting;
use Filament\Notifications\Notification;
class MultilineGenerator class MultilineGenerator
{ {
public static function run() public static function run($record)
{ {
$client_id = $record->id;
// odds_2ways Multiline::where('client_id', $client_id)->update(['disabled' => 1]);
// odds_3ways
// odds_dc
// odds_dnb
// odds_ggng
// odds_handicaps
// odds_qualify
// odds_totals
$default = []; foreach ($record->sport as $sportid) {
$default[1] = [
'bettypes' => [1, 16, 3, 4, 5],
];
$multilines = Multiline::where('client_id', auth()->user()->client_id)->get(); $multilines = MultilineSetting::where('sport_id', $sportid)->get();
dd($multilines);
foreach ($slots as $id => $slot) { foreach ($multilines as $multiline) {
$open = true;
foreach ($data as $item) { for ($i = 1; $i <= $multiline->rows; $i++) {
if ($slot->bookmaker_id == $item->bookmaker_id) {
$multilines[$id] = $item; Multiline::updateOrCreate(
$open = false; ['client_id' => $client_id, 'sport_id' => $sportid],
['name' => $multiline->name, 'table' => $multiline->table, 'sort' => $i, 'disabled' => 0]
);
} }
} }
if ($open) {
$multilines[$id] = $slot;
}
} }
return $multilines; Notification::make()
->title('Multiline generated successfully')
->success()
->send();
} }
} }
+1 -1
View File
@@ -44,7 +44,7 @@ class SupervisorDb
$tmp['command'] = $process->process.$sport->code; $tmp['command'] = $process->process.$sport->code;
$tmp['sport_id'] = $sport->id; $tmp['sport_id'] = $sport->id;
$tmp['description'] = $process->description.' '.$sport->sport; $tmp['description'] = $process->description.' '.$sport->sport;
$flight = Supervisor::updateOrCreate( Supervisor::updateOrCreate(
['code' => $process->command.$sport->code, 'sport_id' => $sport->id], ['code' => $process->command.$sport->code, 'sport_id' => $sport->id],
['command' => $process->process.$sport->code, 'description' => $process->description] ['command' => $process->process.$sport->code, 'description' => $process->description]
); );
@@ -2,10 +2,11 @@
namespace App\Filament\Resources\Clients\Tables; namespace App\Filament\Resources\Clients\Tables;
use App\Actions\AlarmGenerator;
use App\Actions\MultilineGenerator;
use App\Models\Bookmaker; use App\Models\Bookmaker;
use App\Models\Sport; use App\Models\Sport;
use Filament\Actions\BulkActionGroup; use Filament\Actions\Action;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction; use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
@@ -23,7 +24,7 @@ class ClientsTable
->formatStateUsing(fn (string $state): string => Bookmaker::where('id', $state)->pluck('name')->first()), ->formatStateUsing(fn (string $state): string => Bookmaker::where('id', $state)->pluck('name')->first()),
TextColumn::make('sport') TextColumn::make('sport')
->badge() ->badge()
->color('secondary') ->color('warning')
->formatStateUsing(fn (string $state): string => Sport::where('id', $state)->pluck('name')->first()), ->formatStateUsing(fn (string $state): string => Sport::where('id', $state)->pluck('name')->first()),
TextColumn::make('created_at') TextColumn::make('created_at')
->dateTime() ->dateTime()
@@ -35,12 +36,19 @@ class ClientsTable
->toggleable(isToggledHiddenByDefault: true), ->toggleable(isToggledHiddenByDefault: true),
]) ])
->recordActions([ ->recordActions([
Action::make('multiline')
->icon('phosphor-gear-fine')
->tooltip('Generates basic alarm configuration for client')
->action(function ($record) {
MultilineGenerator::run($record);
}),
Action::make('alarm')
->icon('phosphor-gear-fine')
->tooltip('Generates basic multiline configuration for client')
->action(function ($record) {
AlarmGenerator::run($record);
}),
EditAction::make(), EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]); ]);
} }
} }
@@ -43,22 +43,27 @@ class EventsTable
->label('Event') ->label('Event')
->icon(fn ($record) => $record->country->icon) ->icon(fn ($record) => $record->country->icon)
->description(fn ($record) => $record->competition_group->name), ->description(fn ($record) => $record->competition_group->name),
TextColumn::make('home.name')->alignRight(), TextColumn::make('home.name')->alignRight()->searchable(),
TextColumn::make('away.name'), TextColumn::make('away.name')->searchable(),
Odds3Way::make('odds_3way.bookmaker')->label('1X2'), Odds3Way::make('odds_3way.bookmaker')->label('1X2'),
]) ])
->defaultSort('starttime', 'ASC') ->defaultSort('starttime', 'ASC')
// ->deferFilters(false) ->deferFilters(false)
// ->filters([ ->filters([
// SelectFilter::make('sport_id') SelectFilter::make('sport_id')
// ->label('Sport') ->label('Sport')
// ->default(1) ->default(1)
// ->selectablePlaceholder(false) ->selectablePlaceholder(false)
// ->relationship('sport', 'name', fn (Builder $query) => $query->where('is_active', 1)) ->relationship('sport', 'name', fn (Builder $query) => $query->where('is_active', 1))
// ->preload(), ->preload(),
// ], FiltersLayout::AboveContent) // SelectFilter::make('competition_group_id')
// ->hiddenFilterIndicators() // ->label('Tornament')
// ->options(fn () => Event::where('is_active', 1)->pluck('sport', 'id')
// ->relationship('sport', 'name', fn (Builder $query) => $query->where('is_active', 1))
// ->preload(),
], FiltersLayout::AboveContent)
->hiddenFilterIndicators(false)
->persistFiltersInSession() ->persistFiltersInSession()
->recordActions([ ->recordActions([
// EditAction::make(), // EditAction::make(),
@@ -0,0 +1,55 @@
<?php
namespace App\Filament\Resources\MultilineSettings;
use App\Filament\Clusters\Administrator\AdministratorCluster;
use App\Filament\Resources\MultilineSettings\Pages\ListMultilineSettings;
use App\Filament\Resources\MultilineSettings\Schemas\MultilineSettingForm;
use App\Filament\Resources\MultilineSettings\Tables\MultilineSettingsTable;
use App\Models\MultilineSetting;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
class MultilineSettingResource extends Resource
{
protected static ?string $model = MultilineSetting::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::Bars3;
protected static ?string $cluster = AdministratorCluster::class;
protected static string|\UnitEnum|null $navigationGroup = 'Static Data';
protected static ?string $navigationLabel = 'Multiline';
// protected static ?string $modelLabel = 'Group';
// protected static ?string $title = 'Group';
// protected static ?string $pluralModelLabel = 'Groups';
public static function form(Schema $schema): Schema
{
return MultilineSettingForm::configure($schema);
}
public static function table(Table $table): Table
{
return MultilineSettingsTable::configure($table);
}
public static function getPages(): array
{
return [
'index' => ListMultilineSettings::route('/'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\MultilineSettings\Pages;
use App\Filament\Resources\MultilineSettings\MultilineSettingResource;
use Filament\Resources\Pages\CreateRecord;
class CreateMultilineSetting extends CreateRecord
{
protected static string $resource = MultilineSettingResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\MultilineSettings\Pages;
use App\Filament\Resources\MultilineSettings\MultilineSettingResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditMultilineSetting extends EditRecord
{
protected static string $resource = MultilineSettingResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\MultilineSettings\Pages;
use App\Filament\Resources\MultilineSettings\MultilineSettingResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListMultilineSettings extends ListRecords
{
protected static string $resource = MultilineSettingResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Filament\Resources\MultilineSettings\Schemas;
use App\Models\Sport;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class MultilineSettingForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
TextInput::make('name')->required(),
TextInput::make('short')->required(),
TextInput::make('table')->required(),
Select::make('sport_id')
->required()
->label('Sport')
->options(fn () => Sport::where('is_active', 1)->pluck('name', 'id')
->toArray()),
]);
}
}
@@ -0,0 +1,52 @@
<?php
namespace App\Filament\Resources\MultilineSettings\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Enums\FiltersLayout;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
class MultilineSettingsTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
IconColumn::make('sport.icon')
->label('')
->width('1rem')
->icon(function ($record): string {
return $record->sport->icon;
}),
TextColumn::make('sport.name'),
TextColumn::make('name'),
TextColumn::make('short'),
TextColumn::make('table'),
TextColumn::make('rows'),
])
->deferFilters(false)
->filters([
SelectFilter::make('sport_id')
->label('Sport')
->default(1)
->selectablePlaceholder(false)
->relationship('sport', 'name', fn (Builder $query) => $query->where('is_active', 1))
->preload(),
], FiltersLayout::AboveContent)
->hiddenFilterIndicators()
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -2,7 +2,6 @@
namespace App\Filament\Resources\Multilines\Tables; namespace App\Filament\Resources\Multilines\Tables;
use App\Actions\MultilineGenerator;
use App\Filament\Tables\Columns\BookmakerIcon; use App\Filament\Tables\Columns\BookmakerIcon;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\IconColumn;
@@ -24,7 +23,7 @@ class MultilinesTable
->label($isReordering ? 'Disable reordering' : 'Enable reordering'), ->label($isReordering ? 'Disable reordering' : 'Enable reordering'),
) )
->reorderable('sort') ->reorderable('sort')
->defaultGroup('bettype.name') ->defaultGroup('name')
->columns([ ->columns([
IconColumn::make('sport.icon') IconColumn::make('sport.icon')
->label('') ->label('')
@@ -32,9 +31,8 @@ class MultilinesTable
->icon(function ($record): string { ->icon(function ($record): string {
return $record->sport->icon; return $record->sport->icon;
}), }),
TextColumn::make('sport.name'), // TextColumn::make('sport.name'),
TextColumn::make('matchpart.name'), TextColumn::make('name'),
TextColumn::make('bettype.name'),
TextColumn::make('bookmaker.name'), TextColumn::make('bookmaker.name'),
BookmakerIcon::make('bookmaker.icon')->label('Icon'), BookmakerIcon::make('bookmaker.icon')->label('Icon'),
]) ])
@@ -49,13 +47,6 @@ class MultilinesTable
->preload(), ->preload(),
], FiltersLayout::AboveContent) ], FiltersLayout::AboveContent)
->hiddenFilterIndicators() ->hiddenFilterIndicators()
->persistFiltersInSession() ->persistFiltersInSession();
->headerActions([
Action::make('generate')
->icon('phosphor-gear-fine')
->action(function () {
MultilineGenerator::run();
}),
]);
} }
} }
+3 -12
View File
@@ -10,8 +10,9 @@ class Multiline extends Model
protected $fillable = [ protected $fillable = [
'client_id', 'client_id',
'sport_id', 'sport_id',
'bettype_id', 'table',
'matchpart_id', 'name',
'disabled',
'bookmaker_id', 'bookmaker_id',
'sort', 'sort',
]; ];
@@ -21,16 +22,6 @@ class Multiline extends Model
return $this->belongsTo(Sport::class); return $this->belongsTo(Sport::class);
} }
public function matchpart()
{
return $this->belongsTo(Matchpart::class);
}
public function bettype()
{
return $this->belongsTo(Bettype::class);
}
public function bookmaker() public function bookmaker()
{ {
return $this->belongsTo(Bookmaker::class, 'bookmaker_id', 'txid'); return $this->belongsTo(Bookmaker::class, 'bookmaker_id', 'txid');
+21
View File
@@ -0,0 +1,21 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class MultilineSetting extends Model
{
protected $fillable = [
'id',
'sport_id',
'name',
'short',
'table',
];
public function sport()
{
return $this->belongsTo(Sport::class);
}
}
+49
View File
@@ -0,0 +1,49 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Odds2wayS1 extends Model
{
protected $table = 'odds_2ways_s1';
protected $fillable = [
'id',
'event_id',
'sport_id',
'bookmaker_id',
'provider_id',
'offer_id',
'bmoid',
'h2w',
'a2w',
'margin',
'flag',
'nuh_check',
'last_check_at',
'source_updated_at',
'add_time',
'updated_at',
];
public function sport()
{
return $this->belongsTo(Sport::class);
}
public function bookmaker()
{
return $this->belongsTo(Bookmaker::class);
}
public function event()
{
return $this->belongsTo(Event::class);
}
public function provider()
{
return $this->belongsTo(Provider::class);
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class OddsHandicapQ1 extends Model
{
protected $table = 'odds_handicaps_q1';
protected $fillable = [
'id',
'event_id',
'sport_id',
'bookmaker_id',
'provider_id',
'offer_id',
'bmoid',
'home',
'away',
'handicap',
'margin',
'flag',
'nuh_check',
'last_check_at',
'source_updated_at',
'add_time',
'updated_at',
];
public function sport()
{
return $this->belongsTo(Sport::class);
}
public function bookmaker()
{
return $this->belongsTo(Bookmaker::class);
}
public function event()
{
return $this->belongsTo(Event::class);
}
public function provider()
{
return $this->belongsTo(Provider::class);
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class OddsTotalQ1 extends Model
{
protected $table = 'odds_totals_q1';
protected $fillable = [
'id',
'event_id',
'sport_id',
'bookmaker_id',
'provider_id',
'offer_id',
'bmoid',
'over',
'under',
'spread',
'margin',
'flag',
'nuh_check',
'last_check_at',
'source_updated_at',
'add_time',
'updated_at',
];
public function sport()
{
return $this->belongsTo(Sport::class);
}
public function bookmaker()
{
return $this->belongsTo(Bookmaker::class);
}
public function event()
{
return $this->belongsTo(Event::class);
}
public function provider()
{
return $this->belongsTo(Provider::class);
}
}
+3 -1
View File
@@ -7,6 +7,7 @@ use Carbon\Carbon;
use Filament\Support\Colors\Color; use Filament\Support\Colors\Color;
use Filament\Support\Facades\FilamentColor; use Filament\Support\Facades\FilamentColor;
use Filament\Support\Facades\FilamentView; use Filament\Support\Facades\FilamentView;
use Filament\Tables\View\TablesRenderHook;
use Filament\View\PanelsRenderHook; use Filament\View\PanelsRenderHook;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Illuminate\View\View; use Illuminate\View\View;
@@ -27,7 +28,8 @@ class AppServiceProvider extends ServiceProvider
public function boot(): void public function boot(): void
{ {
FilamentView::registerRenderHook( FilamentView::registerRenderHook(
PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABLE_BEFORE, // PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABS_END,
TablesRenderHook::TOOLBAR_SEARCH_AFTER,
fn (): View => view('filament.hooks.table-bettype-filters'), fn (): View => view('filament.hooks.table-bettype-filters'),
scopes: [ scopes: [
ListEvents::class, ListEvents::class,
@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('odds_2ways_s1', function (Blueprint $table) {
$table->id();
$table->foreignId('event_id')->constrained()->cascadeOnDelete();
$table->integer('sport_id')->default(0);
$table->integer('bookmaker_id')->default(0);
$table->integer('provider_id')->default(0);
$table->bigInteger('offer_id')->default(0);
$table->string('bmoid')->nullable();
$table->decimal('h2w', 7, 3)->default(0);
$table->decimal('a2w', 7, 3)->default(0);
$table->decimal('margin', 5, 1)->default(0);
$table->boolean('flag')->default(0);
$table->boolean('nuh_check')->default(0);
$table->timestamp('last_check_at')->nullable();
$table->timestamp('source_updated_at')->nullable();
$table->timestamps();
$table->index(['event_id']);
$table->index(['sport_id']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('odds_2ways_s1');
}
};
@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('odds_handicaps_q1', function (Blueprint $table) {
$table->id();
$table->foreignId('event_id')->constrained()->cascadeOnDelete();
$table->integer('sport_id')->default(0);
$table->integer('bookmaker_id')->default(0);
$table->integer('provider_id')->default(0);
$table->bigInteger('offer_id')->default(0);
$table->string('bmoid')->nullable();
$table->decimal('home', 7, 3)->default(0);
$table->decimal('away', 7, 3)->default(0);
$table->decimal('handicap', 7, 3)->default(0);
$table->decimal('margin', 5, 1)->default(0);
$table->boolean('flag')->default(0);
$table->boolean('nuh_check')->default(0);
$table->timestamp('last_check_at')->nullable();
$table->timestamp('source_updated_at')->nullable();
$table->timestamps();
$table->index(['event_id']);
$table->index(['sport_id']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('odds_handicaps_q1');
}
};
@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('odds_totals_q1', function (Blueprint $table) {
$table->id();
$table->foreignId('event_id')->constrained()->cascadeOnDelete();
$table->integer('sport_id')->default(0);
$table->integer('bookmaker_id')->default(0);
$table->integer('provider_id')->default(0);
$table->bigInteger('offer_id')->default(0);
$table->string('bmoid')->nullable();
$table->decimal('over', 7, 3)->default(0);
$table->decimal('under', 7, 3)->default(0);
$table->decimal('total', 7, 3)->default(0);
$table->decimal('margin', 5, 1)->default(0);
$table->boolean('flag')->default(0);
$table->boolean('nuh_check')->default(0);
$table->timestamp('last_check_at')->nullable();
$table->timestamp('source_updated_at')->nullable();
$table->timestamps();
$table->index(['event_id']);
$table->index(['sport_id']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('odds_totals_q1');
}
};
@@ -13,11 +13,12 @@ return new class extends Migration
{ {
Schema::create('multilines', function (Blueprint $table) { Schema::create('multilines', function (Blueprint $table) {
$table->id(); $table->id();
$table->integer('sport_id');
$table->integer('client_id')->default(0); $table->integer('client_id')->default(0);
$table->integer('bettype_id')->default(0); $table->integer('sport_id');
$table->boolean('disabled')->default(0);
$table->string('table')->nullable();
$table->string('name')->nullable();
$table->integer('bookmaker_id')->default(0); $table->integer('bookmaker_id')->default(0);
$table->integer('matchpart_id')->default(0);
$table->integer('sort')->default(0); $table->integer('sort')->default(0);
$table->timestamps(); $table->timestamps();
}); });
@@ -17,6 +17,7 @@ return new class extends Migration
$table->integer('bettype_id')->default(0); $table->integer('bettype_id')->default(0);
$table->string('name'); $table->string('name');
$table->text('oddsname'); $table->text('oddsname');
$table->boolean('disabled')->default(0);
$table->boolean('can_odds_closed')->default(0); $table->boolean('can_odds_closed')->default(0);
$table->boolean('is_spread')->default(0); $table->boolean('is_spread')->default(0);
$table->boolean('ft')->default(0); $table->boolean('ft')->default(0);
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('multiline_settings', function (Blueprint $table) {
$table->id();
$table->integer('sport_id')->default(0);
$table->string('name');
$table->string('short');
$table->string('table');
$table->integer('rows')->default(4);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('multiline_settings');
}
};
+1
View File
@@ -20,6 +20,7 @@ class DatabaseSeeder extends Seeder
SportSeeder::class, SportSeeder::class,
SupervisorSeeder::class, SupervisorSeeder::class,
BettypeSeeder::class, BettypeSeeder::class,
MultilineSettingSeeder::class,
]); ]);
} }
} }
@@ -0,0 +1,39 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class MultilineSettingSeeder extends Seeder
{
public function run(): void
{
/**
* Clients
*/
$sql = "INSERT INTO `multiline_settings` (`id`, `sport_id`, `name`, `short`, `table`, `rows`, `created_at`, `updated_at`)
VALUES
('1', '1', '1X2', '1X2', 'odds_3ways', '4', '2025-12-14 09:25:48', '2025-12-14 09:25:48'),
('2', '1', 'DOUBLE CHANCE', 'DC', 'odds_dc', '4', '2025-12-14 09:31:22', '2025-12-14 09:32:55'),
('3', '1', 'DRAW NO BET', 'DNB', 'odds_dnb', '4', '2025-12-14 09:31:42', '2025-12-14 09:31:42'),
('4', '1', 'GOAL NO GOAL', 'GGNG', 'odds_ggng', '4', '2025-12-14 09:31:56', '2025-12-14 09:31:56'),
('5', '1', 'TO QUALIFY', 'TQ', 'odds_qualify', '4', '2025-12-14 09:32:19', '2025-12-14 09:32:19'),
('6', '1', 'TOTALS', 'OU', 'odds_totals', '4', '2025-12-14 09:32:38', '2025-12-14 09:32:38'),
('7', '3', 'MONEY LINE', 'ML', 'odds_2ways', '4', '2025-12-14 09:37:32', '2025-12-14 09:37:32'),
('8', '3', 'HANDICAP', 'HC', 'odds_handicaps', '4', '2025-12-14 09:38:05', '2025-12-14 09:38:05'),
('9', '3', 'HANDICAP FIRST QUARTER', 'HCQ1', 'odds_handicaps_q1', '4', '2025-12-14 09:38:26', '2025-12-14 09:39:54'),
('10', '3', 'TOTALS', 'OU', 'odds_totals', '4', '2025-12-14 09:38:44', '2025-12-14 09:38:44'),
('11', '3', 'TOTALS FIRST QUARTER', 'OUQ1', 'odds_totals_q1', '4', '2025-12-14 09:39:12', '2025-12-14 09:39:59'),
('12', '2', 'MONEY LINE', 'ML', 'odds_2ways', '4', '2025-12-14 09:41:21', '2025-12-14 09:41:21'),
('13', '2', '1X2', '1X2', 'odds_3ways', '4', '2025-12-14 09:41:34', '2025-12-14 09:41:34'),
('14', '2', 'HANDICAP', 'HC', 'odds_handicaps', '4', '2025-12-14 09:41:56', '2025-12-14 09:41:56'),
('15', '2', 'TOTALS', 'OU', 'odds_totals', '4', '2025-12-14 09:42:13', '2025-12-14 09:42:13'),
('16', '5', 'MONEY LINE', 'ML', 'odds_2ways', '4', '2025-12-14 09:43:52', '2025-12-14 09:43:52'),
('17', '5', 'MONEY LINE SET 1', 'MLS1', 'odds_2ways_s1', '4', '2025-12-14 09:44:13', '2025-12-14 09:44:13'),
('18', '5', 'TOTALS', 'OU', 'odds_totals', '4', '2025-12-14 09:44:26', '2025-12-14 09:44:26');
";
DB::unprepared($sql);
}
}
+9
View File
@@ -10,6 +10,15 @@ button[wire\:click="resetTableFiltersForm"] {
display: none; display: none;
} }
.fi-ta-header-toolbar {
@apply flex-row-reverse;
}
.fi-ta-header-toolbar>*:nth-child(2) {
width: 100%;
justify-content: space-between;
}
.oddsbox .bl { .oddsbox .bl {
border-left: 1px solid #e4e4e7; border-left: 1px solid #e4e4e7;
} }
@@ -1,38 +1,29 @@
<div class="w-full flex justify-between"> <div class="w-full flex gap-2 justify-end">
<x-filament::input.wrapper prefix-icon="icon-soccerball" prefix-icon-color="primary">
<x-filament::input.select wire:model="status">
<option value="draft">Soccer</option>
<option value="reviewing">Basketball</option>
<option value="published">Ice Hockey</option>
<option value="published">Tennis</option>
</x-filament::input.select>
</x-filament::input.wrapper>
<div class="flex gap-2"> <div class="flex gap-2">
<x-filament::button color="gray" outlined x-on:click="$wire.call('removeTableFilters')"> <x-filament::button color="gray" outlined x-on:click="$wire.call('removeTableFilters')">
1X2 1X2
</x-filament::button> </x-filament::button>
<x-filament::button color="gray" outlined <x-filament::button color="gray" outlined tooltip="OVER/UNDER"
x-on:click="$wire.set('tableFilters', {'published_at': {'value': '1'}})"> x-on:click="$wire.set('tableFilters', {'published_at': {'value': '1'}})">
OVER/UNDER OU
</x-filament::button> </x-filament::button>
<x-filament::button color="gray" outlined <x-filament::button color="gray" outlined tooltip="TO QUALIFY"
x-on:click="$wire.set('tableFilters', {'published_at': {'value': '0'}})"> x-on:click="$wire.set('tableFilters', {'published_at': {'value': '0'}})">
TO QUALIFY TQ
</x-filament::button> </x-filament::button>
<x-filament::button color="gray" outlined <x-filament::button color="gray" outlined tooltip="DRAW NO BET"
x-on:click="$wire.set('tableFilters', {'published_at': {'value': '0'}})"> x-on:click="$wire.set('tableFilters', {'published_at': {'value': '0'}})">
DOUBLE CHANCE DNB
</x-filament::button> </x-filament::button>
<x-filament::button color="gray" outlined <x-filament::button color="gray" outlined tooltip="GOAL NOGOAL"
x-on:click="$wire.set('tableFilters', {'published_at': {'value': '0'}})"> x-on:click="$wire.set('tableFilters', {'published_at': {'value': '0'}})">
GOAL NOGOAL GG
</x-filament::button> </x-filament::button>
</div> </div>
</div> </div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

+10
View File
@@ -0,0 +1,10 @@
<svg viewBox="0 0 417 100">
<g transform="translate(-338.71955,-441.05331)">
<g fill="currentColor" transform="matrix(18.594273,0,0,-18.594273,-4690.0458,4472.2917)">
<path d="m 292.58,211.999 c 0.03,0.014 0.067,0.02 0.11,0.02 0.064,0 0.115,-0.018 0.152,-0.056 0.037,-0.037 0.055,-0.096 0.055,-0.173 l 0,-0.36 -0.24,0 0,0.327 c 0,0.025 -0.005,0.041 -0.014,0.051 -0.013,0.018 -0.029,0.026 -0.048,0.026 -0.024,0 -0.043,-0.008 -0.057,-0.024 -0.014,-0.016 -0.022,-0.043 -0.022,-0.083 l 0,-0.297 -0.241,0 0,0.317 c 0,0.024 -10e-4,0.04 -0.004,0.047 -0.003,0.013 -0.011,0.022 -0.021,0.03 -0.01,0.007 -0.022,0.011 -0.036,0.011 -0.023,0 -0.042,-0.008 -0.057,-0.025 -0.014,-0.016 -0.022,-0.044 -0.022,-0.086 l 0,-0.294 -0.241,0 0,0.577 0.225,0 0,-0.068 c 0.026,0.026 0.052,0.045 0.079,0.058 0.032,0.015 0.07,0.022 0.114,0.022 0.047,0 0.086,-0.007 0.114,-0.024 0.026,-0.015 0.047,-0.037 0.064,-0.064 0.032,0.032 0.062,0.055 0.09,0.068 z m -2.221,-0.561 -0.25598,0 0,0.26503 0.25598,0 0,-0.26503 z m 1.436,0.493 c 0.047,-0.054 0.071,-0.121 0.071,-0.2 0,-0.088 -0.029,-0.161 -0.089,-0.218 -0.059,-0.057 -0.14,-0.085 -0.243,-0.085 -0.092,0 -0.167,0.023 -0.224,0.071 -0.071,0.058 -0.106,0.135 -0.106,0.229 0,0.088 0.029,0.161 0.089,0.218 0.06,0.057 0.14,0.086 0.24,0.086 0.114,0 0.202,-0.033 0.262,-0.101 z m -0.19,-0.309 c 0.018,0.022 0.028,0.057 0.028,0.109 0,0.048 -0.01,0.082 -0.028,0.103 -0.019,0.023 -0.041,0.034 -0.069,0.034 -0.029,0 -0.052,-0.011 -0.071,-0.034 -0.019,-0.022 -0.029,-0.057 -0.029,-0.105 0,-0.05 0.009,-0.084 0.028,-0.106 0.019,-0.023 0.043,-0.033 0.071,-0.033 0.029,0 0.052,0.01 0.07,0.032 z m -0.419,0.007 c -0.012,-0.04 -0.031,-0.075 -0.056,-0.105 -0.028,-0.032 -0.063,-0.057 -0.106,-0.075 -0.043,-0.018 -0.096,-0.027 -0.161,-0.027 -0.062,0 -0.114,0.006 -0.156,0.017 -0.042,0.012 -0.079,0.03 -0.109,0.056 -0.031,0.025 -0.054,0.055 -0.072,0.09 -0.017,0.035 -0.026,0.08 -0.026,0.136 0,0.059 0.011,0.108 0.032,0.148 0.015,0.029 0.036,0.055 0.063,0.078 0.026,0.023 0.054,0.04 0.082,0.052 0.045,0.017 0.102,0.026 0.17,0.026 0.096,0 0.17,-0.016 0.222,-0.051 0.049,-0.032 0.084,-0.078 0.105,-0.138 l 0.007,-0.019 -0.227,-0.029 -0.005,0.012 c -0.006,0.02 -0.016,0.034 -0.03,0.044 -0.016,0.011 -0.037,0.017 -0.065,0.017 -0.035,0 -0.062,-0.012 -0.083,-0.036 -0.021,-0.023 -0.032,-0.059 -0.032,-0.109 0,-0.045 0.011,-0.078 0.032,-0.099 0.02,-0.022 0.047,-0.033 0.08,-0.033 0.027,0 0.05,0.007 0.068,0.02 0.017,0.012 0.03,0.03 0.04,0.056 l 0.004,0.012 0.229,-0.025 -0.006,-0.018" />
<path d="m 279.118,215.087 c 0.142,0 0.234,0.034 0.285,0.097 0.053,0.065 0.081,0.16 0.081,0.289 0,0.12 -0.028,0.21 -0.081,0.274 -0.051,0.062 -0.141,0.096 -0.279,0.096 l -0.388,0 0,-0.756 0.382,0 z m 0.392,-0.94 c -0.059,0.069 -0.165,0.106 -0.325,0.106 l -0.449,0 0,-0.811 0.451,0 c 0.157,0 0.261,0.039 0.321,0.112 0.062,0.074 0.094,0.176 0.094,0.306 0,0.121 -0.032,0.216 -0.092,0.287 z m -2.048,-0.261 c 0,-0.271 -0.053,-0.521 -0.161,-0.75 -0.107,-0.229 -0.258,-0.404 -0.452,-0.523 -0.194,-0.12 -0.439,-0.179 -0.731,-0.179 -0.512,0 -0.872,0.138 -1.073,0.42 -0.196,0.273 -0.307,0.619 -0.335,1.035 l -0.002,0.037 0.918,0.081 0.004,-0.038 c 0.019,-0.19 0.057,-0.333 0.112,-0.431 0.092,-0.164 0.222,-0.244 0.39,-0.244 0.127,0 0.222,0.041 0.29,0.123 0.068,0.083 0.103,0.179 0.103,0.289 0,0.105 -0.033,0.198 -0.099,0.28 -0.063,0.081 -0.216,0.16 -0.463,0.236 -0.407,0.128 -0.701,0.299 -0.877,0.515 -0.177,0.215 -0.265,0.489 -0.265,0.819 0,0.218 0.045,0.424 0.135,0.617 0.091,0.195 0.227,0.348 0.41,0.46 0.183,0.112 0.432,0.167 0.746,0.167 0.386,0 0.683,-0.101 0.888,-0.304 0.203,-0.201 0.322,-0.516 0.362,-0.942 l 0.004,-0.038 -0.91,-0.074 -0.005,0.036 c -0.024,0.178 -0.071,0.304 -0.139,0.383 -0.07,0.081 -0.167,0.122 -0.292,0.122 -0.103,0 -0.177,-0.031 -0.227,-0.089 -0.051,-0.06 -0.077,-0.133 -0.077,-0.221 0,-0.062 0.021,-0.118 0.063,-0.168 0.039,-0.05 0.137,-0.1 0.3,-0.148 0.405,-0.122 0.697,-0.246 0.874,-0.372 0.178,-0.127 0.307,-0.284 0.388,-0.472 0.081,-0.188 0.121,-0.397 0.121,-0.627 z m 12.463,-0.395 0,-0.986 -2.561,0 0,4.224 2.517,0 0,-0.932 -1.551,0 0,-0.627 1.438,0 0,-0.892 -1.438,0 0,-0.787 1.595,0 z m -6.016,1.157 c 0,-0.49 -0.059,-0.893 -0.178,-1.209 -0.118,-0.316 -0.29,-0.563 -0.516,-0.739 -0.226,-0.178 -0.508,-0.266 -0.844,-0.266 -0.34,0 -0.624,0.076 -0.849,0.229 -0.225,0.153 -0.406,0.395 -0.544,0.722 -0.139,0.328 -0.208,0.739 -0.208,1.229 0,0.685 0.136,1.222 0.411,1.607 0.276,0.385 0.661,0.579 1.153,0.579 0.504,0 0.894,-0.19 1.168,-0.569 0.272,-0.379 0.407,-0.907 0.407,-1.583 z m -1.132,0.871 c -0.111,0.178 -0.258,0.264 -0.444,0.264 -0.178,0 -0.322,-0.087 -0.432,-0.268 -0.11,-0.18 -0.167,-0.481 -0.167,-0.907 0,-0.421 0.057,-0.721 0.166,-0.901 0.109,-0.18 0.256,-0.267 0.44,-0.267 0.191,0 0.338,0.086 0.444,0.261 0.106,0.176 0.161,0.496 0.161,0.964 0,0.393 -0.057,0.677 -0.168,0.854 z m 10.12,1.21 0,-0.926 -0.943,0 0,-3.298 -0.964,0 0,3.298 -0.942,0 0,0.926 2.849,0 z m -6.448,-1.975 c 0.199,-0.075 0.347,-0.197 0.444,-0.366 0.104,-0.18 0.155,-0.405 0.155,-0.673 0,-0.219 -0.037,-0.417 -0.11,-0.592 -0.073,-0.176 -0.173,-0.316 -0.301,-0.419 -0.081,-0.066 -0.202,-0.112 -0.36,-0.141 -0.208,-0.038 -0.348,-0.058 -0.418,-0.058 l -1.615,0 0,4.224 1.749,0 c 0.295,0 0.522,-0.103 0.681,-0.308 0.157,-0.204 0.235,-0.455 0.235,-0.753 0,-0.251 -0.055,-0.466 -0.168,-0.647 -0.069,-0.11 -0.166,-0.199 -0.292,-0.267 z m -0.851,0.333 c 0.141,0 0.234,0.034 0.285,0.097 0.052,0.065 0.08,0.16 0.08,0.289 0,0.12 -0.028,0.21 -0.08,0.274 -0.051,0.062 -0.142,0.096 -0.279,0.096 l -0.388,0 0,-0.756 0.382,0 z m 0.391,-0.94 c -0.059,0.069 -0.165,0.106 -0.324,0.106 l -0.449,0 0,-0.811 0.451,0 c 0.156,0 0.261,0.039 0.321,0.112 0.062,0.074 0.094,0.176 0.094,0.306 0,0.121 -0.032,0.216 -0.093,0.287 z m -6.019,0.607 c 0.198,-0.075 0.347,-0.197 0.444,-0.366 0.103,-0.18 0.154,-0.405 0.154,-0.673 0,-0.219 -0.036,-0.417 -0.109,-0.592 -0.073,-0.176 -0.173,-0.316 -0.302,-0.419 -0.081,-0.066 -0.202,-0.112 -0.36,-0.141 -0.207,-0.038 -0.348,-0.058 -0.418,-0.058 l -1.615,0 0,4.224 1.75,0 c 0.294,0 0.521,-0.103 0.68,-0.308 0.158,-0.204 0.236,-0.455 0.236,-0.753 0,-0.251 -0.056,-0.466 -0.169,-0.647 -0.068,-0.11 -0.166,-0.199 -0.291,-0.267" />
<path d="m 272.839,215.573 -0.002,0.003 c 0.059,0.102 0.218,0.274 0.327,0.38 l 0.001,-0.002 c 0.109,-0.127 0.022,-0.254 0.197,-0.278 0.143,-0.02 0.512,0.174 0.654,0.308 0.13,0.124 0.235,0.176 0.351,0.058 0.079,-0.082 0.072,-0.163 -0.064,-0.236 -0.26,-0.139 -0.629,-0.393 -0.884,-0.421 -0.299,-0.032 -0.462,0.037 -0.58,0.188 z m -1.764,0.548 c 0.288,0.326 0.796,0.756 1.331,0.577 0.279,-0.075 0.499,-0.344 0.499,-0.344 l 0.003,-0.005 c -0.294,-0.237 -0.511,-0.506 -0.646,-0.737 -0.141,-0.24 0.02,-0.428 0.072,-0.483 0.037,-0.038 0.13,-0.102 0.166,-0.129 0.036,-0.027 0.145,-0.136 0.052,-0.286 -0.093,-0.15 -0.406,-0.474 -0.555,-0.608 -0.114,-0.102 -0.292,-0.243 -0.491,-0.37 -10e-4,0.001 -0.289,0.057 -0.11,0.325 0.009,0.014 0.129,0.096 0.234,0.189 0,0 0.109,0.094 0.198,0.184 0.088,0.089 0.161,0.181 0.198,0.254 0.037,0.072 0.127,0.214 -0.034,0.314 -0.161,0.1 -0.208,0.123 -0.233,0.251 -0.029,0.151 0.142,0.353 0.183,0.404 0.041,0.051 0.161,0.19 0.231,0.259 0.071,0.07 0.092,0.088 0.133,0.124 0.054,0.047 0.144,0.171 0.028,0.29 -0.115,0.119 -0.206,0.139 -0.342,0.065 -0.117,-0.063 -0.237,-0.193 -0.303,-0.262 -0.066,-0.069 -0.248,-0.259 -0.519,-0.091 -0.076,0.052 -0.095,0.079 -0.095,0.079" />
<path d="m 273.731,216.441 c -0.16,0.14 -0.367,0.277 -0.821,-0.089 -0.294,-0.238 -0.513,-0.508 -0.648,-0.74 -0.142,-0.24 0.02,-0.429 0.072,-0.483 0.037,-0.038 0.129,-0.102 0.166,-0.129 0.036,-0.028 0.145,-0.136 0.052,-0.286 -0.093,-0.15 -0.406,-0.474 -0.556,-0.608 -0.157,-0.141 -0.438,-0.356 -0.723,-0.506 -0.287,-0.15 -0.531,-0.254 -0.826,-0.334 0.308,0.003 0.662,0.123 0.83,0.205 0.009,-0.055 0.061,-0.089 0.118,-0.057 0.045,0.025 0.098,0.075 0.19,0.111 0.094,0.036 0.089,-0.005 0.057,-0.064 -0.032,-0.058 -0.052,-0.081 -0.052,-0.081 0.361,0.134 1.053,0.703 1.443,1.134 0.118,0.152 0.152,0.177 0.089,0.372 -0.091,0.231 -0.232,0.318 -0.296,0.4 -0.047,0.061 -0.055,0.174 0.009,0.288 0.059,0.104 0.225,0.281 0.334,0.388 0.177,0.172 0.297,0.285 0.562,0.479" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB