{% extends "django_program/manage/base.html" %}
{% block title %}Financial Overview{% endblock %}
{% block page_title %}
Financial Overview
Revenue, orders, payments, and ticket sales for {{ conference.name }}
{% endblock %}
{% block page_actions %}
View All Orders
{% endblock %}
{% block content %}
{% include "django_program/manage/charts/_chart_utils.html" %}
${{ revenue.net|floatformat:2 }}
Net Revenue
{% if revenue.refunded %}
${{ revenue.total|floatformat:2 }} gross
{% endif %}
{{ total_orders }}
Total Orders
{% if orders_by_status.paid.count %}
{{ orders_by_status.paid.count }} paid
{% endif %}
{{ carts_by_status.active }}
Active Carts
${{ revenue.credits_outstanding|floatformat:2 }}
Credits Outstanding
{% if revenue.credits_applied %}
${{ revenue.credits_applied|floatformat:2 }} applied
{% endif %}
{% include "django_program/manage/charts/_revenue_bar.html" with chart_data=chart_sales_json %}
{% include "django_program/manage/charts/_ticket_inventory.html" with chart_data=chart_tickets_json %}
{% include "django_program/manage/charts/_order_status.html" with chart_data=chart_orders_json %}
{% include "django_program/manage/charts/_payment_methods.html" with chart_data=chart_payments_json %}
{# Row 3: AOV + Revenue by type #}
{% include "django_program/manage/charts/_aov_line.html" with chart_data=chart_aov_json %}
{% include "django_program/manage/charts/_revenue_stacked.html" with chart_data=chart_rev_by_type_json %}
{# Row 4: Waterfall + Cumulative #}
{% include "django_program/manage/charts/_waterfall.html" with chart_data=chart_waterfall_json %}
{% include "django_program/manage/charts/_cumulative_revenue.html" with chart_data=chart_cumulative_json %}
{# Row 5: Discount impact + Refund gauge #}
{% include "django_program/manage/charts/_discount_impact.html" with chart_data=chart_discount_json %}
{% include "django_program/manage/charts/_refund_gauge.html" with chart_data=chart_refund_json %}
{# Row 6: Stripe fees + Budget gauge #}
{% if chart_stripe_json %}
{% include "django_program/manage/charts/_stripe_fees.html" with chart_data=chart_stripe_json %}
{% if chart_budget_json %}
{% include "django_program/manage/charts/_budget_gauge.html" with chart_data=chart_budget_json %}
{% endif %}
{% endif %}
{% if roi %}
${{ roi.total_expenses|floatformat:0 }}
Total Expenses
${{ roi.gross_profit|floatformat:0 }}
Gross Profit
{{ roi.gross_margin_pct|floatformat:1 }}%
Gross Margin
Target: 30-50%
{{ roi.roi_pct|floatformat:1 }}%
Event ROI
${{ roi.cost_per_attendee|floatformat:0 }}
Cost / Attendee
{% endif %}
{% if expense_summary.by_category %}
Expense Budget vs. Actual
| Category |
Budget |
Actual |
Variance |
Expenses |
Progress |
{% for cat in expense_summary.by_category %}
| {{ cat.name }} |
{% if cat.budget %}${{ cat.budget|floatformat:0 }}{% else %}--{% endif %} |
${{ cat.actual|floatformat:0 }} |
{% if cat.variance != None %}
{% if cat.variance >= 0 %}+{% endif %}${{ cat.variance|floatformat:0 }}
{% else %}--{% endif %}
|
{{ cat.expense_count }} |
{% if cat.budget %}
{% widthratio cat.actual cat.budget 100 as pct %}
{% endif %}
|
{% endfor %}
| Total |
${{ expense_summary.total_budget|floatformat:0 }} |
${{ expense_summary.total_expenses|floatformat:0 }} |
{% if expense_summary.budget_variance >= 0 %}+{% endif %}${{ expense_summary.budget_variance|floatformat:0 }}
|
{{ expense_summary.expense_count }} |
|
{% endif %}
Orders by Status
| Status |
Count |
{% for status, data in orders_by_status.items %}
|
{% if status == "paid" %}
Paid
{% elif status == "pending" %}
Pending
{% elif status == "refunded" %}
Refunded
{% elif status == "partially_refunded" %}
Partial Refund
{% elif status == "cancelled" %}
Cancelled
{% else %}
{{ status }}
{% endif %}
|
{{ data.count }} |
{% endfor %}
Carts by Status
| Status |
Count |
| Active |
{{ carts_by_status.active }} |
| Checked Out |
{{ carts_by_status.checked_out }} |
| Expired |
{{ carts_by_status.expired }} |
| Abandoned |
{{ carts_by_status.abandoned }} |
Payments by Method
{% if total_payments %}
| Method |
Count |
Total Amount |
{% for method, data in payments_by_method.items %}
| {{ data.label }} |
{{ data.count }} |
${{ data.total_amount|floatformat:2 }} |
{% endfor %}
{% else %}
{% endif %}
Ticket Type Sales
{% if ticket_sales %}
| Ticket Type |
Price |
Sold |
Remaining |
Revenue |
{% for ticket in ticket_sales %}
| {{ ticket.name }} |
${{ ticket.price }} |
{{ ticket.sold_count }} |
{% if ticket.total_quantity == 0 %}
∞
{% else %}
{{ ticket.remaining_quantity|default:"--" }}
{% endif %}
|
${{ ticket.ticket_revenue|default:"0.00" }} |
{% endfor %}
{% else %}
No ticket types configured for this conference.
{% endif %}
Recent Orders
{% if recent_orders %}
| Reference |
User |
Status |
Total |
Date |
{% for order in recent_orders %}
| {{ order.reference }} |
{{ order.user.email|default:order.user.username }} |
{% if order.status == "paid" %}
Paid
{% elif order.status == "pending" %}
Pending
{% elif order.status == "refunded" %}
Refunded
{% elif order.status == "partially_refunded" %}
Partial Refund
{% elif order.status == "cancelled" %}
Cancelled
{% endif %}
|
${{ order.total }} |
{{ order.created_at|date:"M j, Y" }} |
{% endfor %}
{% else %}
No orders yet for this conference.
{% endif %}
Active Carts
{% if active_carts %}
| User |
Items |
Created |
Expires |
{% for cart in active_carts %}
| {{ cart.user.email|default:cart.user.username }} |
{{ cart.item_count }} |
{{ cart.created_at|date:"M j, Y g:i A" }} |
{% if cart.expires_at %}
{{ cart.expires_at|date:"M j, Y g:i A" }}
{% else %}
No expiry
{% endif %}
|
{% endfor %}
{% else %}
No active carts at this time.
{% endif %}
{# ── Purchase Orders ── #}
{% if total_pos %}
Purchase Orders
{{ total_pos }}
Total POs
{% if po_by_status.paid.count %}
{{ po_by_status.paid.count }} paid
{% endif %}
${{ po_revenue|floatformat:2 }}
PO Revenue (Invoiced)
${{ po_collected|floatformat:2 }}
PO Payments Collected
${{ po_balance_outstanding|floatformat:2 }}
PO Balance Outstanding
POs by Status
| Status |
Count |
Total Value |
{% for status, data in po_by_status.items %}
{% if data.count %}
|
{% if status == "paid" %}Paid
{% elif status == "draft" %}Draft
{% elif status == "sent" %}Sent
{% elif status == "partially_paid" %}Partially Paid
{% elif status == "overpaid" %}Overpaid
{% elif status == "cancelled" %}Cancelled
{% endif %}
|
{{ data.count }} |
${{ data.total|floatformat:2 }} |
{% endif %}
{% endfor %}
PO Payments by Method
| Method |
Count |
Amount |
{% for method, data in po_payments_by_method.items %}
{% if data.count %}
| {{ data.label }} |
{{ data.count }} |
${{ data.total|floatformat:2 }} |
{% endif %}
{% endfor %}
{% if recent_pos %}
Recent Purchase Orders
| Reference |
Organization |
Status |
Total |
Balance Due |
Created |
{% for po in recent_pos %}
| {{ po.reference }} |
{{ po.organization_name }} |
{% if po.status == "paid" %}Paid
{% elif po.status == "draft" %}Draft
{% elif po.status == "sent" %}Sent
{% elif po.status == "partially_paid" %}Partially Paid
{% elif po.status == "overpaid" %}Overpaid
{% elif po.status == "cancelled" %}Cancelled
{% endif %}
|
${{ po.total|floatformat:2 }} |
${{ po.balance_due|floatformat:2 }}
|
{{ po.created_at|date:"M j, Y" }} |
{% endfor %}
{% endif %}
{% endif %}
{% endblock %}