{% extends 'wfbo/_layout.html.twig' %} {% block wfbo_title %}Event Details{% endblock %} {% block wfbo_content %} {% for flash in app.flashes('success') %} {% endfor %} {% for flash in app.flashes('error') %} {% endfor %}
← Back to Event Management

{{ event.management.name }} — {{ event.eventDate|date('Y-m-d') }}

Arena
{{ event.management.name }}
Event Date
{{ event.eventDate|date('Y-m-d') }}
Video Link
{% if event.videoUrl %} {{ event.videoUrl }} {% else %} — {% endif %}
Status
{% if event.published %} Published {% else %} Draft {% endif %}
{% if not event.published %}
{% else %} 🖥 Live Monitor ↗ {% endif %}
Races ({{ races|length }}) Report Win Rates Puro Bet Types Audit Settlements Top Earners
{% if currentTab == 'races' %}

Races

+ Add Race
{% if races is empty %}

No races added yet.

{% else %} {% for race in races %} {% endfor %}
Race Number Horses Status Actions
{{ race.raceNumber }} {{ horseCountByRaceId[race.id] ?? 0 }} {% if race.open %} Open {% else %} Closed {% endif %}
View {% if race.open and not event.published %}
{% endif %}
{% endif %}
{% endif %} {% if currentTab == 'report' %}

Report

Multi-race bets (Daily Double, Pick 4/5/6, …) are attributed entirely to their last leg's race, not split across every race they cover, so these rows sum to the event Total — the true event net revenue, each bet counted once, test accounts excluded, matching the dashboard.

{% if races is empty %}

No races added yet.

{% else %} {% for race in races %} {% set s = raceStatsByRaceId[race.id] ?? {count: 0, betAmount: '0.00', payout: '0.00', commission: '0.00', revenue: '0.00'} %} {% endfor %}
Race Number Bets Bet Amount Payout Commission Revenue
{{ race.raceNumber }} {{ s.count }} ₱{{ s.betAmount|number_format(2) }} ₱{{ s.payout|number_format(2) }} ₱{{ s.commission|number_format(2) }} ₱{{ s.revenue|number_format(2) }}
Total {{ reportTotals.count }} ₱{{ reportTotals.betAmount|number_format(2) }} ₱{{ reportTotals.payout|number_format(2) }} ₱{{ reportTotals.commission|number_format(2) }} ₱{{ reportTotals.revenue|number_format(2) }}
{% endif %}
{% endif %} {% if currentTab == 'win-rates' %} {% macro wr_cell(c) %} {% if not c.offered %} — {% elseif c.settled == 0 %} No settled bets {% else %} {# Headline = payout % (return to player), coloured from the house's side: red over 100% (house lost), green under 100% (house won), neutral at exactly 100% (breakeven). #} {% set p = c.payoutRate %} {% set tone = p is null ? '' : (p > 100 ? 'wr-cold' : (p < 100 ? 'wr-hot' : '')) %} {% set toneTitle = tone == 'wr-cold' ? 'House lost: paid out more than it took in' : (tone == 'wr-hot' ? 'House won: paid out less than it took in' : '') %}
{{ p is null ? '—' : p|number_format(1) ~ '%' }} payout
Win {{ c.winRate|number_format(1) }}% · {{ c.won }}/{{ c.settled }} won
{% endif %} {% endmacro %}

Win Rates

{% if winRateMatrix is not null and winRateMatrix.columns is not empty and races is not empty %} Export PDF {% endif %}

Payout % (large) = amount paid out ÷ amount staked on settled tickets — red over 100% — the house lost (paid out more than it took in); green under 100% — the house won. Win % = winning tickets ÷ settled tickets (a boxed ticket counts once — won if any combo won). Settled bets only (won + lost), test accounts excluded; multi-race bets count under their last leg's race.

{% if winRateMatrix is null or winRateMatrix.columns is empty or races is empty %}

{{ races is empty ? 'No races added yet.' : 'No bet types offered on this event yet.' }}

{% else %} {% import _self as wr %}
{% for col in winRateMatrix.columns %} {% endfor %} {% for row in winRateMatrix.rows %} {% for col in winRateMatrix.columns %} {% endfor %} {% endfor %} {% for col in winRateMatrix.columns %} {% endfor %}
Race{{ col.label }}All bet types
{{ row.label }}{{ wr.wr_cell(row.cells[col.key]) }}{{ wr.wr_cell(row.all) }}
Total{{ wr.wr_cell(winRateMatrix.totals[col.key]) }}{{ wr.wr_cell(winRateMatrix.grandTotal) }}
{% endif %}
{% endif %} {% if currentTab == 'puro' %} {% set typeLabels = {'pick_4': 'Pick 4', 'pick_5': 'Pick 5', 'pick_6': 'Pick 6', 'wta': 'WTA'} %}

Puro — Pick 4 / 5 / 6 & WTA tickets still alive

Refresh

A ticket is puro while it has hit the winner of every leg run so far. A scratched pick in a finished leg is out. Void bets and test accounts are not counted.

{% if puroCards is empty %}

No Pick 4 / 5 / 6 or WTA offered in this event.

{% endif %} {% for card in puroCards %} {% set id = card.eventBetTypeId %} {% set first = card.legs|first %} {% set last = card.legs|last %}

{{ typeLabels[card.betType] ?? card.betType }} · R{{ first.raceNumber }}–R{{ last.raceNumber }}

{% if card.status == 'finished' %} Finished — {{ card.alive.tickets }} winning ticket{{ card.alive.tickets != 1 ? 's' : '' }} {% elseif card.status == 'running' %} {{ card.completedLegs }} of {{ card.legs|length }} legs run {% else %} Not started {% endif %}
{% for leg in card.legs %} {% if loop.index0 < card.completedLegs %} R{{ leg.raceNumber }} #{{ leg.winnerNumber }} ✓ {% elseif loop.index0 == card.completedLegs %} R{{ leg.raceNumber }} next {% else %} R{{ leg.raceNumber }} {% endif %} {% endfor %}
{{ card.alive.ticketPct|number_format(1) }}% puro
{{ card.alive.tickets|number_format }} of {{ card.total.tickets|number_format }} tickets · {{ card.alive.combos|number_format }} of {{ card.total.combos|number_format }} combos ({{ card.alive.comboPct|number_format(1) }}%) · ₱{{ card.alive.stake|number_format(2) }} of ₱{{ card.total.stake|number_format(2) }} stake · {{ card.alive.players|number_format }} of {{ card.total.players|number_format }} players
{% if card.funnel is not empty %}

After each leg

{% for f in card.funnel %} {% endfor %}
LegTickets puroCombosStakePlayers
After R{{ f.raceNumber }} (#{{ f.winnerNumber }} won) {{ f.ticketPct|number_format(1) }}% {{ f.tickets|number_format }}
{{ f.combos|number_format }} {{ f.comboPct|number_format(1) }}% ₱{{ f.stake|number_format(2) }} {{ f.players|number_format }}
{% endif %} {% if card.nextLeg is not null and card.alive.tickets > 0 %}

Next leg R{{ card.nextLeg.raceNumber }} — horses the puro tickets need

{% for h in card.nextLeg.horses %} {% endfor %}
HorseShare of puro ticketsTicketsCombosStake
#{{ h.number }} {{ h.name }}{% if h.scratched %} scratched{% endif %} {{ h.ticketShare|number_format(1) }}%
{{ h.tickets|number_format }} {{ h.combos|number_format }} ₱{{ h.stake|number_format(2) }}

A boxed ticket can ride several horses, so shares can add up to more than 100%.

{% elseif card.status == 'running' and card.alive.tickets == 0 %}

No ticket is puro anymore.

{% endif %}
{% endfor %} {% endif %} {% if currentTab == 'bet-types' %}

Bet Types

{% if not event.published %}
{% endif %} {% if races is empty %}

Add races first before configuring bet types.

{% else %}

Single-race bets

{% if event.published %}

The event is published: bet types can no longer be added. {% if is_granted('ROLE_SUPER_ADMIN') %}Use × to remove a single-race bet type from a race that has no result yet — every bet of that type on that race is voided and refunded, and it can't be added back.{% endif %}

{% else %}

Tick every race each bet type is offered on. Each is graded off that race alone.

{% endif %}
{% for betType in liveRacingBetTypes|filter(bt => bt.kind == 'single') %} {% set instance = (eventBetTypes[betType.value] ?? [])|first %} {% set legIds = instance ? instance.legs : [] %} {% endfor %}
Bet Type Races Offered On
{{ betType.label }}
{% for race in races %} {% endfor %}

Multi-race bets

Multi-race bets combine races based on the betting rules (e.g. Daily Double = 2 consecutive races; Extra Double = 2 races with one skipped in between; WTA = any races). You can add multiple combos of the same bet type — e.g. two separate Daily Doubles on different race pairs. To remove a combo, uncheck all of its races and save.

{% for betType in liveRacingBetTypes|filter(bt => bt.kind == 'multi') %} {% set instances = eventBetTypes[betType.value] ?? [] %}

{{ betType.label }} — {{ betType.legPatternHint }}

{% for instance in instances %}
{% for race in races %} {% endfor %} {% if not event.published %} {% endif %}
{% endfor %}
{% if not event.published %}

Click "+ Add {{ betType.label }} combo" to configure a combo — click it again to add another before saving.

{% endif %}
{% endfor %} {% endif %} {% if not event.published %}
{% endif %} {% if not event.published %} {% endif %} {% endif %} {% if currentTab == 'earners' %}

Top Earners

Players who won the most on this event, ranked by total payout.

{% if topEarners is empty %}

No winners yet for this event.

{% else %}
{% for earner in topEarners %} {% endfor %}
# Player Won Staked Bets Status
{{ loop.index }} {{ earner.firstName }} {{ earner.lastName }}
{{ earner.mobileNumber }}
₱{{ earner.totalPayout|number_format(2) }} ₱{{ earner.totalStaked|number_format(2) }} {{ earner.betCount }} {% if earner.isOnHold %} On Hold
{% else %} Active
{% endif %}
{% endif %}
{% endif %} {% endblock %}