{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %}
{{ message }}
{% endfor %} {% endif %} {% endwith %}

Fixture Details

← Back to Fixtures
{% if fixture_info.active_matches == fixture_info.total_matches %}
{% else %}
{% endif %} 🔍 Analyze Odds {% if analysis_result and analysis_result.has_sure_bets %} 🔧 Repair Odds 💾 Save as New {% endif %} 🔄 Refresh
{% if analysis_result %}
{% if analysis_result.has_sure_bets %}

⚠️ Sure Bet Conditions Detected!

Found {{ analysis_result.total_issues }} sure bet issue(s) in {{ analysis_result.matches_with_issues }} match(es).

These odds allow players to guarantee a win!

Problematic Matches

{% for issue in analysis_result.issues %}
Match #{{ issue.match_number }} - {{ issue.extraction|title }} Extraction
{{ issue.description }}
Outcomes involved: {{ issue.outcomes_involved|join(', ') }}
Odds: {% for outcome, odds in issue.odds_values.items() %} {{ outcome }}: {{ odds }}{% if not loop.last %}, {% endif %} {% endfor %} {% if issue.guaranteed_profit > 0 %}
Guaranteed profit per 100 bet: {{ "%.2f"|format(issue.guaranteed_profit) }} {% endif %}
{% endfor %} {% else %}

✅ No Sure Bet Conditions Detected

All matches in this fixture have safe odds distribution.

{% endif %} {% if analysis_result.success is defined and analysis_result.success and analysis_result.matches_repaired is defined %}

🔧 Repair Complete

Repaired {{ analysis_result.matches_repaired }} matches ({{ analysis_result.total_repairs }} odds adjusted).

Remaining issues: {{ analysis_result.remaining_issues }}

{% endif %}
{% endif %}
Fixture ID
{{ fixture_info.fixture_id[:8] }}...
Filename
{{ fixture_info.filename }}
Upload Date
{{ fixture_info.upload_date.strftime('%Y-%m-%d %H:%M') if fixture_info.upload_date else 'N/A' }}
Total Matches
{{ fixture_info.total_matches }}
Active Matches
{{ fixture_info.active_matches }}
Status
{% if fixture_info.active_matches == fixture_info.total_matches %} All Active {% elif fixture_info.active_matches > 0 %} Partial {% else %} Inactive {% endif %}

Matches in this Fixture

{% if matches %} {% for match in matches %} {% endfor %}
Match # Fighter 1 Fighter 2 Venue Status ZIP Status Actions
{{ match.match_number }} {{ match.fighter1_township }} {{ match.fighter2_township }} {{ match.venue_kampala_township }} {% if match.active_status %} Active {% else %} Inactive {% endif %} {% if match.zip_upload_status == 'completed' %} Completed {% elif match.zip_upload_status == 'pending' %} Pending {% elif match.zip_upload_status == 'failed' %} Failed {% else %} {{ match.zip_upload_status.title() }} {% endif %}
View Details {% if match.zip_upload_status == 'completed' %} Download ZIP
{% else %}
{% endif %}
0%
{% else %}

No matches found in this fixture.

{% endif %}
{% set matches_without_zip = matches|selectattr('zip_upload_status', 'ne', 'completed')|list %} {% if matches_without_zip %}

Upload ZIP for All Matches

Bulk ZIP Upload

Upload a single ZIP file that will be associated with all {{ matches_without_zip|length }} matches that don't have ZIP files yet.

{{ matches_without_zip|length }}
matches pending
How it works:
  • The same ZIP file will be associated with all matches that don't have one
  • Matches that already have ZIP files will not be affected
  • All affected matches will become active once the upload completes
  • Supports large files up to 2GB with progress tracking
{% endif %} {% if uploads %}

Associated File Uploads

{% for upload in uploads %} {% endfor %}
Filename File Type Size Status Upload Date
{{ upload.original_filename }} {{ upload.file_type.upper() }} {{ "%.1f"|format(upload.file_size / 1024 / 1024) }} MB {% if upload.upload_status == 'completed' %} Completed {% elif upload.upload_status == 'failed' %} Failed {% else %} {{ upload.upload_status.title() }} {% endif %} {{ upload.created_at.strftime('%Y-%m-%d %H:%M') if upload.created_at else 'N/A' }}
{% endif %}