@fleetbase/fleetops-engine 0.4.12 → 0.4.13

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 (66) hide show
  1. package/addon/components/admin/avatar-management.hbs +78 -0
  2. package/addon/components/admin/avatar-management.js +191 -0
  3. package/addon/components/avatar-picker.hbs +15 -0
  4. package/addon/components/avatar-picker.js +57 -0
  5. package/addon/components/driver-form-panel.hbs +12 -13
  6. package/addon/components/driver-panel/details.hbs +7 -7
  7. package/addon/components/edit-order-route-panel.hbs +9 -69
  8. package/addon/components/edit-order-route-panel.js +78 -27
  9. package/addon/components/fleet-listing-panel.hbs +1 -1
  10. package/addon/components/layout/fleet-ops-sidebar/driver-listing.hbs +1 -1
  11. package/addon/components/layout/fleet-ops-sidebar.hbs +2 -1
  12. package/addon/components/live-map.js +0 -1
  13. package/addon/components/order/schedule-card.hbs +29 -17
  14. package/addon/components/order/schedule-card.js +1 -1
  15. package/addon/components/place-form-panel.hbs +35 -51
  16. package/addon/components/place-panel/details.hbs +10 -14
  17. package/addon/components/place-panel.hbs +2 -12
  18. package/addon/components/vehicle-form-panel.hbs +11 -80
  19. package/addon/components/vehicle-form-panel.js +33 -0
  20. package/addon/controllers/management/places/index.js +29 -21
  21. package/addon/controllers/operations/orders/index/view.js +10 -10
  22. package/addon/controllers/operations/scheduler/index.js +7 -4
  23. package/addon/engine.js +7 -1
  24. package/addon/styles/fleetops-engine.css +94 -0
  25. package/addon/templates/management/places/index.hbs +1 -1
  26. package/addon/templates/operations/scheduler/index.hbs +5 -4
  27. package/addon/utils/create-full-calendar-event-from-order.js +23 -1
  28. package/app/components/admin/avatar-management.js +1 -0
  29. package/app/components/avatar-picker.js +1 -0
  30. package/composer.json +2 -2
  31. package/config/environment.js +2 -0
  32. package/extension.json +1 -1
  33. package/package.json +3 -3
  34. package/server/migrations/2023_09_14_074512_update_vehicles_table.php +2 -2
  35. package/server/migrations/2023_09_14_074619_create_vehicle_devices_table.php +2 -2
  36. package/server/migrations/2023_09_26_071205_add_online_column_to_vehicles_table.php +2 -2
  37. package/server/migrations/2023_09_26_083957_create_fleet_vehicles_table.php +2 -2
  38. package/server/migrations/2023_09_27_023757_add_column_to_fleets_table.php +2 -2
  39. package/server/migrations/2023_10_05_074811_update_vehicle.php +2 -2
  40. package/server/migrations/2023_10_25_093014_create_vehicle_device_events_table.php +2 -2
  41. package/server/migrations/2023_11_03_072503_refactor_issues_table_columns.php +2 -2
  42. package/server/migrations/2023_11_06_040645_refactor_fuel_reports_table.php +2 -2
  43. package/server/migrations/2023_11_09_041807_add_status_column_to_fuel_reports_table.php +2 -2
  44. package/server/migrations/2023_11_15_062814_add_comments_column_and_resolved_at_column_to_vehicle_device_events_table.php +2 -2
  45. package/server/migrations/2023_11_17_053001_add_category_uuid_to_entities_table.php +2 -2
  46. package/server/migrations/2023_11_28_074244_add_supplier_uuid_column_to_entities_table.php +2 -2
  47. package/server/migrations/{2023_12_14_100209_add_meta_column_on_driver_table.php → 2023_12_14_100209_add_meta_column_on_driver_table copy.php } +5 -3
  48. package/server/migrations/2024_02_18_100209_add_avatar_url_columns_table.php +54 -0
  49. package/server/src/Expansions/UserExpansion.php +1 -0
  50. package/server/src/Http/Controllers/Api/v1/DriverController.php +7 -1
  51. package/server/src/Http/Controllers/Api/v1/PlaceController.php +11 -2
  52. package/server/src/Http/Controllers/Internal/v1/DriverController.php +15 -8
  53. package/server/src/Http/Controllers/Internal/v1/OrderController.php +46 -0
  54. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +12 -0
  55. package/server/src/Http/Resources/v1/Driver.php +6 -4
  56. package/server/src/Http/Resources/v1/Order.php +2 -1
  57. package/server/src/Http/Resources/v1/Payload.php +8 -4
  58. package/server/src/Http/Resources/v1/Place.php +2 -0
  59. package/server/src/Http/Resources/v1/Vehicle.php +1 -0
  60. package/server/src/Models/Driver.php +76 -0
  61. package/server/src/Models/Payload.php +49 -3
  62. package/server/src/Models/Place.php +71 -0
  63. package/server/src/Models/Vehicle.php +44 -20
  64. package/server/src/Notifications/OrderAssigned.php +2 -0
  65. package/server/src/routes.php +3 -0
  66. package/translations/en-us.yaml +16 -4
@@ -6,6 +6,7 @@ use Fleetbase\Casts\Json;
6
6
  use Fleetbase\FleetOps\Casts\Point;
7
7
  use Fleetbase\FleetOps\Support\Utils;
8
8
  use Fleetbase\LaravelMysqlSpatial\Eloquent\SpatialTrait;
9
+ use Fleetbase\Models\File;
9
10
  use Fleetbase\Models\Model;
10
11
  use Fleetbase\Traits\HasApiModelBehavior;
11
12
  use Fleetbase\Traits\HasMetaAttributes;
@@ -165,7 +166,7 @@ class Vehicle extends Model
165
166
  */
166
167
  public function photo()
167
168
  {
168
- return $this->belongsTo(\Fleetbase\Models\File::class);
169
+ return $this->belongsTo(File::class);
169
170
  }
170
171
 
171
172
  /**
@@ -237,20 +238,6 @@ class Vehicle extends Model
237
238
  return $displayName;
238
239
  }
239
240
 
240
- /**
241
- * Get avatar url.
242
- *
243
- * @return string|null
244
- */
245
- public function getAvatarUrlAttribute($value)
246
- {
247
- if (!$value) {
248
- return static::getAvatar();
249
- }
250
-
251
- return $value;
252
- }
253
-
254
241
  /**
255
242
  * Get the driver's name assigned to vehicle.
256
243
  *
@@ -317,15 +304,40 @@ class Vehicle extends Model
317
304
  return $modelAttributes;
318
305
  }
319
306
 
307
+ /**
308
+ * Get avatar url.
309
+ *
310
+ * @return string|null
311
+ */
312
+ public function getAvatarUrlAttribute($value)
313
+ {
314
+ if (!$value) {
315
+ return static::getAvatar();
316
+ }
317
+
318
+ if (Str::isUuid($value)) {
319
+ return static::getAvatar($value);
320
+ }
321
+
322
+ return $value;
323
+ }
324
+
320
325
  /**
321
326
  * Get an avatar url by key.
322
327
  *
323
328
  * @param string $key
324
- *
325
- * @return string
326
329
  */
327
- public static function getAvatar($key = 'mini_bus')
330
+ public static function getAvatar($key = 'mini_bus'): ?string
328
331
  {
332
+ if (Str::isUuid($key)) {
333
+ $file = File::where('uuid', $key)->first();
334
+ if ($file) {
335
+ return $file->url;
336
+ }
337
+
338
+ return null;
339
+ }
340
+
329
341
  return static::getAvatarOptions()->get($key);
330
342
  }
331
343
 
@@ -367,13 +379,25 @@ class Vehicle extends Model
367
379
  'taxi.svg',
368
380
  ];
369
381
 
370
- return collect($options)->mapWithKeys(
382
+ // Get custom avatars
383
+ $customAvatars = collect(File::where('type', 'vehicle-avatar')->get()->mapWithKeys(
384
+ function ($file) {
385
+ $key = str_replace(['.svg', '.png'], '', 'Custom: ' . $file->original_filename);
386
+
387
+ return [$key => $file->uuid];
388
+ }
389
+ )->toArray());
390
+
391
+ // Create default avatars included from fleetbase
392
+ $avatars = collect($options)->mapWithKeys(
371
393
  function ($option) {
372
- $key = str_replace('.svg', '', $option);
394
+ $key = str_replace(['.svg', '.png'], '', $option);
373
395
 
374
396
  return [$key => Utils::assetFromS3('static/vehicle-icons/' . $option)];
375
397
  }
376
398
  );
399
+
400
+ return $customAvatars->merge($avatars);
377
401
  }
378
402
 
379
403
  /**
@@ -75,6 +75,8 @@ class OrderAssigned extends Notification implements ShouldQueue
75
75
  new Channel('api.' . session('api_credential')),
76
76
  new Channel('order.' . $this->order->uuid),
77
77
  new Channel('order.' . $this->order->public_id),
78
+ new Channel('driver.' . data_get($this->order, 'driverAssigned.uuid')),
79
+ new Channel('driver.' . data_get($this->order, 'driverAssigned.public_id')),
78
80
  ];
79
81
  }
80
82
 
@@ -264,6 +264,7 @@ Route::prefix(config('fleetops.api.routing.prefix', null))->namespace('Fleetbase
264
264
  'drivers',
265
265
  function ($router, $controller) {
266
266
  $router->get('statuses', $controller('statuses'));
267
+ $router->get('avatars', $controller('avatars'));
267
268
  $router->get('export', $controller('export'));
268
269
  $router->delete('bulk-delete', $controller('bulkDelete'));
269
270
  }
@@ -310,6 +311,7 @@ Route::prefix(config('fleetops.api.routing.prefix', null))->namespace('Fleetbase
310
311
  $router->get('label/{id}', $controller('label'));
311
312
  $router->get('next-activity/{id}', $controller('nextActivity'));
312
313
  $router->post('process-imports', $controller('importFromFiles'));
314
+ $router->patch('route/{id}', $controller('editOrderRoute'));
313
315
  $router->patch('update-activity/{id}', $controller('updateActivity'));
314
316
  $router->patch('bulk-cancel', $controller('bulkCancel'));
315
317
  $router->patch('cancel', $controller('cancel'));
@@ -324,6 +326,7 @@ Route::prefix(config('fleetops.api.routing.prefix', null))->namespace('Fleetbase
324
326
  function ($router, $controller) {
325
327
  $router->get('search', $controller('search'))->middleware('cache.headers:private;max_age=3600');
326
328
  $router->get('lookup', $controller('geocode'))->middleware('cache.headers:private;max_age=3600');
329
+ $router->get('avatars', $controller('avatars'));
327
330
  $router->get('export', $controller('export'));
328
331
  $router->delete('bulk-delete', $controller('bulkDelete'));
329
332
  }
@@ -95,6 +95,11 @@ fleet-ops:
95
95
  back: Back
96
96
 
97
97
  component:
98
+ avatar-picker:
99
+ avatar: Avatar
100
+ select-map-avatar: Select map avatar
101
+ select-avatar-rendering: Select an avatar to be used for rendering on maps when using geolocation tracking features.
102
+ select-avatar: Select avatar
98
103
  admin:
99
104
  navigator-app:
100
105
  title: Navigator App
@@ -104,6 +109,12 @@ fleet-ops:
104
109
  title: Visibility Controls
105
110
  message: Visibility controls allow you to disable sections of Fleet-Ops. Toggle the checkbox to enable or disable sections to hide in Fleet-ops.
106
111
  checkbox-text: Enable or disable visibility for this section in Fleet-Ops.
112
+ avatar-management:
113
+ upload-avatar: Upload Avatar
114
+ view-avatar: View Avatar
115
+ vehicles : Vehicles
116
+ drivers : Drivers
117
+ places : Places
107
118
  cell:
108
119
  driver-name:
109
120
  not-assigned: No driver assigned
@@ -524,6 +535,7 @@ fleet-ops:
524
535
  show-less: Show less details
525
536
  show-more: Show more details
526
537
  schedule-card:
538
+ destination: Destination
527
539
  unassign-driver: Unassign Driver?
528
540
  unassign-text: You are about to unassign the driver for Order {orderId}. Click continue to confirm removal of driver.
529
541
  unassign-button: Continue and unassign driver
@@ -531,11 +543,11 @@ fleet-ops:
531
543
  assign-text: You are about to assign a new driver ({driverName}) to Order {orderId}. Click continue to confirm driver.
532
544
  assign-button: Continue and assign driver
533
545
  date: Date scheduled
534
- driver-assigned: Driver Assigned
535
- no-driver: No Driver Assigned
546
+ driver-assigned: Driver
547
+ no-driver: No Driver
536
548
  select-driver: Select Driver
537
- vehicle-assigned: Vehicle Assigned
538
- no-vehicle: No Vehicle Assigned
549
+ vehicle-assigned: Vehicle
550
+ no-vehicle: No Vehicle
539
551
  widget:
540
552
  fleet-ops-quickstart:
541
553
  message: Let's see what you can do to jumpstart operations...