where('client_id', auth()->user()->client_id) ->where('sport_id', auth()->user()->sport_id) ->select('bookmaker_id', 'multiline_setting_id') ->orderBy('sort') ->get(); foreach ($res as $value) { self::$multiline_gettype[$value->multiline_setting->table][] = $value->bookmaker_id; } } public static function load_bettype_settings() { $res = BettypeUser::with('multiline_setting') ->orderBy('multiline_setting_id') ->where('is_active', 1) ->get(); foreach ($res as $value) { self::$bettype_settings[] = $value->multiline_setting->table; } } public static function configure(Table $table): Table { self::load_bettype_settings(); self::load_multiline_bookmaker(); return $table ->poll('10s') ->striped() ->deferLoading() ->columns([ IconColumn::make('sport.icon') ->label('') ->grow(false) ->color('primary') ->width(30) ->icon(fn ($record) => $record->sport->icon) ->tooltip(fn ($record) => $record->id) ->visibleFrom('lg'), MatchIds::make('ids')->grow(false)->visibleFrom('xl'), TextColumn::make('starttime') ->label('Start') ->alignCenter() ->dateTime('H:i') ->weight(FontWeight::Bold) ->description(fn ($state): string => Carbon::createFromDate($state)->format('d. M')), TextColumn::make('country.name') ->wrap() ->color('gray') ->label('Event') ->icon(fn ($record) => $record->country->icon) ->description(fn ($record) => $record->competition_group->name), TextColumn::make('home.name') ->wrap() ->searchable() ->alignRight(), TextColumn::make('away.name') ->wrap() ->searchable(), ColumnMl::make('odds_2ways')->bookmakers(self::$multiline_gettype['odds_2ways'] ?? []) ->visible(fn () => in_array('odds_2ways', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->width(225) ->alignCenter() ->label('ML'), ColumnMlS1::make('odds_2ways_s1')->bookmakers(self::$multiline_gettype['odds_2ways'] ?? []) ->visible(fn () => in_array('odds_2ways_s1', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('ML S1'), Column3way::make('odds_3ways')->bookmakers(self::$multiline_gettype['odds_3ways'] ?? []) ->visible(fn () => in_array('odds_3ways', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->width(225) ->alignCenter() ->label('1X2'), Column3wayHt::make('odds_3ways_ht')->bookmakers(self::$multiline_gettype['odds_3ways_ht'] ?? []) ->visible(fn () => in_array('odds_3ways_ht', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('1X2 HT'), ColumnTotal::make('odds_totals')->bookmakers(self::$multiline_gettype['odds_totals'] ?? []) ->visible(fn () => in_array('odds_totals', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('Totals'), ColumnTotalHt::make('odds_totals_ht')->bookmakers(self::$multiline_gettype['odds_totals_ht'] ?? []) ->visible(fn () => in_array('odds_totals_ht', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('Totals HT'), ColumnTotalQ1::make('odds_totals_q1')->bookmakers(self::$multiline_gettype['odds_totals_q1'] ?? []) ->visible(fn () => in_array('odds_totals_q1', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('Totals Q1'), ColumnPoint::make('odds_points')->bookmakers(self::$multiline_gettype['odds_points'] ?? []) ->visible(fn () => in_array('odds_points', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('Points'), ColumnPointQ1::make('odds_points_q1')->bookmakers(self::$multiline_gettype['odds_points_q1'] ?? []) ->visible(fn () => in_array('odds_points_q1', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('Points Q1'), ColumnDc::make('odds_dc')->bookmakers(self::$multiline_gettype['odds_dc'] ?? []) ->visible(fn () => in_array('odds_dc', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(225) ->label('Double Chance'), ColumnDnb::make('odds_dnb')->bookmakers(self::$multiline_gettype['odds_dnb'] ?? []) ->visible(fn () => in_array('odds_dnb', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(190) ->label('Draw No Bet'), ColumnGgng::make('odds_ggng')->bookmakers(self::$multiline_gettype['odds_ggng'] ?? []) ->visible(fn () => in_array('odds_ggng', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(190) ->label('Goal No Goal'), ColumnTq::make('odds_tq')->bookmakers(self::$bettype_settings['odds_tq'] ?? []) ->visible(fn () => in_array('odds_tq', self::$bettype_settings)) ->verticalAlignment(VerticalAlignment::Start) ->alignCenter() ->width(190) ->label('To Qualify'), ])->searchable(['id', 'betsapi_id', 'betradar_id', 'bet365_id', 'bwin_id', 'magnig_id', 'magken_id', 'lognig_id', 'logcol_id']) ->defaultSort('starttime', 'ASC') ->extremePaginationLinks() ->filters([ Filter::make('events') ->schema([ Select::make(name: 'country_id') ->placeholder('Country') ->columnSpan(4) ->hiddenLabel() ->label('') ->searchable() ->preload() ->options(function () { $res = Event::query()->whereDate('starttime', '>', Carbon::now())->groupBy('country_id')->pluck('country_id')->toArray(); return Country::query()->whereIn('id', $res)->pluck('name', 'id'); }) ->live() ->reactive() ->afterStateUpdated(function (callable $set) { $set('competition_group_id', null); }), Select::make('competition_group_id') ->placeholder('League') ->hiddenLabel() ->label('') ->multiple() ->columnSpan(6) ->searchable() ->options(function (Get $get) { if ($get('country_id')) { $res = Event::with('country')->with('competition_group')->where('country_id', $get('country_id'))->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); } else { $res = Event::with('country')->with('competition_group')->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); } $arr = []; foreach ($res as $val) { $arr[$val->competition_group_id] = $val->country?->name.' '.$val->competition_group->name; } asort($arr); return $arr; }) ->live(), DateRangePicker::make('starttime_period') ->columnSpan(8) ->startPrefix('From') ->displayFormat('d M Y') ->minDate(now()) ->hiddenLabel() ->label('') ->live(), Action::make('resetAction') ->hiddenLabel() ->color('primary') ->outlined() ->keyBindings(['esc', 'escape']) ->icon('phosphor-x') ->action(function ($livewire) { $livewire->resetTableFiltersForm(); // Clears all filters $livewire->tableSearch = ''; // Clears the main search bar }), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['country_id'], fn (Builder $query, $country_id) => $query->where('country_id', $country_id) )->when( $data['competition_group_id'], fn (Builder $query, $competition_group_id) => $query->whereIn('competition_group_id', $competition_group_id) )->when( $data['starttime_period'], function (Builder $query, $starttime_period) { if (isset($starttime_period['start']) && isset($starttime_period['end'])) { $from = Carbon::createFromDate($starttime_period['start']); $end = Carbon::createFromDate($starttime_period['end']); return $query ->whereDate('starttime', '>=', $from->format('Y-m-d 00:00:00')) ->whereDate('starttime', '<=', $end->format('Y-m-d 00:00:00')); } elseif (isset($starttime_period['start'])) { $from = Carbon::createFromDate($starttime_period['start']); return $query ->whereDate('starttime', '>=', $from->format('Y-m-d 00:00:00')); } elseif (isset($starttime_period['end'])) { $end = Carbon::createFromDate($starttime_period['end']); return $query ->whereDate('starttime', '<=', $end->format('Y-m-d 00:00:00')); } } ); }) ->columns(19)->columnSpan(19), ], layout: FiltersLayout::AboveContent) ->filtersFormColumns(6) ->deferFilters(false) ->persistFiltersInSession() ->recordActions([ ActionGroup::make([ // EditAction::make(), DeleteAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')), Action::make('txodds_odds') ->label('TxOdds') ->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(), ])->iconButton() ->icon('phosphor-dots-three-vertical'), ])->toolbarActions([ BulkActionGroup::make([ DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')), ]), ]); } }