Estimates

Manage service estimates, quotes, and customer approvals

New Estimate @if($availableDiagnoses->count() > 0) @endif

Total

{{ number_format($stats['total']) }}

Draft

{{ number_format($stats['draft']) }}

Sent

{{ number_format($stats['sent']) }}

Approved

{{ number_format($stats['approved']) }}

Pending

{{ number_format($stats['pending']) }}

Expired

{{ number_format($stats['expired']) }}

Total Value

${{ number_format($stats['total_value'], 0) }}

Avg Value

${{ number_format($stats['avg_value'], 0) }}

Filters & Search

@if($search || $statusFilter || $approvalStatusFilter || $customerFilter || $dateFrom || $dateTo)
@endif
Search
Status
Approval Status
Customer @foreach($customers as $customer) @endforeach
@if($showAdvancedFilters)
Date From
Date To
Min Amount ($)
Max Amount ($)
Validity Status
Branch @foreach($branches as $branch) @endforeach
@endif
@if($bulkMode && !empty($selectedEstimates))
{{ count($selectedEstimates) }} estimate(s) selected
@endif
@if($bulkMode) @endif @forelse($estimates as $estimate) @if($bulkMode) @endif @empty @endforelse
Estimate # @if($sortBy === 'estimate_number') @if($sortDirection === 'asc') @else @endif @endif
Date @if($sortBy === 'created_at') @if($sortDirection === 'asc') @else @endif @endif
Customer Vehicle Status Approval
Total @if($sortBy === 'total_amount') @if($sortDirection === 'asc') @else @endif @endif
Valid Until Actions
{{ $estimate->estimate_number }}
{{ $estimate->created_at->format('M j, Y') }}
{{ $estimate->created_at->format('g:i A') }}
{{ $estimate->customer_id ? $estimate->customer?->name : $estimate->jobCard?->customer?->name ?? 'Unknown Customer' }}
{{ $estimate->customer_id ? $estimate->customer?->email : $estimate->jobCard?->customer?->email ?? 'No email' }}
@if($estimate->vehicle_id) {{ $estimate->vehicle?->year }} {{ $estimate->vehicle?->make }} {{ $estimate->vehicle?->model }} @else {{ $estimate->jobCard?->vehicle?->year }} {{ $estimate->jobCard?->vehicle?->make }} {{ $estimate->jobCard?->vehicle?->model }} @endif
{{ $estimate->vehicle_id ? $estimate->vehicle?->license_plate : $estimate->jobCard?->vehicle?->license_plate }}
@php $statusColors = [ 'draft' => 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300', 'sent' => 'bg-blue-100 text-blue-800 dark:bg-blue-900/50 dark:text-blue-300', 'viewed' => 'bg-purple-100 text-purple-800 dark:bg-purple-900/50 dark:text-purple-300', 'approved' => 'bg-green-100 text-green-800 dark:bg-green-900/50 dark:text-green-300', 'rejected' => 'bg-red-100 text-red-800 dark:bg-red-900/50 dark:text-red-300', 'expired' => 'bg-accent/20 text-accent dark:bg-accent/30 dark:text-accent-foreground', ]; @endphp {{ ucfirst($estimate->status) }} @php $approvalColors = [ 'pending' => 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/50 dark:text-yellow-300', 'approved' => 'bg-green-100 text-green-800 dark:bg-green-900/50 dark:text-green-300', 'rejected' => 'bg-red-100 text-red-800 dark:bg-red-900/50 dark:text-red-300', ]; @endphp {{ ucfirst(str_replace('_', ' ', $estimate->customer_approval_status)) }}
${{ number_format($estimate->total_amount, 2) }}
@if($estimate->validity_period_days) @php $validUntil = $estimate->created_at->addDays($estimate->validity_period_days); $isExpired = $validUntil->isPast(); $isExpiringSoon = $validUntil->diffInDays(now()) <= 7 && !$isExpired; @endphp
{{ $validUntil->format('M j, Y') }}
@if($isExpired)
Expired
@elseif($isExpiringSoon)
Expires soon
@endif @else No expiry @endif
@can('update', $estimate) @endcan @if($estimate->status === 'draft') @endif @can('delete', $estimate) @endcan

No estimates found

Get started by creating your first estimate

@if($availableDiagnoses->count() > 0) @else

No diagnoses available for estimate creation.

Go to Job Cards
@endif
@if($estimates->hasPages())
{{ $estimates->links() }}
@endif