mapper wip

This commit is contained in:
salam committed 2025-12-26 12:29:29 +01:00
1 parent 16cc214db6
commit d635ebe563
38 files changed
+98 -680

No files matched your search

@@ -14,6 +14,7 @@ class Fixtures
public static function grap()
{
$debug = Nuh::$options['d'] ?? 0;
$break = Nuh::$options['b'] ?? 0;
$sportmap = Sport::map('bapi');
@@ -76,6 +77,10 @@ class Fixtures
}
}
}
if ($break) {
break;
}
}
}
}
@@ -1,14 +0,0 @@
<?php
namespace App\Filament\Clusters\Settings;
use BackedEnum;
use Filament\Clusters\Cluster;
use Filament\Support\Icons\Heroicon;
class SettingsCluster extends Cluster
{
protected static string|BackedEnum|null $navigationIcon = Heroicon::AdjustmentsHorizontal;
protected static ?int $navigationSort = 2;
}
@@ -1,69 +0,0 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters;
use App\Filament\Clusters\Settings\SettingsCluster;
use App\Filament\Resources\CompetitionGroupFilters\Pages\CreateCompetitionGroupFilter;
use App\Filament\Resources\CompetitionGroupFilters\Pages\EditCompetitionGroupFilter;
use App\Filament\Resources\CompetitionGroupFilters\Pages\ListCompetitionGroupFilters;
use App\Filament\Resources\CompetitionGroupFilters\Schemas\CompetitionGroupFilterForm;
use App\Filament\Resources\CompetitionGroupFilters\Tables\CompetitionGroupFiltersTable;
use App\Models\CompetitionGroupFilter;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use UnitEnum;
class CompetitionGroupFilterResource extends Resource
{
protected static ?string $model = CompetitionGroupFilter::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $cluster = SettingsCluster::class;
protected static string|UnitEnum|null $navigationGroup = 'Filter';
protected static ?string $navigationLabel = 'Comp Group';
protected static ?string $modelLabel = 'Comp Group';
protected static ?string $title = 'Comp Group';
protected static ?string $pluralModelLabel = 'Comp Groups';
public static function form(Schema $schema): Schema
{
return CompetitionGroupFilterForm::configure($schema);
}
public static function table(Table $table): Table
{
return CompetitionGroupFiltersTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListCompetitionGroupFilters::route('/'),
'create' => CreateCompetitionGroupFilter::route('/create'),
'edit' => EditCompetitionGroupFilter::route('/{record}/edit'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -1,11 +0,0 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Pages;
use App\Filament\Resources\CompetitionGroupFilters\CompetitionGroupFilterResource;
use Filament\Resources\Pages\CreateRecord;
class CreateCompetitionGroupFilter extends CreateRecord
{
protected static string $resource = CompetitionGroupFilterResource::class;
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Pages;
use App\Filament\Resources\CompetitionGroupFilters\CompetitionGroupFilterResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditCompetitionGroupFilter extends EditRecord
{
protected static string $resource = CompetitionGroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Pages;
use App\Filament\Resources\CompetitionGroupFilters\CompetitionGroupFilterResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListCompetitionGroupFilters extends ListRecords
{
protected static string $resource = CompetitionGroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -1,16 +0,0 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Schemas;
use Filament\Schemas\Schema;
class CompetitionGroupFilterForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
//
]);
}
}
@@ -1,30 +0,0 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Table;
class CompetitionGroupFiltersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -1,69 +0,0 @@
<?php
namespace App\Filament\Resources\ElementFilters;
use App\Filament\Clusters\Settings\SettingsCluster;
use App\Filament\Resources\ElementFilters\Pages\CreateElementFilter;
use App\Filament\Resources\ElementFilters\Pages\EditElementFilter;
use App\Filament\Resources\ElementFilters\Pages\ListElementFilters;
use App\Filament\Resources\ElementFilters\Schemas\ElementFilterForm;
use App\Filament\Resources\ElementFilters\Tables\ElementFiltersTable;
use App\Models\ElementFilter;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use UnitEnum;
class ElementFilterResource extends Resource
{
protected static ?string $model = ElementFilter::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $cluster = SettingsCluster::class;
protected static string|UnitEnum|null $navigationGroup = 'Filter';
protected static ?string $navigationLabel = 'Element';
protected static ?string $modelLabel = 'Element';
protected static ?string $title = 'Element';
protected static ?string $pluralModelLabel = 'Elements';
public static function form(Schema $schema): Schema
{
return ElementFilterForm::configure($schema);
}
public static function table(Table $table): Table
{
return ElementFiltersTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListElementFilters::route('/'),
'create' => CreateElementFilter::route('/create'),
'edit' => EditElementFilter::route('/{record}/edit'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -1,11 +0,0 @@
<?php
namespace App\Filament\Resources\ElementFilters\Pages;
use App\Filament\Resources\ElementFilters\ElementFilterResource;
use Filament\Resources\Pages\CreateRecord;
class CreateElementFilter extends CreateRecord
{
protected static string $resource = ElementFilterResource::class;
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\ElementFilters\Pages;
use App\Filament\Resources\ElementFilters\ElementFilterResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditElementFilter extends EditRecord
{
protected static string $resource = ElementFilterResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\ElementFilters\Pages;
use App\Filament\Resources\ElementFilters\ElementFilterResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListElementFilters extends ListRecords
{
protected static string $resource = ElementFilterResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -1,16 +0,0 @@
<?php
namespace App\Filament\Resources\ElementFilters\Schemas;
use Filament\Schemas\Schema;
class ElementFilterForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
//
]);
}
}
@@ -1,30 +0,0 @@
<?php
namespace App\Filament\Resources\ElementFilters\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Table;
class ElementFiltersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -46,7 +46,6 @@ class EventResource extends Resource
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()
->where('sport_id', auth()->user()->sport_id)
->where('starttime', '>', Carbon::now())
->count();
}
@@ -54,7 +53,6 @@ class EventResource extends Resource
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->where('starttime', '>', Carbon::now())
->where('sport_id', auth()->user()->sport_id);
->where('starttime', '>', Carbon::now());
}
}
@@ -110,7 +110,7 @@ class EventsTable
public static function load_bettype_settings()
{
self::$bettype_settings = BettypeUser::where('user_id', auth()->user()->id)->where('sport_id', auth()->user()->sport_id)->where('is_active', 1)->pluck('multiline_setting_id')->toArray();
self::$bettype_settings = BettypeUser::where('is_active', 1)->pluck('multiline_setting_id')->toArray();
}
public static function configure(Table $table): Table
@@ -1,64 +0,0 @@
<?php
namespace App\Filament\Resources\GroupFilters;
use App\Filament\Clusters\Settings\SettingsCluster;
use App\Filament\Resources\GroupFilters\Pages\ListGroupFilters;
use App\Filament\Resources\GroupFilters\Schemas\GroupFilterForm;
use App\Filament\Resources\GroupFilters\Tables\GroupFiltersTable;
use App\Models\GroupFilter;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
class GroupFilterResource extends Resource
{
protected static ?string $model = GroupFilter::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $cluster = SettingsCluster::class;
protected static string|\UnitEnum|null $navigationGroup = 'Filter';
protected static ?string $navigationLabel = 'Group';
protected static ?string $modelLabel = 'Group';
protected static ?string $title = 'Group';
protected static ?string $pluralModelLabel = 'Groups';
public static function form(Schema $schema): Schema
{
return GroupFilterForm::configure($schema);
}
public static function table(Table $table): Table
{
return GroupFiltersTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListGroupFilters::route('/'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -1,11 +0,0 @@
<?php
namespace App\Filament\Resources\GroupFilters\Pages;
use App\Filament\Resources\GroupFilters\GroupFilterResource;
use Filament\Resources\Pages\CreateRecord;
class CreateGroupFilter extends CreateRecord
{
protected static string $resource = GroupFilterResource::class;
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\GroupFilters\Pages;
use App\Filament\Resources\GroupFilters\GroupFilterResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditGroupFilter extends EditRecord
{
protected static string $resource = GroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\GroupFilters\Pages;
use App\Filament\Resources\GroupFilters\GroupFilterResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListGroupFilters extends ListRecords
{
protected static string $resource = GroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -1,27 +0,0 @@
<?php
namespace App\Filament\Resources\GroupFilters\Schemas;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class GroupFilterForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
TextInput::make('group_id')
->required()
->numeric(),
TextInput::make('bkm_group_id')
->required()
->numeric(),
TextInput::make('bookmaker_id')
->required()
->numeric(),
TextInput::make('name')
->default(null),
]);
}
}
@@ -1,49 +0,0 @@
<?php
namespace App\Filament\Resources\GroupFilters\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class GroupFiltersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
TextColumn::make('group_id')
->numeric()
->sortable(),
TextColumn::make('bkm_group_id')
->numeric()
->sortable(),
TextColumn::make('bookmaker_id')
->numeric()
->sortable(),
TextColumn::make('name')
->searchable(),
TextColumn::make('created_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
TextColumn::make('updated_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -1,48 +0,0 @@
<?php
namespace App\Filament\Resources\MultilineClients;
use App\Filament\Clusters\Settings\SettingsCluster;
use App\Filament\Resources\MultilineClients\Pages\ListMultilineClients;
use App\Filament\Resources\MultilineClients\Schemas\MultilineClientForm;
use App\Filament\Resources\MultilineClients\Tables\MultilineClientsTable;
use App\Models\MultilineClient;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
class MultilineClientResources extends Resource
{
protected static ?string $model = MultilineClient::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::Bars3;
protected static ?string $cluster = SettingsCluster::class;
// protected static string|\UnitEnum|null $navigationGroup = 'Settings';
protected static ?string $navigationLabel = 'Multiline';
protected static ?string $modelLabel = 'Multiline';
protected static ?string $title = 'Multiline';
public static function form(Schema $schema): Schema
{
return MultilineClientForm::configure($schema);
}
public static function table(Table $table): Table
{
return MultilineClientsTable::configure($table);
}
public static function getPages(): array
{
return [
'index' => ListMultilineClients::route('/'),
];
}
}
@@ -1,11 +0,0 @@
<?php
namespace App\Filament\Resources\MultilineClients\Pages;
use App\Filament\Resources\MultilineClients\MultilineClientResources;
use Filament\Resources\Pages\CreateRecord;
class CreateMultilineClient extends CreateRecord
{
protected static string $resource = MultilineClientResources::class;
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\MultilineClients\Pages;
use App\Filament\Resources\MultilineClients\MultilineClientResources;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditMultilineClient extends EditRecord
{
protected static string $resource = MultilineClientResources::class;
protected function getHeaderActions(): array
{
return [
// DeleteAction::make(),
];
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\MultilineClients\Pages;
use App\Filament\Resources\MultilineClients\MultilineClientResources;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListMultilineClients extends ListRecords
{
protected static string $resource = MultilineClientResources::class;
protected function getHeaderActions(): array
{
return [
// CreateAction::make()->createAnother(false),
];
}
}
@@ -1,36 +0,0 @@
<?php
namespace App\Filament\Resources\MultilineClients\Schemas;
use App\Models\Bettype;
use App\Models\Bookmaker;
use App\Models\Matchpart;
use App\Models\Sport;
use Filament\Forms\Components\Select;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Schema;
class MultilineClientForm
{
public static $bettypes = [1, 2, 3, 4, 16, 2001, 2002, 2021, 3001, 3002, 3021];
public static function configure(Schema $schema): Schema
{
return $schema
->components([
Select::make('sport_id')
->live()
->options(Sport::where('is_active', 1)->pluck('name', 'id'))
->preload(),
Select::make('matchpart_id')
->options(Matchpart::where('is_active', 1)->pluck('name', 'id'))
->preload(),
Select::make('bettype_id')
->options(fn (Get $get) => Bettype::where('sport_id', $get('sport_id'))->whereIn('bettype_id', self::$bettypes)->pluck('name', 'bettype_id')),
Select::make('bookmaker_id')
->options(Bookmaker::where('is_active', 1)->pluck('name', 'txid'))
->preload()
->searchable(),
]);
}
}
+2 -2
View File
@@ -18,7 +18,7 @@ class BettypeToggle extends Component
{
$this->multilines = [];
$res = BettypeUser::with('multiline')->where('user_id', auth()->user()->id)->where('sport_id', auth()->user()->sport_id)->get();
$res = BettypeUser::with('multiline')->get();
foreach ($res as $set) {
$this->multilines[] = [
@@ -37,7 +37,7 @@ class BettypeToggle extends Component
public function toggleBettype($multiline_setting_id)
{
BettypeUser::where('user_id', auth()->user()->id)->where('multiline_setting_id', $multiline_setting_id)->update(['is_active' => DB::raw('!is_active')]);
BettypeUser::where('multiline_setting_id', $multiline_setting_id)->update(['is_active' => DB::raw('!is_active')]);
$this->dispatch('refreshBettypeMenu');
}
+2 -1
View File
@@ -24,7 +24,8 @@ class MapperLeft extends Component implements HasActions, HasSchemas, HasTable
return $table
->query(Event::query())
->columns([
TextColumn::make('name'),
TextColumn::make('home.name')->alignRight(),
TextColumn::make('away.name'),
])
->filters([
// ...
+2 -1
View File
@@ -24,7 +24,8 @@ class MapperRight extends Component implements HasActions, HasSchemas, HasTable
return $table
->query(Mapper::query())
->columns([
TextColumn::make('name'),
TextColumn::make('home')->alignRight(),
TextColumn::make('away'),
])
->filters([
// ...
@@ -1,28 +1,42 @@
<?php
namespace App\Filament\Resources\MultilineClients\Tables;
namespace App\Livewire;
use App\Filament\Tables\Columns\BookmakerIcon;
use App\Models\Bookmaker;
use App\Models\Client;
use App\Models\MultilineClient;
use App\Models\MultilineSetting;
use App\Models\Sport;
use Filament\Actions\Action;
use Filament\Actions\Concerns\InteractsWithActions;
use Filament\Actions\Contracts\HasActions;
use Filament\Forms\Components\Select;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Concerns\InteractsWithSchemas;
use Filament\Schemas\Contracts\HasSchemas;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\SelectColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Filament\Tables\Enums\FiltersLayout;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Livewire\Component;
class MultilineClientsTable
class MultilineBookmaker extends Component implements HasActions, HasSchemas, HasTable
{
public static function configure(Table $table): Table
use InteractsWithActions;
use InteractsWithSchemas;
use InteractsWithTable;
public function table(Table $table): Table
{
return $table
->query(MultilineClient::query())
->paginated(false)
->reorderRecordsTriggerAction(
fn (Action $action, bool $isReordering) => $action
@@ -59,6 +73,7 @@ class MultilineClientsTable
Filter::make('multiline')
->schema([
Select::make('sport_id')
->hiddenLabel()
->label('Sport')
->default(1)
->options(function () {
@@ -68,6 +83,7 @@ class MultilineClientsTable
})
->live(),
Select::make('multiline_setting_id')
->hiddenLabel()
->label('Bettype')
->default(1)
->options(function (Get $get) {
@@ -87,7 +103,11 @@ class MultilineClientsTable
})
->columns(3)->columnSpan(3),
], layout: FiltersLayout::AboveContent)
->hiddenFilterIndicators();
}
public function render(): View
{
return view('livewire.multiline-bookmaker');
}
}
+8
View File
@@ -2,6 +2,8 @@
namespace App\Models;
use App\Models\Scopes\SportScope;
use App\Models\Scopes\UserScope;
use Illuminate\Database\Eloquent\Model;
class BettypeUser extends Model
@@ -13,6 +15,12 @@ class BettypeUser extends Model
'is_active',
];
protected static function booted(): void
{
static::addGlobalScope(new SportScope);
static::addGlobalScope(new UserScope);
}
public function multiline()
{
return $this->hasOne(MultilineSetting::class, 'id', 'multiline_setting_id');
+6
View File
@@ -2,6 +2,7 @@
namespace App\Models;
use App\Models\Scopes\SportScope;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
@@ -23,6 +24,11 @@ class Event extends Model
'away_id',
];
protected static function booted(): void
{
static::addGlobalScope(new SportScope);
}
public function sport()
{
return $this->belongsTo(Sport::class);
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Models\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class SportScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*/
public function apply(Builder $builder, Model $model): void
{
if (auth()->hasUser()) {
$builder->where('sport_id', auth()->user()->sport_id);
}
}
}
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Models\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class UserScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*/
public function apply(Builder $builder, Model $model): void
{
if (auth()->hasUser()) {
$builder->where('user_id', auth()->user()->id);
}
}
}
+3 -1
View File
@@ -2,6 +2,8 @@
declare(strict_types=1);
use App\Filament\Clusters\Administrator\AdministratorCluster;
return [
/*
@@ -18,7 +20,7 @@ return [
'shield_resource' => [
'slug' => 'shield/roles',
'show_model_path' => true,
'cluster' => null,
'cluster' => AdministratorCluster::class,
'tabs' => [
'pages' => true,
'widgets' => true,
@@ -0,0 +1,3 @@
<div>
{{ $this->table }}
</div>
@@ -73,9 +73,7 @@
</x-slot>
{{-- Modal content --}}
<div class="grid grid-cols-2 gap-4">
Multiline Settings Content
</div>
@livewire('multiline-bookmaker')
</x-filament::modal>