@fleetbase/fleetops-engine 0.6.35 → 0.6.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon/components/avatar-manager.hbs +86 -0
- package/addon/components/avatar-manager.js +165 -0
- package/addon/components/customer/create-order-form.js +5 -0
- package/addon/components/layout/fleet-ops-sidebar.js +8 -0
- package/addon/components/order-progress-card.js +1 -1
- package/addon/controllers/analytics/reports/index/edit.js +2 -0
- package/addon/controllers/analytics/reports/index/new.js +2 -0
- package/addon/controllers/connectivity/devices/index/edit.js +2 -0
- package/addon/controllers/connectivity/devices/index/new.js +2 -0
- package/addon/controllers/connectivity/sensors/index/edit.js +2 -0
- package/addon/controllers/connectivity/sensors/index/new.js +2 -0
- package/addon/controllers/connectivity/telematics/index/edit.js +2 -0
- package/addon/controllers/connectivity/telematics/index/new.js +2 -0
- package/addon/controllers/management/contacts/customers/edit.js +2 -0
- package/addon/controllers/management/contacts/customers/new.js +2 -0
- package/addon/controllers/management/contacts/index/edit.js +2 -0
- package/addon/controllers/management/contacts/index/new.js +2 -0
- package/addon/controllers/management/drivers/index/edit.js +2 -0
- package/addon/controllers/management/drivers/index/new.js +2 -0
- package/addon/controllers/management/fleets/index/edit.js +2 -0
- package/addon/controllers/management/fleets/index/new.js +2 -0
- package/addon/controllers/management/fuel-reports/index/edit.js +2 -0
- package/addon/controllers/management/fuel-reports/index/new.js +2 -0
- package/addon/controllers/management/issues/index/edit.js +2 -0
- package/addon/controllers/management/issues/index/new.js +2 -0
- package/addon/controllers/management/places/index/edit.js +2 -0
- package/addon/controllers/management/places/index/new.js +2 -0
- package/addon/controllers/management/vehicles/index/edit.js +2 -0
- package/addon/controllers/management/vehicles/index/new.js +2 -0
- package/addon/controllers/management/vendors/index/edit.js +2 -0
- package/addon/controllers/management/vendors/index/new.js +2 -0
- package/addon/controllers/operations/orders/index/new.js +2 -0
- package/addon/controllers/operations/routes/index/new.js +1 -0
- package/addon/controllers/operations/service-rates/index/edit.js +2 -0
- package/addon/controllers/operations/service-rates/index/new.js +2 -0
- package/addon/controllers/settings/avatars.js +3 -0
- package/addon/extension.js +0 -5
- package/addon/routes/settings/avatars.js +3 -0
- package/addon/routes.js +1 -0
- package/addon/templates/operations/orders/index/new.hbs +1 -0
- package/addon/templates/settings/avatars.hbs +10 -0
- package/app/components/avatar-manager.js +1 -0
- package/app/controllers/settings/avatars.js +1 -0
- package/app/routes/settings/avatars.js +1 -0
- package/app/templates/settings/avatars.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +3 -3
- package/server/config/fleetops.php +1 -1
- package/server/src/Auth/Schemas/FleetOps.php +4 -0
- package/server/src/Expansions/UserFilterExpansion.php +31 -0
- package/server/src/Http/Controllers/Internal/v1/ContactController.php +5 -2
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +35 -2
- package/server/src/Http/Controllers/Internal/v1/FleetController.php +5 -2
- package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +5 -2
- package/server/src/Http/Controllers/Internal/v1/IssueController.php +5 -2
- package/server/src/Http/Controllers/Internal/v1/PlaceController.php +5 -2
- package/server/src/Http/Controllers/Internal/v1/VehicleController.php +8 -3
- package/server/src/Http/Controllers/Internal/v1/VendorController.php +5 -2
- package/server/src/Http/Requests/Internal/CreateDriverRequest.php +2 -1
- package/server/src/Imports/ContactImport.php +6 -0
- package/server/src/Imports/DriverImport.php +6 -0
- package/server/src/Imports/FleetImport.php +6 -0
- package/server/src/Imports/FuelReportImport.php +6 -0
- package/server/src/Imports/IssueImport.php +6 -0
- package/server/src/Imports/PlaceImport.php +6 -0
- package/server/src/Imports/VehicleImport.php +6 -0
- package/server/src/Imports/VendorImport.php +6 -0
- package/server/src/Models/Vehicle.php +9 -2
- package/server/src/Rules/ResolvableVehicle.php +90 -0
- package/server/src/Support/Reporting/FleetOpsReportSchema.php +129 -1
- package/translations/en-us.yaml +2 -0
- package/DRIVER_SCHEDULING.md +0 -186
|
@@ -9,6 +9,7 @@ export default class ManagementVehiclesIndexEditController extends Controller {
|
|
|
9
9
|
@service intl;
|
|
10
10
|
@service notifications;
|
|
11
11
|
@service modalsManager;
|
|
12
|
+
@service events;
|
|
12
13
|
@tracked overlay;
|
|
13
14
|
@tracked actionButtons = [
|
|
14
15
|
{
|
|
@@ -20,6 +21,7 @@ export default class ManagementVehiclesIndexEditController extends Controller {
|
|
|
20
21
|
@task *save(vehicle) {
|
|
21
22
|
try {
|
|
22
23
|
yield vehicle.save();
|
|
24
|
+
this.events.trackResourceUpdated(vehicle);
|
|
23
25
|
this.overlay?.close();
|
|
24
26
|
|
|
25
27
|
yield this.hostRouter.transitionTo('console.fleet-ops.management.vehicles.index.details', vehicle);
|
|
@@ -11,12 +11,14 @@ export default class ManagementVehiclesIndexNewController extends Controller {
|
|
|
11
11
|
@service hostRouter;
|
|
12
12
|
@service intl;
|
|
13
13
|
@service notifications;
|
|
14
|
+
@service events;
|
|
14
15
|
@tracked overlay;
|
|
15
16
|
@tracked vehicle = this.store.createRecord('vehicle', DEFAULT_PROPERTIES);
|
|
16
17
|
|
|
17
18
|
@task *save(vehicle) {
|
|
18
19
|
try {
|
|
19
20
|
yield vehicle.save();
|
|
21
|
+
this.events.trackResourceCreated(vehicle);
|
|
20
22
|
this.overlay?.close();
|
|
21
23
|
|
|
22
24
|
yield this.hostRouter.refresh();
|
|
@@ -9,6 +9,7 @@ export default class ManagementVendorsIndexEditController extends Controller {
|
|
|
9
9
|
@service intl;
|
|
10
10
|
@service notifications;
|
|
11
11
|
@service modalsManager;
|
|
12
|
+
@service events;
|
|
12
13
|
@tracked overlay;
|
|
13
14
|
@tracked actionButtons = [
|
|
14
15
|
{
|
|
@@ -20,6 +21,7 @@ export default class ManagementVendorsIndexEditController extends Controller {
|
|
|
20
21
|
@task *save(vendor) {
|
|
21
22
|
try {
|
|
22
23
|
yield vendor.save();
|
|
24
|
+
this.events.trackResourceUpdated(vendor);
|
|
23
25
|
this.overlay?.close();
|
|
24
26
|
|
|
25
27
|
yield this.hostRouter.transitionTo('console.fleet-ops.management.vendors.index.details', vendor);
|
|
@@ -9,6 +9,7 @@ export default class ManagementVendorsIndexNewController extends Controller {
|
|
|
9
9
|
@service hostRouter;
|
|
10
10
|
@service intl;
|
|
11
11
|
@service notifications;
|
|
12
|
+
@service events;
|
|
12
13
|
@tracked overlay;
|
|
13
14
|
@tracked vendor = this.vendorActions.createNewInstance();
|
|
14
15
|
@tracked integratedVendor;
|
|
@@ -18,6 +19,7 @@ export default class ManagementVendorsIndexNewController extends Controller {
|
|
|
18
19
|
|
|
19
20
|
try {
|
|
20
21
|
yield vendor.save();
|
|
22
|
+
this.events.trackResourceCreated(vendor);
|
|
21
23
|
this.overlay?.close();
|
|
22
24
|
|
|
23
25
|
yield this.hostRouter.refresh();
|
|
@@ -19,6 +19,7 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
19
19
|
@service orderImport;
|
|
20
20
|
@service orderCreation;
|
|
21
21
|
@service orderValidation;
|
|
22
|
+
@service events;
|
|
22
23
|
@tracked order = this.orderCreation.newOrder();
|
|
23
24
|
@tracked overlay;
|
|
24
25
|
|
|
@@ -73,6 +74,7 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
73
74
|
|
|
74
75
|
// Save order
|
|
75
76
|
const createdOrder = yield order.save();
|
|
77
|
+
this.events.trackResourceCreated(order);
|
|
76
78
|
|
|
77
79
|
// Trigger created event
|
|
78
80
|
this.universe.trigger('fleet-ops.order.created', createdOrder);
|
|
@@ -10,6 +10,7 @@ export default class OperationsServiceRatesIndexEditController extends Controlle
|
|
|
10
10
|
@service intl;
|
|
11
11
|
@service notifications;
|
|
12
12
|
@service modalsManager;
|
|
13
|
+
@service events;
|
|
13
14
|
@tracked overlay;
|
|
14
15
|
@tracked actionButtons = [
|
|
15
16
|
{
|
|
@@ -21,6 +22,7 @@ export default class OperationsServiceRatesIndexEditController extends Controlle
|
|
|
21
22
|
@task *save(serviceRate) {
|
|
22
23
|
try {
|
|
23
24
|
yield serviceRate.save();
|
|
25
|
+
this.events.trackResourceUpdated(serviceRate);
|
|
24
26
|
this.overlay?.close();
|
|
25
27
|
|
|
26
28
|
yield this.hostRouter.transitionTo('console.fleet-ops.operations.service-rates.index.details', serviceRate);
|
|
@@ -9,12 +9,14 @@ export default class OperationsServiceRatesIndexNewController extends Controller
|
|
|
9
9
|
@service hostRouter;
|
|
10
10
|
@service intl;
|
|
11
11
|
@service notifications;
|
|
12
|
+
@service events;
|
|
12
13
|
@tracked overlay;
|
|
13
14
|
@tracked serviceRate = this.serviceRateActions.createNewInstance();
|
|
14
15
|
|
|
15
16
|
@task *save(serviceRate) {
|
|
16
17
|
try {
|
|
17
18
|
yield serviceRate.save();
|
|
19
|
+
this.events.trackResourceCreated(serviceRate);
|
|
18
20
|
this.overlay?.close();
|
|
19
21
|
|
|
20
22
|
yield this.hostRouter.refresh();
|
package/addon/extension.js
CHANGED
|
@@ -18,11 +18,6 @@ export default {
|
|
|
18
18
|
icon: 'location-arrow',
|
|
19
19
|
component: new ExtensionComponent('@fleetbase/fleetops-engine', 'admin/navigator-app'),
|
|
20
20
|
}),
|
|
21
|
-
new MenuItem({
|
|
22
|
-
title: 'Avatar Managemenet',
|
|
23
|
-
icon: 'images',
|
|
24
|
-
component: new ExtensionComponent('@fleetbase/fleetops-engine', 'admin/avatar-management'),
|
|
25
|
-
}),
|
|
26
21
|
],
|
|
27
22
|
{
|
|
28
23
|
slug: 'fleet-ops',
|
package/addon/routes.js
CHANGED
|
@@ -225,6 +225,7 @@ export default buildRoutes(function () {
|
|
|
225
225
|
this.route('navigator-app');
|
|
226
226
|
this.route('notifications');
|
|
227
227
|
this.route('custom-fields');
|
|
228
|
+
this.route('avatars');
|
|
228
229
|
this.route('routing');
|
|
229
230
|
this.route('payments', function () {
|
|
230
231
|
this.route('index', { path: '/' });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<Layout::Section::Header @title={{t "settings.avatar-management"}} />
|
|
2
|
+
|
|
3
|
+
<Layout::Section::Body class="overflow-y-scroll h-full">
|
|
4
|
+
<div class="container mx-auto h-screen">
|
|
5
|
+
<div class="max-w-3xl my-10 mx-auto space-y-6">
|
|
6
|
+
<AvatarManager />
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<Spacer @height="600px" />
|
|
10
|
+
</Layout::Section::Body>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '@fleetbase/fleetops-engine/components/avatar-manager';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '@fleetbase/fleetops-engine/controllers/settings/avatars';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '@fleetbase/fleetops-engine/routes/settings/avatars';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '@fleetbase/fleetops-engine/templates/settings/avatars';
|
package/composer.json
CHANGED
package/extension.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fleetbase/fleetops-engine",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.37",
|
|
4
4
|
"description": "Fleet & Transport Management Extension for Fleetbase",
|
|
5
5
|
"fleetbase": {
|
|
6
6
|
"route": "fleet-ops"
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@babel/core": "^7.23.2",
|
|
45
|
-
"@fleetbase/ember-core": "^0.3.
|
|
46
|
-
"@fleetbase/ember-ui": "^0.3.
|
|
45
|
+
"@fleetbase/ember-core": "^0.3.12",
|
|
46
|
+
"@fleetbase/ember-ui": "^0.3.21",
|
|
47
47
|
"@fleetbase/fleetops-data": "^0.1.25",
|
|
48
48
|
"@fleetbase/leaflet-routing-machine": "^3.2.17",
|
|
49
49
|
"@fortawesome/ember-fontawesome": "^2.0.0",
|
|
@@ -56,7 +56,7 @@ return [
|
|
|
56
56
|
|--------------------------------------------------------------------------
|
|
57
57
|
*/
|
|
58
58
|
'navigator' => [
|
|
59
|
-
'bypass_verification_code' => env('
|
|
59
|
+
'bypass_verification_code' => env('SMS_AUTH_BYPASS_CODE', env('NAVIGATOR_BYPASS_VERIFICATION_CODE')),
|
|
60
60
|
'app_identifier' => env('NAVIGATOR_APP_IDENTIFIER', 'io.fleetbase.navigator')
|
|
61
61
|
],
|
|
62
62
|
|
|
@@ -16,6 +16,37 @@ class UserFilterExpansion implements Expansion
|
|
|
16
16
|
return \Fleetbase\Http\Filter\UserFilter::class;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Filter where user is a driver type or has a driver profile.
|
|
21
|
+
*
|
|
22
|
+
* @return void
|
|
23
|
+
*/
|
|
24
|
+
public static function isDriver()
|
|
25
|
+
{
|
|
26
|
+
return function () {
|
|
27
|
+
/** @var \Fleetbase\Http\Filter\UserFilter|\Fleetbase\Http\Filter\Filter $this */
|
|
28
|
+
$this->builder->where(function ($query) {
|
|
29
|
+
$query->where('type', 'driver');
|
|
30
|
+
$query->orwhereHas('driverProfiles', function ($query) {
|
|
31
|
+
$query->where('company_uuid', session('company'));
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Filter where a user is a customer.
|
|
39
|
+
*
|
|
40
|
+
* @return void
|
|
41
|
+
*/
|
|
42
|
+
public static function isCustomer()
|
|
43
|
+
{
|
|
44
|
+
return function () {
|
|
45
|
+
/** @var \Fleetbase\Http\Filter\UserFilter|\Fleetbase\Http\Filter\Filter $this */
|
|
46
|
+
$this->builder->where('type', 'customer');
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
19
50
|
/**
|
|
20
51
|
* Filter where doesnt have driver within the CURRENT organizations.
|
|
21
52
|
*
|
|
@@ -91,15 +91,18 @@ class ContactController extends FleetOpsController
|
|
|
91
91
|
{
|
|
92
92
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
93
93
|
$files = $request->resolveFilesFromIds();
|
|
94
|
+
$importedCount = 0;
|
|
94
95
|
|
|
95
96
|
foreach ($files as $file) {
|
|
96
97
|
try {
|
|
97
|
-
|
|
98
|
+
$import = new ContactImport();
|
|
99
|
+
Excel::import($import, $file->path, $disk);
|
|
100
|
+
$importedCount += $import->imported;
|
|
98
101
|
} catch (\Throwable $e) {
|
|
99
102
|
return response()->error('Invalid file, unable to proccess.');
|
|
100
103
|
}
|
|
101
104
|
}
|
|
102
105
|
|
|
103
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
106
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
104
107
|
}
|
|
105
108
|
}
|
|
@@ -45,6 +45,17 @@ class DriverController extends FleetOpsController
|
|
|
45
45
|
{
|
|
46
46
|
$input = $request->input('driver');
|
|
47
47
|
|
|
48
|
+
// Normalize vehicle field - the frontend may send the full vehicle object,
|
|
49
|
+
// a UUID string, or a public_id string. Normalize to a single identifier
|
|
50
|
+
// so the ResolvableVehicle rule can validate it correctly.
|
|
51
|
+
if (isset($input['vehicle']) && is_array($input['vehicle'])) {
|
|
52
|
+
$input['vehicle'] = data_get($input['vehicle'], 'id')
|
|
53
|
+
?? data_get($input['vehicle'], 'public_id')
|
|
54
|
+
?? data_get($input['vehicle'], 'uuid')
|
|
55
|
+
?? null;
|
|
56
|
+
$request->merge(['driver' => $input]);
|
|
57
|
+
}
|
|
58
|
+
|
|
48
59
|
// create validation request
|
|
49
60
|
$createDriverRequest = CreateDriverRequest::createFrom($request);
|
|
50
61
|
$rules = $createDriverRequest->rules();
|
|
@@ -137,6 +148,14 @@ class DriverController extends FleetOpsController
|
|
|
137
148
|
if ($input->has('user_uuid')) {
|
|
138
149
|
$user = User::where('uuid', $input->get('user_uuid'))->first();
|
|
139
150
|
|
|
151
|
+
// Check if a driver profile already exists for this user in the current company
|
|
152
|
+
if ($user) {
|
|
153
|
+
$existingDriver = Driver::where(['user_uuid' => $user->uuid, 'company_uuid' => session('company')])->first();
|
|
154
|
+
if ($existingDriver) {
|
|
155
|
+
throw new \Exception('This user account already belongs to a driver.');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
140
159
|
// If user doesn't exist with provided UUID, create new user
|
|
141
160
|
if (!$user) {
|
|
142
161
|
$userInput = $input
|
|
@@ -254,6 +273,17 @@ class DriverController extends FleetOpsController
|
|
|
254
273
|
// get input data
|
|
255
274
|
$input = $request->input('driver');
|
|
256
275
|
|
|
276
|
+
// Normalize vehicle field - the frontend may send the full vehicle object,
|
|
277
|
+
// a UUID string, or a public_id string. Normalize to a single identifier
|
|
278
|
+
// so the ResolvableVehicle rule can validate it correctly.
|
|
279
|
+
if (isset($input['vehicle']) && is_array($input['vehicle'])) {
|
|
280
|
+
$input['vehicle'] = data_get($input['vehicle'], 'id')
|
|
281
|
+
?? data_get($input['vehicle'], 'public_id')
|
|
282
|
+
?? data_get($input['vehicle'], 'uuid')
|
|
283
|
+
?? null;
|
|
284
|
+
$request->merge(['driver' => $input]);
|
|
285
|
+
}
|
|
286
|
+
|
|
257
287
|
// create validation request
|
|
258
288
|
$updateDriverRequest = UpdateDriverRequest::createFrom($request);
|
|
259
289
|
$rules = $updateDriverRequest->rules();
|
|
@@ -513,15 +543,18 @@ class DriverController extends FleetOpsController
|
|
|
513
543
|
{
|
|
514
544
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
515
545
|
$files = $request->resolveFilesFromIds();
|
|
546
|
+
$importedCount = 0;
|
|
516
547
|
|
|
517
548
|
foreach ($files as $file) {
|
|
518
549
|
try {
|
|
519
|
-
|
|
550
|
+
$import = new DriverImport();
|
|
551
|
+
Excel::import($import, $file->path, $disk);
|
|
552
|
+
$importedCount += $import->imported;
|
|
520
553
|
} catch (\Throwable $e) {
|
|
521
554
|
return response()->error('Invalid file, unable to proccess.');
|
|
522
555
|
}
|
|
523
556
|
}
|
|
524
557
|
|
|
525
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
558
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
526
559
|
}
|
|
527
560
|
}
|
|
@@ -221,15 +221,18 @@ class FleetController extends FleetOpsController
|
|
|
221
221
|
{
|
|
222
222
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
223
223
|
$files = $request->resolveFilesFromIds();
|
|
224
|
+
$importedCount = 0;
|
|
224
225
|
|
|
225
226
|
foreach ($files as $file) {
|
|
226
227
|
try {
|
|
227
|
-
|
|
228
|
+
$import = new FleetImport();
|
|
229
|
+
Excel::import($import, $file->path, $disk);
|
|
230
|
+
$importedCount += $import->imported;
|
|
228
231
|
} catch (\Throwable $e) {
|
|
229
232
|
return response()->error('Invalid file, unable to proccess.');
|
|
230
233
|
}
|
|
231
234
|
}
|
|
232
235
|
|
|
233
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
236
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
234
237
|
}
|
|
235
238
|
}
|
|
@@ -50,15 +50,18 @@ class FuelReportController extends FleetOpsController
|
|
|
50
50
|
{
|
|
51
51
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
52
52
|
$files = $request->resolveFilesFromIds();
|
|
53
|
+
$importedCount = 0;
|
|
53
54
|
|
|
54
55
|
foreach ($files as $file) {
|
|
55
56
|
try {
|
|
56
|
-
|
|
57
|
+
$import = new FuelReportImport();
|
|
58
|
+
Excel::import($import, $file->path, $disk);
|
|
59
|
+
$importedCount += $import->imported;
|
|
57
60
|
} catch (\Throwable $e) {
|
|
58
61
|
return response()->error('Invalid file, unable to proccess.');
|
|
59
62
|
}
|
|
60
63
|
}
|
|
61
64
|
|
|
62
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
65
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
63
66
|
}
|
|
64
67
|
}
|
|
@@ -55,15 +55,18 @@ class IssueController extends FleetOpsController
|
|
|
55
55
|
{
|
|
56
56
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
57
57
|
$files = $request->resolveFilesFromIds();
|
|
58
|
+
$importedCount = 0;
|
|
58
59
|
|
|
59
60
|
foreach ($files as $file) {
|
|
60
61
|
try {
|
|
61
|
-
|
|
62
|
+
$import = new IssueImport();
|
|
63
|
+
Excel::import($import, $file->path, $disk);
|
|
64
|
+
$importedCount += $import->imported;
|
|
62
65
|
} catch (\Throwable $e) {
|
|
63
66
|
return response()->error('Invalid file, unable to proccess.');
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
69
|
|
|
67
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
70
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
68
71
|
}
|
|
69
72
|
}
|
|
@@ -170,15 +170,18 @@ class PlaceController extends FleetOpsController
|
|
|
170
170
|
{
|
|
171
171
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
172
172
|
$files = $request->resolveFilesFromIds();
|
|
173
|
+
$importedCount = 0;
|
|
173
174
|
|
|
174
175
|
foreach ($files as $file) {
|
|
175
176
|
try {
|
|
176
|
-
|
|
177
|
+
$import = new PlaceImport();
|
|
178
|
+
Excel::import($import, $file->path, $disk);
|
|
179
|
+
$importedCount += $import->imported;
|
|
177
180
|
} catch (\Throwable $e) {
|
|
178
181
|
return response()->error('Invalid file, unable to proccess.');
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
|
|
182
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
185
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
183
186
|
}
|
|
184
187
|
}
|
|
@@ -59,7 +59,9 @@ class VehicleController extends FleetOpsController
|
|
|
59
59
|
*/
|
|
60
60
|
public function avatars()
|
|
61
61
|
{
|
|
62
|
-
$options = Vehicle::getAvatarOptions()
|
|
62
|
+
$options = Vehicle::getAvatarOptions(function ($query) {
|
|
63
|
+
$query->where('company_uuid', session('company'));
|
|
64
|
+
});
|
|
63
65
|
|
|
64
66
|
return response()->json($options);
|
|
65
67
|
}
|
|
@@ -87,15 +89,18 @@ class VehicleController extends FleetOpsController
|
|
|
87
89
|
{
|
|
88
90
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
89
91
|
$files = $request->resolveFilesFromIds();
|
|
92
|
+
$importedCount = 0;
|
|
90
93
|
|
|
91
94
|
foreach ($files as $file) {
|
|
92
95
|
try {
|
|
93
|
-
|
|
96
|
+
$import = new VehicleImport();
|
|
97
|
+
Excel::import($import, $file->path, $disk);
|
|
98
|
+
$importedCount += $import->imported;
|
|
94
99
|
} catch (\Throwable $e) {
|
|
95
100
|
return response()->error('Invalid file, unable to proccess.');
|
|
96
101
|
}
|
|
97
102
|
}
|
|
98
103
|
|
|
99
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
104
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
100
105
|
}
|
|
101
106
|
}
|
|
@@ -112,16 +112,19 @@ class VendorController extends FleetOpsController
|
|
|
112
112
|
{
|
|
113
113
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
114
114
|
$files = $request->resolveFilesFromIds();
|
|
115
|
+
$importedCount = 0;
|
|
115
116
|
|
|
116
117
|
foreach ($files as $file) {
|
|
117
118
|
try {
|
|
118
|
-
|
|
119
|
+
$import = new VendorImport();
|
|
120
|
+
Excel::import($import, $file->path, $disk);
|
|
121
|
+
$importedCount += $import->imported;
|
|
119
122
|
} catch (\Throwable $e) {
|
|
120
123
|
return response()->error('Invalid file, unable to proccess.');
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
|
|
124
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
127
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
125
128
|
}
|
|
126
129
|
|
|
127
130
|
/**
|
|
@@ -4,6 +4,7 @@ namespace Fleetbase\FleetOps\Http\Requests\Internal;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Http\Requests\CreateDriverRequest as CreateDriverApiRequest;
|
|
6
6
|
use Fleetbase\FleetOps\Rules\ResolvablePoint;
|
|
7
|
+
use Fleetbase\FleetOps\Rules\ResolvableVehicle;
|
|
7
8
|
use Fleetbase\Support\Auth;
|
|
8
9
|
use Illuminate\Validation\Rule;
|
|
9
10
|
|
|
@@ -49,7 +50,7 @@ class CreateDriverRequest extends CreateDriverApiRequest
|
|
|
49
50
|
'internal_id' => 'nullable|string|max:255',
|
|
50
51
|
'country' => 'nullable|string|size:2',
|
|
51
52
|
'city' => 'nullable|string|max:255',
|
|
52
|
-
'vehicle' => 'nullable
|
|
53
|
+
'vehicle' => ['nullable', new ResolvableVehicle()],
|
|
53
54
|
'status' => 'nullable|string|in:active,inactive',
|
|
54
55
|
'vendor' => 'nullable|exists:vendors,public_id',
|
|
55
56
|
'job' => 'nullable|exists:orders,public_id',
|
|
@@ -9,6 +9,11 @@ use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
9
9
|
|
|
10
10
|
class ContactImport implements ToCollection, WithHeadingRow
|
|
11
11
|
{
|
|
12
|
+
/**
|
|
13
|
+
* Counter for successfully imported rows.
|
|
14
|
+
*/
|
|
15
|
+
public int $imported = 0;
|
|
16
|
+
|
|
12
17
|
/**
|
|
13
18
|
* @return Collection
|
|
14
19
|
*/
|
|
@@ -20,6 +25,7 @@ class ContactImport implements ToCollection, WithHeadingRow
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
Contact::createFromImport($row, true);
|
|
28
|
+
$this->imported++;
|
|
23
29
|
}
|
|
24
30
|
}
|
|
25
31
|
}
|
|
@@ -9,6 +9,11 @@ use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
9
9
|
|
|
10
10
|
class DriverImport implements ToCollection, WithHeadingRow
|
|
11
11
|
{
|
|
12
|
+
/**
|
|
13
|
+
* Counter for successfully imported rows.
|
|
14
|
+
*/
|
|
15
|
+
public int $imported = 0;
|
|
16
|
+
|
|
12
17
|
/**
|
|
13
18
|
* @return Collection
|
|
14
19
|
*/
|
|
@@ -20,6 +25,7 @@ class DriverImport implements ToCollection, WithHeadingRow
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
Driver::createFromImport($row, true);
|
|
28
|
+
$this->imported++;
|
|
23
29
|
}
|
|
24
30
|
}
|
|
25
31
|
}
|
|
@@ -9,6 +9,11 @@ use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
9
9
|
|
|
10
10
|
class FleetImport implements ToCollection, WithHeadingRow
|
|
11
11
|
{
|
|
12
|
+
/**
|
|
13
|
+
* Counter for successfully imported rows.
|
|
14
|
+
*/
|
|
15
|
+
public int $imported = 0;
|
|
16
|
+
|
|
12
17
|
/**
|
|
13
18
|
* @return Collection
|
|
14
19
|
*/
|
|
@@ -20,6 +25,7 @@ class FleetImport implements ToCollection, WithHeadingRow
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
Fleet::createFromImport($row, true);
|
|
28
|
+
$this->imported++;
|
|
23
29
|
}
|
|
24
30
|
}
|
|
25
31
|
}
|
|
@@ -9,6 +9,11 @@ use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
9
9
|
|
|
10
10
|
class FuelReportImport implements ToCollection, WithHeadingRow
|
|
11
11
|
{
|
|
12
|
+
/**
|
|
13
|
+
* Counter for successfully imported rows.
|
|
14
|
+
*/
|
|
15
|
+
public int $imported = 0;
|
|
16
|
+
|
|
12
17
|
/**
|
|
13
18
|
* @return Collection
|
|
14
19
|
*/
|
|
@@ -20,6 +25,7 @@ class FuelReportImport implements ToCollection, WithHeadingRow
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
FuelReport::createFromImport($row, true);
|
|
28
|
+
$this->imported++;
|
|
23
29
|
}
|
|
24
30
|
}
|
|
25
31
|
}
|
|
@@ -9,6 +9,11 @@ use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
9
9
|
|
|
10
10
|
class IssueImport implements ToCollection, WithHeadingRow
|
|
11
11
|
{
|
|
12
|
+
/**
|
|
13
|
+
* Counter for successfully imported rows.
|
|
14
|
+
*/
|
|
15
|
+
public int $imported = 0;
|
|
16
|
+
|
|
12
17
|
/**
|
|
13
18
|
* @return Collection
|
|
14
19
|
*/
|
|
@@ -20,6 +25,7 @@ class IssueImport implements ToCollection, WithHeadingRow
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
Issue::createFromImport($row, true);
|
|
28
|
+
$this->imported++;
|
|
23
29
|
}
|
|
24
30
|
}
|
|
25
31
|
}
|