@fleetbase/fleetops-engine 0.3.1 → 0.3.2

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 (234) hide show
  1. package/addon/components/contact-form-panel.hbs +82 -0
  2. package/addon/components/contact-form-panel.js +195 -0
  3. package/addon/components/contact-panel/details.hbs +36 -0
  4. package/addon/components/contact-panel/details.js +3 -0
  5. package/addon/components/contact-panel.hbs +52 -0
  6. package/addon/components/contact-panel.js +161 -0
  7. package/addon/components/driver-form-panel.hbs +39 -55
  8. package/addon/components/driver-form-panel.js +41 -0
  9. package/addon/components/driver-panel/details.hbs +2 -2
  10. package/addon/components/driver-panel.hbs +12 -10
  11. package/addon/components/driver-panel.js +13 -0
  12. package/addon/components/fleet-form-panel.hbs +28 -28
  13. package/addon/components/fleet-form-panel.js +150 -1
  14. package/addon/components/fleet-listing-panel.hbs +8 -0
  15. package/addon/components/fleet-listing-panel.js +34 -0
  16. package/addon/components/fleet-panel/details.hbs +30 -0
  17. package/addon/components/fleet-panel/driver-listing.hbs +72 -0
  18. package/addon/components/fleet-panel/driver-listing.js +149 -0
  19. package/addon/components/fleet-panel/vehicle-listing.hbs +72 -0
  20. package/addon/components/fleet-panel/vehicle-listing.js +149 -0
  21. package/addon/components/fleet-panel.hbs +12 -58
  22. package/addon/components/fleet-panel.js +148 -26
  23. package/addon/components/fleet-vehicle-listing.hbs +0 -1
  24. package/addon/components/fuel-report-form-panel.hbs +41 -0
  25. package/addon/components/fuel-report-form-panel.js +122 -0
  26. package/addon/components/fuel-report-panel/details.hbs +38 -0
  27. package/addon/components/fuel-report-panel.hbs +30 -0
  28. package/addon/components/fuel-report-panel.js +161 -0
  29. package/addon/components/issue-form-panel.hbs +85 -0
  30. package/addon/components/issue-form-panel.js +211 -0
  31. package/addon/components/issue-panel/details.hbs +48 -0
  32. package/addon/components/issue-panel.hbs +30 -0
  33. package/addon/components/issue-panel.js +160 -0
  34. package/addon/components/layout/fleet-ops-sidebar.hbs +2 -2
  35. package/addon/components/live-map.js +2 -0
  36. package/addon/components/map-container/toolbar.hbs +9 -9
  37. package/addon/components/map-container/topbar.hbs +1 -1
  38. package/addon/components/modals/issue-details.hbs +38 -0
  39. package/addon/components/modals/issue-from.hbs +138 -0
  40. package/addon/components/place-form-panel.hbs +50 -0
  41. package/addon/components/place-form-panel.js +134 -0
  42. package/addon/components/place-panel/details.hbs +95 -0
  43. package/addon/components/place-panel.hbs +30 -0
  44. package/addon/components/place-panel.js +161 -0
  45. package/addon/components/vehicle-form-panel.hbs +35 -44
  46. package/addon/components/vehicle-form-panel.js +41 -0
  47. package/addon/components/vehicle-panel/details.hbs +8 -2
  48. package/addon/components/vehicle-panel.hbs +8 -6
  49. package/addon/components/vendor-form-panel/create-form.hbs +114 -0
  50. package/addon/components/vendor-form-panel/create-form.js +158 -0
  51. package/addon/components/vendor-form-panel/edit-form.hbs +98 -0
  52. package/addon/components/vendor-form-panel/edit-form.js +51 -0
  53. package/addon/components/vendor-form-panel.hbs +48 -0
  54. package/addon/components/vendor-form-panel.js +226 -0
  55. package/addon/components/vendor-panel/details.hbs +77 -0
  56. package/addon/components/vendor-panel/details.js +12 -0
  57. package/addon/components/vendor-panel.hbs +58 -0
  58. package/addon/components/vendor-panel.js +161 -0
  59. package/addon/controllers/management/contacts/index/details.js +55 -0
  60. package/addon/controllers/management/contacts/index/edit.js +111 -0
  61. package/addon/controllers/management/contacts/index/new.js +88 -0
  62. package/addon/controllers/management/contacts/index.js +23 -128
  63. package/addon/controllers/management/drivers/index/new.js +2 -2
  64. package/addon/controllers/management/drivers/index.js +18 -32
  65. package/addon/controllers/management/fleets/index/details.js +53 -0
  66. package/addon/controllers/management/fleets/index/edit.js +75 -41
  67. package/addon/controllers/management/fleets/index/new.js +42 -57
  68. package/addon/controllers/management/fleets/index.js +0 -1
  69. package/addon/controllers/management/fuel-reports/index/details.js +63 -0
  70. package/addon/controllers/management/fuel-reports/index/edit.js +111 -0
  71. package/addon/controllers/management/fuel-reports/index/new.js +95 -0
  72. package/addon/controllers/management/fuel-reports/index.js +57 -127
  73. package/addon/controllers/management/issues/index/details.js +54 -0
  74. package/addon/controllers/management/issues/index/edit.js +111 -0
  75. package/addon/controllers/management/issues/index/new.js +94 -0
  76. package/addon/controllers/management/issues/index.js +131 -26
  77. package/addon/controllers/management/places/index/details.js +55 -0
  78. package/addon/controllers/management/places/index/edit.js +111 -0
  79. package/addon/controllers/management/places/index/new.js +88 -0
  80. package/addon/controllers/management/places/index.js +21 -182
  81. package/addon/controllers/management/vehicles/index/new.js +2 -6
  82. package/addon/controllers/management/vendors/index/details.js +55 -0
  83. package/addon/controllers/management/vendors/index/edit.js +111 -0
  84. package/addon/controllers/management/vendors/index/new.js +88 -0
  85. package/addon/controllers/management/vendors/index.js +43 -247
  86. package/addon/routes/management/contacts/index/details.js +14 -0
  87. package/addon/routes/management/contacts/index/edit.js +10 -0
  88. package/addon/routes/management/contacts/index/new.js +3 -0
  89. package/addon/routes/management/contacts/index.js +1 -1
  90. package/addon/routes/management/fleets/index/details.js +1 -1
  91. package/addon/routes/management/fleets/index/edit.js +1 -1
  92. package/addon/routes/management/fleets/index.js +1 -1
  93. package/addon/routes/management/fuel-reports/index/details.js +14 -0
  94. package/addon/routes/management/fuel-reports/index/edit.js +10 -0
  95. package/addon/routes/management/fuel-reports/index/new.js +3 -0
  96. package/addon/routes/management/fuel-reports/index.js +3 -1
  97. package/addon/routes/management/issues/index/details.js +14 -0
  98. package/addon/routes/management/issues/index/edit.js +10 -0
  99. package/addon/routes/management/issues/index/new.js +3 -0
  100. package/addon/routes/management/issues/index.js +1 -1
  101. package/addon/routes/management/places/index/details.js +14 -0
  102. package/addon/routes/management/places/index/edit.js +10 -0
  103. package/addon/routes/management/places/index/new.js +3 -0
  104. package/addon/routes/management/places/index.js +6 -1
  105. package/addon/routes/management/vendors/index/details.js +15 -0
  106. package/addon/routes/management/vendors/index/edit.js +11 -0
  107. package/addon/routes/management/vendors/index/new.js +3 -0
  108. package/addon/routes/management/vendors/index.js +1 -0
  109. package/addon/routes.js +27 -7
  110. package/addon/services/context-panel.js +60 -0
  111. package/addon/templates/management/contacts/index/details.hbs +1 -0
  112. package/addon/templates/management/contacts/index/edit.hbs +1 -0
  113. package/addon/templates/management/contacts/index/new.hbs +1 -0
  114. package/addon/templates/management/contacts/index.hbs +22 -3
  115. package/addon/templates/management/drivers/index.hbs +29 -5
  116. package/addon/templates/management/fleets/index/details.hbs +1 -1
  117. package/addon/templates/management/fleets/index/edit.hbs +1 -1
  118. package/addon/templates/management/fleets/index/new.hbs +1 -1
  119. package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
  120. package/addon/templates/management/fuel-reports/index/edit.hbs +1 -0
  121. package/addon/templates/management/fuel-reports/index/new.hbs +1 -0
  122. package/addon/templates/management/fuel-reports/index.hbs +25 -4
  123. package/addon/templates/management/issues/index/details.hbs +1 -0
  124. package/addon/templates/management/issues/index/edit.hbs +1 -0
  125. package/addon/templates/management/issues/index/new.hbs +1 -0
  126. package/addon/templates/management/issues/index.hbs +5 -3
  127. package/addon/templates/management/places/index/details.hbs +1 -0
  128. package/addon/templates/management/places/index/edit.hbs +1 -0
  129. package/addon/templates/management/places/index/new.hbs +1 -0
  130. package/addon/templates/management/vendors/index/details.hbs +1 -0
  131. package/addon/templates/management/vendors/index/edit.hbs +1 -0
  132. package/addon/templates/management/vendors/index/new.hbs +1 -0
  133. package/addon/templates/operations/orders/index.hbs +3 -3
  134. package/app/components/contact-form-panel.js +1 -0
  135. package/app/components/contact-panel/details.js +1 -0
  136. package/app/components/contact-panel.js +1 -0
  137. package/app/components/fleet-listing-panel.js +1 -0
  138. package/app/components/fleet-panel/details.js +1 -0
  139. package/app/components/fleet-panel/driver-listing.js +1 -0
  140. package/app/components/fleet-panel/vehicle-listing.js +1 -0
  141. package/app/components/fuel-report-form-panel.js +1 -0
  142. package/app/components/fuel-report-panel.js +1 -0
  143. package/app/components/issue-form-panel.js +1 -0
  144. package/app/components/issue-panel.js +1 -0
  145. package/app/components/place-form-panel.js +1 -0
  146. package/app/components/place-panel.js +1 -0
  147. package/app/components/vendor-form-panel/create-form.js +1 -0
  148. package/app/components/vendor-form-panel/edit-form.js +1 -0
  149. package/app/components/vendor-form-panel.js +1 -0
  150. package/app/components/vendor-panel/details.js +1 -0
  151. package/app/components/vendor-panel.js +1 -0
  152. package/app/controllers/management/contacts/index/details.js +1 -0
  153. package/app/controllers/management/contacts/index/edit.js +1 -0
  154. package/app/controllers/management/contacts/index/new.js +1 -0
  155. package/app/controllers/management/fuel-reports/index/details.js +1 -0
  156. package/app/controllers/management/fuel-reports/index/edit.js +1 -0
  157. package/app/controllers/management/fuel-reports/index/new.js +1 -0
  158. package/app/controllers/management/issues/index/details.js +1 -0
  159. package/app/controllers/management/issues/index/edit.js +1 -0
  160. package/app/controllers/management/issues/index/new.js +1 -0
  161. package/app/controllers/management/places/index/details.js +1 -0
  162. package/app/controllers/management/places/index/edit.js +1 -0
  163. package/app/controllers/management/places/index/new.js +1 -0
  164. package/app/controllers/management/vendors/index/edit.js +1 -0
  165. package/app/controllers/management/vendors/index/new.js +1 -0
  166. package/app/routes/addon/routes/management/places/index/new.js +1 -0
  167. package/app/routes/management/contacts/index/details.js +1 -0
  168. package/app/routes/management/contacts/index/edit.js +1 -0
  169. package/app/routes/management/contacts/index/new.js +1 -0
  170. package/app/routes/management/fuel-reports/index/details.js +1 -0
  171. package/app/routes/management/fuel-reports/index/edit.js +1 -0
  172. package/app/routes/management/fuel-reports/index/new.js +1 -0
  173. package/app/routes/management/issues/index/details.js +1 -0
  174. package/app/routes/management/issues/index/edit.js +1 -0
  175. package/app/routes/management/issues/index/new.js +1 -0
  176. package/app/routes/management/places/index/details.js +1 -0
  177. package/app/routes/management/places/index/edit.js +1 -0
  178. package/app/routes/management/places/index/new.js +1 -0
  179. package/app/routes/management/vendors/index/details.js +1 -0
  180. package/app/routes/management/vendors/index/edit.js +1 -0
  181. package/app/routes/management/vendors/index/new.js +1 -0
  182. package/app/templates/addon/routes/management/places/index/new.js +1 -0
  183. package/app/templates/management/contacts/index/details.js +1 -0
  184. package/app/templates/management/contacts/index/edit.js +1 -0
  185. package/app/templates/management/contacts/index/new.js +1 -0
  186. package/app/templates/management/fuel-reports/index/details.js +1 -0
  187. package/app/templates/management/fuel-reports/index/edit.js +1 -0
  188. package/app/templates/management/fuel-reports/index/new.js +1 -0
  189. package/app/templates/management/issues/index/details.js +1 -0
  190. package/app/templates/management/issues/index/edit.js +1 -0
  191. package/app/templates/management/issues/index/new.js +1 -0
  192. package/app/templates/management/places/index/details.js +1 -0
  193. package/app/templates/management/places/index/edit.js +1 -0
  194. package/app/templates/management/places/index/new.js +1 -0
  195. package/app/templates/management/vendors/index/details.js +1 -0
  196. package/app/templates/management/vendors/index/edit.js +1 -0
  197. package/app/templates/management/vendors/index/new.js +1 -0
  198. package/composer.json +1 -1
  199. package/config/environment.js +2 -1
  200. package/extension.json +1 -1
  201. package/package.json +4 -3
  202. package/server/migrations/2023_11_03_072503_refactor_issues_table_columns.php +42 -0
  203. package/server/migrations/2023_11_06_040645_refactor_fuel_reports_table.php +38 -0
  204. package/server/src/Casts/Point.php +15 -1
  205. package/server/src/Http/Controllers/Internal/v1/DriverController.php +33 -15
  206. package/server/src/Http/Filter/FleetFilter.php +7 -0
  207. package/server/src/Http/Filter/FuelReportFilter.php +58 -0
  208. package/server/src/Http/Filter/IssueFilter.php +69 -0
  209. package/server/src/Http/Filter/VehicleFilter.php +10 -0
  210. package/server/src/Http/Middleware/TransformLocationMiddleware.php +48 -0
  211. package/server/src/Http/Resources/v1/Driver.php +1 -0
  212. package/server/src/Http/Resources/v1/Fleet.php +20 -21
  213. package/server/src/Http/Resources/v1/FuelReport.php +37 -35
  214. package/server/src/Http/Resources/v1/Issue.php +77 -0
  215. package/server/src/Http/Resources/v1/ParentFleet.php +60 -0
  216. package/server/src/Http/Resources/v1/SubFleet.php +60 -0
  217. package/server/src/Http/Resources/v1/Vehicle.php +4 -2
  218. package/server/src/Integrations/Lalamove/Lalamove.php +6 -6
  219. package/server/src/Models/Contact.php +7 -0
  220. package/server/src/Models/Driver.php +1 -1
  221. package/server/src/Models/Fleet.php +35 -4
  222. package/server/src/Models/FuelReport.php +53 -3
  223. package/server/src/Models/Issue.php +106 -7
  224. package/server/src/Models/Vehicle.php +1 -1
  225. package/server/src/Models/VehicleDevice.php +3 -1
  226. package/server/src/Models/VehicleDeviceEvent.php +7 -3
  227. package/server/src/Notifications/OrderAssigned.php +0 -6
  228. package/server/src/Notifications/OrderCanceled.php +0 -6
  229. package/server/src/Notifications/OrderDispatchFailed.php +0 -6
  230. package/server/src/Notifications/OrderDispatched.php +0 -6
  231. package/server/src/Notifications/OrderPing.php +0 -6
  232. package/server/src/Notifications/OrderSplit.php +0 -6
  233. package/server/src/Providers/NotificationServiceProvider.php +1 -1
  234. package/server/src/routes.php +2 -2
@@ -0,0 +1,41 @@
1
+ <Overlay @onLoad={{this.setOverlayContext}} @position="right" @noBackdrop={{true}} @fullHeight={{true}} @isResizeble={{or this.isResizable @isResizable}} @width={{or this.width @width "600px"}}>
2
+ <Overlay::Header @title={{if this.fuelReport.public_id this.fuelReport.name "New Fuel Report"}} @status={{this.fuelReport.public_id}} @hideStatusDot={{true}} @createdAt={{this.fuelReport.createdAt}} @titleWrapperClass="leading-5">
3
+ <div class="flex flex-1 justify-end">
4
+ <Button @icon={{if this.fuelReport.id "save" "check"}} @type="primary" @text={{if this.fuelReport.id "Save Fuel Report" "Create Fuel Report"}} @onClick={{this.save}} @wrapperClass="mr-2" />
5
+ {{#if this.fuelReport.id}}
6
+ <Button @type="default" @icon="gas-pump" @helpText="View fuel report details" @onClick={{this.onViewDetails}} @wrapperClass="mr-2" />
7
+ {{/if}}
8
+ <Button @type="default" @icon="times" @helpText={{if this.fuelReport.id "Cancel edit fuel report" "Cancel new fuel report"}} @onClick={{this.onPressCancel}} />
9
+ </div>
10
+ </Overlay::Header>
11
+
12
+ <Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 space-y-4 pt-4" @increaseInnerBodyHeightBy={{1000}}>
13
+ <div class="grid grid-cols-1 text-xs dark:text-gray-100">
14
+ <InputGroup @name="Reporter">
15
+ <ModelSelect @modelName="user" @selectedModel={{this.fuelReport.reporter}} @placeholder="Select Reporter" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn (mut this.fuelReport.reporter)}} @onChangeId={{fn (mut this.fuelReport.reported_by_uuid)}} as |model|>
16
+ {{model.name}}
17
+ </ModelSelect>
18
+ </InputGroup>
19
+ <InputGroup @name="Driver">
20
+ <ModelSelect @modelName="driver" @selectedModel={{this.fuelReport.driver}} @placeholder="Select Driver" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn (mut this.fuelReport.driver)}} @onChangeId={{fn (mut this.fuelReport.driver_uuid)}} as |model|>
21
+ {{model.name}}
22
+ </ModelSelect>
23
+ </InputGroup>
24
+ <InputGroup @name="Vehicle">
25
+ <ModelSelect @modelName="vehicle" @selectedModel={{this.fuelReport.vehicle}} @placeholder="Select Vehicle" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn (mut this.fuelReport.vehicle)}} @onChangeId={{fn (mut this.fuelReport.vehicle_uuid)}} as |model|>
26
+ {{model.display_name}}
27
+ </ModelSelect>
28
+ </InputGroup>
29
+ <InputGroup @name="Odometer" @type="number" @value={{this.fuelReport.odometer}} />
30
+ <InputGroup @name="Cost">
31
+ <MoneyInput class="w-full" @value={{this.fuelReport.amount}} @currency={{this.fuelReport.currency}} @canSelectCurrency={{true}} @onCurrencyChange={{fn (mut this.fuelReport.currency)}} />
32
+ </InputGroup>
33
+ <InputGroup @name="Volume" @helpText="Select the metric unit and volume of fuel to report." @wrapperClass="w-full">
34
+ <UnitInput class="w-full" @measurement="volume" @value={{this.fuelReport.volume}} @unit={{this.fuelReport.metric_unit}} @canSelectUnit={{true}} @onUnitChange={{fn (mut this.fuelReport.metric_unit)}} />
35
+ </InputGroup>
36
+ <InputGroup @name="Coordinates">
37
+ <CoordinatesInput @value={{this.fuelReport.location}} @onChange={{fn (mut this.fuelReport.location)}} />
38
+ </InputGroup>
39
+ </div>
40
+ </Overlay::Body>
41
+ </Overlay>
@@ -0,0 +1,122 @@
1
+ import Component from '@glimmer/component';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { inject as service } from '@ember/service';
4
+ import { action } from '@ember/object';
5
+ import contextComponentCallback from '../utils/context-component-callback';
6
+ import applyContextComponentArguments from '../utils/apply-context-component-arguments';
7
+
8
+ export default class FuelReportFormPanelComponent extends Component {
9
+ /**
10
+ * @service store
11
+ */
12
+ @service store;
13
+
14
+ /**
15
+ * @service notifications
16
+ */
17
+ @service notifications;
18
+
19
+ /**
20
+ * @service hostRouter
21
+ */
22
+ @service hostRouter;
23
+
24
+ /**
25
+ * @service loader
26
+ */
27
+ @service loader;
28
+
29
+ /**
30
+ * @service contextPanel
31
+ */
32
+ @service contextPanel;
33
+
34
+ /**
35
+ * Overlay context.
36
+ * @type {any}
37
+ */
38
+ @tracked context;
39
+
40
+ /**
41
+ * Indicates whether the component is in a loading state.
42
+ * @type {boolean}
43
+ */
44
+ @tracked isLoading = false;
45
+
46
+ /**
47
+ * Constructs the component and applies initial state.
48
+ */
49
+ constructor() {
50
+ super(...arguments);
51
+ this.fuelReport = this.args.fuelReport;
52
+ applyContextComponentArguments(this);
53
+ }
54
+
55
+ /**
56
+ * Sets the overlay context.
57
+ *
58
+ * @action
59
+ * @param {OverlayContextObject} overlayContext
60
+ */
61
+ @action setOverlayContext(overlayContext) {
62
+ this.context = overlayContext;
63
+ contextComponentCallback(this, 'onLoad', ...arguments);
64
+ }
65
+
66
+ /**
67
+ * Saves the fuel report changes.
68
+ *
69
+ * @action
70
+ * @returns {Promise<any>}
71
+ */
72
+ @action save() {
73
+ const { fuelReport } = this;
74
+
75
+ this.loader.showLoader('.next-content-overlay-panel-container', { loadingMessage: 'Saving fuel report...', preserveTargetPosition: true });
76
+ this.isLoading = true;
77
+
78
+ contextComponentCallback(this, 'onBeforeSave', fuelReport);
79
+
80
+ try {
81
+ return fuelReport
82
+ .save()
83
+ .then((fuelReport) => {
84
+ this.notifications.success(`Fuel report saved successfully.`);
85
+ contextComponentCallback(this, 'onAfterSave', fuelReport);
86
+ })
87
+ .catch((error) => {
88
+ this.notifications.serverError(error);
89
+ })
90
+ .finally(() => {
91
+ this.loader.removeLoader('.next-content-overlay-panel-container ');
92
+ this.isLoading = false;
93
+ });
94
+ } catch (error) {
95
+ this.loader.removeLoader('.next-content-overlay-panel-container ');
96
+ this.isLoading = false;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * View the details of the fuel-report.
102
+ *
103
+ * @action
104
+ */
105
+ @action onViewDetails() {
106
+ const isActionOverrided = contextComponentCallback(this, 'onViewDetails', this.fuelReport);
107
+
108
+ if (!isActionOverrided) {
109
+ this.contextPanel.focus(this.fuelReport, 'viewing');
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Handles cancel button press.
115
+ *
116
+ * @action
117
+ * @returns {any}
118
+ */
119
+ @action onPressCancel() {
120
+ return contextComponentCallback(this, 'onPressCancel', this.fuelReport);
121
+ }
122
+ }
@@ -0,0 +1,38 @@
1
+ <div class="p-4">
2
+ <ContentPanel @title="Details" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-900">
3
+ <div class="grid grid-cols-2 gap-2 text-xs md:mb-6 dark:text-gray-100">
4
+ <div class="field-info-container col-span-2">
5
+ <div class="field-name">Reporter</div>
6
+ <div class="field-value">{{n-a @fuelReport.reporter_name}}</div>
7
+ </div>
8
+ <div class="field-info-container">
9
+ <div class="field-name">Driver</div>
10
+ <div class="field-value">{{n-a @fuelReport.driver_name}}</div>
11
+ </div>
12
+ <div class="field-info-container">
13
+ <div class="field-name">Vehicle</div>
14
+ <div class="field-value">{{n-a @fuelReport.vehicle_name}}</div>
15
+ </div>
16
+ <div class="field-info-container">
17
+ <div class="field-name">Odometer</div>
18
+ <div class="field-value">{{n-a @fuelReport.odometer}}</div>
19
+ </div>
20
+ <div class="field-info-container">
21
+ <div class="field-name">Cost</div>
22
+ <div class="field-value">{{format-currency @fuelReport.amount @fuelReport.currency}}</div>
23
+ </div>
24
+ <div class="field-info-container">
25
+ <div class="field-name">Fuel/ Volume</div>
26
+ <div class="field-value">{{pluralize @fuelReport.volume @fuelReport.metric_unit}}</div>
27
+ </div>
28
+ <div class="field-info-container">
29
+ <div class="field-name">Date Created</div>
30
+ <div class="field-value">{{@fuelReport.createdAtShort}}</div>
31
+ </div>
32
+ <div class="field-info-container">
33
+ <div class="field-name">Coordinates</div>
34
+ <div class="field-value">{{point-coordinates @fuelReport.location}}</div>
35
+ </div>
36
+ </div>
37
+ </ContentPanel>
38
+ </div>
@@ -0,0 +1,30 @@
1
+ <Overlay
2
+ @onLoad={{this.setOverlayContext}}
3
+ @position="right"
4
+ @noBackdrop={{true}}
5
+ @fullHeight={{true}}
6
+ @isResizable={{or this.isResizable @isResizable}}
7
+ @width={{or this.width @width "600px"}}
8
+ >
9
+ <Overlay::Header @title="Fuel Report Details" @status={{this.fuelReport.public_id}} @hideStatusDot={{true}} @createdAt={{this.fuelReport.createdAt}}>
10
+ <Button @type="default" @icon="pen" @helpText="Edit fuel report" @onClick={{this.onEdit}} @wrapperClass="mr-2" />
11
+ <Button @type="default" @icon="times" @helpText={{if this.fuelReport.id "Cancel edit fuel report" "Cancel new fuel report"}} @onClick={{this.onPressCancel}} />
12
+ </Overlay::Header>
13
+ <Overlay::Body class="no-padding" @increaseInnerBodyHeightBy={{1000}}>
14
+ <div class="section-header-actions w-full overflow-x-scroll lg:overflow-x-auto">
15
+ <div class="ui-tabs mt-4">
16
+ <nav>
17
+ {{#each this.tabs as |tab|}}
18
+ <a href="javascript:;" class="ui-tab {{if (eq this.tab.slug tab.slug) 'active'}}" {{on "click" (fn this.onTabChanged tab.slug)}}>
19
+ <FaIcon @icon={{tab.icon}} class="mr-1" />
20
+ <span>{{tab.title}}</span>
21
+ </a>
22
+ {{/each}}
23
+ </nav>
24
+ </div>
25
+ </div>
26
+ <div class="tab-content tab-{{this.tab.slug}}">
27
+ {{component this.tab.component fuelReport=this.fuelReport tabOptions=this.tab options=this.tab.componentParams}}
28
+ </div>
29
+ </Overlay::Body>
30
+ </Overlay>
@@ -0,0 +1,161 @@
1
+ import Component from '@glimmer/component';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { inject as service } from '@ember/service';
4
+ import { action } from '@ember/object';
5
+ import { isArray } from '@ember/array';
6
+ import FuelReportPanelDetailsComponent from './fuel-report-panel/details';
7
+ import contextComponentCallback from '../utils/context-component-callback';
8
+ import applyContextComponentArguments from '../utils/apply-context-component-arguments';
9
+
10
+ export default class FuelReportPanelComponent extends Component {
11
+ /**
12
+ * Service for fetching data.
13
+ *
14
+ * @type {Service}
15
+ */
16
+ @service fetch;
17
+
18
+ /**
19
+ * Service for managing modals.
20
+ *
21
+ * @type {Service}
22
+ */
23
+ @service modalsManager;
24
+
25
+ /**
26
+ * Universe service for managing global data and settings.
27
+ *
28
+ * @type {Service}
29
+ */
30
+ @service universe;
31
+
32
+ /**
33
+ * Ember data store service.
34
+ *
35
+ * @type {Service}
36
+ */
37
+ @service store;
38
+
39
+ /**
40
+ * Service for managing routing within the host app.
41
+ *
42
+ * @type {Service}
43
+ */
44
+ @service hostRouter;
45
+
46
+ /**
47
+ * Service for managing the context panel.
48
+ *
49
+ * @type {Service}
50
+ */
51
+ @service contextPanel;
52
+
53
+ /**
54
+ * The current active tab.
55
+ *
56
+ * @type {Object}
57
+ * @tracked
58
+ */
59
+ @tracked tab;
60
+
61
+ /**
62
+ * The fuel-report being displayed or edited.
63
+ *
64
+ * @type {fuelReport}
65
+ * @tracked
66
+ */
67
+ @tracked fuelReport;
68
+
69
+ /**
70
+ * Returns the array of tabs available for the panel.
71
+ *
72
+ * @type {Array}
73
+ */
74
+ get tabs() {
75
+ const registeredTabs = this.universe.getMenuItemsFromRegistry('component:fuel-report-panel');
76
+ // this.universe._createMenuItem('Tracking', null, { icon: 'satellite-dish', component: VehiclePanelTrackingComponent }),
77
+ const defaultTabs = [this.universe._createMenuItem('Details', null, { icon: 'circle-info', component: FuelReportPanelDetailsComponent })];
78
+
79
+ if (isArray(registeredTabs)) {
80
+ return [...defaultTabs, ...registeredTabs];
81
+ }
82
+
83
+ return defaultTabs;
84
+ }
85
+
86
+ /**
87
+ * Initializes the fuel-report panel component.
88
+ */
89
+ constructor() {
90
+ super(...arguments);
91
+ this.fuelReport = this.args.fuelReport;
92
+ this.tab = this.getTabUsingSlug(this.args.tab);
93
+ applyContextComponentArguments(this);
94
+ }
95
+
96
+ /**
97
+ * Sets the overlay context.
98
+ *
99
+ * @action
100
+ * @param {OverlayContextObject} overlayContext
101
+ */
102
+ @action setOverlayContext(overlayContext) {
103
+ this.context = overlayContext;
104
+ contextComponentCallback(this, 'onLoad', ...arguments);
105
+ }
106
+
107
+ /**
108
+ * Handles changing the active tab.
109
+ *
110
+ * @method
111
+ * @param {String} tab - The new tab to switch to.
112
+ * @action
113
+ */
114
+ @action onTabChanged(tab) {
115
+ this.tab = this.getTabUsingSlug(tab);
116
+ contextComponentCallback(this, 'onTabChanged', tab);
117
+ }
118
+
119
+ /**
120
+ * Handles edit action for the fuel-report.
121
+ *
122
+ * @method
123
+ * @action
124
+ */
125
+ @action onEdit() {
126
+ const isActionOverrided = contextComponentCallback(this, 'onEdit', this.fuelReport);
127
+
128
+ if (!isActionOverrided) {
129
+ this.contextPanel.focus(this.fuelReport, 'editing', {
130
+ onAfterSave: () => {
131
+ this.contextPanel.clear();
132
+ },
133
+ });
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Handles the cancel action.
139
+ *
140
+ * @method
141
+ * @action
142
+ * @returns {Boolean} Indicates whether the cancel action was overridden.
143
+ */
144
+ @action onPressCancel() {
145
+ return contextComponentCallback(this, 'onPressCancel', this.fuelReport);
146
+ }
147
+
148
+ /**
149
+ * Finds and returns a tab based on its slug.
150
+ *
151
+ * @param {String} tabSlug - The slug of the tab.
152
+ * @returns {Object|null} The found tab or null.
153
+ */
154
+ getTabUsingSlug(tabSlug) {
155
+ if (tabSlug) {
156
+ return this.tabs.find(({ slug }) => slug === tabSlug);
157
+ }
158
+
159
+ return this.tabs[0];
160
+ }
161
+ }
@@ -0,0 +1,85 @@
1
+ <Overlay @onLoad={{this.setOverlayContext}} @position="right" @noBackdrop={{true}} @fullHeight={{true}} @isResizable={{or this.isResizable @isResizable}} @width={{or this.width @width "600px"}}>
2
+ <Overlay::Header @title={{if this.issue.public_id this.issue.name "New Issue"}} @status={{this.issue.public_id}} @hideStatusDot={{true}} @createdAt={{this.issue.createdAt}} @titleWrapperClass="leading-5">
3
+ <div class="flex flex-1 justify-end">
4
+ <Button @icon={{if this.issue.id "save" "check"}} @type="primary" @text={{if this.issue.id "Save Issue" "Create Issue"}} @onClick={{this.save}} @wrapperClass="mr-2" />
5
+ {{#if this.issue.id}}
6
+ <Button @type="default" @icon="circle-exclamation" @helpText="View issue details" @onClick={{this.onViewDetails}} @wrapperClass="mr-2" />
7
+ {{/if}}
8
+ <Button @type="default" @icon="times" @helpText={{if this.issue.id "Cancel edit issue" "Cancel new issue"}} @onClick={{this.onPressCancel}} />
9
+ </div>
10
+ </Overlay::Header>
11
+
12
+ <Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 pt-4" @increaseInnerBodyHeightBy={{1000}}>
13
+ <div class="grid grid-cols-1 text-xs dark:text-gray-100">
14
+ <InputGroup @name="Reported By">
15
+ <ModelSelect @modelName="user" @selectedModel={{this.issue.reporter}} @placeholder="Select Reporter" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn (mut this.issue.reporter)}} @onChangeId={{fn (mut this.issue.reported_by_uuid)}} as |model|>
16
+ {{model.name}}
17
+ </ModelSelect>
18
+ </InputGroup>
19
+
20
+ <InputGroup @name="Assigned To">
21
+ <ModelSelect @modelName="user" @selectedModel={{this.issue.assignee}} @placeholder="Select Assignee" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn (mut this.issue.assignee)}} @onChangeId={{fn (mut this.issue.assigned_to_uuid)}} as |model|>
22
+ {{model.name}}
23
+ </ModelSelect>
24
+ </InputGroup>
25
+
26
+ <InputGroup @name="Driver">
27
+ <ModelSelect @modelName="driver" @selectedModel={{this.issue.driver}} @placeholder="Select Driver" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn (mut this.issue.driver)}} as |model|>
28
+ {{model.name}}
29
+ </ModelSelect>
30
+ </InputGroup>
31
+
32
+ <InputGroup @name="Vehicle">
33
+ <ModelSelect @modelName="vehicle" @selectedModel={{this.issue.vehicle}} @placeholder="Select Vehicle" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn (mut this.issue.vehicle)}} as |model|>
34
+ {{model.displayName}}
35
+ </ModelSelect>
36
+ </InputGroup>
37
+
38
+ <InputGroup @name="Issue Type">
39
+ <div class="fleetbase-model-select fleetbase-power-select ember-model-select">
40
+ <PowerSelect @options={{this.issueTypes}} @selected={{this.issue.type}} @onChange={{this.onSelectIssueType}} @placeholder="Select issue type" @triggerClass="form-select form-input" as |type|>
41
+ {{smart-humanize type}}
42
+ </PowerSelect>
43
+ </div>
44
+ </InputGroup>
45
+
46
+ <InputGroup @name="Issue Category">
47
+ <div class="fleetbase-model-select fleetbase-power-select ember-model-select">
48
+ <PowerSelect @options={{this.issueCategories}} @selected={{this.issue.category}} @onChange={{fn (mut this.issue.category)}} @placeholder="Select issue category" @triggerClass="form-select form-input" @disabled={{not this.issueCategories}} as |category|>
49
+ {{smart-humanize category}}
50
+ </PowerSelect>
51
+ </div>
52
+ </InputGroup>
53
+
54
+ <InputGroup @name="Issue Report">
55
+ <Textarea @value={{this.issue.report}} aria-label="Issue Report" class="w-full form-input" placeholder="Issue Report" rows={{5}} />
56
+ </InputGroup>
57
+
58
+ <InputGroup @name="Issue Tags">
59
+ <TagInput class="form-input" @placeholder="Add tags" @allowSpacesInTags={{true}} @tags={{this.issue.tags}} @addTag={{this.addTag}} @removeTagAtIndex={{this.removeTag}} as |tag|>
60
+ {{tag}}
61
+ </TagInput>
62
+ </InputGroup>
63
+
64
+ <InputGroup @name="Issue Priority">
65
+ <div class="fleetbase-model-select fleetbase-power-select ember-model-select">
66
+ <PowerSelect @options={{this.issuePriorityOptions}} @selected={{this.issue.priority}} @onChange={{fn (mut this.issue.priority)}} @placeholder="Select issue priority" @triggerClass="form-select form-input" as |priority|>
67
+ {{smart-humanize priority}}
68
+ </PowerSelect>
69
+ </div>
70
+ </InputGroup>
71
+
72
+ <InputGroup @name="Status">
73
+ <div class="fleetbase-model-select fleetbase-power-select ember-model-select">
74
+ <PowerSelect @options={{this.issueStatusOptions}} @selected={{this.issue.status}} @onChange={{fn (mut this.issue.status)}} @placeholder="Select issue status" @triggerClass="form-select form-input" as |status|>
75
+ {{smart-humanize status}}
76
+ </PowerSelect>
77
+ </div>
78
+ </InputGroup>
79
+
80
+ <InputGroup @name="Coordinates">
81
+ <CoordinatesInput @value={{this.issue.location}} @onChange={{fn (mut this.issue.location)}} />
82
+ </InputGroup>
83
+ </div>
84
+ </Overlay::Body>
85
+ </Overlay>