@fleetbase/fleetops-engine 0.6.34 → 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/Api/v1/OrderController.php +8 -11
- 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
|
*
|
|
@@ -308,7 +308,7 @@ class OrderController extends Controller
|
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
// load required relations
|
|
311
|
-
$order->load(['trackingNumber', 'driverAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
311
|
+
$order->load(['trackingNumber', 'trackingStatuses', 'driverAssigned', 'vehicleAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
312
312
|
|
|
313
313
|
// Determine if order should be dispatched on creation
|
|
314
314
|
$shouldDispatch = $request->boolean('dispatch') && $integratedVendorOrder === null;
|
|
@@ -519,7 +519,7 @@ class OrderController extends Controller
|
|
|
519
519
|
$order->flushAttributesCache();
|
|
520
520
|
|
|
521
521
|
// load required relations
|
|
522
|
-
$order->load(['trackingNumber', 'driverAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
522
|
+
$order->load(['trackingNumber', 'trackingStatuses', 'driverAssigned', 'vehicleAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
523
523
|
|
|
524
524
|
// response the order resource
|
|
525
525
|
return new OrderResource($order);
|
|
@@ -535,6 +535,7 @@ class OrderController extends Controller
|
|
|
535
535
|
set_time_limit(180);
|
|
536
536
|
|
|
537
537
|
$results = Order::queryWithRequest($request, function (&$query, $request) {
|
|
538
|
+
$query->with(['trackingStatuses', 'driverAssigned', 'vehicleAssigned', 'customer', 'facilitator']);
|
|
538
539
|
$query->where('company_uuid', session('company'));
|
|
539
540
|
$query->whereNotNull('payload_uuid');
|
|
540
541
|
|
|
@@ -728,7 +729,7 @@ class OrderController extends Controller
|
|
|
728
729
|
{
|
|
729
730
|
// find for the order
|
|
730
731
|
try {
|
|
731
|
-
$order = Order::findRecordOrFail($id, ['trackingNumber', 'driverAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
732
|
+
$order = Order::findRecordOrFail($id, ['trackingNumber', 'trackingStatuses', 'driverAssigned', 'vehicleAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
732
733
|
} catch (ModelNotFoundException $exception) {
|
|
733
734
|
return response()->json(
|
|
734
735
|
[
|
|
@@ -808,7 +809,7 @@ class OrderController extends Controller
|
|
|
808
809
|
public function dispatchOrder(string $id)
|
|
809
810
|
{
|
|
810
811
|
try {
|
|
811
|
-
$order = Order::findRecordOrFail($id, ['trackingNumber', 'driverAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
812
|
+
$order = Order::findRecordOrFail($id, ['trackingNumber', 'trackingStatuses', 'driverAssigned', 'vehicleAssigned', 'purchaseRate', 'customer', 'facilitator']);
|
|
812
813
|
} catch (ModelNotFoundException $exception) {
|
|
813
814
|
return response()->json(
|
|
814
815
|
[
|
|
@@ -1223,7 +1224,7 @@ class OrderController extends Controller
|
|
|
1223
1224
|
public function setDestination(string $id, string $placeId)
|
|
1224
1225
|
{
|
|
1225
1226
|
try {
|
|
1226
|
-
$order = Order::findRecordOrFail($id, ['payload.waypoints', 'payload.pickup', 'payload.dropoff', 'driverAssigned']);
|
|
1227
|
+
$order = Order::findRecordOrFail($id, ['payload.waypoints', 'payload.pickup', 'payload.dropoff', 'driverAssigned', 'vehicleAssigned', 'customer', 'facilitator']);
|
|
1227
1228
|
} catch (ModelNotFoundException $exception) {
|
|
1228
1229
|
return response()->apiError('Order resource not found.', 404);
|
|
1229
1230
|
}
|
|
@@ -1567,12 +1568,8 @@ class OrderController extends Controller
|
|
|
1567
1568
|
*
|
|
1568
1569
|
* @return \Feetbase\Models\File
|
|
1569
1570
|
*/
|
|
1570
|
-
protected function storeProofPhoto(
|
|
1571
|
-
|
|
1572
|
-
UploadedFile|string $photo,
|
|
1573
|
-
string $disk,
|
|
1574
|
-
string $bucket,
|
|
1575
|
-
): File {
|
|
1571
|
+
protected function storeProofPhoto(Proof $proof, UploadedFile|string $photo, string $disk, string $bucket): File
|
|
1572
|
+
{
|
|
1576
1573
|
$isFile = $photo instanceof UploadedFile;
|
|
1577
1574
|
$contents = $isFile
|
|
1578
1575
|
? file_get_contents($photo->getRealPath())
|
|
@@ -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
|
}
|