@fleetbase/fleetops-engine 0.4.3 → 0.4.5

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.
Files changed (116) hide show
  1. package/addon/components/contact-form-panel.hbs +1 -0
  2. package/addon/components/driver-panel.hbs +1 -0
  3. package/addon/components/edit-order-route-panel.hbs +183 -0
  4. package/addon/components/edit-order-route-panel.js +265 -0
  5. package/addon/components/fleet-form-panel.hbs +1 -0
  6. package/addon/components/fleet-panel.hbs +1 -0
  7. package/addon/components/fleet-panel.js +3 -3
  8. package/addon/components/fuel-report-form-panel.hbs +1 -0
  9. package/addon/components/fuel-report-panel.hbs +1 -0
  10. package/addon/components/issue-form-panel.hbs +1 -0
  11. package/addon/components/issue-panel.hbs +1 -0
  12. package/addon/components/map-container/toolbar.hbs +2 -2
  13. package/addon/components/modals/order-route-form.hbs +1 -1
  14. package/addon/components/place-form-panel.hbs +1 -0
  15. package/addon/components/place-panel.hbs +1 -0
  16. package/addon/components/vehicle-form-panel.hbs +1 -0
  17. package/addon/components/vehicle-panel.hbs +1 -0
  18. package/addon/components/vendor-form-panel.hbs +1 -0
  19. package/addon/components/vendor-panel.hbs +1 -0
  20. package/addon/components/widget/fleet-ops-key-metrics.hbs +19 -0
  21. package/addon/components/widget/fleet-ops-key-metrics.js +85 -0
  22. package/addon/controllers/operations/orders/index/new.js +66 -22
  23. package/addon/controllers/operations/orders/index/view.js +131 -126
  24. package/addon/controllers/operations/orders/index.js +1 -1
  25. package/addon/engine.js +18 -12
  26. package/addon/routes/operations/orders/index/view.js +1 -1
  27. package/addon/services/context-panel.js +6 -0
  28. package/addon/styles/fleetops-engine.css +7 -2
  29. package/addon/templates/operations/orders/index/new.hbs +390 -58
  30. package/addon/templates/operations/orders/index/view.hbs +135 -105
  31. package/addon/templates/operations/service-rates/index/new.hbs +3 -1
  32. package/app/components/widget/{issues.js → fleet-ops-key-metrics.js} +1 -1
  33. package/composer.json +6 -6
  34. package/extension.json +1 -1
  35. package/package.json +5 -6
  36. package/server/src/Casts/MultiPolygon.php +3 -3
  37. package/server/src/Casts/Point.php +2 -2
  38. package/server/src/Casts/Polygon.php +3 -3
  39. package/server/src/Console/Commands/DispatchAdhocOrders.php +1 -1
  40. package/server/src/Events/DriverSimulatedLocationChanged.php +1 -1
  41. package/server/src/Flow/Activity.php +12 -0
  42. package/server/src/Flow/Config.php +7 -0
  43. package/server/src/Flow/Logic.php +7 -0
  44. package/server/src/Http/Controllers/Api/v1/DriverController.php +61 -21
  45. package/server/src/Http/Controllers/Api/v1/OrderController.php +5 -3
  46. package/server/src/Http/Controllers/Api/v1/PlaceController.php +1 -1
  47. package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +1 -1
  48. package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +1 -1
  49. package/server/src/Http/Controllers/Api/v1/ZoneController.php +1 -1
  50. package/server/src/Http/Controllers/Internal/v1/DriverController.php +17 -4
  51. package/server/src/Http/Controllers/Internal/v1/GeocoderController.php +2 -2
  52. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +6 -50
  53. package/server/src/Http/Controllers/Internal/v1/OrderController.php +13 -2
  54. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +1 -1
  55. package/server/src/Http/Filter/PlaceFilter.php +1 -1
  56. package/server/src/Http/Resources/v1/Driver.php +1 -1
  57. package/server/src/Http/Resources/v1/FuelReport.php +1 -1
  58. package/server/src/Http/Resources/v1/Issue.php +1 -1
  59. package/server/src/Http/Resources/v1/Order.php +3 -0
  60. package/server/src/Http/Resources/v1/Payload.php +1 -0
  61. package/server/src/Http/Resources/v1/Place.php +1 -1
  62. package/server/src/Http/Resources/v1/PurchaseRate.php +2 -1
  63. package/server/src/Http/Resources/v1/ServiceQuote.php +1 -0
  64. package/server/src/Http/Resources/v1/ServiceQuoteItem.php +29 -0
  65. package/server/src/Http/Resources/v1/TrackingStatus.php +1 -1
  66. package/server/src/Http/Resources/v1/Vehicle.php +1 -1
  67. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +1 -1
  68. package/server/src/Http/Resources/v1/Waypoint.php +2 -4
  69. package/server/src/Integrations/Lalamove/LalamoveDeliveryStop.php +2 -2
  70. package/server/src/Jobs/SimulateWaypointReached.php +2 -2
  71. package/server/src/Models/Contact.php +6 -18
  72. package/server/src/Models/Driver.php +8 -20
  73. package/server/src/Models/Fleet.php +6 -25
  74. package/server/src/Models/FuelReport.php +1 -1
  75. package/server/src/Models/Issue.php +1 -1
  76. package/server/src/Models/Order.php +31 -19
  77. package/server/src/Models/Payload.php +7 -7
  78. package/server/src/Models/Place.php +16 -16
  79. package/server/src/Models/Position.php +1 -1
  80. package/server/src/Models/ServiceArea.php +14 -14
  81. package/server/src/Models/TrackingNumber.php +1 -1
  82. package/server/src/Models/TrackingStatus.php +1 -1
  83. package/server/src/Models/Vehicle.php +7 -19
  84. package/server/src/Models/VehicleDeviceEvent.php +1 -1
  85. package/server/src/Models/Vendor.php +8 -25
  86. package/server/src/Models/Waypoint.php +6 -6
  87. package/server/src/Models/Zone.php +8 -8
  88. package/server/src/Observers/DriverObserver.php +7 -2
  89. package/server/src/Observers/TrackingNumberObserver.php +1 -1
  90. package/server/src/Rules/ResolvablePoint.php +1 -1
  91. package/server/src/Support/Encoding/Polyline.php +1 -1
  92. package/server/src/Support/OSRM.php +1 -1
  93. package/server/src/Support/Utils.php +60 -60
  94. package/server/src/Traits/HasTrackingNumber.php +3 -3
  95. package/server/src/routes.php +2 -4
  96. package/translations/en-us.yaml +10 -2
  97. package/addon/components/widget/fleet-ops-quickstart.hbs +0 -40
  98. package/addon/components/widget/fleet-ops-quickstart.js +0 -59
  99. package/addon/components/widget/issues.hbs +0 -1
  100. package/addon/components/widget/key-metrics.hbs +0 -121
  101. package/addon/components/widget/key-metrics.js +0 -46
  102. package/addon/components/widget/live-order-map.hbs +0 -59
  103. package/addon/components/widget/live-order-map.js +0 -11
  104. package/addon/components/widget/recent-orders.hbs +0 -35
  105. package/addon/components/widget/recent-orders.js +0 -24
  106. package/addon/components/widget/transaction-earnings.hbs +0 -1
  107. package/addon/components/widget/transactions.hbs +0 -36
  108. package/addon/components/widget/transactions.js +0 -29
  109. package/addon/components/widget/weekly-orders.hbs +0 -1
  110. package/addon/components/widget/weekly-orders.js +0 -3
  111. package/app/components/widget/key-metrics.js +0 -1
  112. package/app/components/widget/live-order-map.js +0 -1
  113. package/app/components/widget/recent-orders.js +0 -1
  114. package/app/components/widget/transaction-earnings.js +0 -1
  115. package/app/components/widget/transactions.js +0 -1
  116. package/app/components/widget/weekly-orders.js +0 -1
@@ -1,12 +1,5 @@
1
- <Overlay @position="right" @noBackdrop={{true}} @width="570px" @fullHeight={{true}} @isResizable={{true}} @onLoad={{this.setupInterface}} as |overlay|>
2
- <Overlay::Header
3
- @overlay={{overlay}}
4
- @title={{@model.public_id}}
5
- @status={{@model.status}}
6
- @dispatched={{@model.dispatched}}
7
- @createdAt={{@model.createdAt}}
8
- @onPressCancel={{this.transitionBack}}
9
- >
1
+ <Overlay @position="right" @noBackdrop={{true}} @width="550px" @fullHeight={{true}} @isResizable={{true}} @onLoad={{this.setupInterface}} as |overlay|>
2
+ <Overlay::Header @overlay={{overlay}} @title={{@model.public_id}} @status={{@model.status}} @dispatched={{@model.dispatched}} @createdAt={{@model.createdAt}} @onPressCancel={{this.transitionBack}}>
10
3
  {{#if @model.canBeDispatched}}
11
4
  <Button @type="primary" @icon="paper-plane" @text={{t "fleet-ops.operations.orders.index.view.dispatch"}} class="mr-2" @onClick={{fn this.dispatchOrder @model}} />
12
5
  {{/if}}
@@ -87,15 +80,8 @@
87
80
  </DropdownButton>
88
81
  </Overlay::Header>
89
82
 
90
- <Overlay::Body @wrapperClass="new-order-overlay-body" @increaseInnerBodyHeightBy={{1000}}>
91
- <ContentPanel
92
- @title={{t "fleet-ops.operations.orders.index.view.activity"}}
93
- @open={{true}}
94
- @pad={{false}}
95
- @isLoading={{not this.loadOrderRelations.isIdle}}
96
- @panelBodyWrapperClass="px-0 py-4"
97
- @panelBodyClass="bg-white dark:bg-gray-800"
98
- >
83
+ <Overlay::Body @wrapperClass="new-order-overlay-body">
84
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.activity"}} @open={{true}} @pad={{false}} @isLoading={{not this.loadOrderRelations.isIdle}} @panelBodyWrapperClass="px-0 py-4" @panelBodyClass="bg-white dark:bg-gray-800">
99
85
  {{#if @model.tracking_statuses}}
100
86
  <Timeline @activity={{@model.tracking_statuses}} @arrowClass="bg-gray-600 border border-gray-900 shadow-md" as |TimelineItem|>
101
87
  <TimelineItem @activeStatus={{@model.status}} as |trackingStatus|>
@@ -135,12 +121,7 @@
135
121
  <div class="field-name">{{t "fleet-ops.operations.orders.index.view.customer"}}</div>
136
122
  <div class="flex flex-row">
137
123
  <div>
138
- <Image
139
- src={{avatar-url @model.customer.photo_url}}
140
- @fallbackSrc={{config "defaultValues.contactImage"}}
141
- class="w-8 h-8 rounded-md shadow-sm mr-2"
142
- alt={{@model.customer.name}}
143
- />
124
+ <Image src={{avatar-url @model.customer.photo_url}} @fallbackSrc={{config "defaultValues.contactImage"}} class="w-8 h-8 rounded-md shadow-sm mr-2" alt={{@model.customer.name}} />
144
125
  </div>
145
126
  <div>
146
127
  <div class="field-value">{{n-a @model.customer.name "No Customer"}}</div>
@@ -155,12 +136,7 @@
155
136
  {{#if @model.facilitator.isIntegratedVendor}}
156
137
  <div class="flex flex-row">
157
138
  <div>
158
- <Image
159
- src={{avatar-url @model.facilitator.photo_url}}
160
- @fallbackSrc={{config "defaultValues.contactImage"}}
161
- class="w-8 h-8 rounded-md border border-gray-200 dark:border-gray-900 shadow-sm mr-2"
162
- alt={{@model.facilitator.name}}
163
- />
139
+ <Image src={{avatar-url @model.facilitator.photo_url}} @fallbackSrc={{config "defaultValues.contactImage"}} class="w-8 h-8 rounded-md border border-gray-200 dark:border-gray-900 shadow-sm mr-2" alt={{@model.facilitator.name}} />
164
140
  </div>
165
141
  <div>
166
142
  <div class="field-value">{{n-a @model.facilitator.name}}</div>
@@ -177,14 +153,7 @@
177
153
  <div>
178
154
  <a href="javascript:;" class="flex flex-row" {{on "click" (fn this.focusOrderAssignedDriver @model)}}>
179
155
  <div>
180
- <Image
181
- src={{avatar-url @model.driver_assigned.photo_url}}
182
- @fallbackSrc={{config "defaultValues.driverImage"}}
183
- width="32"
184
- height="32"
185
- class="w-8 h-8 rounded-md shadow-sm mr-3 lg:mr-2"
186
- alt={{@model.driver_assigned.name}}
187
- />
156
+ <Image src={{avatar-url @model.driver_assigned.photo_url}} @fallbackSrc={{config "defaultValues.driverImage"}} width="32" height="32" class="w-8 h-8 rounded-md shadow-sm mr-3 lg:mr-2" alt={{@model.driver_assigned.name}} />
188
157
  </div>
189
158
  <div class="field-value">
190
159
  <div>{{n-a @model.driver_assigned.name "No Driver"}}</div>
@@ -194,13 +163,7 @@
194
163
  </div>
195
164
  </a>
196
165
  <div class="mt-1">
197
- <Button
198
- @size="xs"
199
- @type="default"
200
- @icon="edit"
201
- @text={{if @model.has_driver_assigned (t "fleet-ops.operations.orders.index.view.change-driver") (t "fleet-ops.operations.orders.index.view.assign-driver")}}
202
- @onClick={{fn this.assignDriver @model}}
203
- />
166
+ <Button @size="xs" @type="default" @icon="edit" @text={{if @model.has_driver_assigned (t "fleet-ops.operations.orders.index.view.change-driver") (t "fleet-ops.operations.orders.index.view.assign-driver")}} @onClick={{fn this.assignDriver @model}} />
204
167
  </div>
205
168
  </div>
206
169
  </div>
@@ -239,25 +202,56 @@
239
202
  </div>
240
203
  </ContentPanel>
241
204
 
205
+ {{#if @model.purchase_rate}}
206
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.purchase-rate-panel-title"}} @open={{true}} @pad={{false}} @panelBodyClass="bg-white dark:bg-gray-800">
207
+ <div class="order-view-purchase-rate-table-wrapper next-table-wrapper h-auto table-fluid rounded-b-md">
208
+ <table id="order-view-purchase-rate-table" class="table table-fixed flex-1">
209
+ <thead>
210
+ <tr>
211
+ <th class="text-left">{{t "fleet-ops.operations.orders.index.new.breakdown"}}</th>
212
+ <th>
213
+ <div class="flex flex-row items-center justify-end">{{@model.purchase_rate.service_quote.currency}}</div>
214
+ </th>
215
+ </tr>
216
+ </thead>
217
+ <tbody>
218
+ {{#each @model.purchase_rate.service_quote.items as |item|}}
219
+ <tr>
220
+ <td>
221
+ <span class="font-semibold">{{smart-humanize item.details}}</span>
222
+ </td>
223
+ <td>
224
+ <div class="flex flex-row items-center justify-end">{{format-currency item.amount @model.purchase_rate.service_quote.currency}}</div>
225
+ </td>
226
+ </tr>
227
+ {{/each}}
228
+ <tr class="border-b-0">
229
+ <td class="border-b-0">
230
+ <span class="font-semibold">{{t "fleet-ops.common.total"}}</span>
231
+ </td>
232
+ <td class="border-b-0">
233
+ <div class="flex flex-row items-center justify-end">{{format-currency @model.purchase_rate.service_quote.amount @model.purchase_rate.service_quote.currency}}</div>
234
+ </td>
235
+ </tr>
236
+ </tbody>
237
+ </table>
238
+ </div>
239
+ </ContentPanel>
240
+ {{/if}}
241
+
242
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.notes-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
243
+ <p class="text-gray-700 dark:text-gray-300 leading-5 text-sm">{{n-a @model.notes}}</p>
244
+ </ContentPanel>
245
+
242
246
  {{#if @model.isIntegratedVendorOrder}}
243
- <ContentPanel
244
- @title={{concat @model.facilitator.name (t "fleet-ops.operations.orders.index.view.order-details-title")}}
245
- @open={{true}}
246
- @pad={{true}}
247
- @panelBodyClass="bg-white dark:bg-gray-800"
248
- >
247
+ <ContentPanel @title={{concat @model.facilitator.name (t "fleet-ops.operations.orders.index.view.order-details-title")}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
249
248
  <IntegratedOrderDetails @integratedVendor={{@model.facilitator}} @details={{@model.meta.integrated_vendor_order}} />
250
249
  </ContentPanel>
251
250
  {{/if}}
252
251
 
253
252
  {{#if @model.order_config}}
254
253
  {{#each @model.groupedMetaFields as |group|}}
255
- <ContentPanel
256
- @title={{if group.value (humanize group.value) (t "fleet-ops.operations.orders.index.view.additional-details-title")}}
257
- @open={{true}}
258
- @pad={{true}}
259
- @panelBodyClass="bg-white dark:bg-gray-800"
260
- >
254
+ <ContentPanel @title={{if group.value (humanize group.value) (t "fleet-ops.operations.orders.index.view.additional-details-title")}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
261
255
  <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-2">
262
256
  {{#each group.items as |metaField|}}
263
257
  <div class="field-info-container space-y-2">
@@ -273,14 +267,7 @@
273
267
  {{/if}}
274
268
 
275
269
  {{#if @model.tracking_number}}
276
- <ContentPanel
277
- @title={{t "fleet-ops.operations.orders.index.view.tracking"}}
278
- @prefixTitleRight={{@model.tracking}}
279
- @isLoading={{not this.loadOrderRelations.isIdle}}
280
- @open={{true}}
281
- @pad={{true}}
282
- @panelBodyClass="bg-white dark:bg-gray-800"
283
- >
270
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.tracking"}} @prefixTitleRight={{@model.tracking}} @isLoading={{not this.loadOrderRelations.isIdle}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
284
271
  <div class="mb-4 flex justify-end">
285
272
  <Button @size="xs" @type="default" @icon="barcode" @text="Get Order Label" @onClick={{fn this.viewOrderLabel @model}} />
286
273
  </div>
@@ -295,7 +282,7 @@
295
282
  </ContentPanel>
296
283
  {{/if}}
297
284
 
298
- <ContentPanel @title="Route" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800" @actionButtons={{this.routePanelButtons}}>
285
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.route-panel-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800" @actionButtons={{this.routePanelButtons}}>
299
286
  {{#if @model.payload.isMultiDrop}}
300
287
  <div>
301
288
  <RouteList @order={{@model}} />
@@ -319,14 +306,7 @@
319
306
  </ContentPanel>
320
307
 
321
308
  {{#if @model.isStorefrontOrder}}
322
- <ContentPanel
323
- @title={{t "fleet-ops.operations.orders.index.view.order-summary"}}
324
- @prefixTitleRight={{if @model.payload.cod_amount "Cash" ""}}
325
- @prefixTitleRightClass="text-green-400"
326
- @open={{true}}
327
- @pad={{true}}
328
- @panelBodyClass="bg-white dark:bg-gray-800"
329
- >
309
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.order-summary"}} @prefixTitleRight={{if @model.payload.cod_amount "Cash" ""}} @prefixTitleRightClass="text-green-400" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
330
310
  <div class="flex flex-col space-y-4 p-2 overflow-hidden">
331
311
  {{#each @model.payload.entities as |entity|}}
332
312
  <div class="flex flex-1">
@@ -399,7 +379,7 @@
399
379
  </ContentPanel>
400
380
  {{/if}}
401
381
 
402
- <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.payload"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
382
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.payload"}} @open={{gt @model.payload.entities.length 0}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
403
383
  {{#if this.isMultiDropOrder}}
404
384
  <div class="space-y-2">
405
385
  {{#each this.entitiesByDestination as |group|}}
@@ -419,15 +399,7 @@
419
399
  <Badge @status={{group.waypoint.status_code}} />
420
400
  </div>
421
401
  <div class="flex items-start">
422
- <DropdownButton
423
- @triggerClass="mr-2"
424
- @iconClass="icon-text-height"
425
- @buttonSize="sm"
426
- @icon="ellipsis-h"
427
- @iconPrefix="fas"
428
- @contentClass="dropdown-menu"
429
- as |dd|
430
- >
402
+ <DropdownButton @triggerClass="mr-2" @iconClass="icon-text-height" @buttonSize="sm" @icon="ellipsis-h" @iconPrefix="fas" @contentClass="dropdown-menu" as |dd|>
431
403
  <div class="next-dd-menu mt-1 mx-0" aria-labelledby="user-menu">
432
404
  <div class="px-1">
433
405
  <div class="text-sm flex flex-row items-center px-3 py-1 rounded-md my-1 text-gray-300">
@@ -445,13 +417,7 @@
445
417
  </div>
446
418
  </div>
447
419
  </DropdownButton>
448
- <Button
449
- @icon="plus"
450
- @iconPrefix="fas"
451
- @text={{t "fleet-ops.operations.orders.index.view.add-item-button"}}
452
- @size="sm"
453
- @onClick={{fn this.addEntity group.waypoint}}
454
- />
420
+ <Button @icon="plus" @iconPrefix="fas" @text={{t "fleet-ops.operations.orders.index.view.add-item-button"}} @size="sm" @onClick={{fn this.addEntity group.waypoint}} />
455
421
  </div>
456
422
  </div>
457
423
  </div>
@@ -469,12 +435,7 @@
469
435
  <div class="dark:text-gray-100 truncate mb-2">
470
436
  {{entity.tracking}}
471
437
  </div>
472
- <Button
473
- @icon="pencil"
474
- @text={{t "fleet-ops.operations.orders.index.view.edit-item-button"}}
475
- @size="xs"
476
- @onClick={{fn this.editEntity entity}}
477
- />
438
+ <Button @icon="pencil" @text={{t "fleet-ops.operations.orders.index.view.edit-item-button"}} @size="xs" @onClick={{fn this.editEntity entity}} />
478
439
  </div>
479
440
  <div class="absolute top-0 right-0 p-2">
480
441
  <Button @icon="times" @iconPrefix="fas" @type="danger" @size="xs" @onClick={{fn this.removeEntity entity}} />
@@ -504,14 +465,7 @@
504
465
  <Button @icon="pencil" @text={{t "fleet-ops.operations.orders.index.view.edit-item-button"}} @size="sm" @onClick={{fn this.editEntity entity}} />
505
466
  </div>
506
467
  <div class="absolute top-0 right-0 p-2">
507
- <Button
508
- @icon="times"
509
- @iconPrefix="fas"
510
- @type="danger"
511
- @size="xs"
512
- @onClick={{fn this.removeEntity entity}}
513
- @wrapperClass={{if (eq index 0) "invisible"}}
514
- />
468
+ <Button @icon="times" @iconPrefix="fas" @type="danger" @size="xs" @onClick={{fn this.removeEntity entity}} @wrapperClass={{if (eq index 0) "invisible"}} />
515
469
  </div>
516
470
  </div>
517
471
  </div>
@@ -519,5 +473,81 @@
519
473
  </div>
520
474
  {{/if}}
521
475
  </ContentPanel>
476
+
477
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.documents-panel-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
478
+ <div class="space-y-4">
479
+ {{#if this.isUploading}}
480
+ <div
481
+ class="dropzone w-full rounded-lg px-4 py-8 bg-gray-50 dark:bg-gray-900 bg-opacity-25 text-gray-900 dark:text-white text-center flex flex-col items-center justify-center border-2 border-dashed border-gray-200 dark:border-indigo-500"
482
+ >
483
+ <div class="flex items-center justify-center py-5">
484
+ <Spinner class="text-sm dar:text-gray-100" @loadingMessage={{t "fleet-ops.common.uploading"}} />
485
+ </div>
486
+ </div>
487
+ {{else}}
488
+ {{#let (file-queue name="files" onFileAdded=this.queueFile accept=(join "," this.acceptedFileTypes)) as |queue|}}
489
+ <FileDropzone @queue={{queue}} class="dropzone file-dropzone" as |dropzone|>
490
+ {{#if dropzone.active}}
491
+ {{#if dropzone.valid}}
492
+ {{t "component.dropzone.drop-to-upload"}}
493
+ {{else}}
494
+ {{t "component.dropzone.invalid"}}
495
+ {{/if}}
496
+ {{else if queue.files.length}}
497
+ <div class="my-2">
498
+ <FaIcon @icon="folder-open" class="text-indigo-500 mr-2" />
499
+ {{t "component.dropzone.files-ready-for-upload" numOfFiles=(pluralize queue.files.length (t "component.dropzone.file"))}}
500
+ </div>
501
+ <div class="my-2">({{queue.progress}}%)</div>
502
+ {{else}}
503
+ <h4 class="font-semibold">
504
+ <FaIcon @icon="folder-open" @size="lg" class="text-indigo-500 mr-2" />
505
+ {{t "component.dropzone.upload-documents-files"}}
506
+ </h4>
507
+ <div>
508
+ {{#if dropzone.supported}}
509
+ <p class="text-sm my-5">{{t "component.dropzone.dropzone-supported-files"}}</p>
510
+ {{/if}}
511
+ <FileUpload @name="files" @for="files" @accept={{join "," this.acceptedFileTypes}} @multiple={{true}} @onFileAdded={{this.queueFile}}>
512
+ <a tabindex={{0}} class="btn btn-magic cursor-pointer ml-1">{{t "component.dropzone.or-select-button-text"}}</a>
513
+ </FileUpload>
514
+ </div>
515
+ {{/if}}
516
+ </FileDropzone>
517
+ {{/let}}
518
+ {{#if this.uploadQueue}}
519
+ <div class="mx-4">
520
+ <div class="flex items-center justify-between mb-4">
521
+ <span class="leading-6 dark:text-gray-100">{{t "component.dropzone.upload-queue"}}</span>
522
+ </div>
523
+ <div class="space-y-2 mb-4">
524
+ {{#each this.uploadQueue as |file|}}
525
+ <div class="flex items-center justify-between bg-blue-100 border border-blue-800 dark:border-blue-800 py-1.5 shadow-sm rounded-lg px-4">
526
+ <div class="text-xs text-blue-900 truncate">{{truncate-filename file.name 50}}</div>
527
+ <div class="flex items-center text-sm">
528
+ <Spinner class="text-blue-900 mr-2" />
529
+ <span class="font-bold text-blue-900">{{round file.progress}}%</span>
530
+ </div>
531
+ </div>
532
+ {{/each}}
533
+ </div>
534
+ </div>
535
+ {{/if}}
536
+ <div>
537
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-2 md:gap-4">
538
+ {{#each @model.files as |file|}}
539
+ <File @file={{file}} @onDelete={{this.removeFile}} />
540
+ {{/each}}
541
+ </div>
542
+ </div>
543
+ {{/if}}
544
+ </div>
545
+ </ContentPanel>
546
+
547
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.comments-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800" @wrapperClass="mb-20">
548
+ <CommentThread @subject={{@model}} @subjectType="fleet-ops:order" />
549
+ </ContentPanel>
550
+
551
+ <Spacer @height="300px" />
522
552
  </Overlay::Body>
523
553
  </Overlay>
@@ -7,7 +7,7 @@
7
7
  {{/if}}
8
8
  </Overlay::Header>
9
9
 
10
- <Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 space-y-4 pt-4" @increaseInnerBodyHeightBy={{1000}}>
10
+ <Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 space-y-4 pt-4">
11
11
  <div>
12
12
  <div class="grid grid-cols-2 gap-2">
13
13
  <div class="input-group">
@@ -302,5 +302,7 @@
302
302
  </div>
303
303
  {{/if}}
304
304
  </ContentPanel>
305
+
306
+ <Spacer @height="300px" />
305
307
  </Overlay::Body>
306
308
  </Overlay>
@@ -1 +1 @@
1
- export { default } from '@fleetbase/fleetops-engine/components/widget/issues';
1
+ export { default } from '@fleetbase/fleetops-engine/components/widget/fleet-ops-key-metrics';
package/composer.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetbase/fleetops-api",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "keywords": [
6
6
  "fleetbase-extension",
@@ -21,15 +21,15 @@
21
21
  }
22
22
  ],
23
23
  "require": {
24
- "php": "^7.4|^8.0",
25
- "fleetbase/core-api": "^1.3.12",
24
+ "php": "^8.0",
25
+ "fleetbase/core-api": "^1.4.0",
26
26
  "barryvdh/laravel-dompdf": "^2.0",
27
27
  "brick/geo": "0.7.2",
28
28
  "cknow/laravel-money": "^7.1",
29
29
  "geocoder-php/google-maps-places-provider": "^1.4",
30
30
  "giggsey/libphonenumber-for-php": "^8.13",
31
31
  "league/geotools": "^1.1.0",
32
- "milon/barcode": "^9.0",
32
+ "milon/barcode": "^10.0",
33
33
  "php-http/guzzle7-adapter": "^1.0",
34
34
  "psr/http-factory-implementation": "*",
35
35
  "toin0u/geocoder-laravel": "^4.4",
@@ -37,8 +37,8 @@
37
37
  },
38
38
  "require-dev": {
39
39
  "friendsofphp/php-cs-fixer": "^3.34.1",
40
- "nunomaduro/collision": "^5.11.0|^6.4.0",
41
- "pestphp/pest": "^1.22.6",
40
+ "nunomaduro/collision": "^7.0",
41
+ "pestphp/pest": "^2.33.2",
42
42
  "phpstan/phpstan": "^1.10.38",
43
43
  "symfony/var-dumper": "^5.4.29"
44
44
  },
package/extension.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Fleet-Ops",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "repository": "https://github.com/fleetbase/fleetops",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "@fleetbase/fleetops-engine",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "fleetbase": {
6
- "route": "fleet-ops",
7
- "dashboard": "int/v1/fleet-ops/dashboard"
6
+ "route": "fleet-ops"
8
7
  },
9
8
  "keywords": [
10
9
  "fleetbase-extension",
@@ -43,9 +42,9 @@
43
42
  },
44
43
  "dependencies": {
45
44
  "@babel/core": "^7.23.2",
46
- "@fleetbase/ember-core": "^0.2.1",
47
- "@fleetbase/ember-ui": "^0.2.9",
48
- "@fleetbase/fleetops-data": "^0.1.7",
45
+ "@fleetbase/ember-core": "^0.2.3",
46
+ "@fleetbase/ember-ui": "^0.2.10",
47
+ "@fleetbase/fleetops-data": "^0.1.8",
49
48
  "@fleetbase/leaflet-routing-machine": "^3.2.16",
50
49
  "@fortawesome/ember-fontawesome": "^0.4.1",
51
50
  "@fortawesome/fontawesome-svg-core": "^6.4.0",
@@ -3,9 +3,9 @@
3
3
  namespace Fleetbase\FleetOps\Casts;
4
4
 
5
5
  use Fleetbase\FleetOps\Support\Utils;
6
- use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialExpression;
7
- use Grimzy\LaravelMysqlSpatial\Types\GeometryInterface;
8
- use Grimzy\LaravelMysqlSpatial\Types\MultiPolygon as SpatialMultiPolygon;
6
+ use Fleetbase\LaravelMysqlSpatial\Eloquent\SpatialExpression;
7
+ use Fleetbase\LaravelMysqlSpatial\Types\GeometryInterface;
8
+ use Fleetbase\LaravelMysqlSpatial\Types\MultiPolygon as SpatialMultiPolygon;
9
9
  use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
10
10
 
11
11
  class MultiPolygon implements CastsAttributes
@@ -3,8 +3,8 @@
3
3
  namespace Fleetbase\FleetOps\Casts;
4
4
 
5
5
  use Fleetbase\FleetOps\Support\Utils;
6
- use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialExpression;
7
- use Grimzy\LaravelMysqlSpatial\Types\GeometryInterface;
6
+ use Fleetbase\LaravelMysqlSpatial\Eloquent\SpatialExpression;
7
+ use Fleetbase\LaravelMysqlSpatial\Types\GeometryInterface;
8
8
  use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
9
9
  use Illuminate\Database\Query\Expression;
10
10
 
@@ -3,9 +3,9 @@
3
3
  namespace Fleetbase\FleetOps\Casts;
4
4
 
5
5
  use Fleetbase\FleetOps\Support\Utils;
6
- use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialExpression;
7
- use Grimzy\LaravelMysqlSpatial\Types\GeometryInterface;
8
- use Grimzy\LaravelMysqlSpatial\Types\Polygon as SpatialPolygon;
6
+ use Fleetbase\LaravelMysqlSpatial\Eloquent\SpatialExpression;
7
+ use Fleetbase\LaravelMysqlSpatial\Types\GeometryInterface;
8
+ use Fleetbase\LaravelMysqlSpatial\Types\Polygon as SpatialPolygon;
9
9
  use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
10
10
 
11
11
  class Polygon implements CastsAttributes
@@ -5,7 +5,7 @@ namespace Fleetbase\FleetOps\Console\Commands;
5
5
  use Fleetbase\FleetOps\Models\Driver;
6
6
  use Fleetbase\FleetOps\Models\Order;
7
7
  use Fleetbase\FleetOps\Support\Utils;
8
- use Grimzy\LaravelMysqlSpatial\Types\Point;
8
+ use Fleetbase\LaravelMysqlSpatial\Types\Point;
9
9
  use Illuminate\Console\Command;
10
10
  use Illuminate\Support\Carbon;
11
11
 
@@ -3,7 +3,7 @@
3
3
  namespace Fleetbase\FleetOps\Events;
4
4
 
5
5
  use Fleetbase\FleetOps\Models\Driver;
6
- use Grimzy\LaravelMysqlSpatial\Types\Point;
6
+ use Fleetbase\LaravelMysqlSpatial\Types\Point;
7
7
  use Illuminate\Broadcasting\Channel;
8
8
  use Illuminate\Broadcasting\InteractsWithSockets;
9
9
  use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -0,0 +1,12 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Flow;
4
+
5
+ use Fleetbase\Models\Model;
6
+
7
+ class Activity {
8
+ protected string $status;
9
+ protected string $code;
10
+ protected string $details;
11
+ protected Model $owner;
12
+ }
@@ -0,0 +1,7 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Flow;
4
+
5
+ class Config {
6
+
7
+ }
@@ -0,0 +1,7 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Flow;
4
+
5
+ class Logic {
6
+
7
+ }