{{ session('success') }}
@endif
@if ($errors->any())
-
@foreach ($errors->all() as $error)
- {{ $error }} @endforeach
Quote/Order Details
Back to List
@php
$isEditable = !($quote->deposit_payment_status === 'succeeded' || $quote->quote_type === 'order');
@endphp
@if($isEditable)
Edit Quote
@endif
Quote/Order Information
| Quote Number: | {{ $quote->quote_number ?? 'N/A' }} |
| Order Number: | {{ $quote->order_number ?? 'N/A' }} |
| Quote Type: | @php $typeColors = [ 'quote' => 'primary', 'estimate' => 'info', 'order' => 'success', ]; $typeColor = $typeColors[$quote->quote_type] ?? 'secondary'; @endphp {{ ucfirst($quote->quote_type) }} |
| Status: | @php $statusColors = [ 'pending' => 'warning', 'approved' => 'success', 'rejected' => 'danger', ]; $statusColor = $statusColors[$quote->status] ?? 'secondary'; @endphp {{ ucfirst($quote->status) }} |
| Created At: | {{ $quote->created_at->format('M d, Y H:i:s') }} |
| Total Cost: | ${{ number_format($quote->total_cost, 2) }} |
| Job Type: | {{ ucfirst(str_replace('_', ' ', $jobType)) }} |
| Movers Cost: | ${{ number_format($quote->movers_cost, 2) }} |
| Callout Fee: | ${{ number_format($calloutFee, 2) }} |
| Extra Movers: | {{ $extraMovers }} movers (included in Movers Cost) |
| Assemble/Disassemble: | ${{ number_format($assembleDisassembleCost, 2) }} |
| Storage Items: | ${{ number_format($storageItemsCost, 2) }} |
Payment Information
| Deposit Amount: | ${{ number_format($quote->deposit_amount ?? 0, 2) }} {{ $quote->deposit_payment_status ? ucfirst($quote->deposit_payment_status) : 'Pending' }} |
| Remaining Amount: | ${{ number_format($quote->remaining_amount ?? 0, 2) }} {{ $quote->remaining_payment_status ? ucfirst($quote->remaining_payment_status) : 'Pending' }} |
Apply Discount
@php $willApplyOnRemaining = ($quote->deposit_payment_status === 'succeeded' && $quote->remaining_amount > 0); @endphp @if($willApplyOnRemaining)
Note: Discount will be applied on the Remaining Amount (after deposit payment), not the total cost.
@endif
Customer & Booking Information
Customer Information
| Name: | {{ $quote->booking->name ?? ($quote->user->name ?? 'N/A') }} |
| Email: | {{ $quote->booking->email ?? ($quote->user->email ?? 'N/A') }} |
| Phone: | {{ $quote->booking->phone ?? ($quote->user->phone ?? 'N/A') }} |
Booking Details
| Booking ID: | {{ $quote->booking->id ?? 'N/A' }} |
| Move Date: | {{ $quote->booking && $quote->booking->move_date ? $quote->booking->move_date->format('M d, Y') : 'N/A' }} |
| Time: | {{ ucfirst($quote->booking->time_preference ?? 'N/A') }} |
| Status: | {{ $quote->booking && $quote->booking->is_completed ? 'Completed' : ucfirst($quote->booking->status ?? 'Pending') }} |
Booking Items
| Item Name | Type | Quantity | Price |
|---|---|---|---|
| {{ $entity->name ?? ($entity->title ?? 'N/A') }} | {{ $typeLabel }} | {{ $item->quantity }} | @if (!is_null($priceDisplay)) ${{ number_format($priceDisplay, 2) }} @else - @endif |
| No booking items available. | |||
Property Information
@if ($quote->booking->pickUpProperty)
@if ($quote->booking->pickUpProperty->propertyDetails)
@php
$pickupDetails = $quote->booking->pickUpProperty->propertyDetails;
@endphp
@if ($pickupDetails->storage_name || $pickupDetails->storage_units)
@endif
@if ($pickupDetails->comments)
@endif
@endif
@endif
@if ($quote->booking->dropOffProperty)
@if ($quote->booking->dropOffProperty->propertyDetails)
@php
$dropoffDetails = $quote->booking->dropOffProperty->propertyDetails;
@endphp
@if ($dropoffDetails->storage_name || $dropoffDetails->storage_units)
@endif
@if ($dropoffDetails->comments)
@endif
@endif
@endif
↑ Pickup Location
| Location: | {{ $quote->booking->pickUpProperty->location ?? 'N/A' }} |
| Type: | {{ ucfirst(str_replace('_', ' ', optional($quote->booking->pickUpProperty->propertyDetails)->property_category ?? 'N/A')) }} |
| Flights: | {{ str_replace('_', ' ', $pickupDetails->flights_of_stairs ?? 'N/A') }} |
| Access: | {{ str_replace('_', ' ', $pickupDetails->access_required ?? 'N/A') }} |
| Internal: | {{ str_replace('_', ' ', $pickupDetails->internal_levels ?? 'N/A') }} |
| Levels: | {{ str_replace('_', ' ', $pickupDetails->levels_in_house ?? 'N/A') }} |
| Truck: | {{ str_replace('_', ' ', $pickupDetails->truck_parking ?? 'N/A') }} |
| Walk Distance: | {{ str_replace('_', ' ', $pickupDetails->walk_distance ?? 'N/A') }} |
| Name: | {{ $pickupDetails->storage_name ?? 'N/A' }} |
| Units: | {{ $pickupDetails->storage_units ?? 'N/A' }} |
{{ $pickupDetails->comments ?? 'N/A' }}
↓ Dropoff Location
| Location: | {{ $quote->booking->dropOffProperty->location ?? 'N/A' }} |
| Type: | {{ ucfirst(str_replace('_', ' ', optional($quote->booking->dropOffProperty->propertyDetails)->property_category ?? 'N/A')) }} |
| Flights: | {{ str_replace('_', ' ', $dropoffDetails->flights_of_stairs ?? 'N/A') }} |
| Access: | {{ str_replace('_', ' ', $dropoffDetails->access_required ?? 'N/A') }} |
| Internal: | {{ str_replace('_', ' ', $dropoffDetails->internal_levels ?? 'N/A') }} |
| Levels: | {{ str_replace('_', ' ', $dropoffDetails->levels_in_house ?? 'N/A') }} |
| Truck: | {{ str_replace('_', ' ', $dropoffDetails->truck_parking ?? 'N/A') }} |
| Walk Distance: | {{ str_replace('_', ' ', $dropoffDetails->walk_distance ?? 'N/A') }} |
| Name: | {{ $dropoffDetails->storage_name ?? 'N/A' }} |
| Units: | {{ $dropoffDetails->storage_units ?? 'N/A' }} |
{{ $dropoffDetails->comments ?? 'N/A' }}
Truck Information
| Truck Name: | {{ $quote->truck->truck_name ?? 'N/A' }} |
| Cubic Capacity: | {{ number_format($truckCubicCapacity, 2) }} m³ |
| Number of Movers: | {{ $numberOfMovers }} ({{ $jobTypeLabel }}) |
| Mover Price/Hour: | ${{ number_format($moverPrice, 2) }} ({{ $jobTypeLabel }}) |
Calculation Details
@php
$jobType = $quote->job_type ?? ($quote->raw_data['job_type'] ?? null);
$jobTypeColors = [
'local_job' => 'primary',
'interstate_job' => 'info',
];
$jobTypeColor = $jobTypeColors[$jobType] ?? 'secondary';
$timeFromCubicMeters = $quote->time_from_cubic_meters_minutes ?? ($quote->raw_data['time_from_cubic_meters_minutes'] ?? 0);
$timeFromCubicMetersHours = $quote->time_from_cubic_meters_hours ?? ($quote->raw_data['time_from_cubic_meters_hours'] ?? 0);
$timeFromCubicMetersRemainingMinutes = $quote->time_from_cubic_meters_remaining_minutes ?? ($quote->raw_data['time_from_cubic_meters_remaining_minutes'] ?? 0);
$calloutFeeTime = $quote->raw_data['callout_fee_time'] ?? 0;
$calloutFeeHours = $quote->raw_data['callout_fee_hours'] ?? 0;
$calloutFeeRemainingMinutes = $quote->raw_data['callout_fee_remaining_minutes'] ?? 0;
$calloutFeeTimeOriginal = $quote->raw_data['callout_fee_time_original'] ?? 0;
$calloutFeeMultiplier = $quote->raw_data['callout_fee_multiplier'] ?? 1.20;
$totalVolume = $quote->total_cubic_meters ?? 0;
$moverPerHourPrice = $quote->mover_per_hour_price ?? 0;
$numberOfMovers = $quote->number_of_movers ?? 2;
$extraMovers = $quote->extra_movers ?? ($quote->raw_data['extra_movers'] ?? 0);
// Get settings for minimum rate display
$generalSettings = \App\General\GeneralSettingsClass::getAllSettings();
$localJobMovers = (int)($generalSettings['_local_job_number_of_movers'] ?? 2);
$localJobPrice = (float)($generalSettings['_local_job_mover_per_hour_price'] ?? 85);
$interstateJobMovers = (int)($generalSettings['_interstate_job_number_of_movers'] ?? 2);
$interstateJobPrice = (float)($generalSettings['_interstate_job_mover_per_hour_price'] ?? 110);
$localJobMinRate = $localJobMovers * $localJobPrice;
$interstateJobMinRate = $interstateJobMovers * $interstateJobPrice;
// Calculate base mover rate (with minimum for local/interstate)
$baseMoverRate = $numberOfMovers * $moverPerHourPrice;
// Apply minimum rates from settings
$effectiveBaseRate = $jobType === 'interstate_job' ? max($interstateJobMinRate, $baseMoverRate) : max($localJobMinRate, $baseMoverRate);
// Include extra movers ($50/hour each)
$moverPerHourPriceTotal = $effectiveBaseRate + ($extraMovers * 50);
@endphp
@if(($jobType === 'local_job' || $jobType === 'interstate_job') && $calloutFeeTime > 0)
@if($calloutFeeTimeOriginal > 0 )
@if($jobType === 'local_job')
@endif
@php
$totalMovers = $numberOfMovers + $extraMovers;
$extraMoverRate = $extraMovers * 50;
@endphp
{{ $jobType ? ucfirst(str_replace('_', ' ', $jobType)) : 'N/A' }}
{{ ucfirst(str_replace('_', ' ', $quote->calculation_type ?? 'N/A')) }}
📦 Volume Calculation
| Total Volume: | {{ number_format($totalVolume, 2) }} m³ |
| Time per m³ (load + unload): | 14 minutes |
| Total Time Required: | {{ $timeFromCubicMetersHours }}h {{ $timeFromCubicMetersRemainingMinutes }}m ({{ number_format($timeFromCubicMeters, 2) }} min) |
| Calculation: | {{ number_format($totalVolume, 2) }} m³ × 14 min = {{ number_format($timeFromCubicMeters, 2) }} min |
🚚 Callout Fee Calculation
| Base to Pickup + Dropoff to Base: | {{ number_format($calloutFeeTimeOriginal, 2) }} minutes |
| Base to Pickup + Dropoff to Base + Pickup to Dropoff: | {{ number_format($calloutFeeTimeOriginal, 2) }} minutes |
| Multiplier (20% buffer): | {{ number_format(($calloutFeeMultiplier - 1) * 100, 0) }}% |
| Total Callout Time: | {{ $calloutFeeHours }}h {{ $calloutFeeRemainingMinutes }}m ({{ number_format($calloutFeeTime, 2) }} min) |
| Calculation: | {{ number_format($calloutFeeTimeOriginal, 2) }} min × {{ number_format($calloutFeeMultiplier, 2) }} = {{ number_format($calloutFeeTime, 2) }} min |
👥 Movers & Pricing
| Base Movers: | {{ $numberOfMovers }} movers |
| Extra Movers: | {{ $extraMovers }} movers (@ $50/hour each) |
| Total Movers: | {{ $totalMovers }} movers |
| Base Mover Rate/Hour: | ${{ number_format($effectiveBaseRate, 2) }} @if($effectiveBaseRate > $baseMoverRate) (min: ${{ number_format($jobType === 'interstate_job' ? $interstateJobMinRate : $localJobMinRate, 2) }}/hour) @else ({{ $numberOfMovers }} × ${{ number_format($moverPerHourPrice, 2) }}) @endif |
| Extra Mover Rate/Hour: | ${{ number_format($extraMoverRate, 2) }} ({{ $extraMovers }} × $50.00) |
| Total Mover Rate/Hour: | ${{ number_format($moverPerHourPriceTotal, 2) }} @if($extraMovers > 0) (${{ number_format($effectiveBaseRate, 2) }} + ${{ number_format($extraMoverRate, 2) }} = ${{ number_format($moverPerHourPriceTotal, 2) }}) @endif |
Cost Breakdown
| Item | Amount |
|---|---|
|
Movers Cost: {{ $timeFromCubicMetersHours }}h {{ $timeFromCubicMetersRemainingMinutes }}m × ${{ number_format($moverPerHourPriceTotal, 2) }}/hour |
${{ number_format($moversCost, 2) }} |
|
Callout Fee: {{ $calloutFeeHours }}h {{ $calloutFeeRemainingMinutes }}m × ${{ number_format($moverPerHourPriceTotal, 2) }}/hour |
${{ number_format($calloutFee, 2) }} |
|
Discount
@if($discountType === 'percentage')
({{ number_format($discountValue, 2) }}%)
@else
(Fixed: ${{ number_format($discountValue, 2) }})
@endif
@if($discountOnRemaining)
On Remaining
@else
On Total
@endif
:
@if($discountOnRemaining)
Applied on Remaining Amount (after deposit) @else Applied on Total Cost @endif |
-${{ number_format($value, 2) }} |
| {{ ucfirst(str_replace('_', ' ', $key)) }}: | ${{ number_format($value, 2) }} |
| No breakdown data available. | |
| Original Remaining Amount: | |
| Original Total Cost: | |
| Total Cost: | ${{ number_format($quote->total_cost, 2) }} |
| Deposit Amount: | -${{ number_format($quote->deposit_amount, 2) }} |
| Remaining Amount (After Discount): | ${{ number_format($quote->remaining_amount, 2) }} |
| Remaining Amount: | ${{ number_format($quote->remaining_amount, 2) }} |