@php
$partsSub = 0.0;
$servicesSub = 0.0;
$tax = 0.0;
foreach (($items ?? []) as $it) {
$qty = (float) ($it->quantity ?? 0);
$unit = (float) ($it->unit_price ?? 0);
$gross = $qty * $unit;
$disc = (float) ($it->discount_amount ?? 0); // already applied PKR on item
$net = max(0, $gross - $disc);
$partsSub += $net;
$tax += (float) ($it->tax_amount ?? 0);
}
foreach (($services ?? []) as $s) {
$lt = (float) ($s->line_total ?? 0);
if ($lt <= 0) $lt = (float) ($s->hours ?? 0) * (float) ($s->rate ?? 0);
$servicesSub += $lt;
}
$subBefore = $partsSub + $servicesSub;
$after = (float) ($sale->grand_total ?? 0) - (float) ($sale->tax_amount ?? 0) - (float) ($sale->freight_amount ?? 0);
if ($after < 0) $after = (float) ($sale->subtotal ?? 0);
$discApplied = max(0, $subBefore - $after);
@endphp
{{ $sale->sale_number }}
{{ $sale->sale_date }} · {{ $sale->status }}
All sales
@if(!empty($canReturn))
Record return
@endif
@if(!empty($sale->journal_voucher_id) || !empty($sale->receipt_voucher_id))
@endif
@if(in_array($sale->status, ['draft','held']))
Edit
@endif
@php
$salePaySummary = app(\App\Services\GarageRepairOrderSaleInvoiceService::class)->salePaymentSummary($sale);
@endphp
@if(($sale->sale_kind ?? null) === 'customer_sale' && !($salePaySummary['is_fully_settled'] ?? false))
@if(in_array(($sale->status ?? null), ['held','completed'], true))
@else
@endif
@elseif(($sale->payment_status ?? 'unpaid') === 'paid' && !empty($sale->receipt_voucher_id))
Gate pass
@endif
Customer
{{ $sale->customer_name ?? 'Walk-in / cash' }}
@if(!empty($sale->customer_ledger_id))
Ledger statement
@endif
Vehicle
@if(!empty($sale->vehicle_registration))
{{ $sale->vehicle_registration }}
@if(!empty($subLedger) && !empty($subLedger->id))
@endif
@if($sale->vehicle_make || $sale->vehicle_model || $sale->vehicle_year)
{{ trim(($sale->vehicle_make ?? '').' '.($sale->vehicle_model ?? '').' '.($sale->vehicle_year ?? '')) }}
@endif
@else
—
@endif
Served by
{{ $sale->served_by_name ?? '—' }}
Sale kind
{{ str_replace('_', ' ', $sale->sale_kind) }}
@if(!empty($hasDocumentServices))
Current reading
@if(!empty($sale->meter_reading))
{{ \App\Support\GarageMeterReading::format($sale->meter_reading) }} km
@else
—
@endif
Next reading
@if(!empty($sale->next_meter_reading))
{{ \App\Support\GarageMeterReading::format($sale->next_meter_reading) }} km
@else
—
@endif
Next service date
@if(!empty($sale->next_service_date))
{{ \Carbon\Carbon::parse($sale->next_service_date)->format('d M Y') }}
@else
—
@endif
@endif
@if($sale->comments)
Comments
{{ $sale->comments }}
@endif
@include('garage.partials.vehicle-mileage-history', [
'mileageTimeline' => $mileageTimeline ?? collect(),
'vehicleOdometer' => $vehicleOdometer ?? null,
])