{% extends 'web/admin/base.html' %} {% block admin_title %}Reports{% endblock %} {% block admin_subtitle %}Same flow as Swift_Cart POS: report type, date range, generate, then results{% endblock %} {% block admin_content %}
Filters
Quick: {% for q in report_quick_links %} {{ q.label }} {% endfor %}
{% if report_generated %}
{{ report_label }}

{{ report_date_from.strftime('%d %b %Y') }} to {{ report_date_to.strftime('%d %b %Y') }} · UTC

Total amount
{{ currency }} {{ "{:,.2f}".format(report_summary.total_amount) }}
Total discount
{{ currency }} {{ "{:,.2f}".format(report_summary.total_discount) }}
Total after discounts
{{ currency }} {{ "{:,.2f}".format(report_summary.total_after_discount) }}
Total profit
{{ currency }} {{ "{:,.2f}".format(report_summary.total_profit) }}
Total records
{{ report_summary.total_records }}
{% if report_show_chart %}
Sales by day — Web vs POS
{% endif %}
{% for column in report_columns %} {% endfor %} {% set body_rows = report_rows | rejectattr('footer') | list %} {% if body_rows %} {% for row in body_rows %} {% for cell in row.cells %} {% endfor %} {% endfor %} {% else %} {% endif %} {% if report_rows and report_rows[-1].footer %} {% for cell in report_rows[-1].cells %} {% endfor %} {% endif %}
{{ column }}
{% if row.numeric[loop.index0] and cell is number %} {{ currency }} {{ "{:,.2f}".format(cell) }} {% else %} {{ cell }} {% endif %}
No records for this range.
{% if report_rows[-1].numeric[loop.index0] and cell is number %} {{ currency }} {{ "{:,.2f}".format(cell) }} {% else %} {{ cell }} {% endif %}
POS background sync log
{% for row in pos_sync_logs %} {% else %} {% endfor %}
Time (UTC) Terminal Sales Expenses
{{ row.synced_at.strftime('%d %b %Y %H:%M') if row.synced_at else '—' }} {{ row.source_terminal or 'Swift_Cart' }} {{ row.sales_uploaded or 0 }} {{ row.expenses_uploaded or 0 }}
No sync batches yet.
{% else %}
Choose a report type, set the start and end dates, then click Generate report.
{% endif %} {% endblock %}