@fleetbase/fleetops-engine 0.6.35 → 0.6.36
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 +13 -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/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/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.36",
|
|
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
|
}
|
|
@@ -137,6 +137,14 @@ class DriverController extends FleetOpsController
|
|
|
137
137
|
if ($input->has('user_uuid')) {
|
|
138
138
|
$user = User::where('uuid', $input->get('user_uuid'))->first();
|
|
139
139
|
|
|
140
|
+
// Check if a driver profile already exists for this user in the current company
|
|
141
|
+
if ($user) {
|
|
142
|
+
$existingDriver = Driver::where(['user_uuid' => $user->uuid, 'company_uuid' => session('company')])->first();
|
|
143
|
+
if ($existingDriver) {
|
|
144
|
+
throw new \Exception('This user account already belongs to a driver.');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
140
148
|
// If user doesn't exist with provided UUID, create new user
|
|
141
149
|
if (!$user) {
|
|
142
150
|
$userInput = $input
|
|
@@ -513,15 +521,18 @@ class DriverController extends FleetOpsController
|
|
|
513
521
|
{
|
|
514
522
|
$disk = $request->input('disk', config('filesystems.default'));
|
|
515
523
|
$files = $request->resolveFilesFromIds();
|
|
524
|
+
$importedCount = 0;
|
|
516
525
|
|
|
517
526
|
foreach ($files as $file) {
|
|
518
527
|
try {
|
|
519
|
-
|
|
528
|
+
$import = new DriverImport();
|
|
529
|
+
Excel::import($import, $file->path, $disk);
|
|
530
|
+
$importedCount += $import->imported;
|
|
520
531
|
} catch (\Throwable $e) {
|
|
521
532
|
return response()->error('Invalid file, unable to proccess.');
|
|
522
533
|
}
|
|
523
534
|
}
|
|
524
535
|
|
|
525
|
-
return response()->json(['status' => 'ok', 'message' => 'Import completed']);
|
|
536
|
+
return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]);
|
|
526
537
|
}
|
|
527
538
|
}
|
|
@@ -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
|
/**
|
|
@@ -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
|
}
|
|
@@ -9,6 +9,11 @@ use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
9
9
|
|
|
10
10
|
class PlaceImport 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 PlaceImport implements ToCollection, WithHeadingRow
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
Place::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 VehicleImport 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 VehicleImport implements ToCollection, WithHeadingRow
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
Vehicle::createFromImport($row, true);
|
|
28
|
+
$this->imported++;
|
|
23
29
|
}
|
|
24
30
|
}
|
|
25
31
|
}
|