Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
7bc9e05
Add customer auth + customer-scoped orders to FleetOps Api/v1
roncodes May 21, 2026
929eb3f
Fix customer signup: persist subject + respect User mutators
roncodes May 21, 2026
54cf426
Forward optional name + phone on customers/request-creation-code
roncodes May 21, 2026
5b94c23
Customer signup: materialize address into a Place owned by the customer
roncodes May 21, 2026
f9fbe80
Customer API: strict canonical shapes, drop portal-specific aliases
roncodes May 21, 2026
4faf882
CustomerController: comment the meta-ownership convention
roncodes May 21, 2026
c38a4aa
Add public OrderConfig endpoint + company on customer/me
roncodes May 21, 2026
0a3ef7d
CustomerController.createOrder: accept and consume service_quote
roncodes May 21, 2026
fc13476
Add multi-zone distance service rates
roncodes May 22, 2026
9eba69f
Clarify multi-zone geography selection
roncodes May 22, 2026
94afa3c
Explain multi-zone rule priority
roncodes May 22, 2026
53647b7
Persist embedded multi-zone rate fees
roncodes May 22, 2026
c993d2c
Normalize multi-zone fee display
roncodes May 22, 2026
1355f90
Polish multi-zone quote breakdown labels
roncodes May 22, 2026
f4a41b6
v0.6.50
roncodes May 23, 2026
b768385
Merge pull request #249 from fleetbase/feature/customer-api-v1
roncodes May 23, 2026
92e1f46
Merge pull request #250 from fleetbase/feature/multi-zone-distance-se…
roncodes May 24, 2026
822ffda
fix multi-stop order activity flow
roncodes May 25, 2026
e3f541a
Fix FleetOps order files, labels, and vehicle assignment
roncodes May 26, 2026
8603f93
Fix customer contact user identity conflicts
roncodes May 26, 2026
88469cc
Fix activity flow horizontal scrolling
roncodes May 26, 2026
68fac4a
Fix order config flow resource and rendering
roncodes May 26, 2026
65fd5b6
hotfix: testing seeder data
roncodes May 26, 2026
e89794b
fix: gate order eta by tracking lifecycle
roncodes May 26, 2026
d58dfac
added unassign/assign driver quick actions on order row and details
roncodes May 26, 2026
c397ffd
Fix lint failures
roncodes May 26, 2026
3d1fdf8
fix: keep service area map context menus in sync
roncodes May 26, 2026
d429b1c
chore: ran php-cs-fixer
roncodes May 27, 2026
b25a9d9
Harden live map viewport loading
roncodes May 27, 2026
a5fe773
Add required indicators to order form
roncodes May 27, 2026
f5ae077
Merge pull request #253 from fleetbase/feature/order-form-required-in…
roncodes May 27, 2026
10589ed
hotfix: broken translation key in `vehicle/pill` component
roncodes May 27, 2026
ffe97f9
Merge pull request #252 from fleetbase/feature/live-map-viewport-hard…
roncodes May 27, 2026
1949e20
Use available driver and vehicle status defaults
roncodes May 27, 2026
79a3a34
Merge pull request #254 from fleetbase/feature/use-available-driver-v…
roncodes May 27, 2026
b884f7d
Upgraded dependencies
roncodes May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions addon/components/customer/create-order-form.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@
{{#each serviceQuote.items as |item|}}
<tr>
<td>
<span class="font-semibold">{{smart-humanize item.details}}</span>
<span class="font-semibold">{{item.details}}</span>
</td>
<td>
<span>{{format-currency item.amount serviceQuote.currency}}</span>
Expand Down Expand Up @@ -449,4 +449,4 @@

<Spacer @height="300px" />
</Overlay::Body>
</Overlay>
</Overlay>
4 changes: 2 additions & 2 deletions addon/components/customer/form.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
@modelName="user"
@selectedModel={{@resource.user}}
@placeholder={{t "customer.fields.select-user"}}
@query={{hash doesnt_have_contact=true}}
@query={{hash doesnt_have_contact=true is_customer=true}}
@triggerClass="form-select form-input"
@infiniteScroll={{false}}
@renderInPlace={{true}}
Expand Down Expand Up @@ -141,4 +141,4 @@
<RegistryYield @registry="fleet-ops:component:customer:form" as |RegistryComponent|>
<RegistryComponent @resource={{@resource}} @controller={{@controller}} @permission={{get-write-permission @resource}} />
</RegistryYield>
</div>
</div>
4 changes: 2 additions & 2 deletions addon/components/customer/order-form.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@
{{#each serviceQuote.items as |item|}}
<tr>
<td>
<span class="font-semibold">{{smart-humanize item.details}}</span>
<span class="font-semibold">{{item.details}}</span>
</td>
<td>
<span>{{format-currency item.amount serviceQuote.currency}}</span>
Expand Down Expand Up @@ -473,4 +473,4 @@

<Spacer @height="300px" />
</Overlay::Body>
</Overlay>
</Overlay>
4 changes: 2 additions & 2 deletions addon/components/customer/orders.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@
{{#each order.purchase_rate.service_quote.items as |item|}}
<tr>
<td>
<span class="font-semibold">{{smart-humanize item.details}}</span>
<span class="font-semibold">{{item.details}}</span>
</td>
<td>
<div class="flex flex-row items-center justify-end">{{format-currency
Expand Down Expand Up @@ -320,4 +320,4 @@
</div>
<div id="customer-portal-content-wormhole"></div>
{{/let}}
</div>
</div>
4 changes: 2 additions & 2 deletions addon/components/display-place.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<div class="next-dd-menu-seperator"></div>
{{#each-in @waypointActions as |actionId action|}}
<div class="px-1">
<a href="javascript:;" class="next-dd-item" disabled={{cannot "fleet-ops view order"}} {{on "click" (dropdown-fn dd action.fn this.place)}}>
<a href="javascript:;" class="next-dd-item" disabled={{cannot "fleet-ops view order"}} {{on "click" (dropdown-fn dd action.fn (or @waypointActionContext this.place))}}>
{{action.label}}
</a>
</div>
Expand Down Expand Up @@ -65,4 +65,4 @@
{{/if}}
</address>
{{/if}}
</div>
</div>
8 changes: 6 additions & 2 deletions addon/components/map/google-live-map.js
Original file line number Diff line number Diff line change
Expand Up @@ -276,15 +276,19 @@ export default class MapGoogleLiveMapComponent extends Component {
}

_showServiceAreaContextMenu(serviceArea, event) {
const items = this.mapManager.getComposedContextMenuItems(`service-area:${serviceArea.public_id}`);
const items = this.mapManager.getComposedContextMenuItems(this._resourceContextKey('service-area', serviceArea));
this.mapManager.showContextMenu(event, items);
}

_showZoneContextMenu(zone, event) {
const items = this.mapManager.getComposedContextMenuItems(`zone:${zone.public_id}`);
const items = this.mapManager.getComposedContextMenuItems(this._resourceContextKey('zone', zone));
this.mapManager.showContextMenu(event, items);
}

_resourceContextKey(type, resource) {
return `${type}:${resource?.public_id ?? resource?.id}`;
}

_closeAllInfoWindows() {
this._infoWindows.forEach((iw) => iw.close());
this.mapManager.closeContextMenu();
Expand Down
62 changes: 48 additions & 14 deletions addon/components/map/leaflet-live-map.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
through the provider-agnostic MapManagerService.
}}

<div class="live-map-component {{@wrapperClass}}">
<div class="live-map-component {{@wrapperClass}}" {{did-update this.syncServiceAreaContextMenus this.serviceAreaActions.serviceAreas this.serviceAreaActions.serviceAreas.length}}>

{{#if this.shouldUseGoogleMaps}}
{{! ─── Google Maps branch ──────────────────────────────────────────── }}
Expand Down Expand Up @@ -87,7 +87,11 @@
<div class="flex items-center gap-1.5 text-xs font-semibold mb-1.5">
<span class="inline-block w-2 h-2 rounded-full {{if driver.online 'bg-green-400' 'bg-red-500'}}"></span>
<span>{{driver.name}}</span>
<div class="status-badge {{if driver.status (dasherize driver.status) 'default'}}-status-badge status-badge-{{if driver.status (dasherize driver.status) 'default'}} shadow-none ml-auto">
<div
class="status-badge
{{if driver.status (dasherize driver.status) 'default'}}-status-badge status-badge-{{if driver.status (dasherize driver.status) 'default'}}
shadow-none ml-auto"
>
<span class="rounded-full text-[9px] px-1.5 py-0.5">{{n-a driver.meta.status_label (smart-humanize driver.status)}}</span>
</div>
</div>
Expand Down Expand Up @@ -122,7 +126,10 @@
</div>
<div class="rounded bg-gray-900 shadow-md px-1.5 py-1 min-w-0">
<div class="text-[9px] font-semibold uppercase text-gray-400 leading-none">Location</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a driver.meta.location_coordinates (point-coordinates driver.location)}}</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a
driver.meta.location_coordinates
(point-coordinates driver.location)
}}</div>
</div>
</div>
</div>
Expand All @@ -132,7 +139,11 @@
<div class="flex items-center gap-1.5 text-xs font-semibold mb-1.5">
<span class="inline-block w-2 h-2 rounded-full {{if driver.online 'bg-green-400' 'bg-red-500'}}"></span>
<span>{{driver.name}}</span>
<div class="status-badge {{if driver.status (dasherize driver.status) 'default'}}-status-badge status-badge-{{if driver.status (dasherize driver.status) 'default'}} shadow-none ml-auto">
<div
class="status-badge
{{if driver.status (dasherize driver.status) 'default'}}-status-badge status-badge-{{if driver.status (dasherize driver.status) 'default'}}
shadow-none ml-auto"
>
<span class="rounded-full text-[9px] px-1.5 py-0.5">{{n-a driver.meta.status_label (smart-humanize driver.status)}}</span>
</div>
</div>
Expand Down Expand Up @@ -167,7 +178,10 @@
</div>
<div class="rounded bg-gray-900 shadow-md px-1.5 py-1 min-w-0">
<div class="text-[9px] font-semibold uppercase text-gray-400 leading-none">Location</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a driver.meta.location_coordinates (point-coordinates driver.location)}}</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a
driver.meta.location_coordinates
(point-coordinates driver.location)
}}</div>
</div>
</div>
</div>
Expand All @@ -192,14 +206,24 @@
<div class="flex items-center gap-1.5 text-xs font-semibold mb-1.5">
<span class="inline-block w-2 h-2 rounded-full {{if vehicle.online 'bg-green-400' 'bg-red-500'}}"></span>
<span>{{vehicle.displayName}}</span>
<div class="status-badge {{if vehicle.status (dasherize vehicle.status) 'default'}}-status-badge status-badge-{{if vehicle.status (dasherize vehicle.status) 'default'}} shadow-none ml-auto">
<div
class="status-badge
{{if vehicle.status (dasherize vehicle.status) 'default'}}-status-badge status-badge-{{if vehicle.status (dasherize vehicle.status) 'default'}}
shadow-none ml-auto"
>
<span class="rounded-full text-[9px] px-1.5 py-0.5">{{n-a vehicle.meta.status_label}}</span>
</div>
</div>
<div class="grid grid-cols-2 gap-1">
<div class="rounded bg-gray-900 shadow-md px-1.5 py-1 min-w-0">
<div class="text-[9px] font-semibold uppercase text-gray-400 leading-none">Vehicle #</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a vehicle.internal_id vehicle.public_id vehicle.plate_number vehicle.serial_number vehicle.vin}}</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a
vehicle.internal_id
vehicle.public_id
vehicle.plate_number
vehicle.serial_number
vehicle.vin
}}</div>
</div>
<div class="rounded bg-gray-900 shadow-md px-1.5 py-1 min-w-0">
<div class="text-[9px] font-semibold uppercase text-gray-400 leading-none">Driver</div>
Expand Down Expand Up @@ -229,14 +253,24 @@
<div class="flex items-center gap-1.5 text-xs font-semibold mb-1.5">
<span class="inline-block w-2 h-2 rounded-full {{if vehicle.online 'bg-green-400' 'bg-red-500'}}"></span>
<span>{{vehicle.displayName}}</span>
<div class="status-badge {{if vehicle.status (dasherize vehicle.status) 'default'}}-status-badge status-badge-{{if vehicle.status (dasherize vehicle.status) 'default'}} shadow-none ml-auto">
<div
class="status-badge
{{if vehicle.status (dasherize vehicle.status) 'default'}}-status-badge status-badge-{{if vehicle.status (dasherize vehicle.status) 'default'}}
shadow-none ml-auto"
>
<span class="rounded-full text-[9px] px-1.5 py-0.5">{{n-a vehicle.meta.status_label}}</span>
</div>
</div>
<div class="grid grid-cols-2 gap-1">
<div class="rounded bg-gray-900 shadow-md px-1.5 py-1 min-w-0">
<div class="text-[9px] font-semibold uppercase text-gray-400 leading-none">Vehicle #</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a vehicle.internal_id vehicle.public_id vehicle.plate_number vehicle.serial_number vehicle.vin}}</div>
<div class="text-[11px] text-white leading-tight whitespace-normal break-words">{{n-a
vehicle.internal_id
vehicle.public_id
vehicle.plate_number
vehicle.serial_number
vehicle.vin
}}</div>
</div>
<div class="rounded bg-gray-900 shadow-md px-1.5 py-1 min-w-0">
<div class="text-[9px] font-semibold uppercase text-gray-400 leading-none">Driver</div>
Expand Down Expand Up @@ -291,8 +325,8 @@
@id={{serviceArea.id}}
@record={{serviceArea}}
@locations={{unwrap-coordinates serviceArea.leafletCoordinates}}
@fillColor={{serviceArea.color}}
@color={{serviceArea.stroke_color}}
@fillColor={{or serviceArea.color "#3388ff"}}
@color={{or serviceArea.stroke_color serviceArea.color "#3388ff"}}
@onAdd={{fn this.trigger "onServiceAreaLayerAdded" serviceArea}}
as |polygon|
>
Expand All @@ -304,8 +338,8 @@
@id={{zone.id}}
@record={{zone}}
@locations={{unwrap-coordinates zone.leafletCoordinates}}
@fillColor={{zone.color}}
@color={{zone.stroke_color}}
@fillColor={{or zone.color "#3388ff"}}
@color={{or zone.stroke_color zone.color "#3388ff"}}
@onAdd={{fn this.trigger "onZoneLayerAdd" zone}}
as |polygon|
>
Expand Down Expand Up @@ -340,4 +374,4 @@
@liveMap={{this}}
@onDrawerReady={{this.setDrawerContext}}
/>
{{/if}} --}}
{{/if}} --}}
Loading
Loading