Job #{{ job.job_no }}
{% if job.status == "draft" %}Draft
{% elif job.status == "in_progress" %}In Progress
{% elif job.status == "parts_requested" %}Parts Requested
{% elif job.status == "ready" %}Ready
{% elif job.status == "invoiced" %}Invoiced ✓
{% endif %}
{{ job.job_date|date:"d M Y" }}
{% if job.pit %} | Pit: {{ job.pit }}{% endif %}
{% if job.time_in %} | In: {{ job.time_in|time:"H:i" }}{% endif %}
{% if job.time_out %} → Out: {{ job.time_out|time:"H:i" }}{% endif %}
Back
{% if 'job_card_re_open' in allowed_features %}
{% if job.status == "invoiced" %}
{% endif %}
{% endif %}
{% if 'delete_job_card' in allowed_features %}
Delete
{% endif %}
{# ── Vehicle + Job Info ── #}
Reg No
{{ job.vehicle.reg_no }}
Make / Model
{{ job.vehicle.make }} {{ job.vehicle.model }} {{ job.vehicle.color }}
Frame No
{{ job.vehicle.frame_no|default:"—" }}
Owner
{{ job.vehicle.owner_name|default:"—" }}
Mobile
{{ job.vehicle.owner_mobile|default:"—" }}
Pit / Terminal
{{ job.pit|default:"—" }}
Odometer In
{{ job.odometer_in|floatformat:0|intcomma }} km
Job Type
{{ job.get_job_type_display }} — Group {{ job.job_group }}
Technician
{{ tech_name|default:"—" }}
{% if job.remarks %}
Remarks
{{ job.remarks }}
{% endif %}
{# ── Billing & Invoice ── #}
Type
{{ job.get_billing_type_display }}
{% if customer_name %}
Customer
{{ customer_name }}
{% endif %}
{% if job.billing_type == "insurance" %}
Claim #
{{ job.claim_no|default:"—" }}
Policy #
{{ job.policy_no|default:"—" }}
{% endif %}
{% if job.status == "invoiced" %}
Invoice #
{{ job.invoice_no }}
Gate Pass
#{{ job.job_no }}
{% if job.gp_printed %}
Printed
{% else %}
Not printed
{% endif %}
{% endif %}
{# ── Totals ── #}
Services Sub-total
{{ job.services_subtotal|floatformat:0|intcomma }}
{% if job.services_discount_amt %}
Services Discount ({{ job.services_discount_per }}%)
-{{ job.services_discount_amt|floatformat:0|intcomma }}
{% endif %}
{% if job.services_tax_amt %}
Services Tax ({{ job.services_tax_per }}%)
{{ job.services_tax_amt|floatformat:0|intcomma }}
{% endif %}
Services Net
{{ job.services_net|floatformat:0|intcomma }}
Parts Sub-total (Issued)
{{ job.parts_subtotal|floatformat:0|intcomma }}
{% if job.parts_discount_amt %}
Parts Discount ({{ job.parts_discount_per }}%)
-{{ job.parts_discount_amt|floatformat:0|intcomma }}
{% endif %}
{% if job.parts_tax_amt %}
Parts Tax ({{ job.parts_tax_per }}%)
{{ job.parts_tax_amt|floatformat:0|intcomma }}
{% endif %}
Parts Net
{{ job.parts_net|floatformat:0|intcomma }}
{% if job.counter_discount_amt %}
Cash Counter Discount
-{{ job.counter_discount_amt|floatformat:0|intcomma }}
{% endif %}
NET AMOUNT
PKR {{ job.net_amount|floatformat:0|intcomma }}
{# ── PRINT PANEL ── #}
{# Gate Pass — available from any status #}
{# Invoice prints — only after invoiced #}
{% if job.status == "invoiced" %}
{% if job.billing_type in "corporate,insurance" %}
{% endif %}
{# Print All button #}
Print All Copies
{% else %}
Invoice prints (Customer, Office, Finance, PST) will be available once this job is settled at the Cash Counter.
{% endif %}
{# ── Services Lines ── #}
# Service Description Price
{% for svc in services %}
{{ svc.line_no }}
{{ svc.service_name|default:"—" }}
{{ svc.description|default:"" }}
{{ svc.price|floatformat:0|intcomma }}
{% empty %}
No services added
{% endfor %}
{# ── Parts Lines ── #}
# Part Req. Qty
Issued Qty
Rate Billable Total
{% for part in parts %}
{{ part.line_no }}
{{ part.product_name }}
{{ part.qty|floatformat:0 }}
{{ part.issued_qty|floatformat:0 }}
{{ part.rate|floatformat:0|intcomma }}
{{ part.line_total|floatformat:0|intcomma }}
{% empty %}
No parts added
{% endfor %}
{# ── Action Buttons ── #}
{% if job.status != "invoiced" %}
{% endif %}