{% extends "pos/base.html" %} {% load humanize %} {% block title %}Finance Dashboard — Workshop{% endblock %} {% block stylesheets %} {% endblock %} {% block content %}
{% for m in messages %}
{{ m }}
{% endfor %}
Finance Dashboard — Workshop
Read-only financial overview  ·  {{ jobs|length }} job{{ jobs|length|pluralize }} in range
All Jobs
{# ── Filters ── #}
{% if has_openpyxl %} Export Excel {% endif %}
{# ── Summary stat cards ── #}
{{ totals.services_net|floatformat:0|intcomma }}
Services Net
{{ totals.parts_net|floatformat:0|intcomma }}
Parts Net
{{ totals.services_tax_amt|add:totals.parts_tax_amt|floatformat:0|intcomma }}
Total Tax
{{ totals.counter_discount_amt|floatformat:0|intcomma }}
Counter Discount
{{ totals.net_amount|floatformat:0|intcomma }}
Total Net Billed
{# ── Billing type breakdown ── #} {% if by_billing %}
By Billing Type
{% for bt, data in by_billing.items %}
{{ bt }} ({{ data.count }} job{{ data.count|pluralize }}) Rs. {{ data.net_amount|floatformat:0|intcomma }}
{% endfor %}
{% endif %} {# ── Job-wise table ── #}
Job-wise Detail
{% for j in jobs %} {% empty %} {% endfor %}
Job #DateReg. No.Billing Services NetParts Net Counter Disc.Net Amount StatusInvoice #
#{{ j.job_no }} {{ j.job_date|date:"d-M-y" }} {{ j.vehicle.reg_no }} {{ j.get_billing_type_display }} {{ j.services_net|floatformat:0|intcomma }} {{ j.parts_net|floatformat:0|intcomma }} {% if j.counter_discount_amt %}-{{ j.counter_discount_amt|floatformat:0|intcomma }}{% else %}—{% endif %} {{ j.net_amount|floatformat:0|intcomma }} {{ j.get_status_display }} {{ j.invoice_no|default:"—" }}
No jobs found in this range / filter.
{% endblock %}