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) && (int) $ledger->game_win_loss > 0) { $playerId = (int) $ledger->player_id; $row = DB::table('player_credit_accounts')->where('player_id', $playerId)->first(); if ($row !== null) { $deltaMinor = (int) $ledger->game_win_loss; $deltaMajor = CreditAmountScale::minorToMajor( $deltaMinor, (string) $player->default_currency, ); DB::table('player_credit_accounts') ->where('player_id', $playerId) ->update([ 'used_credit' => max(0, (int) $row->used_credit - $deltaMajor), 'updated_at' => $settledAt, ]); } } }); } }