@fleetbase/fleetops-engine 0.6.52 → 0.6.53

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 (60) hide show
  1. package/addon/components/layout/fleet-ops-sidebar/operations-monitor.hbs +201 -0
  2. package/addon/components/layout/fleet-ops-sidebar/operations-monitor.js +589 -0
  3. package/addon/components/layout/fleet-ops-sidebar.hbs +19 -233
  4. package/addon/components/layout/fleet-ops-sidebar.js +287 -394
  5. package/addon/components/maintenance-schedule/form.js +1 -0
  6. package/addon/components/order/form/payload.js +3 -1
  7. package/addon/controllers/connectivity/devices/index.js +4 -1
  8. package/addon/controllers/maintenance/index.js +100 -0
  9. package/addon/controllers/management/fuel-transactions/index.js +1 -1
  10. package/addon/controllers/management/index.js +88 -0
  11. package/addon/controllers/settings/index.js +142 -0
  12. package/addon/extension.js +21 -0
  13. package/addon/routes/analytics/index.js +3 -0
  14. package/addon/routes/connectivity/devices/index.js +3 -0
  15. package/addon/routes/maintenance/index.js +3 -0
  16. package/addon/routes/maintenance/work-orders/index.js +2 -0
  17. package/addon/routes/settings/index.js +3 -0
  18. package/addon/styles/fleetops-engine.css +1801 -2
  19. package/addon/templates/analytics/index.hbs +14 -0
  20. package/addon/templates/analytics/reports/index.hbs +4 -4
  21. package/addon/templates/maintenance/index.hbs +113 -0
  22. package/addon/templates/management/fuel-transactions/index/details.hbs +1 -1
  23. package/addon/templates/management/index.hbs +109 -73
  24. package/addon/templates/operations/orders/index.hbs +1 -1
  25. package/addon/templates/operations/service-rates/index.hbs +1 -1
  26. package/addon/templates/settings/index.hbs +83 -0
  27. package/addon/templates/settings/routing.hbs +2 -2
  28. package/app/controllers/maintenance/index.js +1 -0
  29. package/app/controllers/management/index.js +1 -0
  30. package/app/controllers/settings/index.js +1 -0
  31. package/app/routes/analytics/index.js +1 -0
  32. package/app/routes/maintenance/index.js +1 -0
  33. package/app/routes/settings/index.js +1 -0
  34. package/app/templates/analytics/index.js +1 -0
  35. package/app/templates/maintenance/index.js +1 -0
  36. package/app/templates/management/index.js +1 -0
  37. package/app/templates/settings/index.js +1 -0
  38. package/composer.json +1 -1
  39. package/extension.json +1 -1
  40. package/package.json +3 -3
  41. package/server/migrations/2026_06_15_000001_normalize_device_attachable_vehicle_morph_types.php +30 -0
  42. package/server/src/Console/Commands/FixInvalidPolymorphicRelationTypeNamespaces.php +1 -0
  43. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +75 -11
  44. package/server/src/Http/Controllers/Internal/v1/HubController.php +300 -0
  45. package/server/src/Http/Controllers/Internal/v1/SearchController.php +506 -0
  46. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +1 -1
  47. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +94 -10
  48. package/server/src/Http/Filter/DeviceFilter.php +74 -0
  49. package/server/src/Http/Filter/DriverFilter.php +6 -0
  50. package/server/src/Http/Filter/VehicleFilter.php +6 -0
  51. package/server/src/Jobs/SyncTelematicDevicesJob.php +82 -24
  52. package/server/src/Models/Device.php +1 -1
  53. package/server/src/Models/Driver.php +1 -1
  54. package/server/src/Providers/FleetOpsServiceProvider.php +10 -0
  55. package/server/src/Support/Telematics/Providers/AfaqyProvider.php +51 -13
  56. package/server/src/routes.php +9 -0
  57. package/server/tests/HubRoutesTest.php +62 -0
  58. package/server/tests/TelematicsHardeningTest.php +94 -3
  59. package/translations/ar-ae.yml +1 -1
  60. package/translations/vi-vn.yaml +1 -1
@@ -1,235 +1,21 @@
1
- <div id="create-order-button-menu-wrapper" class="create-order-menu-button-wrapper mb-2">
2
- <Button
3
- @text={{t "common.create-new-resource" resource=(lowercase (t "resource.order"))}}
4
- @type="primary"
5
- @size="xs"
6
- @icon="paper-plane"
7
- @iconPrefix="fas"
8
- @iconSize="sm"
9
- @wrapperClass="w-full create-order-button-wrapper"
10
- @onClick={{this.onClickCreateOrder}}
11
- @permission="fleet-ops create order"
12
- @tooltipPlacement="right"
13
- class="w-full create-order-button"
14
- />
15
- </div>
16
- {{#each this.universeMenuItems as |menuItem|}}
17
- {{#if menuItem.renderComponentInPlace}}
18
- {{component menuItem.component}}
19
- {{else}}
20
- <Layout::Sidebar::Item
21
- @onClick={{fn this.universe.transitionMenuItem (concat this.routePrefix "virtual") menuItem}}
22
- @menuItem={{menuItem}}
23
- @icon={{menuItem.icon}}
24
- @iconComponent={{menuItem.iconComponent}}
25
- @iconComponentOptions={{menuItem.iconComponentOptions}}
26
- @iconSize={{menuItem.iconSize}}
27
- @iconPrefix={{menuItem.iconPrefix}}
28
- @iconClass={{menuItem.iconClass}}
29
- @rightSideComponent={{menuItem.rightSideComponent}}
30
- @rightSideComponentContext={{menuItem.rightSideComponentContext}}
31
- @rightSideStatus={{menuItem.rightSideStatus}}
32
- @rightSideStatusText={{menuItem.rightSideStatusText}}
33
- @hideRightSideStatusDot={{menuItem.hideRightSideStatusDot}}
34
- @rightSideStatusClass={{menuItem.rightSideStatusClass}}
35
- @disableRightSideStatusHumanize={{menuItem.disableRightSideStatusHumanize}}
36
- @dropdownButton={{menuItem.dropdownButton}}
37
- @dropdownButtonActions={{menuItem.dropdownButtonActions}}
38
- @dropdownButtonIcon={{menuItem.dropdownButtonIcon}}
39
- @dropdownButtonIconPrefix={{menuItem.dropdownButtonIconPrefix}}
40
- @dropdownButtonText={{menuItem.dropdownButtonText}}
41
- @dropdownButtonCalculatePosition={{menuItem.dropdownButtonCalculatePosition}}
42
- @dropdownButtonRenderInPlace={{menuItem.dropdownButtonRenderInPlace}}
43
- @dropdownButtonMenuLabel={{menuItem.dropdownButtonMenuLabel}}
44
- @dropdownButtonWrapperClass={{menuItem.dropdownButtonWrapperClass}}
45
- @dropdownButtonTriggerClass={{menuItem.dropdownButtonTriggerClass}}
46
- @registerDropdownButtonAPI={{menuItem.registerDropdownButtonAPI}}
47
- @permission={{menuItem.permission}}
48
- @visible={{menuItem.visible}}
49
- >{{if menuItem.intl (t menuItem.intl) menuItem.title}}</Layout::Sidebar::Item>
50
- {{/if}}
51
- {{/each}}
52
- {{#each this.menuPanels as |menuPanel|}}
53
- <Layout::Sidebar::Panel
54
- @open={{menuPanel.open}}
55
- @title={{if menuPanel.intl (t menuPanel.intl) menuPanel.title}}
56
- @titleIcon={{menuPanel.icon}}
57
- @caretLeft={{true}}
58
- @caretIcon="caret"
59
- @hideCaret={{menuPanel.hideCaret}}
60
- @toggleOnCaretOnly={{menuPanel.toggleOnCaretOnly}}
61
- @onClickPanelTitle={{menuPanel.onClickPanelTitle}}
62
- @wrapperClass={{menuPanel.wrapperClass}}
63
- @dropdownButton={{menuPanel.dropdownButton}}
64
- @dropdownButtonActions={{menuPanel.dropdownButtonActions}}
65
- @dropdownButtonRenderInPlace={{menuPanel.dropdownButtonRenderInPlace}}
66
- @dropdownHorizontalPosition={{menuPanel.dropdownHorizontalPosition}}
67
- @dropdownButtonMenuLabel={{menuPanel.dropdownButtonMenuLabel}}
68
- @onToggle={{menuPanel.onToggle}}
69
- >
70
- {{#each menuPanel.items as |menuItem|}}
71
- {{#if menuItem.renderComponentInPlace}}
72
- {{component
73
- menuItem.component
74
- menuItem=menuItem
75
- title=(if menuItem.intl (t menuItem.intl) menuItem.title)
76
- onClick=menuItem.onClick
77
- route=(concat this.routePrefix menuItem.route)
78
- icon=menuItem.icon
79
- iconComponent=menuItem.iconComponent
80
- iconComponentOptions=menuItem.iconComponentOptions
81
- iconSize=menuItem.iconSize
82
- iconPrefix=menuItem.iconPrefix
83
- iconClass=menuItem.iconClass
84
- rightSideComponent=menuItem.rightSideComponent
85
- rightSideComponentContext=menuItem.rightSideComponentContext
86
- rightSideStatus=menuItem.rightSideStatus
87
- rightSideStatusText=menuItem.rightSideStatusText
88
- hideRightSideStatusDot=menuItem.hideRightSideStatusDot
89
- rightSideStatusClass=menuItem.rightSideStatusClass
90
- disableRightSideStatusHumanize=menuItem.disableRightSideStatusHumanize
91
- dropdownButton=menuItem.dropdownButton
92
- dropdownButtonActions=menuItem.dropdownButtonActions
93
- dropdownButtonIcon=menuItem.dropdownButtonIcon
94
- dropdownButtonIconPrefix=menuItem.dropdownButtonIconPrefix
95
- dropdownButtonText=menuItem.dropdownButtonText
96
- dropdownButtonCalculatePosition=menuItem.dropdownButtonCalculatePosition
97
- dropdownButtonRenderInPlace=menuItem.dropdownButtonRenderInPlace
98
- dropdownButtonMenuLabel=menuItem.dropdownButtonMenuLabel
99
- dropdownButtonWrapperClass=menuItem.dropdownButtonWrapperClass
100
- dropdownButtonTriggerClass=menuItem.dropdownButtonTriggerClass
101
- registerDropdownButtonAPI=menuItem.registerDropdownButtonAPI
102
- permission=menuItem.permission
103
- visible=menuItem.visible
104
- }}
105
- {{else}}
106
- <Layout::Sidebar::Item
107
- @onClick={{if menuItem._virtual (fn this.universe.transitionMenuItem (concat this.routePrefix "virtual") menuItem) menuItem.onClick}}
108
- @menuItem={{menuItem}}
109
- @route={{if menuItem._virtual null (concat this.routePrefix menuItem.route)}}
110
- @icon={{menuItem.icon}}
111
- @iconComponent={{menuItem.iconComponent}}
112
- @iconComponentOptions={{menuItem.iconComponentOptions}}
113
- @iconSize={{menuItem.iconSize}}
114
- @iconPrefix={{menuItem.iconPrefix}}
115
- @iconClass={{menuItem.iconClass}}
116
- @rightSideComponent={{menuItem.rightSideComponent}}
117
- @rightSideComponentContext={{menuItem.rightSideComponentContext}}
118
- @rightSideStatus={{menuItem.rightSideStatus}}
119
- @rightSideStatusText={{menuItem.rightSideStatusText}}
120
- @hideRightSideStatusDot={{menuItem.hideRightSideStatusDot}}
121
- @rightSideStatusClass={{menuItem.rightSideStatusClass}}
122
- @disableRightSideStatusHumanize={{menuItem.disableRightSideStatusHumanize}}
123
- @dropdownButton={{menuItem.dropdownButton}}
124
- @dropdownButtonActions={{menuItem.dropdownButtonActions}}
125
- @dropdownButtonIcon={{menuItem.dropdownButtonIcon}}
126
- @dropdownButtonIconPrefix={{menuItem.dropdownButtonIconPrefix}}
127
- @dropdownButtonText={{menuItem.dropdownButtonText}}
128
- @dropdownButtonCalculatePosition={{menuItem.dropdownButtonCalculatePosition}}
129
- @dropdownButtonRenderInPlace={{menuItem.dropdownButtonRenderInPlace}}
130
- @dropdownButtonMenuLabel={{menuItem.dropdownButtonMenuLabel}}
131
- @dropdownButtonWrapperClass={{menuItem.dropdownButtonWrapperClass}}
132
- @dropdownButtonTriggerClass={{menuItem.dropdownButtonTriggerClass}}
133
- @registerDropdownButtonAPI={{menuItem.registerDropdownButtonAPI}}
134
- @permission={{menuItem.permission}}
135
- @visible={{menuItem.visible}}
136
- >{{if menuItem.intl (t menuItem.intl) menuItem.title}}</Layout::Sidebar::Item>
137
- {{/if}}
1
+ <Layout::Sidebar::Navigator
2
+ @items={{this.navigationItems}}
3
+ @primaryAction={{this.createOrderAction}}
4
+ @searchPlaceholder="Search Fleet-Ops..."
5
+ @searchProvider={{this.searchNavigation}}
6
+ @initialActiveParentSync={{false}}
7
+ class="fleet-ops-sidebar-navigator"
8
+ >
9
+ <:footer as |state|>
10
+ {{#if (or (not state.isNested) (eq state.currentParent.id "operations"))}}
11
+ <Layout::FleetOpsSidebar::OperationsMonitor />
12
+ {{/if}}
13
+
14
+ {{#each (get this.footerRegistryComponents (or state.currentParent.id "root")) as |menuItem|}}
15
+ {{component menuItem.component}}
138
16
  {{/each}}
139
- {{!-- {{#let (array "operations" "management" "connectivity" "maintenance" "analytics" "settings") as |sectionsToRender|}}
140
- {{#each sectionsToRender as |section|}}
141
- {{#if (eq menuPanel.routePrefix section)}}
142
- {{#each (get this (concat "universe" (capitalize section) "MenuItems")) as |menuItem|}}
143
- {{#if menuItem.renderComponentInPlace}}
144
- {{component menuItem.component}}
145
- {{else}}
146
- <Layout::Sidebar::Item
147
- @onClick={{fn this.universe.transitionMenuItem (concat this.routePrefix "virtual") menuItem}}
148
- @menuItem={{menuItem}}
149
- @icon={{menuItem.icon}}
150
- @iconComponent={{menuItem.iconComponent}}
151
- @iconComponentOptions={{menuItem.iconComponentOptions}}
152
- @iconSize={{menuItem.iconSize}}
153
- @iconPrefix={{menuItem.iconPrefix}}
154
- @iconClass={{menuItem.iconClass}}
155
- @rightSideComponent={{menuItem.rightSideComponent}}
156
- @rightSideComponentContext={{menuItem.rightSideComponentContext}}
157
- @rightSideStatus={{menuItem.rightSideStatus}}
158
- @rightSideStatusText={{menuItem.rightSideStatusText}}
159
- @hideRightSideStatusDot={{menuItem.hideRightSideStatusDot}}
160
- @rightSideStatusClass={{menuItem.rightSideStatusClass}}
161
- @disableRightSideStatusHumanize={{menuItem.disableRightSideStatusHumanize}}
162
- @dropdownButton={{menuItem.dropdownButton}}
163
- @dropdownButtonActions={{menuItem.dropdownButtonActions}}
164
- @dropdownButtonIcon={{menuItem.dropdownButtonIcon}}
165
- @dropdownButtonIconPrefix={{menuItem.dropdownButtonIconPrefix}}
166
- @dropdownButtonText={{menuItem.dropdownButtonText}}
167
- @dropdownButtonCalculatePosition={{menuItem.dropdownButtonCalculatePosition}}
168
- @dropdownButtonRenderInPlace={{menuItem.dropdownButtonRenderInPlace}}
169
- @dropdownButtonMenuLabel={{menuItem.dropdownButtonMenuLabel}}
170
- @dropdownButtonWrapperClass={{menuItem.dropdownButtonWrapperClass}}
171
- @dropdownButtonTriggerClass={{menuItem.dropdownButtonTriggerClass}}
172
- @registerDropdownButtonAPI={{menuItem.registerDropdownButtonAPI}}
173
- @permission={{menuItem.permission}}
174
- @visible={{menuItem.visible}}
175
- >{{if menuItem.intl (t menuItem.intl) menuItem.title}}</Layout::Sidebar::Item>
176
- {{/if}}
177
- {{/each}}
178
- {{/if}}
179
- {{/each}}
180
- {{/let}} --}}
181
- </Layout::Sidebar::Panel>
182
- {{/each}}
183
- {{#each this.universeMenuPanels as |menuPanel|}}
184
- <Layout::Sidebar::Panel
185
- @open={{menuPanel.open}}
186
- @title={{if menuPanel.intl (t menuPanel.intl) menuPanel.title}}
187
- @titleIcon={{menuPanel.icon}}
188
- @caretLeft={{true}}
189
- @caretIcon="caret"
190
- @hideCaret={{menuPanel.hideCaret}}
191
- @toggleOnCaretOnly={{menuPanel.toggleOnCaretOnly}}
192
- @onClickPanelTitle={{menuPanel.onClickPanelTitle}}
193
- @wrapperClass={{menuPanel.wrapperClass}}
194
- @dropdownButton={{menuPanel.dropdownButton}}
195
- @dropdownButtonActions={{menuPanel.dropdownButtonActions}}
196
- @dropdownButtonRenderInPlace={{menuPanel.dropdownButtonRenderInPlace}}
197
- @dropdownHorizontalPosition={{menuPanel.dropdownHorizontalPosition}}
198
- @dropdownButtonMenuLabel={{menuPanel.dropdownButtonMenuLabel}}
199
- >
200
- {{#each menuPanel.items as |menuItem|}}
201
- <Layout::Sidebar::Item
202
- @onClick={{fn this.universe.transitionMenuItem (concat this.routePrefix "virtual") menuItem}}
203
- @menuItem={{menuItem}}
204
- @icon={{menuItem.icon}}
205
- @iconComponent={{menuItem.iconComponent}}
206
- @iconComponentOptions={{menuItem.iconComponentOptions}}
207
- @iconSize={{menuItem.iconSize}}
208
- @iconPrefix={{menuItem.iconPrefix}}
209
- @iconClass={{menuItem.iconClass}}
210
- @rightSideComponent={{menuItem.rightSideComponent}}
211
- @rightSideComponentContext={{menuItem.rightSideComponentContext}}
212
- @rightSideStatus={{menuItem.rightSideStatus}}
213
- @rightSideStatusText={{menuItem.rightSideStatusText}}
214
- @hideRightSideStatusDot={{menuItem.hideRightSideStatusDot}}
215
- @rightSideStatusClass={{menuItem.rightSideStatusClass}}
216
- @disableRightSideStatusHumanize={{menuItem.disableRightSideStatusHumanize}}
217
- @dropdownButton={{menuItem.dropdownButton}}
218
- @dropdownButtonActions={{menuItem.dropdownButtonActions}}
219
- @dropdownButtonIcon={{menuItem.dropdownButtonIcon}}
220
- @dropdownButtonIconPrefix={{menuItem.dropdownButtonIconPrefix}}
221
- @dropdownButtonText={{menuItem.dropdownButtonText}}
222
- @dropdownButtonCalculatePosition={{menuItem.dropdownButtonCalculatePosition}}
223
- @dropdownButtonRenderInPlace={{menuItem.dropdownButtonRenderInPlace}}
224
- @dropdownButtonMenuLabel={{menuItem.dropdownButtonMenuLabel}}
225
- @dropdownButtonWrapperClass={{menuItem.dropdownButtonWrapperClass}}
226
- @dropdownButtonTriggerClass={{menuItem.dropdownButtonTriggerClass}}
227
- @registerDropdownButtonAPI={{menuItem.registerDropdownButtonAPI}}
228
- @permission={{menuItem.permission}}
229
- @visible={{menuItem.visible}}
230
- >{{if menuItem.intl (t menuItem.intl) menuItem.title}}</Layout::Sidebar::Item>
231
- {{/each}}
232
- </Layout::Sidebar::Panel>
233
- {{/each}}
17
+ </:footer>
18
+ </Layout::Sidebar::Navigator>
19
+
234
20
  {{yield}}
235
- <Spacer @height="10px" />
21
+ <Spacer @height="10px" />