@fleetbase/fleetops-engine 0.3.0 → 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 (235) 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 +2 -2
  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 +37 -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 +15 -0
  228. package/server/src/Notifications/OrderCanceled.php +15 -0
  229. package/server/src/Notifications/OrderDispatchFailed.php +15 -0
  230. package/server/src/Notifications/OrderDispatched.php +15 -0
  231. package/server/src/Notifications/OrderPing.php +15 -0
  232. package/server/src/Notifications/OrderSplit.php +26 -5
  233. package/server/src/Providers/FleetOpsServiceProvider.php +22 -0
  234. package/server/src/Providers/NotificationServiceProvider.php +43 -0
  235. package/server/src/routes.php +2 -2
@@ -11,7 +11,8 @@ module.exports = function (environment) {
11
11
  driverImage: getenv('DEFAULT_DRIVER_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
12
12
  userImage: getenv('DEFAULT_USER_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
13
13
  contactImage: getenv('DEFAULT_CONTACT_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
14
- vehicleImage: getenv('DEFAULT_VEHICLE_IMAGE', 'https://flb-assets.s3.ap-southeast-1.amazonaws.com/static/vehicle-icons/light_commercial_van.svg'),
14
+ vendorImage: getenv('DEFAULT_VENDOR_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
15
+ vehicleImage: getenv('DEFAULT_VEHICLE_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/vehicle-placeholder.png'),
15
16
  vehicleAvatar: getenv('DEFAUL_VEHICLE_AVATAR', 'https://flb-assets.s3-ap-southeast-1.amazonaws.com/static/vehicle-icons/mini_bus.svg'),
16
17
  },
17
18
  };
package/extension.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Fleet-Ops",
3
- "version": "0.2.9",
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.0",
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.1",
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
  }