@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
package/extension.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Fleet-Ops",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
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.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "fleetbase": {
6
6
  "route": "fleet-ops",
@@ -40,8 +40,8 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@fleetbase/ember-core": "^0.1.6",
43
- "@fleetbase/ember-ui": "^0.2.2",
44
- "@fleetbase/fleetops-data": "^0.1.1",
43
+ "@fleetbase/ember-ui": "^0.2.3",
44
+ "@fleetbase/fleetops-data": "^0.1.2",
45
45
  "@fleetbase/leaflet-routing-machine": "^3.2.16",
46
46
  "@fortawesome/ember-fontawesome": "^0.4.1",
47
47
  "@fortawesome/fontawesome-svg-core": "^6.4.0",
@@ -56,6 +56,7 @@
56
56
  "ember-intl": "^6.0.0-beta.6",
57
57
  "ember-leaflet": "^5.1.1",
58
58
  "ember-radio-button": "^3.0.0-beta.1",
59
+ "ember-tag-input": "^3.1.0",
59
60
  "ember-wormhole": "^0.6.0",
60
61
  "leaflet": "^1.9.4",
61
62
  "leaflet-contextmenu": "^1.4.0",
@@ -0,0 +1,42 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Support\Facades\Schema;
6
+
7
+ class RefactorIssuesTableColumns extends Migration
8
+ {
9
+ /**
10
+ * Run the migrations.
11
+ *
12
+ * @return void
13
+ */
14
+ public function up()
15
+ {
16
+ Schema::table('issues', function (Blueprint $table) {
17
+ $table->dropColumn(['longitude', 'latitude', 'odometer']);
18
+ $table->string('category')->nullable()->after('type');
19
+ $table->json('tags')->nullable()->after('priority');
20
+ $table->json('meta')->nullable()->after('priority');
21
+ $table->mediumText('report')->change();
22
+ $table->foreignUuid('reported_by_uuid')->nullable()->after('assigned_to_uuid')->references('uuid')->on('users')->onDelete('cascade');
23
+ });
24
+ }
25
+
26
+ /**
27
+ * Reverse the migrations.
28
+ *
29
+ * @return void
30
+ */
31
+ public function down()
32
+ {
33
+ Schema::table('issues', function (Blueprint $table) {
34
+ $table->string('longitude')->nullable()->after('location');
35
+ $table->string('latitude')->nullable()->after('location');
36
+ $table->string('odometer')->nullable()->after('location');
37
+ $table->string('report')->change();
38
+ $table->dropForeign(['reported_by_uuid']);
39
+ $table->dropColumn(['reported_by_uuid', 'meta', 'tags', 'category']);
40
+ });
41
+ }
42
+ }
@@ -0,0 +1,38 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Support\Facades\Schema;
6
+
7
+ class RefactorFuelReportsTable extends Migration
8
+ {
9
+ /**
10
+ * Run the migrations.
11
+ *
12
+ * @return void
13
+ */
14
+ public function up()
15
+ {
16
+ Schema::table('fuel_reports', function (Blueprint $table) {
17
+ $table->dropColumn(['longitude', 'latitude']);
18
+ $table->json('meta')->nullable()->after('metric_unit');
19
+ $table->mediumText('report')->nullable()->after('vehicle_uuid');
20
+ $table->foreignUuid('reported_by_uuid')->nullable()->after('vehicle_uuid')->references('uuid')->on('users')->onDelete('cascade');
21
+ });
22
+ }
23
+
24
+ /**
25
+ * Reverse the migrations.
26
+ *
27
+ * @return void
28
+ */
29
+ public function down()
30
+ {
31
+ Schema::table('fuel_reports', function (Blueprint $table) {
32
+ $table->string('longitude')->nullable()->after('location');
33
+ $table->string('latitude')->nullable()->after('location');
34
+ $table->dropForeign(['reported_by_uuid']);
35
+ $table->dropColumn(['reported_by_uuid', 'meta', 'report']);
36
+ });
37
+ }
38
+ }
@@ -59,7 +59,21 @@ class Point implements CastsAttributes
59
59
  return $point;
60
60
  }
61
61
 
62
- return new SpatialExpression(new Point(0, 0));
62
+ return static::createEmptySpatialExpression();
63
+ }
64
+
65
+ /**
66
+ * Creates an empty Point as a SpatialExpression.
67
+ */
68
+ public static function createEmptySpatialExpression(): SpatialExpression
69
+ {
70
+ $value = json_encode([
71
+ 'type' => 'Point',
72
+ 'coordinates' => [0, 0],
73
+ 'bbox' => [0, 0, 0, 0],
74
+ ]);
75
+
76
+ return Utils::createSpatialExpressionFromGeoJson($value);
63
77
  }
64
78
 
65
79
  /**
@@ -51,17 +51,26 @@ class DriverController extends FleetOpsController
51
51
  // outside organization: invite to join organization AS DRIVER
52
52
  if ($validator->errors()->hasAny(['phone', 'email'])) {
53
53
  // get existing user
54
- $existingUser = User::where(
55
- function ($q) use ($input) {
56
- if (!empty($input['phone'])) {
57
- $q->orWhere('phone', $input['phone']);
58
- }
59
-
60
- if (!empty($input['email'])) {
61
- $q->orWhere('email', $input['email']);
62
- }
54
+ $existingUser = null;
55
+
56
+ // if values provided for user lookup
57
+ if (!empty($input['phone']) || !empty($input['email'])) {
58
+ $existingUserQuery = User::query();
59
+
60
+ if (!empty($input['phone']) && is_string($input['phone'])) {
61
+ $existingUserQuery->orWhere(function ($q) use ($input) {
62
+ $q->where('phone', $input['phone'])->whereNotNull('phone');
63
+ });
63
64
  }
64
- )->first();
65
+
66
+ if (!empty($input['email']) && is_string($input['email'])) {
67
+ $existingUserQuery->orWhere(function ($q) use ($input) {
68
+ $q->where('email', $input['email'])->whereNotNull('email');
69
+ });
70
+ }
71
+
72
+ $existingUser = $existingUserQuery->first();
73
+ }
65
74
 
66
75
  if ($existingUser) {
67
76
  // if exists in organization create driver profile for user
@@ -69,7 +78,7 @@ class DriverController extends FleetOpsController
69
78
 
70
79
  // create driver profile for user
71
80
  $input = collect($input)
72
- ->except(['name', 'password', 'email', 'phone', 'location', 'meta'])
81
+ ->except(['name', 'password', 'email', 'phone', 'location', 'meta', 'avatar_uuid', 'photo_uuid'])
73
82
  ->filter()
74
83
  ->toArray();
75
84
 
@@ -116,12 +125,17 @@ class DriverController extends FleetOpsController
116
125
  $input = collect($input);
117
126
 
118
127
  $userInput = $input
119
- ->only(['name', 'password', 'email', 'phone', 'status'])
128
+ ->only(['name', 'password', 'email', 'phone', 'status', 'avatar_uuid'])
120
129
  ->filter()
121
130
  ->toArray();
122
131
 
132
+ // handle `photo_uuid`
133
+ if (isset($input['photo_uuid']) && Str::isUuid($input['photo_uuid'])) {
134
+ $userInput['avatar_uuid'] = $input['photo_uuid'];
135
+ }
136
+
123
137
  $input = $input
124
- ->except(['name', 'password', 'email', 'phone', 'location', 'meta'])
138
+ ->except(['name', 'password', 'email', 'phone', 'location', 'meta', 'avatar_uuid', 'photo_uuid'])
125
139
  ->filter()
126
140
  ->toArray();
127
141
 
@@ -198,8 +212,12 @@ class DriverController extends FleetOpsController
198
212
  function (&$request, &$driver, &$input) {
199
213
  $driver->load(['user']);
200
214
  $input = collect($input);
201
- $userInput = $input->only(['name', 'password', 'email', 'phone'])->toArray();
202
- $input = $input->except(['name', 'password', 'email', 'phone', 'location', 'meta'])->toArray();
215
+ $userInput = $input->only(['name', 'password', 'email', 'phone', 'avatar_uuid'])->toArray();
216
+ // handle `photo_uuid`
217
+ if (isset($input['photo_uuid']) && Str::isUuid($input['photo_uuid'])) {
218
+ $userInput['avatar_uuid'] = $input['photo_uuid'];
219
+ }
220
+ $input = $input->except(['name', 'password', 'email', 'phone', 'location', 'meta', 'avatar_uuid', 'photo_uuid'])->toArray();
203
221
 
204
222
  $driver->user->update($userInput);
205
223
  $driver->flushAttributesCache();
@@ -24,6 +24,13 @@ class FleetFilter extends Filter
24
24
  });
25
25
  }
26
26
 
27
+ public function parentsOnly(bool $parentsOnly = false)
28
+ {
29
+ if ($parentsOnly) {
30
+ $this->builder->whereNull('parent_fleet_uuid');
31
+ }
32
+ }
33
+
27
34
  public function serviceArea(?string $serviceArea)
28
35
  {
29
36
  $this->builder->whereHas(
@@ -0,0 +1,58 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Filter;
4
+
5
+ use Fleetbase\FleetOps\Support\Utils;
6
+ use Fleetbase\Http\Filter\Filter;
7
+ use Illuminate\Support\Str;
8
+
9
+ class FuelReportFilter extends Filter
10
+ {
11
+ public function queryForInternal()
12
+ {
13
+ $this->builder->where('company_uuid', $this->session->get('company'));
14
+ }
15
+
16
+ public function query(?string $searchQuery)
17
+ {
18
+ $this->builder->search($searchQuery);
19
+ }
20
+
21
+ public function publicId(?string $publicId)
22
+ {
23
+ $this->builder->searchWhere('public_id', $publicId);
24
+ }
25
+
26
+ public function reporter(?string $reporter)
27
+ {
28
+ $this->builder->whereHas('reportedBy', function ($q) use ($reporter) {
29
+ if (Str::isUuid($reporter)) {
30
+ $q->where('uuid', $reporter);
31
+ } else {
32
+ $q->search($reporter);
33
+ }
34
+ });
35
+ }
36
+
37
+ public function createdAt($createdAt)
38
+ {
39
+ $createdAt = Utils::dateRange($createdAt);
40
+
41
+ if (is_array($createdAt)) {
42
+ $this->builder->whereBetween('created_at', $createdAt);
43
+ } else {
44
+ $this->builder->whereDate('created_at', $createdAt);
45
+ }
46
+ }
47
+
48
+ public function updatedAt($updatedAt)
49
+ {
50
+ $updatedAt = Utils::dateRange($updatedAt);
51
+
52
+ if (is_array($updatedAt)) {
53
+ $this->builder->whereBetween('updated_at', $updatedAt);
54
+ } else {
55
+ $this->builder->whereDate('updated_at', $updatedAt);
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,69 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Filter;
4
+
5
+ use Fleetbase\FleetOps\Support\Utils;
6
+ use Fleetbase\Http\Filter\Filter;
7
+ use Illuminate\Support\Str;
8
+
9
+ class IssueFilter extends Filter
10
+ {
11
+ public function queryForInternal()
12
+ {
13
+ $this->builder->where('company_uuid', $this->session->get('company'));
14
+ }
15
+
16
+ public function query(?string $searchQuery)
17
+ {
18
+ $this->builder->search($searchQuery);
19
+ }
20
+
21
+ public function publicId(?string $publicId)
22
+ {
23
+ $this->builder->searchWhere('public_id', $publicId);
24
+ }
25
+
26
+ public function reporter(?string $reporter)
27
+ {
28
+ $this->builder->whereHas('reportedBy', function ($q) use ($reporter) {
29
+ if (Str::isUuid($reporter)) {
30
+ $q->where('uuid', $reporter);
31
+ } else {
32
+ $q->search($reporter);
33
+ }
34
+ });
35
+ }
36
+
37
+ public function assignee(?string $assignee)
38
+ {
39
+ $this->builder->whereHas('assignedBy', function ($q) use ($assignee) {
40
+ if (Str::isUuid($assignee)) {
41
+ $q->where('uuid', $assignee);
42
+ } else {
43
+ $q->search($assignee);
44
+ }
45
+ });
46
+ }
47
+
48
+ public function createdAt($createdAt)
49
+ {
50
+ $createdAt = Utils::dateRange($createdAt);
51
+
52
+ if (is_array($createdAt)) {
53
+ $this->builder->whereBetween('created_at', $createdAt);
54
+ } else {
55
+ $this->builder->whereDate('created_at', $createdAt);
56
+ }
57
+ }
58
+
59
+ public function updatedAt($updatedAt)
60
+ {
61
+ $updatedAt = Utils::dateRange($updatedAt);
62
+
63
+ if (is_array($updatedAt)) {
64
+ $this->builder->whereBetween('updated_at', $updatedAt);
65
+ } else {
66
+ $this->builder->whereDate('updated_at', $updatedAt);
67
+ }
68
+ }
69
+ }
@@ -57,6 +57,16 @@ class VehicleFilter extends Filter
57
57
  );
58
58
  }
59
59
 
60
+ public function driverUuid(?string $driverId)
61
+ {
62
+ $this->builder->whereHas(
63
+ 'driver',
64
+ function ($query) use ($driverId) {
65
+ $query->where('uuid', $driverId);
66
+ }
67
+ );
68
+ }
69
+
60
70
  public function createdAt($createdAt)
61
71
  {
62
72
  $createdAt = Utils::dateRange($createdAt);
@@ -0,0 +1,48 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Middleware;
4
+
5
+ /**
6
+ * Middleware to transform the "location" property to a default value if it is null, even if it is nested within other objects.
7
+ *
8
+ * Class TransformLocationMiddleware
9
+ */
10
+ class TransformLocationMiddleware
11
+ {
12
+ /**
13
+ * Handle an incoming request.
14
+ *
15
+ * @param Request $request
16
+ * @param Closure $next
17
+ */
18
+ public function handle($request, \Closure $next)
19
+ {
20
+ $data = $request->all();
21
+ $data = $this->transformNestedLocation($data);
22
+ $request->replace($data);
23
+
24
+ return $next($request);
25
+ }
26
+
27
+ /**
28
+ * Recursively transform the "location" property within nested objects to a default value if it is null.
29
+ *
30
+ * @param array $data the data to process
31
+ *
32
+ * @return array the transformed data
33
+ */
34
+ protected function transformNestedLocation($data)
35
+ {
36
+ foreach ($data as $key => $value) {
37
+ if (is_array($value)) {
38
+ // If the value is an array, recursively transform it
39
+ $data[$key] = $this->transformNestedLocation($value);
40
+ } elseif ($key === 'location' && $value === null) {
41
+ // Transform the 'location' property if it's null
42
+ $data[$key] = [0, 0];
43
+ }
44
+ }
45
+
46
+ return $data;
47
+ }
48
+ }
@@ -35,6 +35,7 @@ class Driver extends FleetbaseResource
35
35
  'vendor_name' => $this->when(Http::isInternalRequest(), $this->vendor_name),
36
36
  'vehicle' => $this->whenLoaded('vehicle', new VehicleWithoutDriver($this->vehicle)),
37
37
  'current_job' => $this->whenLoaded('currentJob', new CurrentJob($this->currentJob)),
38
+ 'current_job_id' => $this->when(Http::isInternalRequest(), data_get($this, 'currentJob.public_id')),
38
39
  'jobs' => $this->whenLoaded('jobs', CurrentJob::collection($this->jobs()->without(['driverAssigned'])->get())),
39
40
  'vendor' => $this->whenLoaded('vendor', new Vendor($this->vendor)),
40
41
  'fleets' => $this->whenLoaded('fleets', Fleet::collection($this->fleets()->without('drivers')->get())),
@@ -16,27 +16,25 @@ class Fleet extends FleetbaseResource
16
16
  */
17
17
  public function toArray($request)
18
18
  {
19
- return array_merge(
20
- $this->getInternalIds(),
21
- [
22
- 'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
23
- 'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
24
- 'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
25
- 'name' => $this->name,
26
- 'task' => $this->task ?? null,
27
- 'status' => $this->status ?? null,
28
- 'drivers_count' => $this->when(Http::isInternalRequest(), $this->drivers_count),
29
- 'drivers_online_count' => $this->when(Http::isInternalRequest(), $this->drivers_online_count),
30
- 'service_area' => $this->whenLoaded('serviceArea', new ServiceArea($this->serviceArea)),
31
- 'zone' => $this->whenLoaded('zone', new Zone($this->zone)),
32
- 'vendor' => $this->whenLoaded('vendor', new Vendor($this->vendor)),
33
- 'parentFleet' => $this->whenLoaded('parent_fleet', new self($this->parent_fleet)),
34
- 'drivers' => $this->whenLoaded('drivers', Driver::collection($this->drivers()->without(['driverAssigned'])->with(Http::isInternalRequest() ? ['jobs'] : [])->get())),
35
- 'vehicles' => $this->whenLoaded('vehicles', Vehicle::collection($this->vehicles)),
36
- 'updated_at' => $this->updated_at,
37
- 'created_at' => $this->created_at,
38
- ]
39
- );
19
+ return [
20
+ 'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
21
+ 'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
22
+ 'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
23
+ 'name' => $this->name,
24
+ 'task' => $this->task ?? null,
25
+ 'status' => $this->status ?? null,
26
+ 'drivers_count' => $this->when(Http::isInternalRequest(), $this->drivers_count),
27
+ 'drivers_online_count' => $this->when(Http::isInternalRequest(), $this->drivers_online_count),
28
+ 'service_area' => $this->whenLoaded('serviceArea', new ServiceArea($this->serviceArea)),
29
+ 'zone' => $this->whenLoaded('zone', new Zone($this->zone)),
30
+ 'vendor' => $this->whenLoaded('vendor', new Vendor($this->vendor)),
31
+ 'parent_fleet' => $this->whenLoaded('parentFleet', new ParentFleet($this->parentFleet)),
32
+ 'subfleets' => $this->whenLoaded('subFleets', SubFleet::collection($this->subFleets)),
33
+ 'drivers' => $this->whenLoaded('drivers', Driver::collection($this->drivers()->without(['driverAssigned'])->with(Http::isInternalRequest() ? ['jobs'] : [])->get())),
34
+ 'vehicles' => $this->whenLoaded('vehicles', Vehicle::collection($this->vehicles)),
35
+ 'updated_at' => $this->updated_at,
36
+ 'created_at' => $this->created_at,
37
+ ];
40
38
  }
41
39
 
42
40
  /**
@@ -51,6 +49,7 @@ class Fleet extends FleetbaseResource
51
49
  'name' => $this->name,
52
50
  'task' => $this->task ?? null,
53
51
  'status' => $this->status ?? null,
52
+ 'parent_fleet' => $this->when($this->serviceArea, data_get($this, 'parentFleet.public_id')),
54
53
  'service_area' => $this->when($this->serviceArea, data_get($this, 'serviceArea.public_id')),
55
54
  'zone' => $this->when($this->zone, data_get($this, 'zone.public_id')),
56
55
  'updated_at' => $this->updated_at,
@@ -17,29 +17,29 @@ class FuelReport extends FleetbaseResource
17
17
  */
18
18
  public function toArray($request)
19
19
  {
20
- return array_merge(
21
- $this->getInternalIds(),
22
- [
23
- 'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
24
- 'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
25
- 'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
26
- 'driver_uuid' => $this->when(Http::isInternalRequest(), $this->driver_uuid),
27
- 'vehicle_uuid' => $this->when(Http::isInternalRequest(), $this->vehicle_uuid),
28
- 'driver_name' => $this->when(Http::isInternalRequest(), $this->driver_name),
29
- 'vehicle_name' => $this->when(Http::isInternalRequest(), $this->vehicle_name),
30
- 'vehicle' => $this->whenLoaded('vehicle', new Vehicle($this->vehicle)),
31
- 'driver' => $this->whenLoaded('driver', new Driver($this->driver)),
32
- 'odometer' => $this->odometer,
33
- 'amount' => $this->amount,
34
- 'currency' => $this->currency,
35
- 'volume' => $this->volume,
36
- 'metric_unit' => $this->metric_unit,
37
- 'type' => $this->type,
38
- 'location' => $this->location ?? new Point(0, 0),
39
- 'updated_at' => $this->updated_at,
40
- 'created_at' => $this->created_at,
41
- ]
42
- );
20
+ return [
21
+ 'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
22
+ 'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
23
+ 'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
24
+ 'reported_by_uuid' => $this->when(Http::isInternalRequest(), $this->reported_by_uuid),
25
+ 'driver_uuid' => $this->when(Http::isInternalRequest(), $this->driver_uuid),
26
+ 'vehicle_uuid' => $this->when(Http::isInternalRequest(), $this->vehicle_uuid),
27
+ 'reporter_name' => $this->when(Http::isInternalRequest(), $this->reporter_name),
28
+ 'driver_name' => $this->when(Http::isInternalRequest(), $this->driver_name),
29
+ 'vehicle_name' => $this->when(Http::isInternalRequest(), $this->vehicle_name),
30
+ 'reporter' => $this->whenLoaded('reporter', $this->reporter),
31
+ 'vehicle' => $this->whenLoaded('vehicle', new Vehicle($this->vehicle)),
32
+ 'driver' => $this->whenLoaded('driver', new Driver($this->driver)),
33
+ 'odometer' => $this->odometer,
34
+ 'amount' => $this->amount,
35
+ 'currency' => $this->currency,
36
+ 'volume' => $this->volume,
37
+ 'metric_unit' => $this->metric_unit,
38
+ 'type' => $this->type,
39
+ 'location' => $this->location ?? new Point(0, 0),
40
+ 'updated_at' => $this->updated_at,
41
+ 'created_at' => $this->created_at,
42
+ ];
43
43
  }
44
44
 
45
45
  /**
@@ -50,18 +50,20 @@ class FuelReport extends FleetbaseResource
50
50
  public function toWebhookPayload()
51
51
  {
52
52
  return [
53
- 'id' => $this->public_id,
54
- 'driver' => data_get($this, 'driver.public_id'),
55
- 'vehicle' => data_get($this, 'vehicle.public_id'),
56
- 'odometer' => $this->odometer,
57
- 'amount' => $this->amount,
58
- 'currency' => $this->currency,
59
- 'volume' => $this->volume,
60
- 'metric_unit' => $this->metric_unit,
61
- 'type' => $this->type,
62
- 'location' => $this->location ?? new Point(0, 0),
63
- 'updated_at' => $this->updated_at,
64
- 'created_at' => $this->created_at,
53
+ 'id' => $this->public_id,
54
+ 'reporter' => data_get($this, 'reportedBy.public_id'),
55
+ 'driver' => data_get($this, 'driver.public_id'),
56
+ 'vehicle' => data_get($this, 'vehicle.public_id'),
57
+ 'report' => $this->report,
58
+ 'odometer' => $this->odometer,
59
+ 'amount' => $this->amount,
60
+ 'currency' => $this->currency,
61
+ 'volume' => $this->volume,
62
+ 'metric_unit' => $this->metric_unit,
63
+ 'type' => $this->type,
64
+ 'location' => $this->location ?? new Point(0, 0),
65
+ 'updated_at' => $this->updated_at,
66
+ 'created_at' => $this->created_at,
65
67
  ];
66
68
  }
67
69
  }