@fleetbase/fleetops-engine 0.6.35 → 0.6.37

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 (73) hide show
  1. package/addon/components/avatar-manager.hbs +86 -0
  2. package/addon/components/avatar-manager.js +165 -0
  3. package/addon/components/customer/create-order-form.js +5 -0
  4. package/addon/components/layout/fleet-ops-sidebar.js +8 -0
  5. package/addon/components/order-progress-card.js +1 -1
  6. package/addon/controllers/analytics/reports/index/edit.js +2 -0
  7. package/addon/controllers/analytics/reports/index/new.js +2 -0
  8. package/addon/controllers/connectivity/devices/index/edit.js +2 -0
  9. package/addon/controllers/connectivity/devices/index/new.js +2 -0
  10. package/addon/controllers/connectivity/sensors/index/edit.js +2 -0
  11. package/addon/controllers/connectivity/sensors/index/new.js +2 -0
  12. package/addon/controllers/connectivity/telematics/index/edit.js +2 -0
  13. package/addon/controllers/connectivity/telematics/index/new.js +2 -0
  14. package/addon/controllers/management/contacts/customers/edit.js +2 -0
  15. package/addon/controllers/management/contacts/customers/new.js +2 -0
  16. package/addon/controllers/management/contacts/index/edit.js +2 -0
  17. package/addon/controllers/management/contacts/index/new.js +2 -0
  18. package/addon/controllers/management/drivers/index/edit.js +2 -0
  19. package/addon/controllers/management/drivers/index/new.js +2 -0
  20. package/addon/controllers/management/fleets/index/edit.js +2 -0
  21. package/addon/controllers/management/fleets/index/new.js +2 -0
  22. package/addon/controllers/management/fuel-reports/index/edit.js +2 -0
  23. package/addon/controllers/management/fuel-reports/index/new.js +2 -0
  24. package/addon/controllers/management/issues/index/edit.js +2 -0
  25. package/addon/controllers/management/issues/index/new.js +2 -0
  26. package/addon/controllers/management/places/index/edit.js +2 -0
  27. package/addon/controllers/management/places/index/new.js +2 -0
  28. package/addon/controllers/management/vehicles/index/edit.js +2 -0
  29. package/addon/controllers/management/vehicles/index/new.js +2 -0
  30. package/addon/controllers/management/vendors/index/edit.js +2 -0
  31. package/addon/controllers/management/vendors/index/new.js +2 -0
  32. package/addon/controllers/operations/orders/index/new.js +2 -0
  33. package/addon/controllers/operations/routes/index/new.js +1 -0
  34. package/addon/controllers/operations/service-rates/index/edit.js +2 -0
  35. package/addon/controllers/operations/service-rates/index/new.js +2 -0
  36. package/addon/controllers/settings/avatars.js +3 -0
  37. package/addon/extension.js +0 -5
  38. package/addon/routes/settings/avatars.js +3 -0
  39. package/addon/routes.js +1 -0
  40. package/addon/templates/operations/orders/index/new.hbs +1 -0
  41. package/addon/templates/settings/avatars.hbs +10 -0
  42. package/app/components/avatar-manager.js +1 -0
  43. package/app/controllers/settings/avatars.js +1 -0
  44. package/app/routes/settings/avatars.js +1 -0
  45. package/app/templates/settings/avatars.js +1 -0
  46. package/composer.json +1 -1
  47. package/extension.json +1 -1
  48. package/package.json +3 -3
  49. package/server/config/fleetops.php +1 -1
  50. package/server/src/Auth/Schemas/FleetOps.php +4 -0
  51. package/server/src/Expansions/UserFilterExpansion.php +31 -0
  52. package/server/src/Http/Controllers/Internal/v1/ContactController.php +5 -2
  53. package/server/src/Http/Controllers/Internal/v1/DriverController.php +35 -2
  54. package/server/src/Http/Controllers/Internal/v1/FleetController.php +5 -2
  55. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +5 -2
  56. package/server/src/Http/Controllers/Internal/v1/IssueController.php +5 -2
  57. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +5 -2
  58. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +8 -3
  59. package/server/src/Http/Controllers/Internal/v1/VendorController.php +5 -2
  60. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +2 -1
  61. package/server/src/Imports/ContactImport.php +6 -0
  62. package/server/src/Imports/DriverImport.php +6 -0
  63. package/server/src/Imports/FleetImport.php +6 -0
  64. package/server/src/Imports/FuelReportImport.php +6 -0
  65. package/server/src/Imports/IssueImport.php +6 -0
  66. package/server/src/Imports/PlaceImport.php +6 -0
  67. package/server/src/Imports/VehicleImport.php +6 -0
  68. package/server/src/Imports/VendorImport.php +6 -0
  69. package/server/src/Models/Vehicle.php +9 -2
  70. package/server/src/Rules/ResolvableVehicle.php +90 -0
  71. package/server/src/Support/Reporting/FleetOpsReportSchema.php +129 -1
  72. package/translations/en-us.yaml +2 -0
  73. package/DRIVER_SCHEDULING.md +0 -186
@@ -0,0 +1,86 @@
1
+ <div class="mb-4">
2
+ <div class="flex flex-row items-stretch rounded-lg border border-gray-200 dark:border-gray-700">
3
+ <div class="w-48 h-full bg-white dark:bg-gray-700 rounded-l-lg">
4
+ {{#each this.categories as |category index|}}
5
+ <a
6
+ href="#"
7
+ class="flex flex-row px-4 py-2 border-b border-gray-200 dark:border-gray-900 hover:bg-blue-400
8
+ {{if (eq this.currentCategory.type category.type) 'bg-blue-500'}}
9
+ {{if (eq index 0) 'rounded-tl-lg'}}"
10
+ {{on "click" (fn this.switchCategory category)}}
11
+ >
12
+ <div class="w-6">
13
+ <FaIcon @icon={{category.icon}} @size="sm" />
14
+ </div>
15
+ <div>{{category.name}}</div>
16
+ </a>
17
+ {{/each}}
18
+ </div>
19
+ <div class="flex-1 border-l border-gray-200 dark:border-gray-700">
20
+ <div class="p-4">
21
+ {{#if this.isUploading}}
22
+ <div
23
+ 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"
24
+ >
25
+ <div class="flex items-center justify-center py-5">
26
+ <Spinner class="text-sm dar:text-gray-100" @loadingMessage={{concat (t "common.uploading") "..."}} />
27
+ </div>
28
+ </div>
29
+ {{else}}
30
+ {{#let (file-queue name="files" onFileAdded=this.queueFile accept=(join "," this.acceptedFileTypes)) as |queue|}}
31
+ <FileDropzone @queue={{queue}} class="dropzone file-dropzone" as |dropzone|>
32
+ {{#if dropzone.active}}
33
+ {{#if dropzone.valid}}
34
+ {{t "dropzone.drop-to-upload"}}
35
+ {{else}}
36
+ {{t "dropzone.invalid"}}
37
+ {{/if}}
38
+ {{else if queue.files.length}}
39
+ <div class="my-2">
40
+ <FaIcon @icon="folder-open" class="text-indigo-500 mr-2" />
41
+ {{t "dropzone.files-ready-for-upload" numOfFiles=(pluralize queue.files.length (t "dropzone.file"))}}
42
+ </div>
43
+ <div class="my-2">({{queue.progress}}%)</div>
44
+ {{else}}
45
+ <h4 class="font-semibold">
46
+ <FaIcon @icon="folder-open" @size="lg" class="text-indigo-500 mr-2" />
47
+ {{t "dropzone.upload-avatar-files"}}
48
+ </h4>
49
+ <div>
50
+ {{#if dropzone.supported}}
51
+ <p class="text-sm my-5">{{t "dropzone.dropzone-supported-avatars"}}</p>
52
+ {{/if}}
53
+ <FileUpload @name="files" @for="files" @accept={{join "," this.acceptedFileTypes}} @multiple={{true}} @onFileAdded={{this.queueFile}}>
54
+ <a tabindex={{0}} class="btn btn-magic cursor-pointer ml-1">{{t "dropzone.or-select-button-text"}}</a>
55
+ </FileUpload>
56
+ </div>
57
+ {{/if}}
58
+ </FileDropzone>
59
+ {{/let}}
60
+ {{/if}}
61
+ <div class="space-y-4 mt-4">
62
+ {{#if this.uploadQueue}}
63
+ <div class="space-y-2">
64
+ {{#each this.uploadQueue as |file|}}
65
+ <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">
66
+ <div class="text-xs text-blue-900 truncate">{{truncate-filename file.name 50}}</div>
67
+ <div class="flex items-center text-sm">
68
+ <Spinner class="text-blue-900 mr-2" />
69
+ <span class="font-bold text-blue-900">{{round file.progress}}%</span>
70
+ </div>
71
+ </div>
72
+ {{/each}}
73
+ </div>
74
+ {{/if}}
75
+ <div>
76
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-2 md:gap-4">
77
+ {{#each this.currentCategory.avatars as |file|}}
78
+ <File @file={{file}} @onDelete={{this.removeFile}} />
79
+ {{/each}}
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
@@ -0,0 +1,165 @@
1
+ import Component from '@glimmer/component';
2
+ import { inject as service } from '@ember/service';
3
+ import { action } from '@ember/object';
4
+ import { isArray } from '@ember/array';
5
+ import { tracked } from '@glimmer/tracking';
6
+ import { task } from 'ember-concurrency';
7
+ import { pluralize } from 'ember-inflector';
8
+
9
+ export default class AvatarManagerComponent extends Component {
10
+ @service fileQueue;
11
+ @service store;
12
+ @service fetch;
13
+ @service notifications;
14
+ @service currentUser;
15
+ @service intl;
16
+
17
+ /**
18
+ * Tracks the files in the upload queue.
19
+ *
20
+ * @var {Array}
21
+ */
22
+ @tracked uploadQueue = [];
23
+
24
+ /**
25
+ * The current loaded avatars.
26
+ *
27
+ * @var {Array}
28
+ */
29
+ @tracked avatars = [];
30
+
31
+ /**
32
+ * Tracks the selected category for avatar management.
33
+ *
34
+ * @var {string|null}
35
+ */
36
+ @tracked currentCategory;
37
+
38
+ /**
39
+ * Selectable categories for avatar management.
40
+ *
41
+ * @memberof AdminAvatarManagementComponent
42
+ */
43
+ @tracked categories = [
44
+ {
45
+ name: this.intl.t('resource.vehicles'),
46
+ icon: 'car',
47
+ type: 'vehicle',
48
+ avatars: [],
49
+ },
50
+ {
51
+ name: this.intl.t('resource.places'),
52
+ icon: 'building',
53
+ type: 'place',
54
+ avatars: [],
55
+ },
56
+ {
57
+ name: this.intl.t('resource.drivers'),
58
+ icon: 'id-card',
59
+ type: 'driver',
60
+ avatars: [],
61
+ },
62
+ ];
63
+
64
+ /**
65
+ * The only acceptable file types for avatars, png or svg.
66
+ *
67
+ * @memberof AdminAvatarManagementComponent
68
+ */
69
+ get acceptedFileTypes() {
70
+ return ['image/svg+xml', 'image/png'];
71
+ }
72
+
73
+ /**
74
+ * Creates an instance of AdminAvatarManagementComponent.
75
+ * @memberof AdminAvatarManagementComponent
76
+ */
77
+ constructor() {
78
+ super(...arguments);
79
+ this.loadAvatars.perform();
80
+ }
81
+
82
+ /**
83
+ * Action triggered when a category is selected.
84
+ *
85
+ * @param {string} category - The selected category.
86
+ */
87
+ @action switchCategory(category) {
88
+ this.currentCategory = category;
89
+ }
90
+
91
+ /**
92
+ * Action triggered when a file is queued for upload.
93
+ *
94
+ * @param {File} file - The file to be queued.
95
+ */
96
+ @action queueFile(file) {
97
+ // since we have dropzone and upload button within dropzone validate the file state first
98
+ // as this method can be called twice from both functions
99
+ if (['queued', 'failed', 'timed_out', 'aborted'].indexOf(file.state) === -1) {
100
+ return;
101
+ }
102
+
103
+ // Get the current category
104
+ const category = this.currentCategory;
105
+
106
+ // Queue and upload immediatley
107
+ this.uploadQueue.pushObject(file);
108
+ this.fetch.uploadFile.perform(
109
+ file,
110
+ {
111
+ path: `custom-avatars/${pluralize(category.type)}/${this.currentUser.companyId}`,
112
+ type: `${category.type}-avatar`,
113
+ },
114
+ (uploadedFile) => {
115
+ this.currentCategory.avatars.pushObject(uploadedFile);
116
+ this.uploadQueue.removeObject(file);
117
+ },
118
+ () => {
119
+ this.uploadQueue.removeObject(file);
120
+ // remove file from queue
121
+ if (file.queue && typeof file.queue.remove === 'function') {
122
+ file.queue.remove(file);
123
+ }
124
+ }
125
+ );
126
+ }
127
+
128
+ /**
129
+ * Action triggered when a file is removed.
130
+ *
131
+ * @param {File} file - The file to be removed.
132
+ * @returns {Promise} - A promise representing the file destruction operation.
133
+ */
134
+ @action removeFile(file) {
135
+ this.currentCategory.avatars.removeObject(file);
136
+ return file.destroyRecord();
137
+ }
138
+
139
+ /**
140
+ * Task that loads files based on the selected category.
141
+ *
142
+ * @task
143
+ * @generator
144
+ * @yields {Array} - The filtered files based on the selected category.
145
+ */
146
+ @task *loadAvatars() {
147
+ this.avatars = yield this.store.query('file', { type_ends_with: 'avatar' });
148
+
149
+ // Assign avatars to their categories
150
+ if (isArray(this.avatars)) {
151
+ const categoriesWithAvatars = [];
152
+
153
+ for (let i = 0; i < this.categories.length; i++) {
154
+ const category = this.categories[i];
155
+ categoriesWithAvatars.pushObject({
156
+ ...category,
157
+ avatars: this.avatars.filter((file) => file.type === `${category.type}-avatar`),
158
+ });
159
+ }
160
+
161
+ this.categories = categoriesWithAvatars;
162
+ this.currentCategory = this.currentCategory ? this.categories.find((category) => category.type === this.currentCategory.type) : this.categories[0];
163
+ }
164
+ }
165
+ }
@@ -31,6 +31,7 @@ export default class CustomerCreateOrderFormComponent extends Component {
31
31
  @service fetch;
32
32
  @service intl;
33
33
  @service universe;
34
+ @service events;
34
35
  @tracked order;
35
36
  @tracked customer;
36
37
  @tracked payload = this.store.createRecord('payload');
@@ -194,6 +195,10 @@ export default class CustomerCreateOrderFormComponent extends Component {
194
195
 
195
196
  try {
196
197
  yield order.save();
198
+
199
+ // Track with standard events service
200
+ this.events.trackResourceCreated(order);
201
+
197
202
  // trigger event that fleet-ops created an order
198
203
  this.universe.trigger('fleet-ops.order.created', order);
199
204
 
@@ -261,6 +261,14 @@ export default class LayoutFleetOpsSidebarComponent extends Component {
261
261
  permission: 'fleet-ops view custom-field',
262
262
  visible: this.abilities.can('fleet-ops see custom-field'),
263
263
  },
264
+ {
265
+ intl: 'menu.avatars',
266
+ title: this.intl.t('menu.avatars'),
267
+ icon: 'icons',
268
+ route: 'settings.avatars',
269
+ permission: 'fleet-ops view avatar',
270
+ visible: this.abilities.can('fleet-ops see avatar'),
271
+ },
264
272
  ];
265
273
 
266
274
  const createPanel = (intl, routePrefix, items = [], options = {}) => ({
@@ -34,7 +34,7 @@ export default class OrderProgressCardComponent extends Component {
34
34
  }
35
35
 
36
36
  @task *loadTrackerData() {
37
- if (!isBlank(this.order.tracker_data)) {
37
+ if (!isBlank(this.order.tracker_data) || !this.order || !this.order.isNew) {
38
38
  return;
39
39
  }
40
40
 
@@ -9,6 +9,7 @@ export default class AnalyticsReportsIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked actionButtons = [
14
15
  {
@@ -26,6 +27,7 @@ export default class AnalyticsReportsIndexEditController extends Controller {
26
27
  report.fillResult(result);
27
28
 
28
29
  yield report.save();
30
+ this.events.trackResourceUpdated(report);
29
31
  this.overlay?.close();
30
32
 
31
33
  yield this.hostRouter.transitionTo('console.fleet-ops.analytics.reports.index.details', report);
@@ -9,6 +9,7 @@ export default class AnalyticsReportsIndexNewController extends Controller {
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked validationErrors = [];
14
15
  @tracked report = this.reportActions.createNewInstance({ type: 'fleet-ops' });
@@ -22,6 +23,7 @@ export default class AnalyticsReportsIndexNewController extends Controller {
22
23
  report.fillResult(result);
23
24
 
24
25
  yield report.save();
26
+ this.events.trackResourceCreated(report);
25
27
  this.overlay?.close();
26
28
 
27
29
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ConnectivityDevicesIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
 
14
15
  get actionButtons() {
@@ -23,6 +24,7 @@ export default class ConnectivityDevicesIndexEditController extends Controller {
23
24
  @task *save(device) {
24
25
  try {
25
26
  yield device.save();
27
+ this.events.trackResourceUpdated(device);
26
28
  this.overlay?.close();
27
29
 
28
30
  yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.devices.index.details', device);
@@ -9,12 +9,14 @@ export default class ConnectivityDevicesIndexNewController extends Controller {
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked device = this.deviceActions.createNewInstance();
14
15
 
15
16
  @task *save(device) {
16
17
  try {
17
18
  yield device.save();
19
+ this.events.trackResourceCreated(device);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ConnectivitySensorsIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
 
14
15
  get actionButtons() {
@@ -23,6 +24,7 @@ export default class ConnectivitySensorsIndexEditController extends Controller {
23
24
  @task *save(sensor) {
24
25
  try {
25
26
  yield sensor.save();
27
+ this.events.trackResourceUpdated(sensor);
26
28
  this.overlay?.close();
27
29
 
28
30
  yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.sensors.index.details', sensor);
@@ -9,12 +9,14 @@ export default class ConnectivitySensorsIndexNewController extends Controller {
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked sensor = this.sensorActions.createNewInstance();
14
15
 
15
16
  @task *save(sensor) {
16
17
  try {
17
18
  yield sensor.save();
19
+ this.events.trackResourceCreated(sensor);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
 
14
15
  get actionButtons() {
@@ -23,6 +24,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle
23
24
  @task *save(telematic) {
24
25
  try {
25
26
  yield telematic.save();
27
+ this.events.trackResourceUpdated(telematic);
26
28
  this.overlay?.close();
27
29
 
28
30
  yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.index.details', telematic);
@@ -9,12 +9,14 @@ export default class ConnectivityTelematicsIndexNewController extends Controller
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked telematic = this.telematicActions.createNewInstance();
14
15
 
15
16
  @task *save(telematic) {
16
17
  try {
17
18
  yield telematic.save();
19
+ this.events.trackResourceCreated(telematic);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ManagementContactsCustomersEditController extends Controlle
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked actionButtons = [
14
15
  {
@@ -20,6 +21,7 @@ export default class ManagementContactsCustomersEditController extends Controlle
20
21
  @task *save(customer) {
21
22
  try {
22
23
  yield customer.save();
24
+ this.events.trackResourceUpdated(customer);
23
25
  this.overlay?.close();
24
26
 
25
27
  yield this.hostRouter.transitionTo('console.fleet-ops.management.contacts.customers.details', customer);
@@ -9,12 +9,14 @@ export default class ManagementContactsCustomersNewController extends Controller
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked customer = this.customerActions.createNewInstance();
14
15
 
15
16
  @task *save(customer) {
16
17
  try {
17
18
  yield customer.save();
19
+ this.events.trackResourceCreated(customer);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ManagementContactsIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked actionButtons = [
14
15
  {
@@ -20,6 +21,7 @@ export default class ManagementContactsIndexEditController extends Controller {
20
21
  @task *save(contact) {
21
22
  try {
22
23
  yield contact.save();
24
+ this.events.trackResourceUpdated(contact);
23
25
  this.overlay?.close();
24
26
 
25
27
  yield this.hostRouter.transitionTo('console.fleet-ops.management.contacts.index.details', contact);
@@ -9,12 +9,14 @@ export default class ManagementContactsIndexNewController extends Controller {
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked contact = this.contactActions.createNewInstance();
14
15
 
15
16
  @task *save(contact) {
16
17
  try {
17
18
  yield contact.save();
19
+ this.events.trackResourceCreated(contact);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ManagementDriversIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked actionButtons = [
14
15
  {
@@ -20,6 +21,7 @@ export default class ManagementDriversIndexEditController extends Controller {
20
21
  @task *save(driver) {
21
22
  try {
22
23
  yield driver.save();
24
+ this.events.trackResourceUpdated(driver);
23
25
  this.overlay?.close();
24
26
 
25
27
  yield this.hostRouter.transitionTo('console.fleet-ops.management.drivers.index.details', driver);
@@ -9,12 +9,14 @@ export default class ManagementDriversIndexNewController extends Controller {
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked driver = this.driverActions.createNewInstance();
14
15
 
15
16
  @task *save(driver) {
16
17
  try {
17
18
  yield driver.save();
19
+ this.events.trackResourceCreated(driver);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ManagementFleetsIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
 
14
15
  get actionButtons() {
@@ -23,6 +24,7 @@ export default class ManagementFleetsIndexEditController extends Controller {
23
24
  @task *save(fleet) {
24
25
  try {
25
26
  yield fleet.save();
27
+ this.events.trackResourceUpdated(fleet);
26
28
  this.overlay?.close();
27
29
 
28
30
  yield this.hostRouter.transitionTo('console.fleet-ops.management.fleets.index.details', fleet);
@@ -9,12 +9,14 @@ export default class ManagementFleetsIndexNewController extends Controller {
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked fleet = this.fleetActions.createNewInstance();
14
15
 
15
16
  @task *save(fleet) {
16
17
  try {
17
18
  yield fleet.save();
19
+ this.events.trackResourceCreated(fleet);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ManagementFuelReportsIndexEditController extends Controller
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked actionButtons = [
14
15
  {
@@ -20,6 +21,7 @@ export default class ManagementFuelReportsIndexEditController extends Controller
20
21
  @task *save(fuelReport) {
21
22
  try {
22
23
  yield fuelReport.save();
24
+ this.events.trackResourceUpdated(fuelReport);
23
25
  this.overlay?.close();
24
26
 
25
27
  yield this.hostRouter.transitionTo('console.fleet-ops.management.fuel-reports.index.details', fuelReport);
@@ -10,12 +10,14 @@ export default class ManagementFuelReportsIndexNewController extends Controller
10
10
  @service hostRouter;
11
11
  @service intl;
12
12
  @service notifications;
13
+ @service events;
13
14
  @tracked overlay;
14
15
  @tracked fuelReport = this.fuelReportActions.createNewInstance({ reporter: this.currentUser.user });
15
16
 
16
17
  @task *save(fuelReport) {
17
18
  try {
18
19
  yield fuelReport.save();
20
+ this.events.trackResourceCreated(fuelReport);
19
21
  this.overlay?.close();
20
22
 
21
23
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ManagementIssuesIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked actionButtons = [
14
15
  {
@@ -20,6 +21,7 @@ export default class ManagementIssuesIndexEditController extends Controller {
20
21
  @task *save(issue) {
21
22
  try {
22
23
  yield issue.save();
24
+ this.events.trackResourceUpdated(issue);
23
25
  this.overlay?.close();
24
26
 
25
27
  yield this.hostRouter.transitionTo('console.fleet-ops.management.issues.index.details', issue);
@@ -10,12 +10,14 @@ export default class ManagementIssuesIndexNewController extends Controller {
10
10
  @service intl;
11
11
  @service currentUser;
12
12
  @service notifications;
13
+ @service events;
13
14
  @tracked overlay;
14
15
  @tracked issue = this.issueActions.createNewInstance({ reporter: this.currentUser.user });
15
16
 
16
17
  @task *save(issue) {
17
18
  try {
18
19
  yield issue.save();
20
+ this.events.trackResourceCreated(issue);
19
21
  this.overlay?.close();
20
22
 
21
23
  yield this.hostRouter.refresh();
@@ -9,6 +9,7 @@ export default class ManagementPlacesIndexEditController extends Controller {
9
9
  @service intl;
10
10
  @service notifications;
11
11
  @service modalsManager;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked actionButtons = [
14
15
  {
@@ -20,6 +21,7 @@ export default class ManagementPlacesIndexEditController extends Controller {
20
21
  @task *save(place) {
21
22
  try {
22
23
  yield place.save();
24
+ this.events.trackResourceUpdated(place);
23
25
  this.overlay?.close();
24
26
 
25
27
  yield this.hostRouter.transitionTo('console.fleet-ops.management.places.index.details', place);
@@ -9,12 +9,14 @@ export default class ManagementPlacesIndexNewController extends Controller {
9
9
  @service hostRouter;
10
10
  @service intl;
11
11
  @service notifications;
12
+ @service events;
12
13
  @tracked overlay;
13
14
  @tracked place = this.placeActions.createNewInstance();
14
15
 
15
16
  @task *save(place) {
16
17
  try {
17
18
  yield place.save();
19
+ this.events.trackResourceCreated(place);
18
20
  this.overlay?.close();
19
21
 
20
22
  yield this.hostRouter.refresh();