diff --git a/app/Actions/MultilineGenerator.php b/app/Actions/MultilineGenerator.php index c2c202d3..66e55e78 100644 --- a/app/Actions/MultilineGenerator.php +++ b/app/Actions/MultilineGenerator.php @@ -14,6 +14,8 @@ class MultilineGenerator MultilineClient::where('client_id', $client_id)->update(['disabled' => 1]); + $bookmaker = [0, 6, 30, 649, 117]; + foreach ($record->sport as $sportid) { $multilines = MultilineSetting::where('sport_id', $sportid)->get(); @@ -28,6 +30,7 @@ class MultilineGenerator 'sport_id' => $sportid, 'multiline_setting_id' => $multiline->id, 'sort' => $i, + 'bookmaker_id' => $bookmaker[$i], ], [ 'disabled' => 0, diff --git a/app/Actions/MultilineSlots.php b/app/Actions/MultilineSlots.php index 9d33523f..2afdcc47 100644 --- a/app/Actions/MultilineSlots.php +++ b/app/Actions/MultilineSlots.php @@ -6,7 +6,7 @@ use App\Models\MultilineClient; class MultilineSlots { - public static function addSlots(&$data) + public static function loadSlots(&$data) { $slots = MultilineClient::select('bookmaker_id') ->where('multiline_setting_id', auth()->user()->multiline_setting_id) diff --git a/app/Console/Commands/Grapper/TxOdds/Odds.php b/app/Console/Commands/Grapper/TxOdds/Odds.php index dbebf235..105c8504 100644 --- a/app/Console/Commands/Grapper/TxOdds/Odds.php +++ b/app/Console/Commands/Grapper/TxOdds/Odds.php @@ -181,9 +181,9 @@ class Odds foreach ($row->bookmaker as $book) { + NuhBash::$bookmaker_id = (int) $book['bid']; + $odds = []; - $odds['event_id'] = NuhBash::$_event->id; - $odds['bookmaker_id'] = (int) $book['bid']; $odds['sport_id'] = (int) $event['sport_id']; $odds['provider_id'] = 2; @@ -240,7 +240,7 @@ class Odds EventBookmaker::updateOrCreate([ 'event_id' => NuhBash::$_event->id, - 'bookmaker_id' => $odds['bookmaker_id'], + 'bookmaker_id' => NuhBash::$bookmaker_id, ], [ 'bmoid' => $value['bmoid'], 'provider_id' => 2, @@ -252,7 +252,7 @@ class Odds } if ($debug) { - Notice::note('END', 'g', 1); + Notice::note('END '.NuhBash::$_event->id, 'g'); } } } diff --git a/app/Console/Commands/Grapper/TxOdds/Odds/_3Way.php b/app/Console/Commands/Grapper/TxOdds/Odds/_3Way.php index 66c6b405..d1c27b35 100644 --- a/app/Console/Commands/Grapper/TxOdds/Odds/_3Way.php +++ b/app/Console/Commands/Grapper/TxOdds/Odds/_3Way.php @@ -12,11 +12,10 @@ class _3Way { public static function grap($odds, $offer) { - $debug = NuhBash::$options['d'] ?? 0; if ($debug) { - Notice::note('1X2 '.$odds['bookmaker_id'], 'b'); + Notice::note('1X2 '.NuhBash::$bookmaker_id, 'b'); } $update_array = []; @@ -35,12 +34,17 @@ class _3Way ]; $update_array['bmoid'] = $odds['bmoid']; + $update_array['sport_id'] = $odds['sport_id']; $update_array['offer_id'] = $odds['offer_id']; $update_array['flag'] = 1; + $update_array['provider_id'] = $odds['provider_id']; $update_array['nuh_check'] = 0; $update_array['last_check_at'] = Carbon::now()->toDateTimeString(); $update_array['source_updated_at'] = $odds['source_updated_at']; - Odds3way::updateOrCreate($odds, $update_array); + Odds3way::updateOrCreate([ + 'event_id' => NuhBash::$_event->id, + 'bookmaker_id' => NuhBash::$bookmaker_id, + ], $update_array); } } diff --git a/app/Console/Commands/Grapper/TxOdds/Odds/_Dc.php b/app/Console/Commands/Grapper/TxOdds/Odds/_Dc.php index e837ed9e..2a9b31f0 100644 --- a/app/Console/Commands/Grapper/TxOdds/Odds/_Dc.php +++ b/app/Console/Commands/Grapper/TxOdds/Odds/_Dc.php @@ -15,7 +15,7 @@ class _Dc $debug = NuhBash::$options['d'] ?? 0; if ($debug) { - Notice::note('Double Chance '.$odds['bookmaker_id'], 'b'); + Notice::note('Double Chance '.NuhBash::$bookmaker_id, 'b'); } $update_array = []; @@ -27,12 +27,17 @@ class _Dc $update_array['margin'] = (float) Margin::calculate($update_array, 1); $update_array['bmoid'] = $odds['bmoid']; + $update_array['sport_id'] = $odds['sport_id']; $update_array['offer_id'] = $odds['offer_id']; $update_array['flag'] = 1; + $update_array['provider_id'] = $odds['provider_id']; $update_array['nuh_check'] = 0; $update_array['last_check_at'] = Carbon::now()->toDateTimeString(); $update_array['source_updated_at'] = $odds['source_updated_at']; - OddsDc::updateOrCreate($odds, $update_array); + OddsDc::updateOrCreate([ + 'event_id' => NuhBash::$_event->id, + 'bookmaker_id' => NuhBash::$bookmaker_id, + ], $update_array); } } diff --git a/app/Console/Commands/Grapper/TxOdds/Odds/_Dnb.php b/app/Console/Commands/Grapper/TxOdds/Odds/_Dnb.php index 9049da16..fafeec78 100644 --- a/app/Console/Commands/Grapper/TxOdds/Odds/_Dnb.php +++ b/app/Console/Commands/Grapper/TxOdds/Odds/_Dnb.php @@ -15,7 +15,7 @@ class _Dnb $debug = NuhBash::$options['d'] ?? 0; if ($debug) { - Notice::note('Draw No Bet '.$odds['bookmaker_id'], 'b'); + Notice::note('Draw No Bet '.NuhBash::$bookmaker_id, 'b'); } $update_array = []; @@ -26,12 +26,17 @@ class _Dnb $update_array['margin'] = (float) Margin::calculate($update_array, 1); $update_array['bmoid'] = $odds['bmoid']; + $update_array['sport_id'] = $odds['sport_id']; $update_array['offer_id'] = $odds['offer_id']; $update_array['flag'] = 1; + $update_array['provider_id'] = $odds['provider_id']; $update_array['nuh_check'] = 0; $update_array['last_check_at'] = Carbon::now()->toDateTimeString(); $update_array['source_updated_at'] = $odds['source_updated_at']; - OddsDnb::updateOrCreate($odds, $update_array); + OddsDnb::updateOrCreate([ + 'event_id' => NuhBash::$_event->id, + 'bookmaker_id' => NuhBash::$bookmaker_id, + ], $update_array); } } diff --git a/app/Console/Commands/Grapper/TxOdds/Odds/_Ggng.php b/app/Console/Commands/Grapper/TxOdds/Odds/_Ggng.php index acffaf3b..a9d840b3 100644 --- a/app/Console/Commands/Grapper/TxOdds/Odds/_Ggng.php +++ b/app/Console/Commands/Grapper/TxOdds/Odds/_Ggng.php @@ -15,7 +15,7 @@ class _Ggng $debug = NuhBash::$options['d'] ?? 0; if ($debug) { - Notice::note('Goal No Goal '.$odds['bookmaker_id'], 'b'); + Notice::note('Goal No Goal '.NuhBash::$bookmaker_id, 'b'); } $update_array = []; @@ -26,12 +26,17 @@ class _Ggng $update_array['margin'] = (float) Margin::calculate($update_array, 1); $update_array['bmoid'] = $odds['bmoid']; + $update_array['sport_id'] = $odds['sport_id']; $update_array['offer_id'] = $odds['offer_id']; $update_array['flag'] = 1; + $update_array['provider_id'] = $odds['provider_id']; $update_array['nuh_check'] = 0; $update_array['last_check_at'] = Carbon::now()->toDateTimeString(); $update_array['source_updated_at'] = $odds['source_updated_at']; - OddsGgng::updateOrCreate($odds, $update_array); + OddsGgng::updateOrCreate([ + 'event_id' => NuhBash::$_event->id, + 'bookmaker_id' => NuhBash::$bookmaker_id, + ], $update_array); } } diff --git a/app/Console/Commands/Grapper/TxOdds/Odds/_Totals.php b/app/Console/Commands/Grapper/TxOdds/Odds/_Totals.php index dedadc23..e641b7bf 100644 --- a/app/Console/Commands/Grapper/TxOdds/Odds/_Totals.php +++ b/app/Console/Commands/Grapper/TxOdds/Odds/_Totals.php @@ -15,7 +15,7 @@ class _Totals $debug = NuhBash::$options['d'] ?? 0; if ($debug) { - Notice::note('Totals '.$odds['bookmaker_id'], 'b'); + Notice::note('Totals '.NuhBash::$bookmaker_id, 'b'); } $update_array = []; @@ -35,12 +35,17 @@ class _Totals $update_array['margin'] = (float) Margin::calculate([$update_array['over'], $update_array['under']], 1); $update_array['bmoid'] = $odds['bmoid']; + $update_array['sport_id'] = $odds['sport_id']; $update_array['offer_id'] = $odds['offer_id']; $update_array['flag'] = 1; + $update_array['provider_id'] = $odds['provider_id']; $update_array['nuh_check'] = 0; $update_array['last_check_at'] = Carbon::now()->toDateTimeString(); $update_array['source_updated_at'] = $odds['source_updated_at']; - OddsTotal::updateOrCreate($odds, $update_array); + OddsTotal::updateOrCreate([ + 'event_id' => NuhBash::$_event->id, + 'bookmaker_id' => NuhBash::$bookmaker_id, + ], $update_array); } } diff --git a/app/Console/Commands/Grapper/TxOdds/Odds/_Tq.php b/app/Console/Commands/Grapper/TxOdds/Odds/_Tq.php index 49bb301c..8a0ab12e 100644 --- a/app/Console/Commands/Grapper/TxOdds/Odds/_Tq.php +++ b/app/Console/Commands/Grapper/TxOdds/Odds/_Tq.php @@ -15,7 +15,7 @@ class _Tq $debug = NuhBash::$options['d'] ?? 0; if ($debug) { - Notice::note('To Qualify '.$odds['bookmaker_id'], 'b'); + Notice::note('To Qualify '.NuhBash::$bookmaker_id, 'b'); } $update_array = []; @@ -26,12 +26,17 @@ class _Tq $update_array['margin'] = (float) Margin::calculate($update_array, 1); $update_array['bmoid'] = $odds['bmoid']; + $update_array['sport_id'] = $odds['sport_id']; $update_array['offer_id'] = $odds['offer_id']; $update_array['flag'] = 1; + $update_array['provider_id'] = $odds['provider_id']; $update_array['nuh_check'] = 0; $update_array['last_check_at'] = Carbon::now()->toDateTimeString(); $update_array['source_updated_at'] = $odds['source_updated_at']; - OddsQualify::updateOrCreate($odds, $update_array); + OddsQualify::updateOrCreate([ + 'event_id' => NuhBash::$_event->id, + 'bookmaker_id' => NuhBash::$bookmaker_id, + ], $update_array); } } diff --git a/app/Console/Commands/NuhBash.php b/app/Console/Commands/NuhBash.php index 8df6780c..0a726166 100644 --- a/app/Console/Commands/NuhBash.php +++ b/app/Console/Commands/NuhBash.php @@ -17,6 +17,8 @@ class NuhBash extends Command public static $_event_bookmaker; + public static $bookmaker_id; + public static $AUTHTOKEN; public static $BETSAPI_TOKEN = '36152-aeTRNnZxSPUwGe'; diff --git a/app/Filament/Resources/Events/Tables/EventsTable.php b/app/Filament/Resources/Events/Tables/EventsTable.php index 9d48194a..ef727993 100644 --- a/app/Filament/Resources/Events/Tables/EventsTable.php +++ b/app/Filament/Resources/Events/Tables/EventsTable.php @@ -2,8 +2,7 @@ namespace App\Filament\Resources\Events\Tables; -use App\Filament\Tables\Columns\Odds3Way; -use App\Filament\Tables\Columns\OddsTotals; +use App\Filament\Tables\Columns\MultilineClient; use Carbon\Carbon; use Filament\Actions\DeleteAction; use Filament\Actions\EditAction; @@ -27,7 +26,8 @@ class EventsTable ->size(IconSize::ExtraLarge) ->icon(fn ($record) => $record->sport->icon) ->tooltip(fn ($record) => $record->id), - TextColumn::make('txodds_id')->label('Match Id')->badge()->copyable()->searchable(), + // TextColumn::make('id'), + TextColumn::make('txodds_id')->label('Id')->badge()->copyable()->searchable(), TextColumn::make('starttime') ->label('Start') ->alignCenter() @@ -42,8 +42,8 @@ class EventsTable TextColumn::make('home.name')->alignRight()->searchable(), TextColumn::make('away.name')->searchable(), - Odds3Way::make('odds_3way.bookmaker')->label('1X2')->visible(auth()->user()->multiline_setting_id == 1), - OddsTotals::make('odds_totals.bookmaker')->label('Totals')->visible(auth()->user()->multiline_setting_id == 6), + MultilineClient::make('id')->label(fn ($record) => view('filament.tables.columns.multiline-labels')), + ]) ->defaultSort('starttime', 'ASC') ->deferFilters(false) diff --git a/app/Filament/Tables/Columns/MultilineClient.php b/app/Filament/Tables/Columns/MultilineClient.php new file mode 100644 index 00000000..98680f51 --- /dev/null +++ b/app/Filament/Tables/Columns/MultilineClient.php @@ -0,0 +1,113 @@ +settings = MultilineSetting::where('id', auth()->user()->multiline_setting_id)->select('table', 'has_3_columns')->first()->toArray(); + + $odds = DB::table($this->settings['table'])->where('event_id', $event_id)->get(); + + $this->makeSlots($odds, $bookmakers); + + } + + public function has3Columns(): ?int + { + return $this->settings['has_3_columns']; + } + + public function getSlots(): ?array + { + return $this->slots; + } + + public function makeSlots(&$odds, $bookmakers) + { + + $multilines = []; + + foreach ($bookmakers as $slot => $bookmaker) { + + $open = true; + + foreach ($odds as $item) { + if ($item->bookmaker_id == $bookmaker->bookmaker_id) { + $item->icon = $bookmaker->bookmaker->icon; + $item->table = $this->settings['table']; + switch ($this->settings['table']) { + case 'odds_2ways': + case 'odds_2ways_s1': + $item->a = $item->h3w; + $item->c = $item->a3w; + break; + case 'odds_3ways': + $item->a = $item->h3w; + $item->b = $item->d3w; + $item->c = $item->a3w; + break; + case 'odds_dc': + $item->a = $item->dc1x; + $item->b = $item->dc12; + $item->c = $item->dc2x; + break; + case 'odds_dnb': + $item->a = $item->dnb1; + $item->c = $item->dnb2; + break; + case 'odds_ggng': + $item->a = $item->gg; + $item->c = $item->ng; + break; + case 'odds_handicaps': + case 'odds_handicaps_q1': + $item->a = $item->home; + $item->b = $item->away; + $item->c = $item->handicap; + break; + case 'odds_qualify': + $item->a = $item->htq; + $item->c = $item->atq; + break; + case 'odds_totals': + case 'odds_totals_q1': + $item->a = $item->over; + $item->b = $item->under; + $item->c = $item->total; + break; + default: + // code... + break; + } + $multilines[$slot] = $item; + $open = false; + } + } + if ($open) { + $item = new stdClass; + $item->bookmaker_id = $bookmaker->bookmaker_id; + $item->icon = $bookmaker->bookmaker->icon; + $item->a = 0; + $item->b = 0; + $item->c = 0; + $item->marging = 0; + $multilines[$slot] = $item; + } + } + + $this->slots = $multilines; + } +} diff --git a/app/Filament/Tables/Columns/Odds3Way.php b/app/Filament/Tables/Columns/Odds3Way.php deleted file mode 100644 index 6b81fdc0..00000000 --- a/app/Filament/Tables/Columns/Odds3Way.php +++ /dev/null @@ -1,23 +0,0 @@ -slots = MultilineSlots::addSlots($data); - } - - public function getSlots(): ?array - { - return $this->slots; - } -} diff --git a/app/Filament/Tables/Columns/OddsTotals.php b/app/Filament/Tables/Columns/OddsTotals.php deleted file mode 100644 index a44fc9fd..00000000 --- a/app/Filament/Tables/Columns/OddsTotals.php +++ /dev/null @@ -1,23 +0,0 @@ -slots = MultilineSlots::addSlots($data); - } - - public function getSlots(): ?array - { - return $this->slots; - } -} diff --git a/app/Models/Event.php b/app/Models/Event.php index 677e3a32..8b3964e2 100644 --- a/app/Models/Event.php +++ b/app/Models/Event.php @@ -50,13 +50,8 @@ class Event extends Model return $this->hasOne(Element::class, 'txodds_id', 'away_id'); } - public function odds_3way() + public function multiline_client() { - return $this->hasMany(Odds3way::class, 'event_id', 'id')->with('bookmaker'); - } - - public function odds_totals() - { - return $this->hasMany(OddsTotal::class, 'event_id', 'id')->with('bookmaker'); + return $this->hasMany(MultilineClient::class, 'sport_id', 'sport_id')->with('bookmaker')->where('multiline_setting_id', auth()->user()->multiline_setting_id)->orderBy('sort'); } } diff --git a/app/Models/OddsTotal.php b/app/Models/OddsTotal.php index f9467c2b..c9d543e0 100644 --- a/app/Models/OddsTotal.php +++ b/app/Models/OddsTotal.php @@ -35,7 +35,7 @@ class OddsTotal extends Model public function bookmaker() { - return $this->belongsTo(Bookmaker::class); + return $this->belongsTo(Bookmaker::class, 'bookmaker_id', 'txid'); } public function event() diff --git a/app/Utilities/Margin.php b/app/Utilities/Margin.php index 494a002c..0a60b486 100644 --- a/app/Utilities/Margin.php +++ b/app/Utilities/Margin.php @@ -10,7 +10,8 @@ class Margin return false; } $r = 0; - foreach ($arr as $key => $value) { + foreach ($arr as $value) { + $value = $value < 1 ? 1 : $value; $r += 100 / $value; } diff --git a/database/migrations/2025_12_14_090816_create_multiline_settings_table.php b/database/migrations/2025_12_14_090816_create_multiline_settings_table.php index 84e5089c..eb3cb765 100644 --- a/database/migrations/2025_12_14_090816_create_multiline_settings_table.php +++ b/database/migrations/2025_12_14_090816_create_multiline_settings_table.php @@ -18,6 +18,7 @@ return new class extends Migration $table->string('short'); $table->string('table'); $table->integer('rows')->default(4); + $table->integer('has_3_columns')->default(0); $table->timestamps(); }); } diff --git a/database/seeders/BookmakerSeeder.php b/database/seeders/BookmakerSeeder.php index eaf2c2ce..21f8221a 100644 --- a/database/seeders/BookmakerSeeder.php +++ b/database/seeders/BookmakerSeeder.php @@ -26,7 +26,7 @@ class BookmakerSeeder extends Seeder ('15', 'TitanBet', 'titanbet', '15', '1000', '0', '0', '2', '0', '0', '0', '1', NULL, NULL), ('16', 'DafaBet', 'dafabet', '16', '1000', '0', '0', '2', '0', '0', '0', '1', NULL, NULL), ('17', 'BetVictor', 'betvictor', '17', '1000', '0', '0', '2', '0', '0', '0', '1', NULL, NULL), - ('18', '1XBet', '1xbet', '18', '1000', '0', '0', '2', '0', '0', '0', '0', NULL, NULL), + ('18', '1XBet', '1xbet', '18', '649', '0', '0', '2', '0', '1', '2', '0', NULL, NULL), ('19', 'Expekt', 'expekt', '0', '5', '1', '1', '1', '0', '1', '0', '0', NULL, NULL), ('20', 'Magloo Nigeria', 'magloo-nig', '0', '10', '0', '0', '1', '0', '1', '0', '0', NULL, '2025-08-23 10:19:02'), ('21', 'Sportingbet', 'sportingbet', '0', '13', '1', '1', '1', '0', '1', '0', '0', NULL, NULL), diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 140965b1..a7990622 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -21,6 +21,7 @@ class DatabaseSeeder extends Seeder SupervisorSeeder::class, BettypeSeeder::class, MultilineSettingSeeder::class, + MultilineClientsSeeder::class, ]); } } diff --git a/database/seeders/MultilineClientsSeeder.php b/database/seeders/MultilineClientsSeeder.php new file mode 100644 index 00000000..01588814 --- /dev/null +++ b/database/seeders/MultilineClientsSeeder.php @@ -0,0 +1,137 @@ +multiline_client); +@endphp + +@if ($has3Columns()) +