From 98d92b2ee3efe2405663f430b80baa27808725f0 Mon Sep 17 00:00:00 2001 From: salam Date: Fri, 30 Jan 2026 09:52:43 +0100 Subject: [PATCH] filters ok --- .../Resources/Events/EventResource.php | 5 +- .../Resources/Events/Tables/EventsTable.php | 139 ++++++++---------- .../Events/Tables/Tools/CompareOptions.php | 63 ++++++++ .../Tables/Tools/LoadCompareDifferences.php | 107 ++++++++++++++ .../Events/Tables/Tools/LoadMultiline.php | 8 +- .../Tables/Tools/LoadPartnerDifferences.php | 27 +++- .../Resources/Events/Widgets/AlarmWidget.php | 2 + app/Models/Bookmaker.php | 14 ++ app/Models/Sport.php | 9 +- app/Providers/AppServiceProvider.php | 14 +- composer.lock | 110 +++++++------- ..._01_27_132542_create_odds_tables_table.php | 1 + database/seeders/OddsTableSeeder.php | 30 ++-- .../views/livewire/bettype-toggle.blade.php | 9 +- .../views/livewire/sport-switcher.blade.php | 2 +- setup.sh | 14 +- 16 files changed, 365 insertions(+), 189 deletions(-) create mode 100644 app/Filament/Resources/Events/Tables/Tools/CompareOptions.php create mode 100644 app/Filament/Resources/Events/Tables/Tools/LoadCompareDifferences.php diff --git a/app/Filament/Resources/Events/EventResource.php b/app/Filament/Resources/Events/EventResource.php index 356b2649..b6f0a7ed 100644 --- a/app/Filament/Resources/Events/EventResource.php +++ b/app/Filament/Resources/Events/EventResource.php @@ -7,7 +7,6 @@ use App\Filament\Resources\Events\Schemas\EventForm; use App\Filament\Resources\Events\Tables\EventsTable; use App\Filament\Resources\Events\Tables\Tools\LoadPartnerDifferences; use App\Models\Event; -use Carbon\Carbon; use Filament\Resources\Resource; use Filament\Schemas\Schema; use Filament\Tables\Table; @@ -47,7 +46,8 @@ class EventResource extends Resource public static function getNavigationBadge(): ?string { return parent::getEloquentQuery() - ->where('starttime', '>', Carbon::now()) + ->where('sport_id', auth()->user()->sport_id) + ->where('starttime', '>', now()) ->count(); } @@ -60,6 +60,7 @@ class EventResource extends Resource ->with('away') ->with('event_user_star') ->with('event_bookmaker') + ->where('sport_id', auth()->user()->sport_id) ->where('starttime', '>=', now()); if (auth()->user()->stars) { diff --git a/app/Filament/Resources/Events/Tables/EventsTable.php b/app/Filament/Resources/Events/Tables/EventsTable.php index 1f3a1d8f..5fa99570 100644 --- a/app/Filament/Resources/Events/Tables/EventsTable.php +++ b/app/Filament/Resources/Events/Tables/EventsTable.php @@ -2,7 +2,9 @@ namespace App\Filament\Resources\Events\Tables; +use App\Filament\Resources\Events\Tables\Tools\CompareOptions; use App\Filament\Resources\Events\Tables\Tools\LoadBettype; +use App\Filament\Resources\Events\Tables\Tools\LoadCompareDifferences; use App\Filament\Resources\Events\Tables\Tools\LoadMultiline; use App\Filament\Tables\Columns\ColumnOdds; use App\Filament\Tables\Columns\EventColumn; @@ -15,8 +17,6 @@ use App\Models\EventBookmaker; use App\Models\EventUserStar; use App\Models\Group; use App\Models\OddsTable; -use App\Models\Sport; -use App\Models\User; use CodeWithKyrian\FilamentDateRange\Forms\Components\DateRangePicker; use Filament\Actions\Action; use Filament\Actions\ActionGroup; @@ -53,8 +53,6 @@ class EventsTable public static function configure(Table $table): Table { - self::$user = User::getUser(); - LoadMultiline::load(); LoadBettype::load(); @@ -83,7 +81,7 @@ class EventsTable TextColumn::make('country.name') ->wrap() - ->hidden(fn () => self::$user->sport_id == 5) + ->hidden(fn () => auth()->user()->sport_id == 5) ->color('gray') ->icon(fn ($record) => $record->country?->icon), @@ -178,34 +176,13 @@ class EventsTable ->extremePaginationLinks() ->filters([ Filter::make('events') - ->columns(8)->columnSpan(8) + ->columns(6)->columnSpan(6) ->schema([ Hidden::make('filter_alarm_green'), Hidden::make('filter_alarm_yellow'), Hidden::make('filter_alarm_red'), - Select::make(name: 'sport_id') - ->options(fn () => Sport::getSportForClient()) - ->default(self::$user->sport_id) - ->prefixIcon(self::$user->sport->icon) - ->selectablePlaceholder(false) - ->hiddenLabel() - ->afterStateUpdated(function (callable $set, $state, $livewire) { - - User::where('id', self::$user->id)->update(['sport_id' => (int) $state]); - - $livewire->dispatch('refreshBettypeMenu'); - $livewire->dispatch('reload_bookmaker_multiline'); - $livewire->dispatch('reload_alarm_bookmaker'); - $livewire->dispatch('refresh_comparing_bookmaker'); - $livewire->dispatch('refreshAlarmWidget'); - - $set('country_id', null); - $set('competition_group_id', null); - $set('group_id', null); - - }), Select::make(name: 'country_id') - ->hidden(fn () => self::$user->sport_id == 5) + ->hidden(fn () => auth()->user()->sport_id == 5) ->placeholder('Country') ->prefixIcon('phosphor-flag') ->hiddenLabel() @@ -214,7 +191,7 @@ class EventsTable ->searchable() ->preload() ->options(function () { - $res = Event::where('sport_id', self::$user->sport_id)->where('starttime', '>', Carbon::now())->groupBy('country_id')->pluck('country_id')->toArray(); + $res = Event::where('sport_id', auth()->user()->sport_id)->where('starttime', '>', Carbon::now())->groupBy('country_id')->pluck('country_id')->toArray(); return Country::query()->whereIn('id', $res)->orderBy('name')->pluck('name', 'id'); }) @@ -224,7 +201,7 @@ class EventsTable $set('competition_group_id', null); }), Select::make('competition_group_id') - ->hidden(fn () => self::$user->sport_id == 5) + ->hidden(fn () => auth()->user()->sport_id == 5) ->placeholder('League') ->prefixIcon('phosphor-trophy') ->hiddenLabel() @@ -233,9 +210,9 @@ class EventsTable ->searchable() ->options(function (Get $get) { if ($get('country_id')) { - $res = Event::where('sport_id', self::$user->sport_id)->with('country')->with('competition_group')->where('country_id', $get('country_id'))->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); + $res = Event::where('sport_id', auth()->user()->sport_id)->with('country')->with('competition_group')->where('country_id', $get('country_id'))->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); } else { - $res = Event::where('sport_id', self::$user->sport_id)->with('country')->with('competition_group')->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); + $res = Event::where('sport_id', auth()->user()->sport_id)->with('country')->with('competition_group')->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); } $arr = []; foreach ($res as $val) { @@ -247,7 +224,7 @@ class EventsTable }) ->live(), Select::make('group_id') - ->visible(fn () => self::$user->sport_id == 5) + ->visible(fn () => auth()->user()->sport_id == 5) ->placeholder('Tournament') ->prefixIcon('phosphor-trophy') ->hiddenLabel() @@ -256,9 +233,9 @@ class EventsTable ->searchable() ->options(function (Get $get) { if ($get('country_id')) { - $res = Event::with('country')->where('sport_id', self::$user->sport_id)->with('group')->where('country_id', $get('country_id'))->where('starttime', '>', Carbon::now())->groupBy('group_id')->get(); + $res = Event::with('country')->where('sport_id', auth()->user()->sport_id)->with('group')->where('country_id', $get('country_id'))->where('starttime', '>', Carbon::now())->groupBy('group_id')->get(); } else { - $res = Event::with('country')->where('sport_id', self::$user->sport_id)->with('group')->where('starttime', '>', Carbon::now())->groupBy('group_id')->get(); + $res = Event::with('country')->where('sport_id', auth()->user()->sport_id)->with('group')->where('starttime', '>', Carbon::now())->groupBy('group_id')->get(); } $arr = []; foreach ($res as $val) { @@ -289,52 +266,15 @@ class EventsTable ->hiddenLabel() ->live(), - Select::make('special_filter_lteq') + Select::make('filter_compare_differences') ->placeholder('Compare') ->prefixIcon('phosphor-funnel') ->hiddenLabel() ->allowHtml() - ->options([ - 'Compare Favorits' => [ - 'flte1' => 'Favorit ≤ Marathonbet', - 'flte2' => 'Favorit ≤ Bet365', - 'flte3' => 'Favorit ≤ 1Bet', - 'flte4' => 'Favorit ≤ Eurobet', - 'mlt1' => 'Favorit ≥ Marathonbet', - 'mlt2' => 'Favorit ≥ Bet365', - 'mlt3' => 'Favorit ≥ 1Bet', - 'mlt4' => 'Favorit ≥ Eurobet', - ], - 'Compare Margins' => [ - 'mgt1' => 'Margin ≥ Marathonbet', - 'mgt2' => 'Margin ≥ Bet365', - 'mgt3' => 'Margin ≥ 1Bet', - 'mgt4' => 'Margin ≥ Eurobet', - 'mlt1' => 'Margin < Marathonbet', - 'mlt2' => 'Margin < Bet365', - 'mlt3' => 'Margin < 1Bet', - 'mlt4' => 'Margin < Eurobet', - ], - 'Compare X' => [ - 'xlt1' => 'X < Marathonbet', - 'xlt2' => 'X < Bet365', - 'xlt3' => 'X < 1Bet', - 'xlt4' => 'X < Eurobet', - ], - ]), - - Select::make('filter_missing') - ->placeholder('Missing') - ->prefixIcon('phosphor-cow') - ->hiddenLabel() - ->allowHtml() - ->options([1 => '1Bets']), + ->options(fn () => CompareOptions::load()), ]) ->query(function (Builder $query, array $data): Builder { return $query->when( - $data['sport_id'], - fn (Builder $query, $sport_id) => $query->where('sport_id', $sport_id) - )->when( $data['country_id'], fn (Builder $query, $country_id) => $query->where('country_id', $country_id) )->when( @@ -413,6 +353,29 @@ class EventsTable }); }); } + )->when( + $data['filter_compare_differences'], + function (Builder $query, $filter_compare_differences) { + + $opt = explode('-', $filter_compare_differences); + + $compare_bookmaker_id = (int) $opt[2]; + + switch (auth()->user()->sport_id) { + case 1: + case 2: + $event_ids = LoadCompareDifferences::load($opt[0], $opt[1], 'odds_3ways', $compare_bookmaker_id); + break; + case 3: + $event_ids = LoadCompareDifferences::load($opt[0], $opt[1], 'odds_points', $compare_bookmaker_id); + break; + case 5: + $event_ids = LoadCompareDifferences::load($opt[0], $opt[1], 'odds_2ways', $compare_bookmaker_id); + break; + + } + $query->whereIn('id', $event_ids); + } )->when( $data['favorit_threshold'], @@ -523,6 +486,24 @@ class EventsTable $indicators[] = Indicator::make('Favorits')->removeField('stars_status')->color('info'); } + if ($data['filter_compare_differences'] ?? null) { + $opt = explode('-', $data['filter_compare_differences']); + $title = $opt[0]; + switch ($opt[1]) { + case 'lte': + $title .= ' ≤ '; + break; + case 'gte': + $title .= ' ≥ '; + break; + case 'lt': + $title .= ' > '; + break; + } + $title .= $opt[3]; + $indicators[] = Indicator::make($title)->removeField('filter_compare_differences')->color('warning'); + } + return $indicators; }), ], layout: FiltersLayout::AboveContent) @@ -551,20 +532,20 @@ class EventsTable ->tooltip('Add to favorits') ->action(function ($record) { $res = EventUserStar::where('event_id', $record->id) - ->where('user_id', self::$user->id) + ->where('user_id', auth()->user()->id) ->first(); if ($res) { EventUserStar::find($res->id)->delete(); } else { - EventUserStar::insert(['event_id' => $record->id, 'user_id' => self::$user->id]); + EventUserStar::insert(['event_id' => $record->id, 'user_id' => auth()->user()->id]); } }), ActionGroup::make([ // EditAction::make(), - DeleteAction::make()->visible(fn () => self::$user->hasRole('super_admin')), + DeleteAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')), Action::make('txodds_odds') ->label('TxOdds') - ->disabled(fn () => ! self::$user->hasRole('super_admin')) + ->disabled(fn () => ! auth()->user()->hasRole('super_admin')) ->icon('phosphor-arrow-square-out') ->url(fn ($record): string => route('txodds_odds', ['sportid' => $record->sport_id, 'txoddsid' => $record->id])) ->openUrlInNewTab(), @@ -580,7 +561,7 @@ class EventsTable ->icon('phosphor-dots-three-vertical'), ])->toolbarActions([ BulkActionGroup::make([ - DeleteBulkAction::make()->visible(fn () => self::$user->hasRole('super_admin')), + DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')), ]), ]); } diff --git a/app/Filament/Resources/Events/Tables/Tools/CompareOptions.php b/app/Filament/Resources/Events/Tables/Tools/CompareOptions.php new file mode 100644 index 00000000..8e3127ee --- /dev/null +++ b/app/Filament/Resources/Events/Tables/Tools/CompareOptions.php @@ -0,0 +1,63 @@ +user()->sport_id) { + case 1: + case 2: + $table = 'odds_3ways'; + break; + case 3: + $table = 'odds_points'; + break; + case 5: + $table = 'odds_2ways'; + break; + + } + + $options = []; + foreach (EventsTable::$slots[$table] as $bookmaker_id) { + $option = 'Favorit-lte-'.$bookmaker_id.'-'.$map[$bookmaker_id]['name']; + $favorits[$option] = 'Favorit ≤ '.$map[$bookmaker_id]['name']; + } + foreach (EventsTable::$slots[$table] as $bookmaker_id) { + $option = 'Favorit-gte-'.$bookmaker_id.'-'.$map[$bookmaker_id]['name']; + $favorits[$option] = 'Favorit ≥ '.$map[$bookmaker_id]['name']; + } + $options['Favorits'] = $favorits; + + foreach (EventsTable::$slots[$table] as $bookmaker_id) { + $option = 'Margin-gte-'.$bookmaker_id.'-'.$map[$bookmaker_id]['name']; + $margins[$option] = 'Margin ≥ '.$map[$bookmaker_id]['name']; + } + foreach (EventsTable::$slots[$table] as $bookmaker_id) { + $option = 'Margin-lt-'.$bookmaker_id.'-'.$map[$bookmaker_id]['name']; + $margins[$option] = 'Margin < '.$map[$bookmaker_id]['name']; + } + $options['Margins'] = $margins; + + if (auth()->user()->sport_id == 1) { + foreach (EventsTable::$slots[$table] as $bookmaker_id) { + $option = 'X-lt-'.$bookmaker_id.'-'.$map[$bookmaker_id]['name']; + $x[$option] = 'X < '.$map[$bookmaker_id]['name']; + } + $options['X'] = $x; + } + + return $options; + + } +} diff --git a/app/Filament/Resources/Events/Tables/Tools/LoadCompareDifferences.php b/app/Filament/Resources/Events/Tables/Tools/LoadCompareDifferences.php new file mode 100644 index 00000000..7bf684b4 --- /dev/null +++ b/app/Filament/Resources/Events/Tables/Tools/LoadCompareDifferences.php @@ -0,0 +1,107 @@ +user()->sport_id); + + $has_active_spread = OddsTable::where('name', $table)->value('has_active_spread'); + + if ($has_active_spread) { + $clients = DB::table($table) + ->where('bookmaker_id', auth()->user()->bookmaker_id) + ->where('active_spread', 1) + ->get(); + $comparing = DB::table($table) + ->where('bookmaker_id', $compare_bookmaker_id) + ->where('active_spread', 1) + ->get(); + } else { + // $clients = DB::table($table)->whereIn('bookmaker_id', [auth()->user()->bookmaker_id, $compare_bookmaker_id])->get(); + $clients = DB::table($table) + ->where('bookmaker_id', auth()->user()->bookmaker_id) + ->get(); + $comparing = DB::table($table) + ->where('bookmaker_id', $compare_bookmaker_id) + ->get(); + } + + $event_ids = []; + foreach ($clients as $client) { + + $row1 = get_object_vars($client); + + foreach ($comparing as $compare) { + + $row2 = get_object_vars($compare); + + if ($row1['event_id'] == $row2['event_id']) { + + switch ($target) { + case 'Favorit': + $bk = 100; + $co = 100; + foreach ($fields[$table] as $field) { + if ($row1[$field] < $bk) { + $bk = $row1[$field]; + } + if ($row2[$field] < $co) { + $co = $row2[$field]; + } + } + switch ($mode) { + case 'lte': + + if ($bk > 1 && $co > 1 && $bk <= $co) { + $event_ids[] = $row1['event_id']; + } + break; + case 'gte': + if ($bk > 1 && $co > 1 && $bk >= $co) { + $event_ids[] = $row1['event_id']; + } + break; + } + + break; + case 'Margin': + switch ($mode) { + case 'gte': + if ($row1['margin'] >= $row2['margin']) { + $event_ids[] = $row1['event_id']; + } + break; + case 'lt': + if ($row1['margin'] < $row2['margin']) { + $event_ids[] = $row1['event_id']; + } + break; + } + + break; + case 'X': + if ($row1['d3w'] < $row2['d3w']) { + $event_ids[] = $row1['event_id']; + } + break; + + } + + } + } + } + + return array_unique($event_ids); + } +} diff --git a/app/Filament/Resources/Events/Tables/Tools/LoadMultiline.php b/app/Filament/Resources/Events/Tables/Tools/LoadMultiline.php index 56141d1c..baf83ba1 100644 --- a/app/Filament/Resources/Events/Tables/Tools/LoadMultiline.php +++ b/app/Filament/Resources/Events/Tables/Tools/LoadMultiline.php @@ -13,8 +13,8 @@ class LoadMultiline public static function load() { - $cb = ComparingBookmaker::where('sport_id', EventsTable::$user->sport_id) - ->where('client_bookmaker_id', EventsTable::$user->bookmaker_id) + $cb = ComparingBookmaker::where('sport_id', auth()->user()->sport_id) + ->where('client_bookmaker_id', auth()->user()->bookmaker_id) ->orderBy('sorting', 'desc') ->select('bookmaker_id', 'time_lastcheck', 'margin_threshold', 'is_active') ->get(); @@ -22,7 +22,7 @@ class LoadMultiline $bookmakers = []; $filter = []; foreach ($cb as $value) { - if (EventsTable::$user->bookmaker_id != $value->bookmaker_id) { + if (auth()->user()->bookmaker_id != $value->bookmaker_id) { $bookmakers[] = $value->bookmaker_id; $filter[$value->bookmaker_id] = [ 'time_lastcheck' => $value->time_lastcheck, @@ -31,7 +31,7 @@ class LoadMultiline } } - $res = MultilineSetting::where('sport_id', EventsTable::$user->sport_id)->get(); + $res = MultilineSetting::where('sport_id', auth()->user()->sport_id)->get(); foreach ($res as $value) { EventsTable::$filter[$value->table] = $filter; diff --git a/app/Filament/Resources/Events/Tables/Tools/LoadPartnerDifferences.php b/app/Filament/Resources/Events/Tables/Tools/LoadPartnerDifferences.php index 3dea6cd1..02f39a1a 100644 --- a/app/Filament/Resources/Events/Tables/Tools/LoadPartnerDifferences.php +++ b/app/Filament/Resources/Events/Tables/Tools/LoadPartnerDifferences.php @@ -11,14 +11,29 @@ class LoadPartnerDifferences public static function load() { $fields = OddsTable::fields(); + $event_ids = []; foreach (EventsTable::$bettype_settings as $table) { - $books = DB::table($table) - ->where('bookmaker_id', auth()->user()->bookmaker_id) - ->get(); - $partners = DB::table($table) - ->where('bookmaker_id', auth()->user()->partner_bookmaker_id) - ->get(); + + $has_active_spread = OddsTable::where('name', $table)->value('has_active_spread'); + + if ($has_active_spread) { + $books = DB::table($table) + ->where('bookmaker_id', auth()->user()->bookmaker_id) + ->where('active_spread', 1) + ->get(); + $partners = DB::table($table) + ->where('bookmaker_id', auth()->user()->partner_bookmaker_id) + ->where('active_spread', 1) + ->get(); + } else { + $books = DB::table($table) + ->where('bookmaker_id', auth()->user()->bookmaker_id) + ->get(); + $partners = DB::table($table) + ->where('bookmaker_id', auth()->user()->partner_bookmaker_id) + ->get(); + } foreach ($books as $book) { $row1 = get_object_vars($book); diff --git a/app/Filament/Resources/Events/Widgets/AlarmWidget.php b/app/Filament/Resources/Events/Widgets/AlarmWidget.php index 83830688..2aae6bd4 100644 --- a/app/Filament/Resources/Events/Widgets/AlarmWidget.php +++ b/app/Filament/Resources/Events/Widgets/AlarmWidget.php @@ -92,6 +92,8 @@ class AlarmWidget extends StatsOverviewWidget ]; } + return []; + } public function filterAlarm($table, $alarm) diff --git a/app/Models/Bookmaker.php b/app/Models/Bookmaker.php index 6874fff1..1d6f1744 100644 --- a/app/Models/Bookmaker.php +++ b/app/Models/Bookmaker.php @@ -22,4 +22,18 @@ class Bookmaker extends Model { return $this->belongsTo(Sport::class)->where('is_active', 1); } + + public static function map() + { + $arr = []; + $res = Bookmaker::query()->where('is_active', 1)->get(); + foreach ($res as $value) { + $arr[$value->id] = [ + 'name' => $value->name, + 'icon' => $value->icon, + ]; + } + + return $arr; + } } diff --git a/app/Models/Sport.php b/app/Models/Sport.php index 2ae0aac7..e5569f60 100644 --- a/app/Models/Sport.php +++ b/app/Models/Sport.php @@ -28,16 +28,9 @@ class Sport extends Model } } - public static function getActiveSports() - { - return Sport::query()->where('is_active', 1)->pluck('id')->toArray(); - } - public static function getSportForClient() { - $user = User::find(auth()->user()->id); - - $sports = Client::where('id', $user->client_id)->value('sport'); + $sports = Client::where('id', auth()->user()->client_id)->value('sport'); return Sport::query()->whereIn('id', $sports)->pluck('name', 'id'); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index fff3946a..2b94ad4f 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -32,13 +32,13 @@ class AppServiceProvider extends ServiceProvider PanelsRenderHook::USER_MENU_PROFILE_AFTER, fn (): string => Blade::render('@livewire(\'konto-switcher\')'), ); - // FilamentView::registerRenderHook( - // TablesRenderHook::TOOLBAR_SEARCH_BEFORE, - // fn (): string => Blade::render('@livewire(\'sport-switcher\')'), - // scopes: [ - // ListEvents::class, - // ] - // ); + FilamentView::registerRenderHook( + TablesRenderHook::TOOLBAR_SEARCH_BEFORE, + fn (): string => Blade::render('@livewire(\'sport-switcher\')'), + scopes: [ + ListEvents::class, + ] + ); FilamentView::registerRenderHook( TablesRenderHook::TOOLBAR_SEARCH_AFTER, fn (): string => Blade::render('@livewire(\'bettype-toggle\')'), diff --git a/composer.lock b/composer.lock index a62549aa..0527b31c 100644 --- a/composer.lock +++ b/composer.lock @@ -1429,16 +1429,16 @@ }, { "name": "filament/actions", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "e9936617c3f74b18bf24a0645a6314a719c74a33" + "reference": "bb2306e893797b51f2b5debe6cf1aea03050bde0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/e9936617c3f74b18bf24a0645a6314a719c74a33", - "reference": "e9936617c3f74b18bf24a0645a6314a719c74a33", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/bb2306e893797b51f2b5debe6cf1aea03050bde0", + "reference": "bb2306e893797b51f2b5debe6cf1aea03050bde0", "shasum": "" }, "require": { @@ -1474,20 +1474,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-27T12:10:55+00:00" + "time": "2026-01-29T21:01:00+00:00" }, { "name": "filament/filament", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "2fe37fa96447cc61a70354b43f854b3632e388cc" + "reference": "11f5ae7226073100c6f135ebe95474d0f3af757c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/2fe37fa96447cc61a70354b43f854b3632e388cc", - "reference": "2fe37fa96447cc61a70354b43f854b3632e388cc", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/11f5ae7226073100c6f135ebe95474d0f3af757c", + "reference": "11f5ae7226073100c6f135ebe95474d0f3af757c", "shasum": "" }, "require": { @@ -1531,20 +1531,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-27T12:10:56+00:00" + "time": "2026-01-29T20:54:01+00:00" }, { "name": "filament/forms", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "63dfeb69b3823e0effde1cefcdaae21c1ddf0814" + "reference": "3e8a07534adda42e902f9e71aaf1c86600f21473" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/63dfeb69b3823e0effde1cefcdaae21c1ddf0814", - "reference": "63dfeb69b3823e0effde1cefcdaae21c1ddf0814", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/3e8a07534adda42e902f9e71aaf1c86600f21473", + "reference": "3e8a07534adda42e902f9e71aaf1c86600f21473", "shasum": "" }, "require": { @@ -1581,20 +1581,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-27T12:10:56+00:00" + "time": "2026-01-29T21:01:38+00:00" }, { "name": "filament/infolists", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "841a0520637b98822f09d008509e040ba9ef3faa" + "reference": "03228d5cf9310598712299d49ac38b75d61d7c1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/841a0520637b98822f09d008509e040ba9ef3faa", - "reference": "841a0520637b98822f09d008509e040ba9ef3faa", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/03228d5cf9310598712299d49ac38b75d61d7c1c", + "reference": "03228d5cf9310598712299d49ac38b75d61d7c1c", "shasum": "" }, "require": { @@ -1626,11 +1626,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-23T10:58:05+00:00" + "time": "2026-01-29T21:00:53+00:00" }, { "name": "filament/notifications", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", @@ -1677,16 +1677,16 @@ }, { "name": "filament/query-builder", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/query-builder.git", - "reference": "bcafe9bb71ec34292440c4bded5ee395f037b2a5" + "reference": "b5e0c22ac1d10c9c56ae344577d2a437d876f6ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/query-builder/zipball/bcafe9bb71ec34292440c4bded5ee395f037b2a5", - "reference": "bcafe9bb71ec34292440c4bded5ee395f037b2a5", + "url": "https://api.github.com/repos/filamentphp/query-builder/zipball/b5e0c22ac1d10c9c56ae344577d2a437d876f6ba", + "reference": "b5e0c22ac1d10c9c56ae344577d2a437d876f6ba", "shasum": "" }, "require": { @@ -1719,20 +1719,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-23T10:52:35+00:00" + "time": "2026-01-29T21:01:39+00:00" }, { "name": "filament/schemas", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/schemas.git", - "reference": "1638d2b16f7684b7925d9c6253592ecd308d7f12" + "reference": "e1bdda85e9fb5d65774df153e0357eb41c7c7a3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/schemas/zipball/1638d2b16f7684b7925d9c6253592ecd308d7f12", - "reference": "1638d2b16f7684b7925d9c6253592ecd308d7f12", + "url": "https://api.github.com/repos/filamentphp/schemas/zipball/e1bdda85e9fb5d65774df153e0357eb41c7c7a3d", + "reference": "e1bdda85e9fb5d65774df153e0357eb41c7c7a3d", "shasum": "" }, "require": { @@ -1764,20 +1764,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-27T12:11:14+00:00" + "time": "2026-01-29T21:01:33+00:00" }, { "name": "filament/support", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "26894b15b989f89c83b004b38e513b9b2843a0c4" + "reference": "67a017956b2fe3d37425a2df0d1f8e18c30b42e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/26894b15b989f89c83b004b38e513b9b2843a0c4", - "reference": "26894b15b989f89c83b004b38e513b9b2843a0c4", + "url": "https://api.github.com/repos/filamentphp/support/zipball/67a017956b2fe3d37425a2df0d1f8e18c30b42e2", + "reference": "67a017956b2fe3d37425a2df0d1f8e18c30b42e2", "shasum": "" }, "require": { @@ -1822,20 +1822,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-27T12:11:14+00:00" + "time": "2026-01-29T21:00:17+00:00" }, { "name": "filament/tables", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "ae5a17dfc442b9ac9ff6d3f91a96538c3771ee3c" + "reference": "6dd74c575e68c26553d373dcf2e5202fa4e7d713" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/ae5a17dfc442b9ac9ff6d3f91a96538c3771ee3c", - "reference": "ae5a17dfc442b9ac9ff6d3f91a96538c3771ee3c", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/6dd74c575e68c26553d373dcf2e5202fa4e7d713", + "reference": "6dd74c575e68c26553d373dcf2e5202fa4e7d713", "shasum": "" }, "require": { @@ -1868,20 +1868,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-27T12:10:54+00:00" + "time": "2026-01-29T21:01:20+00:00" }, { "name": "filament/widgets", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", - "reference": "2dfe6ea8d6a491cdf1eb7056561ec9db4b8cfeb2" + "reference": "d9b5a35a04048bea86563223d2505d11aea5a7e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/2dfe6ea8d6a491cdf1eb7056561ec9db4b8cfeb2", - "reference": "2dfe6ea8d6a491cdf1eb7056561ec9db4b8cfeb2", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/d9b5a35a04048bea86563223d2505d11aea5a7e0", + "reference": "d9b5a35a04048bea86563223d2505d11aea5a7e0", "shasum": "" }, "require": { @@ -1912,7 +1912,7 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-23T10:56:26+00:00" + "time": "2026-01-29T20:48:44+00:00" }, { "name": "fruitcake/php-cors", @@ -4181,16 +4181,16 @@ }, { "name": "nesbot/carbon", - "version": "3.11.0", + "version": "3.11.1", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "bdb375400dcd162624531666db4799b36b64e4a1" + "reference": "f438fcc98f92babee98381d399c65336f3a3827f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/bdb375400dcd162624531666db4799b36b64e4a1", - "reference": "bdb375400dcd162624531666db4799b36b64e4a1", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/f438fcc98f92babee98381d399c65336f3a3827f", + "reference": "f438fcc98f92babee98381d399c65336f3a3827f", "shasum": "" }, "require": { @@ -4214,7 +4214,7 @@ "phpstan/extension-installer": "^1.4.3", "phpstan/phpstan": "^2.1.22", "phpunit/phpunit": "^10.5.53", - "squizlabs/php_codesniffer": "^3.13.4" + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" }, "bin": [ "bin/carbon" @@ -4257,14 +4257,14 @@ } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", + "homepage": "https://carbonphp.github.io/carbon/", "keywords": [ "date", "datetime", "time" ], "support": { - "docs": "https://carbon.nesbot.com/docs", + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", "issues": "https://github.com/CarbonPHP/carbon/issues", "source": "https://github.com/CarbonPHP/carbon" }, @@ -4282,7 +4282,7 @@ "type": "tidelift" } ], - "time": "2025-12-02T21:04:28+00:00" + "time": "2026-01-29T09:26:29+00:00" }, { "name": "nette/php-generator", @@ -9479,7 +9479,7 @@ }, { "name": "filament/upgrade", - "version": "v4.6.1", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/filamentphp/upgrade.git", diff --git a/database/migrations/2026_01_27_132542_create_odds_tables_table.php b/database/migrations/2026_01_27_132542_create_odds_tables_table.php index 61e032d4..d5280a4b 100644 --- a/database/migrations/2026_01_27_132542_create_odds_tables_table.php +++ b/database/migrations/2026_01_27_132542_create_odds_tables_table.php @@ -15,6 +15,7 @@ return new class extends Migration $table->id(); $table->string('name'); $table->string('title'); + $table->boolean(column: 'has_active_spread')->default(0); $table->string('oddnames'); $table->string('fieldnames'); $table->timestamps(); diff --git a/database/seeders/OddsTableSeeder.php b/database/seeders/OddsTableSeeder.php index 0b4da4f2..0b58446a 100644 --- a/database/seeders/OddsTableSeeder.php +++ b/database/seeders/OddsTableSeeder.php @@ -12,22 +12,22 @@ class OddsTableSeeder extends Seeder /** * Provoider */ - $sql = "INSERT INTO `odds_tables` (`id`, `name`, `title`, `oddnames`, `fieldnames`, `created_at`, `updated_at`) + $sql = "INSERT INTO `odds_tables` (`id`, `name`, `title`, `oddnames`, `fieldnames`, `has_active_spread`, `created_at`, `updated_at`) VALUES - (1, 'odds_2ways', 'ML', 'h2w,a2w', 'alarm_2w_h2w,alarm_2w_a2w', NULL, NULL), - (2, 'odds_2ways_s1', 'ML S1', 'h2w,a2w', 'alarm_2ws1_h2w,alarm_2ws1_a2w', NULL, NULL), - (3, 'odds_3ways', '1X2', 'h3w,d3w,a3w', 'alarm_3w_h3w,alarm_3w_d3w,alarm_3w_a3w', NULL, NULL), - (4, 'odds_3ways_ht', '1X2 HT', 'h3w,d3w,a3w', 'alarm_3wht_h3w,alarm_3wht_d3w,alarm_3wht_a3w', NULL, NULL), - (5, 'odds_dc', 'DC', 'dc1x,dc12,dcx2', 'alarm_dc_dc1x,alarm_dc_dc12,alarm_dc_dcx2', NULL, NULL), - (6, 'odds_dnb', 'DNB', 'dnb1,dnb2', 'alarm_dbn_dnb1,alarm_dbn_dnb2', NULL, NULL), - (7, 'odds_ggng', 'GGNG', 'gg,ng', 'alarm_ggng_gg,alarm_ggng_ng', NULL, NULL), - (8, 'odds_points', 'PO', 'home,away', 'alarm_po_home,alarm_po_away', NULL, NULL), - (9, 'odds_points_ht', 'PO HT', 'home,away', 'alarm_poht_home,alarm_poht_away', NULL, NULL), - (10, 'odds_points_q1', 'PO Q1', 'home,away', 'alarm_poq1_home,alarm_poq1_away', NULL, NULL), - (11, 'odds_totals', 'TO', 'over,under', 'alarm_to_over,alarm_to_under', NULL, NULL), - (12, 'odds_totals_ht', 'TO HT', 'over,under', 'alarm_toht_over,alarm_toht_under', NULL, NULL), - (13, 'odds_totals_q1', 'TO Q1', 'over,under', 'alarm_toq1_over,alarm_toq1_under', NULL, NULL), - (14, 'odds_tq', 'TQ', 'htq,atq', 'alarm_tq_htq,alarm_tq_atq', NULL, NULL); + (1, 'odds_2ways', 'ML', 'h2w,a2w', 'alarm_2w_h2w,alarm_2w_a2w', 0, NULL, NULL), + (2, 'odds_2ways_s1', 'ML S1', 'h2w,a2w', 'alarm_2ws1_h2w,alarm_2ws1_a2w', 0, NULL, NULL), + (3, 'odds_3ways', '1X2', 'h3w,d3w,a3w', 'alarm_3w_h3w,alarm_3w_d3w,alarm_3w_a3w', 0, NULL, NULL), + (4, 'odds_3ways_ht', '1X2 HT', 'h3w,d3w,a3w', 'alarm_3wht_h3w,alarm_3wht_d3w,alarm_3wht_a3w', 0, NULL, NULL), + (5, 'odds_dc', 'DC', 'dc1x,dc12,dcx2', 'alarm_dc_dc1x,alarm_dc_dc12,alarm_dc_dcx2', 0, NULL, NULL), + (6, 'odds_dnb', 'DNB', 'dnb1,dnb2', 'alarm_dbn_dnb1,alarm_dbn_dnb2', 0, NULL, NULL), + (7, 'odds_ggng', 'GGNG', 'gg,ng', 'alarm_ggng_gg,alarm_ggng_ng', 0, NULL, NULL), + (8, 'odds_points', 'PO', 'home,away', 'alarm_po_home,alarm_po_away', 1, NULL, NULL), + (9, 'odds_points_ht', 'PO HT', 'home,away', 'alarm_poht_home,alarm_poht_away', 1, NULL, NULL), + (10, 'odds_points_q1', 'PO Q1', 'home,away', 'alarm_poq1_home,alarm_poq1_away', 1, NULL, NULL), + (11, 'odds_totals', 'TO', 'over,under', 'alarm_to_over,alarm_to_under', 1, NULL, NULL), + (12, 'odds_totals_ht', 'TO HT', 'over,under', 'alarm_toht_over,alarm_toht_under', 1, NULL, NULL), + (13, 'odds_totals_q1', 'TO Q1', 'over,under', 'alarm_toq1_over,alarm_toq1_under', 1, NULL, NULL), + (14, 'odds_tq', 'TQ', 'htq,atq', 'alarm_tq_htq,alarm_tq_atq', 1, NULL, NULL); "; DB::unprepared($sql); diff --git a/resources/views/livewire/bettype-toggle.blade.php b/resources/views/livewire/bettype-toggle.blade.php index 27d3072a..d4240426 100644 --- a/resources/views/livewire/bettype-toggle.blade.php +++ b/resources/views/livewire/bettype-toggle.blade.php @@ -2,7 +2,8 @@ - +
@@ -13,10 +14,8 @@ icon="phosphor-users">
- +
diff --git a/resources/views/livewire/sport-switcher.blade.php b/resources/views/livewire/sport-switcher.blade.php index 5deffb42..f2128b69 100644 --- a/resources/views/livewire/sport-switcher.blade.php +++ b/resources/views/livewire/sport-switcher.blade.php @@ -1,5 +1,5 @@
- + @foreach ($sports as $id => $name) diff --git a/setup.sh b/setup.sh index 473ab3f2..716914d0 100755 --- a/setup.sh +++ b/setup.sh @@ -57,7 +57,7 @@ case "$1" in php artisan nuh --d --f --t 3 php artisan nuh --d --f 4 php artisan nuh --d --f 5 - php artisan nuh --d --f 6 + php artisan nuh --d --f --w 6 php artisan nuh --d --f 8 php artisan nuh --d --f 9 php artisan nuh --d --f 10 @@ -82,10 +82,10 @@ case "$1" in # php artisan nuh --d --t --f 20 # php artisan nuh --d --t --f 21 # php artisan nuh --d --t --f 22 - php artisan nuh --d --f 2 + php artisan nuh --d --f --t 3 php artisan nuh --d --f 4 php artisan nuh --d --f 5 - php artisan nuh --d --f 6 + php artisan nuh --d --f --t 6 php artisan nuh --d --f --p 8 php artisan nuh --d --f --p 9 # php artisan nuh --d --f --p 10 @@ -112,10 +112,10 @@ case "$1" in php artisan nuh --d --f --w 20 php artisan nuh --d --f --w 21 php artisan nuh --d --f --w 22 - php artisan nuh --d --f 3 - php artisan nuh --d --f 4 - php artisan nuh --d --f 5 - php artisan nuh --d --f 6 + php artisan nuh --d --f --w 3 + php artisan nuh --d --f --w 4 + php artisan nuh --d --f --w 5 + php artisan nuh --d --f --w 6 php artisan nuh --d --f 8 php artisan nuh --d --f 9 php artisan nuh --d --f 10