where('ticket_item_id', $item->id)->whereNull('reversal_of_id')->first(); if ($ledger === null) { return; } $settledAt = now(); DB::transaction(function () use ($item, $ledger, $settledAt): void { DB::table('share_ledger')->insert([ 'ticket_item_id' => $item->id, 'player_id' => $ledger->player_id, 'agent_node_id' => $ledger->agent_node_id, 'agent_path' => $ledger->agent_path, 'share_snapshot' => $ledger->share_snapshot, 'game_win_loss' => -1 * (int) $ledger->game_win_loss, 'basic_rebate' => -1 * (int) $ledger->basic_rebate, 'shared_net_win_loss' => -1 * (int) $ledger->shared_net_win_loss, 'allocations_json' => $ledger->allocations_json, 'reversal_of_id' => $ledger->id, 'settled_at' => $settledAt, 'created_at' => $settledAt, 'updated_at' => $settledAt, ]); $rebates = DB::table('rebate_records') ->where('ticket_item_id', $item->id) ->where('status', 'accrued') ->get(); foreach ($rebates as $rebate) { DB::table('rebate_records')->insert([ 'player_id' => $rebate->player_id, 'ticket_item_id' => $item->id, 'game_type' => $rebate->game_type, 'valid_bet_amount' => $rebate->valid_bet_amount, 'rebate_rate' => $rebate->rebate_rate, 'rebate_amount' => -1 * (int) $rebate->rebate_amount, 'rebate_type' => $rebate->rebate_type, 'owner_agent_id' => $rebate->owner_agent_id, 'status' => 'reversed', 'reversal_of_id' => $rebate->id, 'created_at' => $settledAt, 'updated_at' => $settledAt, ]); DB::table('rebate_records')->where('id', $rebate->id)->update(['status' => 'reversed']); } $player = Player::query()->find((int) $ledger->player_id); if ($player !== null && PlayerFundingMode::usesCredit($player)) { $gameWinLoss = (int) $ledger->game_win_loss; if ($gameWinLoss !== 0) { $this->playerCreditService->reverseGameSettlement($player, $gameWinLoss, $item->id); } } }); } }