@fleetbase/fleetops-engine 0.2.8 → 0.2.9

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 (45) hide show
  1. package/addon/components/context-panel.hbs +5 -0
  2. package/addon/components/context-panel.js +6 -0
  3. package/addon/components/driver-form-panel.hbs +22 -22
  4. package/addon/components/driver-form-panel.js +28 -3
  5. package/addon/components/driver-panel.hbs +8 -8
  6. package/addon/components/driver-panel.js +23 -6
  7. package/addon/components/fleet-vehicle-listing.hbs +1 -1
  8. package/addon/components/live-map.hbs +20 -9
  9. package/addon/components/live-map.js +1045 -354
  10. package/addon/components/settings-window.hbs +1 -1
  11. package/addon/components/vehicle-form-panel.hbs +24 -24
  12. package/addon/components/vehicle-form-panel.js +26 -3
  13. package/addon/components/vehicle-panel.hbs +8 -9
  14. package/addon/components/vehicle-panel.js +21 -4
  15. package/addon/controllers/operations/orders/index/new.js +3 -5
  16. package/addon/controllers/operations/orders/index/view.js +5 -7
  17. package/addon/controllers/operations/orders/index.js +15 -2
  18. package/addon/engine.js +6 -0
  19. package/addon/routes/operations/orders/index/view.js +4 -2
  20. package/addon/routes/operations/orders/index.js +5 -1
  21. package/addon/services/context-panel.js +106 -0
  22. package/addon/services/leaflet-contextmenu-manager.js +311 -0
  23. package/addon/services/leaflet-map-manager.js +61 -0
  24. package/addon/services/service-areas.js +242 -32
  25. package/addon/templates/application.hbs +2 -1
  26. package/addon/utils/find-leaflet-layer.js +13 -0
  27. package/addon/utils/fly-to-leaflet-layer.js +25 -0
  28. package/addon/utils/get-leaflet-layer-by-id.js +12 -0
  29. package/addon/utils/layer-can-bind-contextmenu.js +3 -0
  30. package/app/components/context-panel.js +1 -0
  31. package/app/services/context-panel.js +1 -0
  32. package/app/services/leaflet-contextmenu-manager.js +1 -0
  33. package/app/services/leaflet-map-manager.js +1 -0
  34. package/app/utils/find-leaflet-layer.js +1 -0
  35. package/app/utils/fly-to-leaflet-layer.js +1 -0
  36. package/app/utils/get-leaflet-layer-by-id.js +1 -0
  37. package/app/utils/layer-can-bind-contextmenu.js +1 -0
  38. package/composer.json +11 -1
  39. package/extension.json +1 -1
  40. package/package.json +2 -2
  41. package/server/src/Http/Controllers/Internal/v1/LiveController.php +7 -4
  42. package/server/src/Http/Filter/VehicleFilter.php +7 -0
  43. package/server/src/Http/Resources/v1/Vehicle.php +51 -39
  44. package/addon/services/map-manager.js +0 -3
  45. package/app/services/map-manager.js +0 -1
@@ -11,22 +11,86 @@ import Polygon from '@fleetbase/fleetops-data/utils/geojson/polygon';
11
11
  import FeatureCollection from '@fleetbase/fleetops-data/utils/geojson/feature-collection';
12
12
 
13
13
  export default class ServiceAreasService extends Service {
14
+ /**
15
+ * Inject the `store` service.
16
+ *
17
+ * @memberof ServiceAreasService
18
+ */
14
19
  @service store;
20
+
21
+ /**
22
+ * Inject the `modalsManager` service.
23
+ *
24
+ * @memberof ServiceAreasService
25
+ */
15
26
  @service modalsManager;
27
+
28
+ /**
29
+ * Inject the `notifications` service.
30
+ *
31
+ * @memberof ServiceAreasService
32
+ */
16
33
  @service notifications;
34
+
35
+ /**
36
+ * Inject the `crud` service.
37
+ *
38
+ * @memberof ServiceAreasService
39
+ */
17
40
  @service crud;
41
+
42
+ /**
43
+ * Inject the `appCache` service.
44
+ *
45
+ * @memberof ServiceAreasService
46
+ */
18
47
  @service appCache;
19
48
 
49
+ /**
50
+ * The Leaflet map instance used by the service for map-related operations.
51
+ *
52
+ * @type {Object|null}
53
+ */
20
54
  @tracked leafletMap;
55
+
56
+ /**
57
+ * An array of service area types available within the application.
58
+ *
59
+ * @type {string[]}
60
+ */
21
61
  @tracked serviceAreaTypes = ['neighborhood', 'city', 'region', 'state', 'province', 'country', 'continent'];
62
+
63
+ /**
64
+ * A context variable that stores the current context for layer creation.
65
+ *
66
+ * @type {string|null}
67
+ */
22
68
  @tracked layerCreationContext;
69
+
70
+ /**
71
+ * A context variable that stores information related to the service area in which zones are being created.
72
+ *
73
+ * @type {Object|null}
74
+ */
23
75
  @tracked zoneServiceAreaContext;
24
76
 
25
- @action getFromCache() {
77
+ /**
78
+ * Retrieves service areas from the cache.
79
+ *
80
+ * @function
81
+ * @returns {Array} An array of service areas retrieved from the cache.
82
+ */
83
+ getFromCache() {
26
84
  return this.appCache.getEmberData('serviceAreas', 'service-area');
27
85
  }
28
86
 
29
- @action removeFromCache(serviceArea) {
87
+ /**
88
+ * Removes a service area from the cache.
89
+ *
90
+ * @function
91
+ * @param {Object} serviceArea - The service area to remove from the cache.
92
+ */
93
+ removeFromCache(serviceArea) {
30
94
  const serviceAreas = this.getFromCache();
31
95
  const index = serviceAreas?.findIndex((sa) => sa.id === serviceArea.id);
32
96
 
@@ -36,7 +100,13 @@ export default class ServiceAreasService extends Service {
36
100
  }
37
101
  }
38
102
 
39
- @action addToCache(serviceArea) {
103
+ /**
104
+ * Adds a service area to the cache.
105
+ *
106
+ * @function
107
+ * @param {ServiceAreaModel} serviceArea - The service area to add to the cache.
108
+ */
109
+ addToCache(serviceArea) {
40
110
  const serviceAreas = this.getFromCache();
41
111
 
42
112
  if (isArray(serviceAreas)) {
@@ -46,7 +116,14 @@ export default class ServiceAreasService extends Service {
46
116
  }
47
117
  }
48
118
 
49
- @action layerToTerraformerPrimitive(layer) {
119
+ /**
120
+ * Converts a Leaflet layer to a Terraformer primitive.
121
+ *
122
+ * @function
123
+ * @param {Object} layer - The Leaflet layer to convert.
124
+ * @returns {Object} The Terraformer primitive.
125
+ */
126
+ layerToTerraformerPrimitive(layer) {
50
127
  const leafletLayerGeoJson = layer.toGeoJSON();
51
128
  let featureCollection, feature;
52
129
 
@@ -62,7 +139,14 @@ export default class ServiceAreasService extends Service {
62
139
  return primitive;
63
140
  }
64
141
 
65
- @action layerToTerraformerMultiPolygon(layer) {
142
+ /**
143
+ * Converts a Leaflet layer to a Terraformer MultiPolygon.
144
+ *
145
+ * @function
146
+ * @param {Object} layer - The Leaflet layer to convert.
147
+ * @returns {Object} The Terraformer MultiPolygon.
148
+ */
149
+ layerToTerraformerMultiPolygon(layer) {
66
150
  const leafletLayerGeoJson = layer.toGeoJSON();
67
151
  let featureCollection, feature, coordinates;
68
152
 
@@ -79,7 +163,14 @@ export default class ServiceAreasService extends Service {
79
163
  return multipolygon;
80
164
  }
81
165
 
82
- @action layerToTerraformerPolygon(layer) {
166
+ /**
167
+ * Converts a Leaflet layer to a Terraformer Polygon.
168
+ *
169
+ * @function
170
+ * @param {Object} layer - The Leaflet layer to convert.
171
+ * @returns {Object} The Terraformer Polygon.
172
+ */
173
+ layerToTerraformerPolygon(layer) {
83
174
  const leafletLayerGeoJson = layer.toGeoJSON();
84
175
  let featureCollection, feature, coordinates;
85
176
 
@@ -96,36 +187,82 @@ export default class ServiceAreasService extends Service {
96
187
  return polygon;
97
188
  }
98
189
 
99
- @action clearLayerCreationContext() {
190
+ /**
191
+ * Clears the layer creation context.
192
+ *
193
+ * @function
194
+ */
195
+ clearLayerCreationContext() {
100
196
  this.layerCreationContext = undefined;
101
197
  }
102
198
 
103
- @action setLayerCreationContext(context) {
199
+ /**
200
+ * Sets the layer creation context.
201
+ *
202
+ * @function
203
+ * @param {string} context - The context to set.
204
+ */
205
+ setLayerCreationContext(context) {
104
206
  this.layerCreationContext = context;
105
207
  }
106
208
 
107
- @action clearZoneServiceAreaContext() {
209
+ /**
210
+ * Clears the zone service area context.
211
+ *
212
+ * @function
213
+ */
214
+ clearZoneServiceAreaContext() {
108
215
  this.zoneServiceAreaContext = undefined;
109
216
  }
110
217
 
111
- @action setZoneServiceAreaContext(serviceArea) {
218
+ /**
219
+ * Sets the zone service area context.
220
+ *
221
+ * @function
222
+ * @param {Object} serviceArea - The service area to set as the context.
223
+ */
224
+ setZoneServiceAreaContext(serviceArea) {
112
225
  this.zoneServiceAreaContext = serviceArea;
113
226
  }
114
227
 
115
- @action getZoneServiceAreaContext() {
228
+ /**
229
+ * Retrieves the zone service area context.
230
+ *
231
+ * @function
232
+ * @returns {Object} The zone service area context.
233
+ */
234
+ getZoneServiceAreaContext() {
116
235
  return this.zoneServiceAreaContext;
117
236
  }
118
237
 
119
- @action setMapInstance(map) {
238
+ /**
239
+ * Sets the Leaflet map instance for the service.
240
+ *
241
+ * @function
242
+ * @param {Object} map - The Leaflet map instance to set.
243
+ */
244
+ setMapInstance(map) {
120
245
  this.leafletMap = map;
121
246
  }
122
247
 
123
- @action sendToLiveMap(fn, ...params) {
124
- this.leafletMap?.liveMap[fn](...params);
248
+ /**
249
+ * Sends a command to the LiveMap through the Leaflet map instance.
250
+ *
251
+ * @function
252
+ * @param {string} fn - The function name to call on the LiveMap.
253
+ * @param {...any} params - Additional parameters to pass to the function.
254
+ */
255
+ triggerLiveMapFn(fn, ...params) {
256
+ this.leafletMap.liveMap[fn](...params);
125
257
  }
126
258
 
259
+ /**
260
+ * Initiates the creation of a service area on the map.
261
+ *
262
+ * @function
263
+ */
127
264
  @action createServiceArea() {
128
- this.sendToLiveMap('enableDrawControls');
265
+ this.triggerLiveMapFn('showDrawControls', { text: true });
129
266
  this.setLayerCreationContext('service-area');
130
267
 
131
268
  this.notifications.info('Use drawing controls to the right to draw a service area, complete point connections to save service area.', {
@@ -133,6 +270,14 @@ export default class ServiceAreasService extends Service {
133
270
  });
134
271
  }
135
272
 
273
+ /**
274
+ * Creates a generic layer on the map, such as a service area or zone.
275
+ *
276
+ * @function
277
+ * @param {Object} event - The event that triggered the creation.
278
+ * @param {Object} layer - The layer being created.
279
+ * @param {Object} options - Additional options for the creation (optional).
280
+ */
136
281
  @action createGenericLayer(event, layer, options = {}) {
137
282
  if (this.layerCreationContext === 'service-area') {
138
283
  return this.saveServiceArea(...arguments);
@@ -185,18 +330,18 @@ export default class ServiceAreasService extends Service {
185
330
 
186
331
  // if service area has been created, add to the active service areas
187
332
  if (selectedLayerType === 'Service Area') {
188
- this.sendToLiveMap('activateServiceArea', record);
189
- this.sendToLiveMap('focusLayerByRecord', record);
333
+ this.triggerLiveMapFn('activateServiceArea', record);
334
+ this.triggerLiveMapFn('focusLayerBoundsByRecord', record);
190
335
  } else {
191
336
  // if zone was created then we simply add the zone to the serviceArea selected
192
337
  // then we focus the service area
193
338
  serviceArea?.zones.pushObject(record);
194
- this.sendToLiveMap('activateServiceArea', serviceArea);
195
- this.sendToLiveMap('focusLayerByRecord', serviceArea);
339
+ this.triggerLiveMapFn('activateServiceArea', serviceArea);
340
+ this.triggerLiveMapFn('focusLayerBoundsByRecord', serviceArea);
196
341
  }
197
342
 
198
343
  // rebuild context menu
199
- this.sendToLiveMap('rebuildContextMenu');
344
+ this.triggerLiveMapFn('rebuildMapContextMenu');
200
345
  this.clearLayerCreationContext();
201
346
  });
202
347
  },
@@ -208,6 +353,13 @@ export default class ServiceAreasService extends Service {
208
353
  });
209
354
  }
210
355
 
356
+ /**
357
+ * Saves a service area to the database.
358
+ *
359
+ * @function
360
+ * @param {Object} event - The event that triggered the saving.
361
+ * @param {Object} layer - The layer to be saved as a service area.
362
+ */
211
363
  @action saveServiceArea(event, layer) {
212
364
  const { _map } = layer;
213
365
  const border = this.layerToTerraformerMultiPolygon(layer);
@@ -230,6 +382,13 @@ export default class ServiceAreasService extends Service {
230
382
  });
231
383
  }
232
384
 
385
+ /**
386
+ * Edits and saves details of a service area.
387
+ *
388
+ * @function
389
+ * @param {Object} serviceArea - The service area to edit.
390
+ * @param {Object} options - Additional options for the edit (optional).
391
+ */
233
392
  @action editServiceAreaDetails(serviceArea, options = {}) {
234
393
  this.modalsManager.show('modals/service-area-form', {
235
394
  title: 'Edit Service Area',
@@ -247,13 +406,13 @@ export default class ServiceAreasService extends Service {
247
406
 
248
407
  this.clearLayerCreationContext();
249
408
  this.addToCache(serviceArea);
250
- this.sendToLiveMap('focusServiceArea', serviceArea);
251
- // this.sendToLiveMap('rebuildContextMenu');
409
+ this.triggerLiveMapFn('focusServiceArea', serviceArea);
410
+ this.triggerLiveMapFn('rebuildMapContextMenu');
252
411
  });
253
412
  },
254
413
  decline: (modal) => {
255
414
  this.clearLayerCreationContext();
256
- this.sendToLiveMap('hideDrawControls');
415
+ this.triggerLiveMapFn('hideDrawControls', { text: true });
257
416
 
258
417
  if (serviceArea.isNew) {
259
418
  serviceArea.destroyRecord();
@@ -264,21 +423,34 @@ export default class ServiceAreasService extends Service {
264
423
  });
265
424
  }
266
425
 
426
+ /**
427
+ * Deletes a service area from the database.
428
+ *
429
+ * @function
430
+ * @param {Object} serviceArea - The service area to delete.
431
+ * @param {Object} options - Additional options for the deletion (optional).
432
+ */
267
433
  @action deleteServiceArea(serviceArea, options = {}) {
268
- this.sendToLiveMap('focusLayerByRecord', serviceArea);
434
+ this.triggerLiveMapFn('focusLayerBoundsByRecord', serviceArea);
269
435
 
270
436
  this.crud.delete(serviceArea, {
271
437
  onConfirm: () => {
272
- this.sendToLiveMap('blurServiceArea', serviceArea);
438
+ this.triggerLiveMapFn('blurServiceArea', serviceArea);
273
439
  this.removeFromCache(serviceArea);
274
440
  },
275
441
  ...options,
276
442
  });
277
443
  }
278
444
 
445
+ /**
446
+ * Initiates the creation of a zone within a service area on the map.
447
+ *
448
+ * @function
449
+ * @param {Object} serviceArea - The service area within which the zone is being created.
450
+ */
279
451
  @action createZone(serviceArea) {
280
- this.sendToLiveMap('enableDrawControls');
281
- this.sendToLiveMap('focusServiceArea', serviceArea);
452
+ this.triggerLiveMapFn('showDrawControls', { text: true });
453
+ this.triggerLiveMapFn('focusServiceArea', serviceArea);
282
454
  this.setZoneServiceAreaContext(serviceArea);
283
455
  this.setLayerCreationContext('zone');
284
456
 
@@ -287,6 +459,14 @@ export default class ServiceAreasService extends Service {
287
459
  });
288
460
  }
289
461
 
462
+ /**
463
+ * Saves a zone to the database.
464
+ *
465
+ * @function
466
+ * @param {Object} event - The event that triggered the saving.
467
+ * @param {Object} layer - The layer to be saved as a zone.
468
+ * @returns {Promise} A promise that resolves when the zone is saved.
469
+ */
290
470
  @action saveZone(event, layer) {
291
471
  const { _map } = layer;
292
472
  const border = this.layerToTerraformerPolygon(layer);
@@ -307,6 +487,15 @@ export default class ServiceAreasService extends Service {
307
487
  });
308
488
  }
309
489
 
490
+ /**
491
+ * Edits and saves details of a zone.
492
+ *
493
+ * @function
494
+ * @param {Object} zone - The zone to edit.
495
+ * @param {Object} serviceArea - The service area to which the zone belongs.
496
+ * @param {Object} options - Additional options for the edit (optional).
497
+ * @returns {Promise} A promise that resolves when the zone is successfully saved.
498
+ */
310
499
  @action editZone(zone, serviceArea, options = {}) {
311
500
  this.modalsManager.show('modals/zone-form', {
312
501
  title: 'Edit Zone',
@@ -323,23 +512,23 @@ export default class ServiceAreasService extends Service {
323
512
 
324
513
  this.clearLayerCreationContext();
325
514
  this.clearZoneServiceAreaContext();
326
- this.sendToLiveMap('hideDrawControls');
327
- this.sendToLiveMap('blurAllServiceAreas');
515
+ this.triggerLiveMapFn('hideDrawControls', { text: true });
516
+ this.triggerLiveMapFn('blurAllServiceAreas');
328
517
 
329
518
  later(
330
519
  this,
331
520
  () => {
332
- this.sendToLiveMap('focusServiceArea', serviceArea);
521
+ this.triggerLiveMapFn('focusServiceArea', serviceArea);
333
522
  },
334
523
  300
335
524
  );
336
- // this.sendToLiveMap('rebuildContextMenu');
525
+ this.triggerLiveMapFn('rebuildMapContextMenu');
337
526
  });
338
527
  },
339
528
  decline: (modal) => {
340
529
  this.clearLayerCreationContext();
341
530
  this.clearZoneServiceAreaContext();
342
- this.sendToLiveMap('hideDrawControls');
531
+ this.triggerLiveMapFn('hideDrawControls', { text: true });
343
532
 
344
533
  if (zone.isNew) {
345
534
  zone.destroyRecord();
@@ -350,12 +539,26 @@ export default class ServiceAreasService extends Service {
350
539
  });
351
540
  }
352
541
 
542
+ /**
543
+ * Deletes a zone from the database.
544
+ *
545
+ * @function
546
+ * @param {Object} zone - The zone to delete.
547
+ * @param {Object} options - Additional options for the deletion (optional).
548
+ */
353
549
  @action deleteZone(zone, options = {}) {
354
550
  this.crud.delete(zone, {
355
551
  ...options,
356
552
  });
357
553
  }
358
554
 
555
+ /**
556
+ * Displays a service area in a dialog for viewing.
557
+ *
558
+ * @function
559
+ * @param {Object} serviceArea - The service area to view in the dialog.
560
+ * @param {Object} options - Additional options for the dialog (optional).
561
+ */
359
562
  @action viewServiceAreaInDialog(serviceArea, options = {}) {
360
563
  this.modalsManager.show('modals/view-service-area', {
361
564
  title: `Service Area (${serviceArea.get('name')})`,
@@ -369,6 +572,13 @@ export default class ServiceAreasService extends Service {
369
572
  });
370
573
  }
371
574
 
575
+ /**
576
+ * Displays a zone in a dialog for viewing.
577
+ *
578
+ * @function
579
+ * @param {Object} zone - The zone to view in the dialog.
580
+ * @param {Object} options - Additional options for the dialog (optional).
581
+ */
372
582
  @action viewZoneInDialog(zone, options = {}) {
373
583
  this.modalsManager.show('modals/view-zone', {
374
584
  title: `Zone (${zone.get('name')})`,
@@ -6,4 +6,5 @@
6
6
  {{outlet}}
7
7
  </Layout::Section::Container>
8
8
 
9
- <SettingsWindow @isOpen={{false}} @onLoad={{this.setSettingsContext}} @onPressCancel={{this.closeSettings}} />
9
+ <SettingsWindow @isOpen={{false}} @onLoad={{this.setSettingsContext}} @onPressCancel={{this.closeSettings}} />
10
+ <ContextPanel />
@@ -0,0 +1,13 @@
1
+ export default function findLeafletLayer(map, findCallback) {
2
+ const layers = [];
3
+
4
+ map.eachLayer((layer) => {
5
+ layers.push(layer);
6
+ });
7
+
8
+ if (typeof findCallback === 'function') {
9
+ return layers.find(findCallback);
10
+ }
11
+
12
+ return null;
13
+ }
@@ -0,0 +1,25 @@
1
+ export default function flyToLeafletLayer(map, layer, zoom, options = {}) {
2
+ if (!map || !layer) {
3
+ return;
4
+ }
5
+
6
+ // Check the type of the layer (marker, polygon, etc.) and get its center or bounds
7
+ let targetLatLng;
8
+
9
+ if (layer instanceof L.Marker) {
10
+ // For markers, you can directly get the marker's LatLng
11
+ targetLatLng = layer.getLatLng();
12
+ } else {
13
+ // For other types of layers, like polygons or circles, you can calculate the center
14
+ if (layer.getCenter) {
15
+ targetLatLng = layer.getCenter();
16
+ } else if (layer.getBounds) {
17
+ targetLatLng = layer.getBounds().getCenter();
18
+ }
19
+ }
20
+
21
+ // Check if we have a valid LatLng
22
+ if (targetLatLng) {
23
+ map.flyTo(targetLatLng, zoom, options);
24
+ }
25
+ }
@@ -0,0 +1,12 @@
1
+ export default function getLeafletLayerById(map, layerId) {
2
+ let targetLayer = null;
3
+
4
+ map.eachLayer((layer) => {
5
+ // Check if the layer has an ID property
6
+ if (layer.options && layer.options.id === layerId) {
7
+ targetLayer = layer;
8
+ }
9
+ });
10
+
11
+ return targetLayer;
12
+ }
@@ -0,0 +1,3 @@
1
+ export default function layerCanBindContextmenu(layer) {
2
+ return typeof layer === 'object' && typeof layer.bindContextMenu === 'function';
3
+ }
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/context-panel';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/services/context-panel';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/services/leaflet-contextmenu-manager';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/services/leaflet-map-manager';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/find-leaflet-layer';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/fly-to-leaflet-layer';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/get-leaflet-layer-by-id';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/layer-can-bind-contextmenu';
package/composer.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetbase/fleetops-api",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "keywords": [
6
6
  "fleetbase-extension",
@@ -60,6 +60,16 @@
60
60
  "Fleetbase\\FleetOps\\Providers\\FleetOpsServiceProvider",
61
61
  "Fleetbase\\FleetOps\\Providers\\EventServiceProvider"
62
62
  ]
63
+ },
64
+ "fleetbase/fleetops-api": {
65
+ "excludes": [
66
+ "addon",
67
+ "app",
68
+ "assets",
69
+ "config",
70
+ "tests",
71
+ "vendor"
72
+ ]
63
73
  }
64
74
  },
65
75
  "config": {
package/extension.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Fleet-Ops",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@fleetbase/fleetops-engine",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "fleetbase": {
6
6
  "route": "fleet-ops",
@@ -39,7 +39,7 @@
39
39
  "publish:github": "npm config set '@fleetbase:registry' https://npm.pkg.github.com/ && npm publish"
40
40
  },
41
41
  "dependencies": {
42
- "@fleetbase/ember-core": "^0.1.4",
42
+ "@fleetbase/ember-core": "^0.1.5",
43
43
  "@fleetbase/ember-ui": "^0.2.0",
44
44
  "@fleetbase/fleetops-data": "^0.1.1",
45
45
  "@fleetbase/leaflet-routing-machine": "^3.2.16",
@@ -3,7 +3,10 @@
3
3
  namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
4
 
5
5
  use Fleetbase\FleetOps\Http\Filter\PlaceFilter;
6
+ use Fleetbase\FleetOps\Http\Resources\v1\Driver as DriverResource;
6
7
  use Fleetbase\FleetOps\Http\Resources\v1\Order as OrderResource;
8
+ use Fleetbase\FleetOps\Http\Resources\v1\Place as PlaceResource;
9
+ use Fleetbase\FleetOps\Http\Resources\v1\Vehicle as VehicleResource;
7
10
  use Fleetbase\FleetOps\Models\Driver;
8
11
  use Fleetbase\FleetOps\Models\Order;
9
12
  use Fleetbase\FleetOps\Models\Place;
@@ -94,7 +97,7 @@ class LiveController extends Controller
94
97
  )
95
98
  ->get();
96
99
 
97
- return response()->json($drivers);
100
+ return DriverResource::collection($drivers);
98
101
  }
99
102
 
100
103
  /**
@@ -105,9 +108,9 @@ class LiveController extends Controller
105
108
  public function vehicles()
106
109
  {
107
110
  // Fetch vehicles that are online
108
- $vehicles = Vehicle::where(['company_uuid' => session('company'), 'online' => 1])->get();
111
+ $vehicles = Vehicle::where(['company_uuid' => session('company')])->with(['devices'])->get();
109
112
 
110
- return response()->json($vehicles);
113
+ return VehicleResource::collection($vehicles);
111
114
  }
112
115
 
113
116
  /**
@@ -122,6 +125,6 @@ class LiveController extends Controller
122
125
  ->filter(new PlaceFilter($request))
123
126
  ->get();
124
127
 
125
- return response()->json($places);
128
+ return PlaceResource::collection($places);
126
129
  }
127
130
  }
@@ -88,4 +88,11 @@ class VehicleFilter extends Filter
88
88
  }
89
89
  );
90
90
  }
91
+
92
+ public function assignedFleet(string $assignedFleet)
93
+ {
94
+ if ($assignedFleet === 'false') {
95
+ $this->builder->whereDoesntHave('fleets');
96
+ }
97
+ }
91
98
  }