@extends('layouts.app') @section('head') @stop @section('content') @include('includes.page_header', [ 'title' => 'Get a quote', 'purpose' => 'Enter the pickup and delivery cities and the load size to calculate a removal price and see the route on the map.', ]) {{-- Two-column layout: form + results (left) beside the map (right) on desktop; single column stack on tablet/mobile. --}}
@csrf
{{-- #volume stays free text (the e2e harness page.fill()s it); the datalist is additive UX only — it suggests the priced size set 5/10/15/20/30 without constraining input. The server rejects off-list volumes with a 422 (SCOPE §6). --}}
{{-- Formula picker retired: the web quote always uses the canonical MuveOne formula. Kept as a hidden field so the search payload stays well-formed; MapController forces this value server-side. --}}
{{-- Seasonal pricing (D14): collection-window picker. A single control that adapts to the requested size — exact-day sizes show one "Collection day" field, part-load sizes show a "from → to" window. Defaults to today (Europe/London, rendered server-side — never the browser's timezone) so a no-touch quote prices for today. New element ids only: #from/#to/#volume/#seach above must stay untouched (the e2e harness depends on them). --}} {{-- Booking notice (Phase 3): every move must be booked at least config('transfer.min_booking_notice_days') days ahead, so the date fields default to (and the pickers floor at) the earliest bookable date, not today. The server re-enforces this. --}} @php $moBookByDays = (int) config('transfer.min_booking_notice_days', 7); @endphp @php $moEarliest = now('Europe/London')->addDays($moBookByDays); @endphp
Collection window (up to 3 days)
Earliest collection date {{ $moEarliest->format('d/m/Y') }} — moves are booked at least {{ $moBookByDays }} days ahead.
Calculates the price and draws the route between the two cities.
  • Origin
  • Destination
  • Total Distance
  • Ferry Cost
  • Waypoint
  • Exceptions
  • Zones
  • Total Price
@stop @section('js') @stop