From ca58eba5309172291814dd582693c5a5d36e7547 Mon Sep 17 00:00:00 2001 From: salam Date: Wed, 28 Jan 2026 16:21:15 +0100 Subject: [PATCH] alarms finsihed --- .../Resources/Events/Pages/EditEvent.php | 8 -- .../Resources/Events/Pages/ListEvents.php | 27 ++++++- .../Resources/Events/Tables/EventsTable.php | 79 +++++++++++++++++-- .../Resources/Events/Widgets/AlarmWidget.php | 71 +++++++++++------ composer.lock | 72 ++++++++--------- ..._01_27_132542_create_odds_tables_table.php | 1 + database/seeders/OddsTableSeeder.php | 32 ++++---- .../events/widgets/alarm-widget.blade.php | 6 +- 8 files changed, 200 insertions(+), 96 deletions(-) diff --git a/app/Filament/Resources/Events/Pages/EditEvent.php b/app/Filament/Resources/Events/Pages/EditEvent.php index f63b699d..6b28f4c3 100644 --- a/app/Filament/Resources/Events/Pages/EditEvent.php +++ b/app/Filament/Resources/Events/Pages/EditEvent.php @@ -3,17 +3,9 @@ namespace App\Filament\Resources\Events\Pages; use App\Filament\Resources\Events\EventResource; -use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; class EditEvent extends EditRecord { protected static string $resource = EventResource::class; - - protected function getHeaderActions(): array - { - return [ - // DeleteAction::make(), - ]; - } } diff --git a/app/Filament/Resources/Events/Pages/ListEvents.php b/app/Filament/Resources/Events/Pages/ListEvents.php index 08ac4bae..2b1a20dd 100644 --- a/app/Filament/Resources/Events/Pages/ListEvents.php +++ b/app/Filament/Resources/Events/Pages/ListEvents.php @@ -13,7 +13,11 @@ class ListEvents extends ListRecords protected string|Width|null $maxContentWidth = Width::Full; - protected $listeners = ['refreshBettypeMenu' => '$refresh']; + protected $listeners = [ + 'refreshBettypeMenu' => '$refresh', + 'filterUpdateGreen' => 'updateTableFiltersGreen', + 'filterUpdateYellow' => 'updateTableFiltersYellow', + 'filterUpdateRed' => 'updateTableFiltersRed']; protected function getHeaderWidgets(): array { @@ -22,6 +26,27 @@ class ListEvents extends ListRecords ]; } + public function updateTableFiltersGreen(string $filter): void + { + $this->tableFilters['events']['filter_alarm_yellow'] = null; + $this->tableFilters['events']['filter_alarm_red'] = null; + $this->tableFilters['events']['filter_alarm_green'] = $filter; + } + + public function updateTableFiltersYellow(string $filter): void + { + $this->tableFilters['events']['filter_alarm_red'] = null; + $this->tableFilters['events']['filter_alarm_green'] = null; + $this->tableFilters['events']['filter_alarm_yellow'] = $filter; + } + + public function updateTableFiltersRed(string $filter): void + { + $this->tableFilters['events']['filter_alarm_yellow'] = null; + $this->tableFilters['events']['filter_alarm_green'] = null; + $this->tableFilters['events']['filter_alarm_red'] = $filter; + } + public function getColumns(): int|array { return [ diff --git a/app/Filament/Resources/Events/Tables/EventsTable.php b/app/Filament/Resources/Events/Tables/EventsTable.php index b0e8cef5..79f22d62 100644 --- a/app/Filament/Resources/Events/Tables/EventsTable.php +++ b/app/Filament/Resources/Events/Tables/EventsTable.php @@ -14,6 +14,7 @@ use App\Models\Event; 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; @@ -22,6 +23,7 @@ use Filament\Actions\ActionGroup; use Filament\Actions\BulkActionGroup; use Filament\Actions\DeleteAction; use Filament\Actions\DeleteBulkAction; +use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Select; use Filament\Schemas\Components\Utilities\Get; use Filament\Support\Enums\FontWeight; @@ -173,6 +175,9 @@ class EventsTable Filter::make('events') ->columns(5)->columnSpan(5) ->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) @@ -299,6 +304,51 @@ class EventsTable ->whereDate('starttime', '<=', $end->format('Y-m-d 00:00:00')); } } + )->when( + $data['filter_alarm_green'], + function (Builder $query, $filter_alarm_green) { + $res = OddsTable::where('name', $filter_alarm_green)->value('fieldnames'); + $fieldnames = explode(',', $res); + + return $query->whereHas('event_bookmaker', function ($query) use ($fieldnames) { + $query->where('bookmaker_id', auth()->user()->bookmaker_id) + ->where(function ($query) use ($fieldnames) { + foreach ($fieldnames as $field) { + $query->orWhere($field, 1); + } + }); + }); + } + )->when( + $data['filter_alarm_yellow'], + function (Builder $query, $filter_alarm_yellow) { + $res = OddsTable::where('name', $filter_alarm_yellow)->value('fieldnames'); + $fieldnames = explode(',', $res); + + return $query->whereHas('event_bookmaker', function ($query) use ($fieldnames) { + $query->where('bookmaker_id', auth()->user()->bookmaker_id) + ->where(function ($query) use ($fieldnames) { + foreach ($fieldnames as $field) { + $query->orWhere($field, 2); + } + }); + }); + } + )->when( + $data['filter_alarm_red'], + function (Builder $query, $filter_alarm_red) { + $res = OddsTable::where('name', $filter_alarm_red)->value('fieldnames'); + $fieldnames = explode(',', $res); + + return $query->whereHas('event_bookmaker', function ($query) use ($fieldnames) { + $query->where('bookmaker_id', auth()->user()->bookmaker_id) + ->where(function ($query) use ($fieldnames) { + foreach ($fieldnames as $field) { + $query->orWhere($field, 3); + } + }); + }); + } ); })->indicateUsing(function (array $data): array { $indicators = []; @@ -320,13 +370,19 @@ class EventsTable } } - if ($data['competition_group_id'] ?? null) { - $competition_groups = CompetitionGroup::whereIn('id', $data['competition_group_id'])->pluck('name')->toArray(); - if (count($competition_groups) > 1) { - $indicators[] = Indicator::make('Leagues: '.implode(', ', $competition_groups))->removeField('competition_group_id')->color('info'); - } else { - $indicators[] = Indicator::make('League: '.$competition_groups[0])->removeField('competition_group_id')->color('info')->color('info'); - } + if ($data['filter_alarm_green'] ?? null) { + $title = OddsTable::where('name', $data['filter_alarm_green'])->value('title'); + $indicators[] = Indicator::make('Alarm: '.$title)->removeField('filter_alarm_green')->color('success'); + } + + if ($data['filter_alarm_yellow'] ?? null) { + $title = OddsTable::where('name', $data['filter_alarm_yellow'])->value('title'); + $indicators[] = Indicator::make('Alarm: '.$title)->removeField('filter_alarm_yellow')->color('warning'); + } + + if ($data['filter_alarm_red'] ?? null) { + $title = OddsTable::where('name', $data['filter_alarm_red'])->value('title'); + $indicators[] = Indicator::make('Alarm: '.$title)->removeField('filter_alarm_red')->color('danger'); } if ($data['starttime_period'] ?? null) { @@ -343,6 +399,15 @@ class EventsTable } } + if ($data['competition_group_id'] ?? null) { + $competition_groups = CompetitionGroup::whereIn('id', $data['competition_group_id'])->pluck('name')->toArray(); + if (count($competition_groups) > 1) { + $indicators[] = Indicator::make('Leagues: '.implode(', ', $competition_groups))->removeField('competition_group_id')->color('info'); + } else { + $indicators[] = Indicator::make('League: '.$competition_groups[0])->removeField('competition_group_id')->color('info')->color('info'); + } + } + if ($data['stars_status'] ?? null) { $indicators[] = Indicator::make('Favorits')->removeField('stars_status')->color('info'); } diff --git a/app/Filament/Resources/Events/Widgets/AlarmWidget.php b/app/Filament/Resources/Events/Widgets/AlarmWidget.php index 097d849b..34cd7793 100644 --- a/app/Filament/Resources/Events/Widgets/AlarmWidget.php +++ b/app/Filament/Resources/Events/Widgets/AlarmWidget.php @@ -3,17 +3,22 @@ namespace App\Filament\Resources\Events\Widgets; use App\Actions\AlarmStatistic; +use Filament\Widgets\Concerns\InteractsWithPageFilters; use Filament\Widgets\StatsOverviewWidget; use Filament\Widgets\StatsOverviewWidget\Stat; class AlarmWidget extends StatsOverviewWidget { + use InteractsWithPageFilters; + protected $listeners = [ 'refreshAlarmWidget' => '$refresh', ]; protected ?string $pollingInterval = '10s'; + public array $filters = []; + protected function getStats(): array { @@ -23,69 +28,85 @@ class AlarmWidget extends StatsOverviewWidget case 1: return [ Stat::make('1X2', '1X2')->view('filament.resources.events.widgets.alarm-widget', - ['title' => '1X2', 'red' => $res['odds_3ways'][3] ?? 0, 'yellow' => $res['odds_3ways'][2] ?? 0, 'green' => $res['odds_3ways'][1] ?? 0]), + ['filter' => 'odds_3ways', 'title' => '1X2', 'red' => $res['odds_3ways'][3] ?? 0, 'yellow' => $res['odds_3ways'][2] ?? 0, 'green' => $res['odds_3ways'][1] ?? 0]), Stat::make('1X2', '1X2')->view('filament.resources.events.widgets.alarm-widget', - ['title' => '1X2 HT', 'red' => $res['odds_3ways_ht'][3] ?? 0, 'yellow' => $res['odds_3ways_ht'][2] ?? 0, 'green' => $res['odds_3ways_ht'][1] ?? 0]), + ['filter' => 'odds_3ways_ht', 'title' => '1X2 HT', 'red' => $res['odds_3ways_ht'][3] ?? 0, 'yellow' => $res['odds_3ways_ht'][2] ?? 0, 'green' => $res['odds_3ways_ht'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), + ['filter' => 'odds_totals', 'title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals HT', 'red' => $res['odds_totals_ht'][3] ?? 0, 'yellow' => $res['odds_totals_ht'][2] ?? 0, 'green' => $res['odds_totals_ht'][1] ?? 0]), + ['filter' => 'odds_totals_ht', 'title' => 'Totals HT', 'red' => $res['odds_totals_ht'][3] ?? 0, 'yellow' => $res['odds_totals_ht'][2] ?? 0, 'green' => $res['odds_totals_ht'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'GG NG', 'red' => $res['odds_ggng'][3] ?? 0, 'yellow' => $res['odds_ggng'][2] ?? 0, 'green' => $res['odds_ggng'][1] ?? 0]), + ['filter' => 'odds_ggng', 'title' => 'GG NG', 'red' => $res['odds_ggng'][3] ?? 0, 'yellow' => $res['odds_ggng'][2] ?? 0, 'green' => $res['odds_ggng'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'DNB', 'red' => $res['odds_dnb'][3] ?? 0, 'yellow' => $res['odds_dnb'][2] ?? 0, 'green' => $res['odds_dnb'][1] ?? 0]), + ['filter' => 'odds_dnb', 'title' => 'DNB', 'red' => $res['odds_dnb'][3] ?? 0, 'yellow' => $res['odds_dnb'][2] ?? 0, 'green' => $res['odds_dnb'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'DC', 'red' => $res['odds_dc'][3] ?? 0, 'yellow' => $res['odds_dc'][2] ?? 0, 'green' => $res['odds_dc'][1] ?? 0]), + ['filter' => 'odds_dc', 'title' => 'DC', 'red' => $res['odds_dc'][3] ?? 0, 'yellow' => $res['odds_dc'][2] ?? 0, 'green' => $res['odds_dc'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'TQ', 'red' => $res['odds_tq'][3] ?? 0, 'yellow' => $res['odds_tq'][2] ?? 0, 'green' => $res['odds_tq'][1] ?? 0]), + ['filter' => 'odds_tq', 'title' => 'TQ', 'red' => $res['odds_tq'][3] ?? 0, 'yellow' => $res['odds_tq'][2] ?? 0, 'green' => $res['odds_tq'][1] ?? 0]), ]; case 2: return [ Stat::make('1X2', '1X2')->view('filament.resources.events.widgets.alarm-widget', - ['title' => '1X2', 'red' => $res['odds_3ways'][3] ?? 0, 'yellow' => $res['odds_3ways'][2] ?? 0, 'green' => $res['odds_3ways'][1] ?? 0]), + ['filter' => 'odds_3ways', 'title' => '1X2', 'red' => $res['odds_3ways'][3] ?? 0, 'yellow' => $res['odds_3ways'][2] ?? 0, 'green' => $res['odds_3ways'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'ML', 'red' => $res['odds_2ways'][3] ?? 0, 'yellow' => $res['odds_2ways'][2] ?? 0, 'green' => $res['odds_2ways'][1] ?? 0]), + ['filter' => 'odds_2ways', 'title' => 'ML', 'red' => $res['odds_2ways'][3] ?? 0, 'yellow' => $res['odds_2ways'][2] ?? 0, 'green' => $res['odds_2ways'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'HC', 'red' => $res['odds_points'][3] ?? 0, 'yellow' => $res['odds_points'][2] ?? 0, 'green' => $res['odds_points'][1] ?? 0]), + ['filter' => 'odds_points', 'title' => 'HC', 'red' => $res['odds_points'][3] ?? 0, 'yellow' => $res['odds_points'][2] ?? 0, 'green' => $res['odds_points'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'HC Q1', 'red' => $res['odds_points_q1'][3] ?? 0, 'yellow' => $res['odds_points_q1'][2] ?? 0, 'green' => $res['odds_points_q1'][1] ?? 0]), + ['filter' => 'odds_points_q1', 'title' => 'HC Q1', 'red' => $res['odds_points_q1'][3] ?? 0, 'yellow' => $res['odds_points_q1'][2] ?? 0, 'green' => $res['odds_points_q1'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), + ['filter' => 'odds_totals', 'title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals Q1', 'red' => $res['odds_totals_q1'][3] ?? 0, 'yellow' => $res['odds_totals_q1'][2] ?? 0, 'green' => $res['odds_totals_q1'][1] ?? 0]), + ['filter' => 'odds_totals_q1', 'title' => 'Totals Q1', 'red' => $res['odds_totals_q1'][3] ?? 0, 'yellow' => $res['odds_totals_q1'][2] ?? 0, 'green' => $res['odds_totals_q1'][1] ?? 0]), ]; case 3: return [ Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'ML', 'red' => $res['odds_2ways'][3] ?? 0, 'yellow' => $res['odds_2ways'][2] ?? 0, 'green' => $res['odds_2ways'][1] ?? 0]), + ['filter' => 'odds_2ways', 'title' => 'ML', 'red' => $res['odds_2ways'][3] ?? 0, 'yellow' => $res['odds_2ways'][2] ?? 0, 'green' => $res['odds_2ways'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'HC', 'red' => $res['odds_points'][3] ?? 0, 'yellow' => $res['odds_points'][2] ?? 0, 'green' => $res['odds_points'][1] ?? 0]), + ['filter' => 'odds_points', 'title' => 'HC', 'red' => $res['odds_points'][3] ?? 0, 'yellow' => $res['odds_points'][2] ?? 0, 'green' => $res['odds_points'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'HC Q1', 'red' => $res['odds_points_q1'][3] ?? 0, 'yellow' => $res['odds_points_q1'][2] ?? 0, 'green' => $res['odds_points_q1'][1] ?? 0]), + ['filter' => 'odds_points_q1', 'title' => 'HC Q1', 'red' => $res['odds_points_q1'][3] ?? 0, 'yellow' => $res['odds_points_q1'][2] ?? 0, 'green' => $res['odds_points_q1'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'HC HT', 'red' => $res['odds_points_ht'][3] ?? 0, 'yellow' => $res['odds_points_ht'][2] ?? 0, 'green' => $res['odds_points_ht'][1] ?? 0]), + ['filter' => 'odds_points_ht', 'title' => 'HC HT', 'red' => $res['odds_points_ht'][3] ?? 0, 'yellow' => $res['odds_points_ht'][2] ?? 0, 'green' => $res['odds_points_ht'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), + ['filter' => 'odds_totals', 'title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals Q1', 'red' => $res['odds_totals_q1'][3] ?? 0, 'yellow' => $res['odds_totals_q1'][2] ?? 0, 'green' => $res['odds_totals_q1'][1] ?? 0]), + ['filter' => 'odds_totals_q1', 'title' => 'Totals Q1', 'red' => $res['odds_totals_q1'][3] ?? 0, 'yellow' => $res['odds_totals_q1'][2] ?? 0, 'green' => $res['odds_totals_q1'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals HT', 'red' => $res['odds_totals_ht'][3] ?? 0, 'yellow' => $res['odds_totals_ht'][2] ?? 0, 'green' => $res['odds_totals_ht'][1] ?? 0]), + ['filter' => 'odds_totals_ht', 'title' => 'Totals HT', 'red' => $res['odds_totals_ht'][3] ?? 0, 'yellow' => $res['odds_totals_ht'][2] ?? 0, 'green' => $res['odds_totals_ht'][1] ?? 0]), ]; case 5: return [ Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'ML', 'red' => $res['odds_2ways'][3] ?? 0, 'yellow' => $res['odds_2ways'][2] ?? 0, 'green' => $res['odds_2ways'][1] ?? 0]), + ['filter' => 'odds_2ways', 'title' => 'ML', 'red' => $res['odds_2ways'][3] ?? 0, 'yellow' => $res['odds_2ways'][2] ?? 0, 'green' => $res['odds_2ways'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'MLS1', 'red' => $res['odds_2ways_s1'][3] ?? 0, 'yellow' => $res['odds_2ways_s1'][2] ?? 0, 'green' => $res['odds_2ways_s1'][1] ?? 0]), + ['filter' => 'odds_2ways_s1', 'title' => 'MLS1', 'red' => $res['odds_2ways_s1'][3] ?? 0, 'yellow' => $res['odds_2ways_s1'][2] ?? 0, 'green' => $res['odds_2ways_s1'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'HC', 'red' => $res['odds_points'][3] ?? 0, 'yellow' => $res['odds_points'][2] ?? 0, 'green' => $res['odds_points'][1] ?? 0]), + ['filter' => 'odds_points', 'title' => 'HC', 'red' => $res['odds_points'][3] ?? 0, 'yellow' => $res['odds_points'][2] ?? 0, 'green' => $res['odds_points'][1] ?? 0]), Stat::make('', '')->view('filament.resources.events.widgets.alarm-widget', - ['title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), + ['filter' => 'odds_totals', 'title' => 'Totals', 'red' => $res['odds_totals'][3] ?? 0, 'yellow' => $res['odds_totals'][2] ?? 0, 'green' => $res['odds_totals'][1] ?? 0]), ]; } } + public function filterAlarm($table, $alarm) + { + switch ($alarm) { + case 1: + $this->dispatch('filterUpdateGreen', $table); + break; + case 2: + $this->dispatch('filterUpdateYellow', $table); + break; + case 3: + $this->dispatch('filterUpdateRed', $table); + break; + } + + } + public function getColumns(): int|array { return [ diff --git a/composer.lock b/composer.lock index f1924c5e..3f34edb6 100644 --- a/composer.lock +++ b/composer.lock @@ -6825,16 +6825,16 @@ }, { "name": "symfony/finder", - "version": "v7.4.4", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f" + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/01b24a145bbeaa7141e75887ec904c34a6728a5f", - "reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f", + "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", "shasum": "" }, "require": { @@ -6869,7 +6869,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.4" + "source": "https://github.com/symfony/finder/tree/v7.4.5" }, "funding": [ { @@ -6889,7 +6889,7 @@ "type": "tidelift" } ], - "time": "2026-01-12T12:19:02+00:00" + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symfony/html-sanitizer", @@ -6967,16 +6967,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.4.4", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94" + "reference": "446d0db2b1f21575f1284b74533e425096abdfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/977a554a34cf8edc95ca351fbecb1bb1ad05cc94", - "reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/446d0db2b1f21575f1284b74533e425096abdfb6", + "reference": "446d0db2b1f21575f1284b74533e425096abdfb6", "shasum": "" }, "require": { @@ -7025,7 +7025,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.4" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.5" }, "funding": [ { @@ -7045,20 +7045,20 @@ "type": "tidelift" } ], - "time": "2026-01-09T12:14:21+00:00" + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.4.4", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "48b067768859f7b68acf41dfb857a5a4be00acdd" + "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/48b067768859f7b68acf41dfb857a5a4be00acdd", - "reference": "48b067768859f7b68acf41dfb857a5a4be00acdd", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/229eda477017f92bd2ce7615d06222ec0c19e82a", + "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a", "shasum": "" }, "require": { @@ -7144,7 +7144,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.4" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.5" }, "funding": [ { @@ -7164,7 +7164,7 @@ "type": "tidelift" } ], - "time": "2026-01-24T22:13:01+00:00" + "time": "2026-01-28T10:33:42+00:00" }, { "name": "symfony/mailer", @@ -7252,16 +7252,16 @@ }, { "name": "symfony/mime", - "version": "v7.4.4", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "40945014c0a9471ccfe19673c54738fa19367a3c" + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/40945014c0a9471ccfe19673c54738fa19367a3c", - "reference": "40945014c0a9471ccfe19673c54738fa19367a3c", + "url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148", + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148", "shasum": "" }, "require": { @@ -7272,15 +7272,15 @@ }, "conflict": { "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", "symfony/mailer": "<6.4", "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "phpdocumentor/reflection-docblock": "^5.2", "symfony/dependency-injection": "^6.4|^7.0|^8.0", "symfony/process": "^6.4|^7.0|^8.0", "symfony/property-access": "^6.4|^7.0|^8.0", @@ -7317,7 +7317,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.4" + "source": "https://github.com/symfony/mime/tree/v7.4.5" }, "funding": [ { @@ -7337,7 +7337,7 @@ "type": "tidelift" } ], - "time": "2026-01-08T16:12:55+00:00" + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8170,16 +8170,16 @@ }, { "name": "symfony/process", - "version": "v7.4.4", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "626f07a53f4b4e2f00e11824cc29f928d797783b" + "reference": "608476f4604102976d687c483ac63a79ba18cc97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/626f07a53f4b4e2f00e11824cc29f928d797783b", - "reference": "626f07a53f4b4e2f00e11824cc29f928d797783b", + "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", + "reference": "608476f4604102976d687c483ac63a79ba18cc97", "shasum": "" }, "require": { @@ -8211,7 +8211,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.4" + "source": "https://github.com/symfony/process/tree/v7.4.5" }, "funding": [ { @@ -8231,7 +8231,7 @@ "type": "tidelift" } ], - "time": "2026-01-20T09:23:51+00:00" + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symfony/routing", @@ -12814,12 +12814,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { "php": "^8.3" }, - "platform-dev": {}, - "plugin-api-version": "2.9.0" + "platform-dev": [], + "plugin-api-version": "2.6.0" } 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 a948078a..61e032d4 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 @@ -14,6 +14,7 @@ return new class extends Migration Schema::create('odds_tables', function (Blueprint $table) { $table->id(); $table->string('name'); + $table->string('title'); $table->string('oddnames'); $table->string('fieldnames'); $table->timestamps(); diff --git a/database/seeders/OddsTableSeeder.php b/database/seeders/OddsTableSeeder.php index 03d4dd8b..0b4da4f2 100644 --- a/database/seeders/OddsTableSeeder.php +++ b/database/seeders/OddsTableSeeder.php @@ -12,23 +12,23 @@ class OddsTableSeeder extends Seeder /** * Provoider */ - $sql = "INSERT INTO `odds_tables` (`id`, `name`, `oddnames`, `fieldnames`, `created_at`, `updated_at`) + $sql = "INSERT INTO `odds_tables` (`id`, `name`, `title`, `oddnames`, `fieldnames`, `created_at`, `updated_at`) VALUES - (1, 'odds_2ways', 'h2w,a2w', 'alarm_2w_h2w,alarm_2w_a2w', NULL, NULL), - (2, 'odds_2ways_s1', 'h2w,a2w', 'alarm_2ws1_h2w,alarm_2ws1_a2w', NULL, NULL), - (3, 'odds_3ways', 'h3w,d3w,a3w', 'alarm_3w_h3w,alarm_3w_d3w,alarm_3w_a3w', NULL, NULL), - (4, 'odds_3ways_ht', 'h3w,d3w,a3w', 'alarm_3wht_h3w,alarm_3wht_d3w,alarm_3wht_a3w', NULL, NULL), - (5, 'odds_dc', 'dc1x,dc12,dcx2', 'alarm_dc_dc1x,alarm_dc_dc12,alarm_dc_dcx2', NULL, NULL), - (6, 'odds_dnb', 'dnb1,dnb2', 'alarm_dbn_dnb1,alarm_dbn_dnb2', NULL, NULL), - (7, 'odds_ggng', 'gg,ng', 'alarm_ggng_gg,alarm_ggng_ng', NULL, NULL), - (8, 'odds_points', 'home,away', 'alarm_po_home,alarm_po_away', NULL, NULL), - (9, 'odds_points_ht', 'home,away', 'alarm_poht_home,alarm_poht_away', NULL, NULL), - (10, 'odds_points_q1', 'home,away', 'alarm_poq1_home,alarm_poq1_away', NULL, NULL), - (11, 'odds_totals', 'over,under', 'alarm_to_over,alarm_to_under', NULL, NULL), - (12, 'odds_totals_ht', 'over,under', 'alarm_toht_over,alarm_toht_under', NULL, NULL), - (13, 'odds_totals_q1', 'over,under', 'alarm_toq1_over,alarm_toq1_under', NULL, NULL), - (14, 'odds_tq', 'htq,atq', 'alarm_tq_htq,alarm_tq_atq', NULL, NULL); - "; + (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); + "; DB::unprepared($sql); } diff --git a/resources/views/filament/resources/events/widgets/alarm-widget.blade.php b/resources/views/filament/resources/events/widgets/alarm-widget.blade.php index efdae6df..effe90c3 100644 --- a/resources/views/filament/resources/events/widgets/alarm-widget.blade.php +++ b/resources/views/filament/resources/events/widgets/alarm-widget.blade.php @@ -3,19 +3,19 @@
{{ $title }}
@if ($red) -
{{ $red }}
+
{{ $red }}
@else 0 @endif @if ($yellow) -
{{ $yellow }}
+
{{ $yellow }}
@else 0 @endif @if ($green) -
{{ $green }}
+
{{ $green }}
@else 0 @endif