diff --git a/app/Actions/MultilineGenerator.php b/app/Actions/MultilineGenerator.php deleted file mode 100644 index e0d09b4b..00000000 --- a/app/Actions/MultilineGenerator.php +++ /dev/null @@ -1,8 +0,0 @@ -user()->sport_id) + ->where('client_id', auth()->user()->client_id) + ->where('bettype_id', $bettype_id) + ->where('matchpart_id', $matchpart_id) + ->with('bookmaker') + ->orderBy('sort') + ->get(); + + $multilines = []; + foreach ($slots as $id => $slot) { + $open = true; + foreach ($data as $item) { + if ($slot->bookmaker_id == $item->bookmaker_id) { + $multilines[$id] = $item; + $open = false; + } + } + if ($open) { + $multilines[$id] = $slot; + } + } + + return $multilines; + } +} diff --git a/app/Filament/Resources/Events/EventResource.php b/app/Filament/Resources/Events/EventResource.php index 3b41dea5..73b76af4 100644 --- a/app/Filament/Resources/Events/EventResource.php +++ b/app/Filament/Resources/Events/EventResource.php @@ -6,7 +6,6 @@ use App\Filament\Resources\Events\Pages\ListEvents; use App\Filament\Resources\Events\Schemas\EventForm; use App\Filament\Resources\Events\Tables\EventsTable; use App\Models\Event; -use App\Models\Multiline; use Carbon\Carbon; use Filament\Resources\Resource; use Filament\Schemas\Schema; @@ -27,11 +26,6 @@ class EventResource extends Resource protected static ?string $pluralModelLabel = 'Monitor'; - public static function getPluralModelLabel(): string - { - return ''; - } - public static function form(Schema $schema): Schema { return EventForm::configure($schema); @@ -42,13 +36,6 @@ class EventResource extends Resource return EventsTable::configure($table); } - public static function getRelations(): array - { - return [ - // - ]; - } - public static function getPages(): array { return [ @@ -66,15 +53,7 @@ class EventResource extends Resource public static function getEloquentQuery(): Builder { - // $_bookmaker = Multiline::where('sport_id', auth()->user()->sport_id) - // ->where('client_id', auth()->user()->client_id) - // ->where('bettype_id', 1) - // ->where('matchpart_id', 1) - // ->pluck('bookmaker_id') - // ->toArray(); - return parent::getEloquentQuery() - // ->join('odds_3ways', 'odds_3ways.event_id', '=', 'events.id') ->where('starttime', '>', Carbon::now()) ->where('sport_id', auth()->user()->sport_id); } diff --git a/app/Filament/Resources/Events/Tables/EventsTable.php b/app/Filament/Resources/Events/Tables/EventsTable.php index ddb06ff8..441d4cd9 100644 --- a/app/Filament/Resources/Events/Tables/EventsTable.php +++ b/app/Filament/Resources/Events/Tables/EventsTable.php @@ -5,6 +5,7 @@ namespace App\Filament\Resources\Events\Tables; use App\Filament\Tables\Columns\Odds3Way; use Carbon\Carbon; use Filament\Actions\BulkActionGroup; +use Filament\Actions\DeleteAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Support\Enums\FontWeight; @@ -42,13 +43,14 @@ class EventsTable TextColumn::make('home.name')->alignRight()->searchable(), TextColumn::make('away.name')->searchable(), - Odds3Way::make('odds_3way')->label('Market 1X2'), + Odds3Way::make('odds_3way.bookmaker')->label('1X2'), ]) ->filters([ // ]) ->recordActions([ // EditAction::make(), + DeleteAction::make()->iconButton(), ]) ->toolbarActions([ BulkActionGroup::make([ diff --git a/app/Filament/Resources/Multilines/Pages/EditMultiline.php b/app/Filament/Resources/Multilines/Pages/EditMultiline.php index 2f1003e7..a6292f2c 100644 --- a/app/Filament/Resources/Multilines/Pages/EditMultiline.php +++ b/app/Filament/Resources/Multilines/Pages/EditMultiline.php @@ -13,7 +13,7 @@ class EditMultiline extends EditRecord protected function getHeaderActions(): array { return [ - DeleteAction::make(), + // DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Multilines/Pages/ListMultilines.php b/app/Filament/Resources/Multilines/Pages/ListMultilines.php index d0ae5c06..68cca92e 100644 --- a/app/Filament/Resources/Multilines/Pages/ListMultilines.php +++ b/app/Filament/Resources/Multilines/Pages/ListMultilines.php @@ -13,9 +13,9 @@ class ListMultilines extends ListRecords protected function getHeaderActions(): array { return [ - CreateAction::make() - ->createAnother(false) - ->hidden(! auth()->user()->super_admin), + // CreateAction::make() + // ->createAnother(false) + // ->hidden(! auth()->user()->super_admin), ]; } } diff --git a/app/Filament/Resources/Multilines/Tables/MultilinesTable.php b/app/Filament/Resources/Multilines/Tables/MultilinesTable.php index d3c48660..e74ab520 100644 --- a/app/Filament/Resources/Multilines/Tables/MultilinesTable.php +++ b/app/Filament/Resources/Multilines/Tables/MultilinesTable.php @@ -7,7 +7,10 @@ use Filament\Actions\Action; 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 MultilinesTable { @@ -20,6 +23,7 @@ class MultilinesTable ->label($isReordering ? 'Disable reordering' : 'Enable reordering'), ) ->reorderable('sort') + ->defaultGroup('bettype.name') ->columns([ IconColumn::make('sport.icon') ->label('') @@ -33,16 +37,25 @@ class MultilinesTable TextColumn::make('bookmaker.name'), BookmakerIcon::make('bookmaker.icon')->label('Icon'), ]) + ->defaultSort('sort') + ->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() + ->persistFiltersInSession() ->recordActions([ - EditAction::make() - ->mutateDataUsing(function (array $data): array { - $data['client_id'] = auth()->user()->client_id; + // EditAction::make() + // ->mutateDataUsing(function (array $data): array { + // $data['client_id'] = auth()->user()->client_id; - return $data; - }), + // return $data; + // }), ]); } } diff --git a/app/Filament/Tables/Columns/Odds3Way.php b/app/Filament/Tables/Columns/Odds3Way.php index 8e902c99..55b844dd 100644 --- a/app/Filament/Tables/Columns/Odds3Way.php +++ b/app/Filament/Tables/Columns/Odds3Way.php @@ -2,9 +2,22 @@ namespace App\Filament\Tables\Columns; +use App\Actions\MultilineSlots; use Filament\Tables\Columns\Column; class Odds3Way extends Column { protected string $view = 'filament.tables.columns.odds3-way'; + + protected ?array $multiline; + + public function loadMultiline(&$data) + { + $this->multiline = MultilineSlots::addSlots($data, 1, 1); + } + + public function getMultiline(): ?array + { + return $this->multiline; + } } diff --git a/app/Models/Event.php b/app/Models/Event.php index 94abc53d..085600cd 100644 --- a/app/Models/Event.php +++ b/app/Models/Event.php @@ -52,15 +52,6 @@ class Event extends Model public function odds_3way() { - $_bookmaker = Multiline::where('sport_id', auth()->user()->sport_id) - ->where('client_id', auth()->user()->client_id) - ->where('bettype_id', 1) - ->where('matchpart_id', 1) - ->pluck('bookmaker_id'); - - return $this->hasMany(Odds3way::class, 'event_id', 'id') - ->join('multilines', 'multilines.bookmaker_id', 'odds_3ways.bookmaker_id') - ->orderBy('multilines.sort'); - // return $this->hasMany(Odds3way::class, 'event_id', 'id')->whereIn('bookmaker_id', $_bookmaker); + return $this->hasMany(Odds3way::class, 'event_id', 'id')->with('bookmaker'); } } diff --git a/app/Models/Multiline.php b/app/Models/Multiline.php index ac4c32ab..5304df29 100644 --- a/app/Models/Multiline.php +++ b/app/Models/Multiline.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Scopes\ClientScope; use Illuminate\Database\Eloquent\Model; class Multiline extends Model @@ -34,4 +35,9 @@ class Multiline extends Model { return $this->belongsTo(Bookmaker::class, 'bookmaker_id', 'txid'); } + + protected static function booted(): void + { + static::addGlobalScope(new ClientScope); + } } diff --git a/app/Models/Scopes/ClientScope.php b/app/Models/Scopes/ClientScope.php new file mode 100644 index 00000000..503a3bc5 --- /dev/null +++ b/app/Models/Scopes/ClientScope.php @@ -0,0 +1,20 @@ +hasUser()) { + $builder->where('client_id', auth()->user()->client_id); + } + } +} diff --git a/app/Utilities/BkmIconMap.php b/app/Utilities/BkmIconMap.php index dfe9624d..f718921e 100644 --- a/app/Utilities/BkmIconMap.php +++ b/app/Utilities/BkmIconMap.php @@ -4,10 +4,10 @@ namespace App\Utilities; class BkmIconMap { - public static function get($bookmaker) + public static function get($image) { - if ($bookmaker) { - return asset("storage/bookmaker-icons/$bookmaker->icon.png"); + if ($image) { + return asset("storage/bookmaker-icons/$image.png"); } else { return asset('storage/bookmaker-icons/missing.png'); } diff --git a/app/Utilities/OddsFormatting.php b/app/Utilities/OddsFormatting.php new file mode 100644 index 00000000..d709c2d7 --- /dev/null +++ b/app/Utilities/OddsFormatting.php @@ -0,0 +1,13 @@ +setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::utvoDsmittGErgFU', + '_route' => 'generated::9qxzN4LxsImcAiTa', ), 1 => NULL, 2 => @@ -571,7 +571,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::UKTOkgCt6yIOAG79', + '_route' => 'generated::YrE3dbXP33LwuSFL', ), 1 => NULL, 2 => @@ -610,7 +610,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::qXNgDXoLuA95HjrL', + '_route' => 'generated::uI3Rq0Z4wGl7G9CC', ), 1 => NULL, 2 => @@ -2600,7 +2600,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::utvoDsmittGErgFU' => + 'generated::9qxzN4LxsImcAiTa' => array ( 'methods' => array ( @@ -2612,7 +2612,7 @@ app('router')->setCompiledRoutes( array ( 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', - 'as' => 'generated::utvoDsmittGErgFU', + 'as' => 'generated::9qxzN4LxsImcAiTa', ), 'fallback' => false, 'defaults' => @@ -2628,7 +2628,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::UKTOkgCt6yIOAG79' => + 'generated::YrE3dbXP33LwuSFL' => array ( 'methods' => array ( @@ -2640,7 +2640,7 @@ app('router')->setCompiledRoutes( array ( 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', - 'as' => 'generated::UKTOkgCt6yIOAG79', + 'as' => 'generated::YrE3dbXP33LwuSFL', ), 'fallback' => false, 'defaults' => @@ -2711,7 +2711,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::qXNgDXoLuA95HjrL' => + 'generated::uI3Rq0Z4wGl7G9CC' => array ( 'methods' => array ( @@ -2740,7 +2740,7 @@ app('router')->setCompiledRoutes( \'exception\' => $exception, ]), status: $exception ? 500 : 200); }";s:5:"scope";s:54:"Illuminate\\Foundation\\Configuration\\ApplicationBuilder";s:4:"this";N;s:4:"self";s:32:"0000000000000e030000000000000000";}}', - 'as' => 'generated::qXNgDXoLuA95HjrL', + 'as' => 'generated::uI3Rq0Z4wGl7G9CC', ), 'fallback' => false, 'defaults' => diff --git a/resources/css/filament/admin/theme.css b/resources/css/filament/admin/theme.css index 932171e7..dd193b02 100644 --- a/resources/css/filament/admin/theme.css +++ b/resources/css/filament/admin/theme.css @@ -5,6 +5,10 @@ @source '../../../../resources/views/filament/pages/**/*'; @source '../../../../vendor/awcodes/light-switch/resources/**/*.blade.php'; +button[wire\:click="resetTableFiltersForm"] { + display: none; +} + .oddsbox .bl { border-left: 1px solid #e4e4e7; } @@ -55,11 +59,4 @@ width: 50px; color: #90a1b9; } -} - -/** -BOOKMAKER ICONS -*/ -.b30 { - background-image: url('../book-icons/bet365.png'); } \ No newline at end of file diff --git a/resources/views/filament/tables/columns/odds3-way.blade.php b/resources/views/filament/tables/columns/odds3-way.blade.php index 2d420bb1..f51417af 100644 --- a/resources/views/filament/tables/columns/odds3-way.blade.php +++ b/resources/views/filament/tables/columns/odds3-way.blade.php @@ -1,17 +1,23 @@
- @foreach ($record->odds_3way as $row) -
-
-
{{ number_format($row->h3w, 2) }}
-
{{ number_format($row->d3w, 2) }}
-
{{ number_format($row->a3w, 2) }}
-
{{ $row->margin }}
+ + {{ $loadMultiline($record->odds_3way) }} + + @foreach ($getMultiline() as $row) + @if (isset($row->bookmaker)) +
+
+
{{ OddsFormatting::get($row->h3w, 2) }} 
+
{{ OddsFormatting::get($row->d3w, 2) }} 
+
{{ OddsFormatting::get($row->a3w, 2) }} 
+
{{ OddsFormatting::get($row->margin, 1) }} 
+ @endif @endforeach
diff --git a/storage/app/public/bookmaker-icons/betfair-trans.png b/storage/app/public/bookmaker-icons/betfair-trans.png new file mode 100644 index 00000000..fbdafbcf Binary files /dev/null and b/storage/app/public/bookmaker-icons/betfair-trans.png differ diff --git a/storage/app/public/bookmaker-icons/betfair.png b/storage/app/public/bookmaker-icons/betfair.png index fbdafbcf..426de174 100644 Binary files a/storage/app/public/bookmaker-icons/betfair.png and b/storage/app/public/bookmaker-icons/betfair.png differ diff --git a/storage/app/public/bookmaker-icons/sportingbet.png b/storage/app/public/bookmaker-icons/sportingbet.png index 48464bbd..c72b6d5b 100644 Binary files a/storage/app/public/bookmaker-icons/sportingbet.png and b/storage/app/public/bookmaker-icons/sportingbet.png differ