@fleetbase/fleetops-engine 0.6.24 → 0.6.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DRIVER_SCHEDULING.md +186 -0
- package/addon/components/driver/schedule.hbs +100 -0
- package/addon/components/driver/schedule.js +267 -0
- package/addon/components/order/kanban-card.hbs +2 -2
- package/addon/components/vehicle/details.hbs +594 -4
- package/addon/components/vehicle/form.hbs +467 -41
- package/addon/controllers/analytics/reports/index.js +3 -2
- package/addon/controllers/connectivity/devices/index.js +3 -3
- package/addon/controllers/connectivity/events/index.js +3 -2
- package/addon/controllers/connectivity/sensors/index.js +3 -5
- package/addon/controllers/connectivity/telematics/index.js +3 -1
- package/addon/controllers/maintenance/equipment/index.js +4 -4
- package/addon/controllers/maintenance/parts/index.js +4 -4
- package/addon/controllers/maintenance/work-orders/index.js +4 -4
- package/addon/controllers/management/contacts/customers.js +12 -10
- package/addon/controllers/management/contacts/index.js +3 -10
- package/addon/controllers/management/drivers/index/details.js +26 -13
- package/addon/controllers/management/drivers/index.js +4 -16
- package/addon/controllers/management/fleets/index.js +3 -13
- package/addon/controllers/management/fuel-reports/index.js +3 -10
- package/addon/controllers/management/issues/index.js +3 -12
- package/addon/controllers/management/places/index.js +4 -12
- package/addon/controllers/management/vehicles/index.js +3 -13
- package/addon/controllers/management/vendors/index.js +3 -13
- package/addon/controllers/operations/orders/index.js +5 -22
- package/addon/controllers/operations/scheduler/index.js +195 -6
- package/addon/controllers/operations/service-rates/index.js +34 -34
- package/addon/controllers/settings/payments/index.js +0 -6
- package/addon/routes.js +1 -0
- package/addon/services/driver-scheduling.js +171 -0
- package/addon/services/leaflet-layer-visibility-manager.js +4 -1
- package/addon/services/service-rate-actions.js +5 -1
- package/addon/templates/management/drivers/index/details/positions.hbs +1 -2
- package/addon/templates/management/drivers/index/details/schedule.hbs +1 -2
- package/addon/templates/operations/scheduler/index.hbs +48 -10
- package/addon/utils/fleet-ops-options.js +86 -0
- package/app/services/driver-scheduling.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +3 -3
- package/server/migrations/2025_11_17_033648_add_additional_columns_to_vehicles_table.php +142 -0
- package/server/src/Constraints/HOSConstraint.php +244 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +14 -4
- package/server/src/Http/Controllers/Api/v1/OrderController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/VehicleController.php +2 -2
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +8 -3
- package/server/src/Http/Resources/v1/Driver.php +1 -1
- package/server/src/Http/Resources/v1/Vehicle.php +197 -19
- package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +211 -28
- package/server/src/Models/Driver.php +15 -8
- package/server/src/Models/Vehicle.php +101 -15
|
@@ -1,31 +1,95 @@
|
|
|
1
1
|
<div class="details-wrapper" ...attributes>
|
|
2
|
+
{{! CORE DETAILS }}
|
|
2
3
|
<ContentPanel @title={{t "common.details"}} @open={{true}} @wrapperClass="bordered-top">
|
|
3
|
-
<div class="grid grid-cols-2 gap-2 text-xs dark:text-gray-100">
|
|
4
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-2 text-xs dark:text-gray-100">
|
|
5
|
+
{{! Vehicle Identification }}
|
|
6
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-1">
|
|
7
|
+
Vehicle Identification
|
|
8
|
+
</div>
|
|
9
|
+
|
|
4
10
|
<div class="field-info-container">
|
|
5
11
|
<div class="field-name">{{t "common.name"}}</div>
|
|
6
12
|
<div class="field-value">{{n-a @resource.display_name}}</div>
|
|
7
13
|
</div>
|
|
14
|
+
|
|
15
|
+
<div class="field-info-container">
|
|
16
|
+
<div class="field-name">{{t "common.internal-id"}}</div>
|
|
17
|
+
<div class="field-value">{{n-a @resource.internal_id}}</div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
8
20
|
<div class="field-info-container">
|
|
9
21
|
<div class="field-name">{{t "vehicle.fields.plate-number"}}</div>
|
|
10
22
|
<div class="field-value">{{n-a @resource.plate_number}}</div>
|
|
11
23
|
</div>
|
|
24
|
+
|
|
12
25
|
<div class="field-info-container">
|
|
13
26
|
<div class="field-name">{{t "vehicle.fields.vin-number"}}</div>
|
|
14
27
|
<div class="field-value">{{n-a @resource.vin}}</div>
|
|
15
28
|
</div>
|
|
29
|
+
|
|
16
30
|
<div class="field-info-container">
|
|
17
31
|
<div class="field-name">{{t "vehicle.fields.make"}}</div>
|
|
18
32
|
<div class="field-value">{{n-a @resource.make}}</div>
|
|
19
33
|
</div>
|
|
34
|
+
|
|
20
35
|
<div class="field-info-container">
|
|
21
36
|
<div class="field-name">{{t "vehicle.fields.model"}}</div>
|
|
22
37
|
<div class="field-value">{{n-a @resource.model}}</div>
|
|
23
38
|
</div>
|
|
39
|
+
|
|
24
40
|
<div class="field-info-container">
|
|
25
41
|
<div class="field-name">{{t "vehicle.fields.year"}}</div>
|
|
26
42
|
<div class="field-value">{{n-a @resource.year}}</div>
|
|
27
43
|
</div>
|
|
28
|
-
|
|
44
|
+
|
|
45
|
+
<div class="field-info-container">
|
|
46
|
+
<div class="field-name">Trim</div>
|
|
47
|
+
<div class="field-value">{{n-a @resource.trim}}</div>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div class="field-info-container">
|
|
51
|
+
<div class="field-name">Color</div>
|
|
52
|
+
<div class="field-value">{{n-a @resource.color}}</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div class="field-info-container">
|
|
56
|
+
<div class="field-name">Serial Number</div>
|
|
57
|
+
<div class="field-value">{{n-a @resource.serial_number}}</div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div class="field-info-container">
|
|
61
|
+
<div class="field-name">Class</div>
|
|
62
|
+
<div class="field-value">{{n-a @resource.class}}</div>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
{{! Assignment & Status }}
|
|
66
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3">
|
|
67
|
+
Assignment & Status
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<div class="field-info-container">
|
|
71
|
+
<div class="field-name">{{t "vehicle.fields.driver-assigned"}}</div>
|
|
72
|
+
<div class="field-value">
|
|
73
|
+
{{n-a (or @resource.driver.name @resource.driver_name)}}
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div class="field-info-container">
|
|
78
|
+
<div class="field-name">{{t "common.status"}}</div>
|
|
79
|
+
<div class="field-value">{{n-a (smart-humanize @resource.status)}}</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div class="field-info-container">
|
|
83
|
+
<div class="field-name">Call Sign</div>
|
|
84
|
+
<div class="field-value">{{n-a @resource.call_sign}}</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
{{! Location }}
|
|
88
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3">
|
|
89
|
+
Location
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div class="field-info-container col-span-2">
|
|
29
93
|
<div class="field-name">
|
|
30
94
|
{{t "common.coordinates"}}
|
|
31
95
|
</div>
|
|
@@ -36,19 +100,545 @@
|
|
|
36
100
|
</div>
|
|
37
101
|
</ContentPanel>
|
|
38
102
|
|
|
103
|
+
{{! MEASUREMENT, UNITS & ODOMETER }}
|
|
104
|
+
<ContentPanel @title="Measurement & Units" @open={{false}} @wrapperClass="bordered-top">
|
|
105
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-2 text-xs dark:text-gray-100">
|
|
106
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-1">
|
|
107
|
+
Measurement & Units
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<div class="field-info-container">
|
|
111
|
+
<div class="field-name">System of Measurement</div>
|
|
112
|
+
<div class="field-value">
|
|
113
|
+
{{n-a (get-fleet-ops-option-label "measurementSystems" @resource.measurement_system)}}
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<div class="field-info-container">
|
|
118
|
+
<div class="field-name">Fuel Volume Unit</div>
|
|
119
|
+
<div class="field-value">
|
|
120
|
+
{{n-a (get-fleet-ops-option-label "fuelVolumeUnits" @resource.fuel_volume_unit)}}
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3">
|
|
125
|
+
Odometer & Usage
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div class="field-info-container">
|
|
129
|
+
<div class="field-name">
|
|
130
|
+
{{concat "Current Odometer (" @resource.odometer_unit ")"}}
|
|
131
|
+
</div>
|
|
132
|
+
<div class="field-value">
|
|
133
|
+
{{n-a @resource.odometer}}
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<div class="field-info-container">
|
|
138
|
+
<div class="field-name">Odometer Unit</div>
|
|
139
|
+
<div class="field-value">
|
|
140
|
+
{{n-a (get-fleet-ops-option-label "odometerUnits" @resource.odometer_unit)}}
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<div class="field-info-container">
|
|
145
|
+
<div class="field-name">Odometer at Purchase</div>
|
|
146
|
+
<div class="field-value">{{n-a @resource.odometer_at_purchase}}</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</ContentPanel>
|
|
150
|
+
|
|
151
|
+
{{! BODY & USAGE }}
|
|
152
|
+
<ContentPanel @title="Body & Usage" @open={{false}} @wrapperClass="bordered-top">
|
|
153
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-2 text-xs dark:text-gray-100">
|
|
154
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-1">
|
|
155
|
+
Body & Usage
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<div class="field-info-container">
|
|
159
|
+
<div class="field-name">Body Type</div>
|
|
160
|
+
<div class="field-value">
|
|
161
|
+
{{n-a (get-fleet-ops-option-label "vehicleBodyTypes" @resource.body_type)}}
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<div class="field-info-container">
|
|
166
|
+
<div class="field-name">Body Subtype</div>
|
|
167
|
+
<div class="field-value">
|
|
168
|
+
{{n-a (get-fleet-ops-option-label "vehicleBodySubTypes" @resource.body_sub_type)}}
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div class="field-info-container">
|
|
173
|
+
<div class="field-name">Usage Type</div>
|
|
174
|
+
<div class="field-value">
|
|
175
|
+
{{n-a (get-fleet-ops-option-label "vehicleUsageTypes" @resource.usage_type)}}
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<div class="field-info-container">
|
|
180
|
+
<div class="field-name">Ownership Type</div>
|
|
181
|
+
<div class="field-value">
|
|
182
|
+
{{n-a (get-fleet-ops-option-label "vehicleOwnershipTypes" @resource.ownership_type)}}
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
<div class="field-info-container">
|
|
187
|
+
<div class="field-name">Fuel Type</div>
|
|
188
|
+
<div class="field-value">
|
|
189
|
+
{{n-a (get-fleet-ops-option-label "fuelTypes" @resource.fuel_type)}}
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<div class="field-info-container">
|
|
194
|
+
<div class="field-name">Transmission</div>
|
|
195
|
+
<div class="field-value">
|
|
196
|
+
{{n-a (get-fleet-ops-option-label "transmissionTypes" @resource.transmission)}}
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</ContentPanel>
|
|
201
|
+
|
|
202
|
+
{{! TECHNICAL SPECIFICATIONS }}
|
|
203
|
+
<ContentPanel @title="Technical Specifications" @open={{false}} @wrapperClass="bordered-top">
|
|
204
|
+
<div class="grid grid-cols-1 lg:grid-cols-3 gap-2 text-xs dark:text-gray-100">
|
|
205
|
+
|
|
206
|
+
{{! Powertrain & Engine }}
|
|
207
|
+
<div class="col-span-3 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-1">
|
|
208
|
+
Powertrain & Engine
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div class="field-info-container">
|
|
212
|
+
<div class="field-name">Engine Number</div>
|
|
213
|
+
<div class="field-value">{{n-a @resource.engine_number}}</div>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
<div class="field-info-container">
|
|
217
|
+
<div class="field-name">Engine Make</div>
|
|
218
|
+
<div class="field-value">{{n-a @resource.engine_make}}</div>
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
<div class="field-info-container">
|
|
222
|
+
<div class="field-name">Engine Model</div>
|
|
223
|
+
<div class="field-value">{{n-a @resource.engine_model}}</div>
|
|
224
|
+
</div>
|
|
225
|
+
|
|
226
|
+
<div class="field-info-container">
|
|
227
|
+
<div class="field-name">Engine Family</div>
|
|
228
|
+
<div class="field-value">{{n-a @resource.engine_family}}</div>
|
|
229
|
+
</div>
|
|
230
|
+
|
|
231
|
+
<div class="field-info-container">
|
|
232
|
+
<div class="field-name">Engine Configuration</div>
|
|
233
|
+
<div class="field-value">{{n-a @resource.engine_configuration}}</div>
|
|
234
|
+
</div>
|
|
235
|
+
|
|
236
|
+
<div class="field-info-container">
|
|
237
|
+
<div class="field-name">Cylinder Arrangement</div>
|
|
238
|
+
<div class="field-value">{{n-a @resource.cylinder_arrangement}}</div>
|
|
239
|
+
</div>
|
|
240
|
+
|
|
241
|
+
<div class="field-info-container">
|
|
242
|
+
<div class="field-name">Number of Cylinders</div>
|
|
243
|
+
<div class="field-value">{{n-a @resource.number_of_cylinders}}</div>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<div class="field-info-container">
|
|
247
|
+
<div class="field-name">Engine Size</div>
|
|
248
|
+
<div class="field-value">
|
|
249
|
+
{{#if @resource.engine_size}}
|
|
250
|
+
{{@resource.engine_size}}
|
|
251
|
+
L
|
|
252
|
+
{{else}}
|
|
253
|
+
{{n-a @resource.engine_size}}
|
|
254
|
+
{{/if}}
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
<div class="field-info-container">
|
|
259
|
+
<div class="field-name">Engine Displacement</div>
|
|
260
|
+
<div class="field-value">
|
|
261
|
+
{{#if @resource.engine_displacement}}
|
|
262
|
+
{{@resource.engine_displacement}}
|
|
263
|
+
cc
|
|
264
|
+
{{else}}
|
|
265
|
+
{{n-a @resource.engine_displacement}}
|
|
266
|
+
{{/if}}
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
|
|
270
|
+
<div class="field-info-container">
|
|
271
|
+
<div class="field-name">Horsepower</div>
|
|
272
|
+
<div class="field-value">
|
|
273
|
+
{{#if @resource.horsepower}}
|
|
274
|
+
{{@resource.horsepower}}
|
|
275
|
+
hp
|
|
276
|
+
{{else}}
|
|
277
|
+
{{n-a @resource.horsepower}}
|
|
278
|
+
{{/if}}
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
|
|
282
|
+
<div class="field-info-container">
|
|
283
|
+
<div class="field-name">Horsepower RPM</div>
|
|
284
|
+
<div class="field-value">{{n-a @resource.horsepower_rpm}}</div>
|
|
285
|
+
</div>
|
|
286
|
+
|
|
287
|
+
<div class="field-info-container">
|
|
288
|
+
<div class="field-name">Torque</div>
|
|
289
|
+
<div class="field-value">
|
|
290
|
+
{{#if @resource.torque}}
|
|
291
|
+
{{@resource.torque}}
|
|
292
|
+
Nm
|
|
293
|
+
{{else}}
|
|
294
|
+
{{n-a @resource.torque}}
|
|
295
|
+
{{/if}}
|
|
296
|
+
</div>
|
|
297
|
+
</div>
|
|
298
|
+
|
|
299
|
+
<div class="field-info-container">
|
|
300
|
+
<div class="field-name">Torque RPM</div>
|
|
301
|
+
<div class="field-value">{{n-a @resource.torque_rpm}}</div>
|
|
302
|
+
</div>
|
|
303
|
+
|
|
304
|
+
{{! Capacity & Dimensions }}
|
|
305
|
+
<div class="col-span-3 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3">
|
|
306
|
+
Capacity & Dimensions
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
<div class="field-info-container">
|
|
310
|
+
<div class="field-name">Fuel Capacity</div>
|
|
311
|
+
<div class="field-value">
|
|
312
|
+
{{#if @resource.fuel_capacity}}
|
|
313
|
+
{{@resource.fuel_capacity}}
|
|
314
|
+
L
|
|
315
|
+
{{else}}
|
|
316
|
+
{{n-a @resource.fuel_capacity}}
|
|
317
|
+
{{/if}}
|
|
318
|
+
</div>
|
|
319
|
+
</div>
|
|
320
|
+
|
|
321
|
+
<div class="field-info-container">
|
|
322
|
+
<div class="field-name">Payload Capacity</div>
|
|
323
|
+
<div class="field-value">
|
|
324
|
+
{{#if @resource.payload_capacity}}
|
|
325
|
+
{{@resource.payload_capacity}}
|
|
326
|
+
kg
|
|
327
|
+
{{else}}
|
|
328
|
+
{{n-a @resource.payload_capacity}}
|
|
329
|
+
{{/if}}
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
332
|
+
|
|
333
|
+
<div class="field-info-container">
|
|
334
|
+
<div class="field-name">Towing Capacity</div>
|
|
335
|
+
<div class="field-value">
|
|
336
|
+
{{#if @resource.towing_capacity}}
|
|
337
|
+
{{@resource.towing_capacity}}
|
|
338
|
+
kg
|
|
339
|
+
{{else}}
|
|
340
|
+
{{n-a @resource.towing_capacity}}
|
|
341
|
+
{{/if}}
|
|
342
|
+
</div>
|
|
343
|
+
</div>
|
|
344
|
+
|
|
345
|
+
<div class="field-info-container">
|
|
346
|
+
<div class="field-name">Seating Capacity</div>
|
|
347
|
+
<div class="field-value">{{n-a @resource.seating_capacity}}</div>
|
|
348
|
+
</div>
|
|
349
|
+
|
|
350
|
+
<div class="field-info-container">
|
|
351
|
+
<div class="field-name">Vehicle Weight</div>
|
|
352
|
+
<div class="field-value">
|
|
353
|
+
{{#if @resource.weight}}
|
|
354
|
+
{{@resource.weight}}
|
|
355
|
+
kg
|
|
356
|
+
{{else}}
|
|
357
|
+
{{n-a @resource.weight}}
|
|
358
|
+
{{/if}}
|
|
359
|
+
</div>
|
|
360
|
+
</div>
|
|
361
|
+
|
|
362
|
+
<div class="field-info-container">
|
|
363
|
+
<div class="field-name">Length</div>
|
|
364
|
+
<div class="field-value">
|
|
365
|
+
{{#if @resource.length}}
|
|
366
|
+
{{@resource.length}}
|
|
367
|
+
cm
|
|
368
|
+
{{else}}
|
|
369
|
+
{{n-a @resource.length}}
|
|
370
|
+
{{/if}}
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
|
|
374
|
+
<div class="field-info-container">
|
|
375
|
+
<div class="field-name">Width</div>
|
|
376
|
+
<div class="field-value">
|
|
377
|
+
{{#if @resource.width}}
|
|
378
|
+
{{@resource.width}}
|
|
379
|
+
cm
|
|
380
|
+
{{else}}
|
|
381
|
+
{{n-a @resource.width}}
|
|
382
|
+
{{/if}}
|
|
383
|
+
</div>
|
|
384
|
+
</div>
|
|
385
|
+
|
|
386
|
+
<div class="field-info-container">
|
|
387
|
+
<div class="field-name">Height</div>
|
|
388
|
+
<div class="field-value">
|
|
389
|
+
{{#if @resource.height}}
|
|
390
|
+
{{@resource.height}}
|
|
391
|
+
cm
|
|
392
|
+
{{else}}
|
|
393
|
+
{{n-a @resource.height}}
|
|
394
|
+
{{/if}}
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
|
|
398
|
+
<div class="field-info-container">
|
|
399
|
+
<div class="field-name">Cargo Volume</div>
|
|
400
|
+
<div class="field-value">
|
|
401
|
+
{{#if @resource.cargo_volume}}
|
|
402
|
+
{{@resource.cargo_volume}}
|
|
403
|
+
L
|
|
404
|
+
{{else}}
|
|
405
|
+
{{n-a @resource.cargo_volume}}
|
|
406
|
+
{{/if}}
|
|
407
|
+
</div>
|
|
408
|
+
</div>
|
|
409
|
+
|
|
410
|
+
<div class="field-info-container">
|
|
411
|
+
<div class="field-name">Passenger Volume</div>
|
|
412
|
+
<div class="field-value">
|
|
413
|
+
{{#if @resource.passenger_volume}}
|
|
414
|
+
{{@resource.passenger_volume}}
|
|
415
|
+
L
|
|
416
|
+
{{else}}
|
|
417
|
+
{{n-a @resource.passenger_volume}}
|
|
418
|
+
{{/if}}
|
|
419
|
+
</div>
|
|
420
|
+
</div>
|
|
421
|
+
|
|
422
|
+
<div class="field-info-container">
|
|
423
|
+
<div class="field-name">Interior Volume</div>
|
|
424
|
+
<div class="field-value">
|
|
425
|
+
{{#if @resource.interior_volume}}
|
|
426
|
+
{{@resource.interior_volume}}
|
|
427
|
+
L
|
|
428
|
+
{{else}}
|
|
429
|
+
{{n-a @resource.interior_volume}}
|
|
430
|
+
{{/if}}
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
|
|
434
|
+
<div class="field-info-container">
|
|
435
|
+
<div class="field-name">Ground Clearance</div>
|
|
436
|
+
<div class="field-value">
|
|
437
|
+
{{#if @resource.ground_clearance}}
|
|
438
|
+
{{@resource.ground_clearance}}
|
|
439
|
+
cm
|
|
440
|
+
{{else}}
|
|
441
|
+
{{n-a @resource.ground_clearance}}
|
|
442
|
+
{{/if}}
|
|
443
|
+
</div>
|
|
444
|
+
</div>
|
|
445
|
+
|
|
446
|
+
<div class="field-info-container">
|
|
447
|
+
<div class="field-name">Bed Length</div>
|
|
448
|
+
<div class="field-value">
|
|
449
|
+
{{#if @resource.bed_length}}
|
|
450
|
+
{{@resource.bed_length}}
|
|
451
|
+
cm
|
|
452
|
+
{{else}}
|
|
453
|
+
{{n-a @resource.bed_length}}
|
|
454
|
+
{{/if}}
|
|
455
|
+
</div>
|
|
456
|
+
</div>
|
|
457
|
+
|
|
458
|
+
{{! Regulatory & Compliance }}
|
|
459
|
+
<div class="col-span-3 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3">
|
|
460
|
+
Regulatory & Compliance
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
<div class="field-info-container">
|
|
464
|
+
<div class="field-name">Emission Standard</div>
|
|
465
|
+
<div class="field-value">{{n-a @resource.emission_standard}}</div>
|
|
466
|
+
</div>
|
|
467
|
+
|
|
468
|
+
<div class="field-info-container">
|
|
469
|
+
<div class="field-name">DPF Equipped</div>
|
|
470
|
+
<div class="field-value">
|
|
471
|
+
{{#if (eq @resource.dpf_equipped true)}}
|
|
472
|
+
{{t "common.yes"}}
|
|
473
|
+
{{else if (eq @resource.dpf_equipped false)}}
|
|
474
|
+
{{t "common.no"}}
|
|
475
|
+
{{else}}
|
|
476
|
+
-
|
|
477
|
+
{{/if}}
|
|
478
|
+
</div>
|
|
479
|
+
</div>
|
|
480
|
+
|
|
481
|
+
<div class="field-info-container">
|
|
482
|
+
<div class="field-name">SCR Equipped</div>
|
|
483
|
+
<div class="field-value">
|
|
484
|
+
{{#if (eq @resource.scr_equipped true)}}
|
|
485
|
+
{{t "common.yes"}}
|
|
486
|
+
{{else if (eq @resource.scr_equipped false)}}
|
|
487
|
+
{{t "common.no"}}
|
|
488
|
+
{{else}}
|
|
489
|
+
-
|
|
490
|
+
{{/if}}
|
|
491
|
+
</div>
|
|
492
|
+
</div>
|
|
493
|
+
|
|
494
|
+
<div class="field-info-container">
|
|
495
|
+
<div class="field-name">GVWR</div>
|
|
496
|
+
<div class="field-value">
|
|
497
|
+
{{#if @resource.gvwr}}
|
|
498
|
+
{{@resource.gvwr}}
|
|
499
|
+
kg
|
|
500
|
+
{{else}}
|
|
501
|
+
{{n-a @resource.gvwr}}
|
|
502
|
+
{{/if}}
|
|
503
|
+
</div>
|
|
504
|
+
</div>
|
|
505
|
+
|
|
506
|
+
<div class="field-info-container">
|
|
507
|
+
<div class="field-name">GCWR</div>
|
|
508
|
+
<div class="field-value">
|
|
509
|
+
{{#if @resource.gcwr}}
|
|
510
|
+
{{@resource.gcwr}}
|
|
511
|
+
kg
|
|
512
|
+
{{else}}
|
|
513
|
+
{{n-a @resource.gcwr}}
|
|
514
|
+
{{/if}}
|
|
515
|
+
</div>
|
|
516
|
+
</div>
|
|
517
|
+
</div>
|
|
518
|
+
</ContentPanel>
|
|
519
|
+
|
|
520
|
+
{{! FINANCIAL & LIFECYCLE }}
|
|
521
|
+
<ContentPanel @title="Financial & Lifecycle" @open={{false}} @wrapperClass="bordered-top">
|
|
522
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-2 text-xs dark:text-gray-100">
|
|
523
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-1">
|
|
524
|
+
Asset Values
|
|
525
|
+
</div>
|
|
526
|
+
|
|
527
|
+
<div class="field-info-container">
|
|
528
|
+
<div class="field-name">Acquisition Cost</div>
|
|
529
|
+
<div class="field-value">
|
|
530
|
+
{{format-currency @resource.acquisition_cost @resource.currency}}
|
|
531
|
+
</div>
|
|
532
|
+
</div>
|
|
533
|
+
|
|
534
|
+
<div class="field-info-container">
|
|
535
|
+
<div class="field-name">Current Value</div>
|
|
536
|
+
<div class="field-value">
|
|
537
|
+
{{format-currency @resource.current_value @resource.currency}}
|
|
538
|
+
</div>
|
|
539
|
+
</div>
|
|
540
|
+
|
|
541
|
+
<div class="field-info-container">
|
|
542
|
+
<div class="field-name">Insurance Value</div>
|
|
543
|
+
<div class="field-value">
|
|
544
|
+
{{format-currency @resource.insurance_value @resource.currency}}
|
|
545
|
+
</div>
|
|
546
|
+
</div>
|
|
547
|
+
|
|
548
|
+
<div class="field-info-container">
|
|
549
|
+
<div class="field-name">Depreciation Rate (%)</div>
|
|
550
|
+
<div class="field-value">{{n-a @resource.depreciation_rate}}</div>
|
|
551
|
+
</div>
|
|
552
|
+
|
|
553
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3">
|
|
554
|
+
Lifecycle & Service Life
|
|
555
|
+
</div>
|
|
556
|
+
|
|
557
|
+
<div class="field-info-container">
|
|
558
|
+
<div class="field-name">Estimated Service Life (Distance)</div>
|
|
559
|
+
<div class="field-value">{{n-a @resource.estimated_service_life_distance}}</div>
|
|
560
|
+
</div>
|
|
561
|
+
|
|
562
|
+
<div class="field-info-container">
|
|
563
|
+
<div class="field-name">Service Life Distance Unit</div>
|
|
564
|
+
<div class="field-value">
|
|
565
|
+
{{n-a (get-fleet-ops-option-label "odometerUnits" @resource.estimated_service_life_distance_unit)}}
|
|
566
|
+
</div>
|
|
567
|
+
</div>
|
|
568
|
+
|
|
569
|
+
<div class="field-info-container">
|
|
570
|
+
<div class="field-name">Estimated Service Life (Months)</div>
|
|
571
|
+
<div class="field-value">{{n-a @resource.estimated_service_life_months}}</div>
|
|
572
|
+
</div>
|
|
573
|
+
|
|
574
|
+
<div class="field-info-container">
|
|
575
|
+
<div class="field-name">Purchase Date</div>
|
|
576
|
+
<div class="field-value">
|
|
577
|
+
{{n-a (format-date-fns @resource.purchased_at "dd-MM-yyyy")}}
|
|
578
|
+
</div>
|
|
579
|
+
</div>
|
|
580
|
+
|
|
581
|
+
<div class="field-info-container">
|
|
582
|
+
<div class="field-name">Lease Expiry Date</div>
|
|
583
|
+
<div class="field-value">
|
|
584
|
+
{{n-a (format-date-fns @resource.lease_expires_at "dd-MM-yyyy")}}
|
|
585
|
+
</div>
|
|
586
|
+
</div>
|
|
587
|
+
|
|
588
|
+
<div class="col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3">
|
|
589
|
+
Financing (Loan)
|
|
590
|
+
</div>
|
|
591
|
+
|
|
592
|
+
<div class="field-info-container">
|
|
593
|
+
<div class="field-name">Loan Amount</div>
|
|
594
|
+
<div class="field-value">
|
|
595
|
+
{{format-currency @resource.loan_amount @resource.currency}}
|
|
596
|
+
</div>
|
|
597
|
+
</div>
|
|
598
|
+
|
|
599
|
+
<div class="field-info-container">
|
|
600
|
+
<div class="field-name">Number of Payments</div>
|
|
601
|
+
<div class="field-value">{{n-a @resource.loan_number_of_payments}}</div>
|
|
602
|
+
</div>
|
|
603
|
+
|
|
604
|
+
<div class="field-info-container">
|
|
605
|
+
<div class="field-name">First Payment Date</div>
|
|
606
|
+
<div class="field-value">
|
|
607
|
+
{{n-a (format-date-fns @resource.loan_first_payment "dd-MM-yyyy")}}
|
|
608
|
+
</div>
|
|
609
|
+
</div>
|
|
610
|
+
</div>
|
|
611
|
+
</ContentPanel>
|
|
612
|
+
|
|
613
|
+
{{! CUSTOM FIELDS (view mode) }}
|
|
39
614
|
<CustomField::Yield @subject={{@resource}} @viewMode={{true}} @wrapperClass="bordered-top" />
|
|
40
615
|
|
|
616
|
+
{{! AVATAR }}
|
|
41
617
|
<ContentPanel @title={{t "common.avatar"}} @open={{true}} @wrapperClass="bordered-top">
|
|
42
618
|
<div class="flex px-1">
|
|
43
619
|
<div class="border border-dashed border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-600 rounded-lg flex items-center justify-center">
|
|
44
620
|
<div class="flex items-center justify-center h-20 w-24">
|
|
45
|
-
<Image
|
|
621
|
+
<Image
|
|
622
|
+
alt={{@resource.displayName}}
|
|
623
|
+
src={{or @resource.avatar_custom_url @resource.avatar_url}}
|
|
624
|
+
@fallbackSrc={{config "defaultValues.vehicleAvatar"}}
|
|
625
|
+
class="w-12 h-12"
|
|
626
|
+
/>
|
|
46
627
|
</div>
|
|
47
628
|
</div>
|
|
48
629
|
</div>
|
|
49
630
|
</ContentPanel>
|
|
50
631
|
|
|
51
|
-
|
|
632
|
+
{{! METADATA }}
|
|
633
|
+
<ContentPanel
|
|
634
|
+
@title={{t "common.metadata"}}
|
|
635
|
+
@open={{true}}
|
|
636
|
+
@actionButtons={{this.metadataButtons}}
|
|
637
|
+
@wrapperClass="bordered-top"
|
|
638
|
+
@panelBodyWrapperClass={{unless (is-object-empty @resource.meta) "px-0i" ""}}
|
|
639
|
+
>
|
|
52
640
|
<MetadataViewer @metadata={{@resource.meta}} />
|
|
53
641
|
</ContentPanel>
|
|
642
|
+
|
|
643
|
+
<Spacer @height="300px" />
|
|
54
644
|
</div>
|