add Custom Groups
This commit is contained in:
1 parent
c5118a4fd0
commit
6e7ebd7a9e
11 files changed
+216
-14
No files matched your search
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Actions;
|
||||||
|
|
||||||
|
use App\Models\CompetitionGroup;
|
||||||
|
use App\Models\Country;
|
||||||
|
|
||||||
|
class LoadCountryGroups
|
||||||
|
{
|
||||||
|
public static function load()
|
||||||
|
{
|
||||||
|
$res = Country::query()->select('name', 'id')->get();
|
||||||
|
$countries = [];
|
||||||
|
foreach ($res as $value) {
|
||||||
|
$countries[$value->id] = $value->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = CompetitionGroup::where('sport_id', auth()->user()->sport_id)->select('country_id', 'name', 'id')->get();
|
||||||
|
|
||||||
|
$arr = [];
|
||||||
|
foreach ($res as $value) {
|
||||||
|
if (isset($countries[$value->country_id])) {
|
||||||
|
$arr[$value->id] = $countries[$value->country_id].' '.$value->name;
|
||||||
|
} else {
|
||||||
|
$arr[$value->id] = $value->name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
asort($arr);
|
||||||
|
|
||||||
|
return $arr;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ use App\Filament\Tables\Columns\ColumnOdds;
|
|||||||
use App\Filament\Tables\Columns\EventColumn;
|
use App\Filament\Tables\Columns\EventColumn;
|
||||||
use App\Filament\Tables\Columns\MatchIds;
|
use App\Filament\Tables\Columns\MatchIds;
|
||||||
use App\Filament\Tables\Columns\TooltipOdds;
|
use App\Filament\Tables\Columns\TooltipOdds;
|
||||||
|
use App\Models\ClientGroupList;
|
||||||
use App\Models\CompetitionGroup;
|
use App\Models\CompetitionGroup;
|
||||||
use App\Models\Country;
|
use App\Models\Country;
|
||||||
use App\Models\Event;
|
use App\Models\Event;
|
||||||
@@ -180,7 +181,7 @@ class EventsTable
|
|||||||
->extremePaginationLinks()
|
->extremePaginationLinks()
|
||||||
->filters([
|
->filters([
|
||||||
Filter::make('events')
|
Filter::make('events')
|
||||||
->columns(6)->columnSpan(6)
|
->columns(7)->columnSpan(7)
|
||||||
->schema([
|
->schema([
|
||||||
Hidden::make('filter_alarm_green'),
|
Hidden::make('filter_alarm_green'),
|
||||||
Hidden::make('filter_alarm_yellow'),
|
Hidden::make('filter_alarm_yellow'),
|
||||||
@@ -253,6 +254,15 @@ class EventsTable
|
|||||||
return $arr;
|
return $arr;
|
||||||
})
|
})
|
||||||
->live(),
|
->live(),
|
||||||
|
Select::make('client_group_list_id')
|
||||||
|
->placeholder('Custom Groups')
|
||||||
|
->prefixIcon('phosphor-user-list')
|
||||||
|
->searchable()
|
||||||
|
->hiddenLabel()
|
||||||
|
->label('')
|
||||||
|
->preload()
|
||||||
|
->options(fn () => ClientGroupList::where('sport_id', auth()->user()->sport_id)->where('client_id', auth()->user()->client_id)->pluck('name', 'id'))
|
||||||
|
->live(),
|
||||||
|
|
||||||
DateRangePicker::make('starttime_period')
|
DateRangePicker::make('starttime_period')
|
||||||
->columnSpan(2)
|
->columnSpan(2)
|
||||||
@@ -290,6 +300,13 @@ class EventsTable
|
|||||||
)->when(
|
)->when(
|
||||||
$data['competition_group_id'],
|
$data['competition_group_id'],
|
||||||
fn (Builder $query, $competition_group_id) => $query->whereIn('competition_group_id', $competition_group_id)
|
fn (Builder $query, $competition_group_id) => $query->whereIn('competition_group_id', $competition_group_id)
|
||||||
|
|
||||||
|
)->when(
|
||||||
|
$data['client_group_list_id'],
|
||||||
|
function (Builder $query, $client_group_list_id) {
|
||||||
|
$client_group_list_ids = ClientGroupList::where('id', $client_group_list_id)->value('client_groups');
|
||||||
|
$query->whereIn('competition_group_id', $client_group_list_ids);
|
||||||
|
}
|
||||||
)->when(
|
)->when(
|
||||||
$data['starttime_period'],
|
$data['starttime_period'],
|
||||||
function (Builder $query, $starttime_period) {
|
function (Builder $query, $starttime_period) {
|
||||||
@@ -448,6 +465,11 @@ class EventsTable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($data['client_group_list_id'] ?? null) {
|
||||||
|
$client_group_list_name = ClientGroupList::where('id', $data['client_group_list_id'])->value('name');
|
||||||
|
$indicators[] = Indicator::make('Custom Group: '.$client_group_list_name)->removeField('client_group_list_id')->color('info');
|
||||||
|
}
|
||||||
|
|
||||||
if ($data['filter_stars'] ?? null) {
|
if ($data['filter_stars'] ?? null) {
|
||||||
$indicators[] = Indicator::make('Filter Favorits')->removeField('filter_stars')->color('info');
|
$indicators[] = Indicator::make('Filter Favorits')->removeField('filter_stars')->color('info');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Livewire;
|
||||||
|
|
||||||
|
use App\Actions\LoadCountryGroups;
|
||||||
|
use App\Models\ClientGroupList;
|
||||||
|
use App\Models\CompetitionGroup;
|
||||||
|
use Filament\Actions\Concerns\InteractsWithActions;
|
||||||
|
use Filament\Actions\Contracts\HasActions;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Concerns\InteractsWithSchemas;
|
||||||
|
use Filament\Schemas\Contracts\HasSchemas;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Concerns\InteractsWithTable;
|
||||||
|
use Filament\Tables\Contracts\HasTable;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
use Illuminate\Contracts\View\View;
|
||||||
|
use Livewire\Component;
|
||||||
|
|
||||||
|
class ClientGroupListEditor extends Component implements HasActions, HasSchemas, HasTable
|
||||||
|
{
|
||||||
|
use InteractsWithActions;
|
||||||
|
use InteractsWithSchemas;
|
||||||
|
use InteractsWithTable;
|
||||||
|
|
||||||
|
public function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->query(ClientGroupList::query())
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('name'),
|
||||||
|
TextColumn::make('client_groups')
|
||||||
|
->label('Leagues')
|
||||||
|
->badge()
|
||||||
|
->wrap()
|
||||||
|
->color('info')
|
||||||
|
->formatStateUsing(fn (string $state): string => CompetitionGroup::where('id', $state)->pluck('name')->first()),
|
||||||
|
])
|
||||||
|
->filters([
|
||||||
|
// ...
|
||||||
|
])
|
||||||
|
->recordActions([
|
||||||
|
EditAction::make('edit')
|
||||||
|
->iconButton()
|
||||||
|
->mutateDataUsing(function (array $data): array {
|
||||||
|
$data['client_id'] = auth()->user()->client_id;
|
||||||
|
$data['sport_id'] = auth()->user()->sport_id;
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
})
|
||||||
|
->schema([
|
||||||
|
TextInput::make(name: 'name')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
Select::make('client_groups')
|
||||||
|
->searchable()
|
||||||
|
->multiple()
|
||||||
|
->preload()
|
||||||
|
->options(fn () => LoadCountryGroups::load()),
|
||||||
|
])->action(function ($livewire) {
|
||||||
|
$livewire->dispatch('refreshBettypeMenu');
|
||||||
|
}),
|
||||||
|
DeleteAction::make('delete')->iconButton(),
|
||||||
|
])
|
||||||
|
->headerActions([
|
||||||
|
CreateAction::make()
|
||||||
|
->label('New Group')
|
||||||
|
->schema([
|
||||||
|
TextInput::make(name: 'name')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
Select::make('client_groups')
|
||||||
|
->searchable()
|
||||||
|
->options(fn () => LoadCountryGroups::load()),
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render(): View
|
||||||
|
{
|
||||||
|
return view('livewire.client-group-list-editor');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class ClientGroupList extends Model
|
||||||
|
{
|
||||||
|
protected $casts = [
|
||||||
|
'client_groups' => 'json',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'name',
|
||||||
|
'sport_id',
|
||||||
|
'client_id',
|
||||||
|
'client_groups',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function client_group()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(CompetitionGroup::class)->with('country');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,9 +23,4 @@ class CompetitionGroup extends Model
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(Sport::class);
|
return $this->belongsTo(Sport::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function country()
|
|
||||||
{
|
|
||||||
return $this->belongsTo(Country::class)->where('disabled', 0)->where('is_country', 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?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('client_group_lists', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('name');
|
||||||
|
$table->integer('sport_id')->index()->references('id')->on('sports');
|
||||||
|
$table->integer('client_id');
|
||||||
|
$table->text('client_groups')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('client_group_lists');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
draggable="true"
|
draggable="true"
|
||||||
mapper="left">
|
mapper="left">
|
||||||
|
|
||||||
<div class="flex justify-center gap-4 w-full my-calendar">
|
<div class="flex justify-center gap-4 w-full my-calendar font-bold">
|
||||||
<div class="text-lime-500 text-wrap text-right">{{ $record->home->name }}</div>
|
<div class="text-lime-500 text-wrap text-right">{{ $record->home->name }}</div>
|
||||||
<div>-</div>
|
<div>-</div>
|
||||||
<div class="text-sky-500 text-wrap">{{ $record->away->name }}</div>
|
<div class="text-sky-500 text-wrap">{{ $record->away->name }}</div>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
@include('filament.tables.columns.parts.search-right', ['find' => $record->home, 'color' => 'away'])
|
@include('filament.tables.columns.parts.search-right', ['find' => $record->home, 'color' => 'away'])
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-center gap-4 w-full">
|
<div class="flex justify-center gap-4 w-full font-bold">
|
||||||
<div class="text-sky-500 text-wrap text-right">{{ $record->home }}</div>
|
<div class="text-sky-500 text-wrap text-right">{{ $record->home }}</div>
|
||||||
<div>-</div>
|
<div>-</div>
|
||||||
<div class="text-lime-500 text-wrap">{{ $record->away }}</div>
|
<div class="text-lime-500 text-wrap">{{ $record->away }}</div>
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<div>
|
||||||
|
<x-sport-header>
|
||||||
|
{{ auth()->user()->sport->name }} - Custom Groups
|
||||||
|
</x-sport-header>
|
||||||
|
|
||||||
|
{{ $this->table }}
|
||||||
|
</div>
|
||||||
@@ -210,5 +210,15 @@
|
|||||||
@livewire('comparing-bookmaker-menu')
|
@livewire('comparing-bookmaker-menu')
|
||||||
|
|
||||||
</x-filament::modal>
|
</x-filament::modal>
|
||||||
|
|
||||||
|
{{-- Custom Groups --}}
|
||||||
|
<x-filament::modal slide-over width="3xl" :close-by-clicking-away="true" :close-by-escaping="true" :close-button="true">
|
||||||
|
<x-slot name="trigger">
|
||||||
|
<x-filament::icon-button outlined icon="phosphor-user-list" color="gray" class="my-auto"
|
||||||
|
title="Custom Groups">
|
||||||
|
</x-filament::icon-button>
|
||||||
|
</x-slot>
|
||||||
|
@livewire('client-group-list-editor')
|
||||||
|
</x-filament::modal>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@@ -14,12 +14,6 @@ tq shows 0 in odds
|
|||||||
tq filter
|
tq filter
|
||||||
if bkm in compere take from slot
|
if bkm in compere take from slot
|
||||||
|
|
||||||
MAPPER
|
|
||||||
1) add date select
|
|
||||||
2) submit with return
|
|
||||||
3) sort by date
|
|
||||||
4) click on lega for selection
|
|
||||||
4) window bigger
|
|
||||||
|
|
||||||
[PDF]
|
[PDF]
|
||||||
https://txodds.com/docs/TXODDS_TXAPI_Market_Odds_Feed_User_Guide.pdf
|
https://txodds.com/docs/TXODDS_TXAPI_Market_Odds_Feed_User_Guide.pdf
|
||||||
|
|||||||
Reference in new issue
Block a user