@fleetbase/fleetops-engine 0.4.3 → 0.4.5
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/contact-form-panel.hbs +1 -0
- package/addon/components/driver-panel.hbs +1 -0
- package/addon/components/edit-order-route-panel.hbs +183 -0
- package/addon/components/edit-order-route-panel.js +265 -0
- package/addon/components/fleet-form-panel.hbs +1 -0
- package/addon/components/fleet-panel.hbs +1 -0
- package/addon/components/fleet-panel.js +3 -3
- package/addon/components/fuel-report-form-panel.hbs +1 -0
- package/addon/components/fuel-report-panel.hbs +1 -0
- package/addon/components/issue-form-panel.hbs +1 -0
- package/addon/components/issue-panel.hbs +1 -0
- package/addon/components/map-container/toolbar.hbs +2 -2
- package/addon/components/modals/order-route-form.hbs +1 -1
- package/addon/components/place-form-panel.hbs +1 -0
- package/addon/components/place-panel.hbs +1 -0
- package/addon/components/vehicle-form-panel.hbs +1 -0
- package/addon/components/vehicle-panel.hbs +1 -0
- package/addon/components/vendor-form-panel.hbs +1 -0
- package/addon/components/vendor-panel.hbs +1 -0
- package/addon/components/widget/fleet-ops-key-metrics.hbs +19 -0
- package/addon/components/widget/fleet-ops-key-metrics.js +85 -0
- package/addon/controllers/operations/orders/index/new.js +66 -22
- package/addon/controllers/operations/orders/index/view.js +131 -126
- package/addon/controllers/operations/orders/index.js +1 -1
- package/addon/engine.js +18 -12
- package/addon/routes/operations/orders/index/view.js +1 -1
- package/addon/services/context-panel.js +6 -0
- package/addon/styles/fleetops-engine.css +7 -2
- package/addon/templates/operations/orders/index/new.hbs +390 -58
- package/addon/templates/operations/orders/index/view.hbs +135 -105
- package/addon/templates/operations/service-rates/index/new.hbs +3 -1
- package/app/components/widget/{issues.js → fleet-ops-key-metrics.js} +1 -1
- package/composer.json +6 -6
- package/extension.json +1 -1
- package/package.json +5 -6
- package/server/src/Casts/MultiPolygon.php +3 -3
- package/server/src/Casts/Point.php +2 -2
- package/server/src/Casts/Polygon.php +3 -3
- package/server/src/Console/Commands/DispatchAdhocOrders.php +1 -1
- package/server/src/Events/DriverSimulatedLocationChanged.php +1 -1
- package/server/src/Flow/Activity.php +12 -0
- package/server/src/Flow/Config.php +7 -0
- package/server/src/Flow/Logic.php +7 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +61 -21
- package/server/src/Http/Controllers/Api/v1/OrderController.php +5 -3
- package/server/src/Http/Controllers/Api/v1/PlaceController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/ZoneController.php +1 -1
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +17 -4
- package/server/src/Http/Controllers/Internal/v1/GeocoderController.php +2 -2
- package/server/src/Http/Controllers/Internal/v1/MetricsController.php +6 -50
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +13 -2
- package/server/src/Http/Controllers/Internal/v1/PlaceController.php +1 -1
- package/server/src/Http/Filter/PlaceFilter.php +1 -1
- package/server/src/Http/Resources/v1/Driver.php +1 -1
- package/server/src/Http/Resources/v1/FuelReport.php +1 -1
- package/server/src/Http/Resources/v1/Issue.php +1 -1
- package/server/src/Http/Resources/v1/Order.php +3 -0
- package/server/src/Http/Resources/v1/Payload.php +1 -0
- package/server/src/Http/Resources/v1/Place.php +1 -1
- package/server/src/Http/Resources/v1/PurchaseRate.php +2 -1
- package/server/src/Http/Resources/v1/ServiceQuote.php +1 -0
- package/server/src/Http/Resources/v1/ServiceQuoteItem.php +29 -0
- package/server/src/Http/Resources/v1/TrackingStatus.php +1 -1
- package/server/src/Http/Resources/v1/Vehicle.php +1 -1
- package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +1 -1
- package/server/src/Http/Resources/v1/Waypoint.php +2 -4
- package/server/src/Integrations/Lalamove/LalamoveDeliveryStop.php +2 -2
- package/server/src/Jobs/SimulateWaypointReached.php +2 -2
- package/server/src/Models/Contact.php +6 -18
- package/server/src/Models/Driver.php +8 -20
- package/server/src/Models/Fleet.php +6 -25
- package/server/src/Models/FuelReport.php +1 -1
- package/server/src/Models/Issue.php +1 -1
- package/server/src/Models/Order.php +31 -19
- package/server/src/Models/Payload.php +7 -7
- package/server/src/Models/Place.php +16 -16
- package/server/src/Models/Position.php +1 -1
- package/server/src/Models/ServiceArea.php +14 -14
- package/server/src/Models/TrackingNumber.php +1 -1
- package/server/src/Models/TrackingStatus.php +1 -1
- package/server/src/Models/Vehicle.php +7 -19
- package/server/src/Models/VehicleDeviceEvent.php +1 -1
- package/server/src/Models/Vendor.php +8 -25
- package/server/src/Models/Waypoint.php +6 -6
- package/server/src/Models/Zone.php +8 -8
- package/server/src/Observers/DriverObserver.php +7 -2
- package/server/src/Observers/TrackingNumberObserver.php +1 -1
- package/server/src/Rules/ResolvablePoint.php +1 -1
- package/server/src/Support/Encoding/Polyline.php +1 -1
- package/server/src/Support/OSRM.php +1 -1
- package/server/src/Support/Utils.php +60 -60
- package/server/src/Traits/HasTrackingNumber.php +3 -3
- package/server/src/routes.php +2 -4
- package/translations/en-us.yaml +10 -2
- package/addon/components/widget/fleet-ops-quickstart.hbs +0 -40
- package/addon/components/widget/fleet-ops-quickstart.js +0 -59
- package/addon/components/widget/issues.hbs +0 -1
- package/addon/components/widget/key-metrics.hbs +0 -121
- package/addon/components/widget/key-metrics.js +0 -46
- package/addon/components/widget/live-order-map.hbs +0 -59
- package/addon/components/widget/live-order-map.js +0 -11
- package/addon/components/widget/recent-orders.hbs +0 -35
- package/addon/components/widget/recent-orders.js +0 -24
- package/addon/components/widget/transaction-earnings.hbs +0 -1
- package/addon/components/widget/transactions.hbs +0 -36
- package/addon/components/widget/transactions.js +0 -29
- package/addon/components/widget/weekly-orders.hbs +0 -1
- package/addon/components/widget/weekly-orders.js +0 -3
- package/app/components/widget/key-metrics.js +0 -1
- package/app/components/widget/live-order-map.js +0 -1
- package/app/components/widget/recent-orders.js +0 -1
- package/app/components/widget/transaction-earnings.js +0 -1
- package/app/components/widget/transactions.js +0 -1
- package/app/components/widget/weekly-orders.js +0 -1
|
@@ -17,6 +17,7 @@ use Fleetbase\FleetOps\Support\Utils;
|
|
|
17
17
|
use Fleetbase\Http\Controllers\Controller;
|
|
18
18
|
use Fleetbase\Http\Requests\SwitchOrganizationRequest;
|
|
19
19
|
use Fleetbase\Http\Resources\Organization;
|
|
20
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
20
21
|
use Fleetbase\Models\Company;
|
|
21
22
|
use Fleetbase\Models\CompanyUser;
|
|
22
23
|
use Fleetbase\Models\User;
|
|
@@ -24,7 +25,6 @@ use Fleetbase\Models\UserDevice;
|
|
|
24
25
|
use Fleetbase\Models\VerificationCode;
|
|
25
26
|
use Fleetbase\Support\Auth;
|
|
26
27
|
use Geocoder\Laravel\Facades\Geocoder;
|
|
27
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
28
28
|
use Illuminate\Http\Request;
|
|
29
29
|
use Illuminate\Support\Arr;
|
|
30
30
|
use Illuminate\Support\Carbon;
|
|
@@ -376,7 +376,7 @@ class DriverController extends Controller
|
|
|
376
376
|
}
|
|
377
377
|
|
|
378
378
|
// Get the user's company for this driver profile
|
|
379
|
-
$company =
|
|
379
|
+
$company = static::getDriverCompanyFromUser($user);
|
|
380
380
|
|
|
381
381
|
// Get driver record
|
|
382
382
|
$driver = Driver::where(
|
|
@@ -414,7 +414,7 @@ class DriverController extends Controller
|
|
|
414
414
|
}
|
|
415
415
|
|
|
416
416
|
// Get the user's company for this driver profile
|
|
417
|
-
$company =
|
|
417
|
+
$company = static::getDriverCompanyFromUser($user);
|
|
418
418
|
|
|
419
419
|
// generate verification token
|
|
420
420
|
try {
|
|
@@ -425,6 +425,7 @@ class DriverController extends Controller
|
|
|
425
425
|
if (app()->bound('sentry')) {
|
|
426
426
|
app('sentry')->captureException($e);
|
|
427
427
|
}
|
|
428
|
+
|
|
428
429
|
return response()->apiError('Unable to send SMS Verification code.');
|
|
429
430
|
}
|
|
430
431
|
|
|
@@ -464,7 +465,7 @@ class DriverController extends Controller
|
|
|
464
465
|
}
|
|
465
466
|
|
|
466
467
|
// Get the user's company for this driver profile
|
|
467
|
-
$company =
|
|
468
|
+
$company = static::getDriverCompanyFromUser($user);
|
|
468
469
|
|
|
469
470
|
// get driver record
|
|
470
471
|
$driver = Driver::where(
|
|
@@ -488,19 +489,33 @@ class DriverController extends Controller
|
|
|
488
489
|
}
|
|
489
490
|
|
|
490
491
|
/**
|
|
491
|
-
*
|
|
492
|
+
* Gets the current organization/company for the driver
|
|
493
|
+
*
|
|
494
|
+
* @param string $id
|
|
495
|
+
* @param \Illuminate\Http\Request $request
|
|
496
|
+
* @return \Fleetbase\Http\Resources\Organization
|
|
492
497
|
*/
|
|
493
|
-
public
|
|
498
|
+
public function currentOrganization(string $id, Request $request)
|
|
494
499
|
{
|
|
495
|
-
|
|
496
|
-
$
|
|
500
|
+
try {
|
|
501
|
+
$driver = Driver::findRecordOrFail($id);
|
|
502
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
503
|
+
return response()->apiError('Driver resource not found.', 404);
|
|
497
504
|
}
|
|
498
505
|
|
|
499
|
-
|
|
500
|
-
|
|
506
|
+
// Get the driver user account
|
|
507
|
+
$user = $driver->getUser();
|
|
508
|
+
if (!$user) {
|
|
509
|
+
return response()->apiError('Driver has not user account.');
|
|
501
510
|
}
|
|
502
511
|
|
|
503
|
-
|
|
512
|
+
// Get the user account company
|
|
513
|
+
$company = Flow::getCompanySessionForUser($user);
|
|
514
|
+
if (!$company) {
|
|
515
|
+
return response()->apiError('No company found for this driver.');
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return new Organization($company);
|
|
504
519
|
}
|
|
505
520
|
|
|
506
521
|
/**
|
|
@@ -548,23 +563,26 @@ class DriverController extends Controller
|
|
|
548
563
|
);
|
|
549
564
|
}
|
|
550
565
|
|
|
551
|
-
//
|
|
566
|
+
// Get the next organization
|
|
552
567
|
$company = Company::where('public_id', $nextOrganization)->first();
|
|
553
568
|
|
|
554
569
|
if ($company->uuid === $driver->user->company_uuid) {
|
|
555
|
-
return response()->
|
|
556
|
-
'error' => 'Driver is already on this organizations session',
|
|
557
|
-
]);
|
|
570
|
+
return response()->apiError('Driver is already on this organizations session.');
|
|
558
571
|
}
|
|
559
572
|
|
|
560
573
|
if (!CompanyUser::where(['user_uuid' => $driver->user_uuid, 'company_uuid' => $company->uuid])->exists()) {
|
|
561
|
-
return response()->
|
|
562
|
-
'errors' => ['You do not belong to this organization'],
|
|
563
|
-
]);
|
|
574
|
+
return response()->apiError('You do not belong to this organization');
|
|
564
575
|
}
|
|
565
576
|
|
|
566
|
-
|
|
567
|
-
|
|
577
|
+
// Get the driver user account
|
|
578
|
+
$user = $driver->getUser();
|
|
579
|
+
if (!$user) {
|
|
580
|
+
return response()->apiError('Driver has not user account.');
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
// Assign user to company and update their session
|
|
584
|
+
$user->assignCompany($company);
|
|
585
|
+
Auth::setSession($user);
|
|
568
586
|
|
|
569
587
|
return new Organization($company);
|
|
570
588
|
}
|
|
@@ -700,7 +718,13 @@ class DriverController extends Controller
|
|
|
700
718
|
return response()->json($route);
|
|
701
719
|
}
|
|
702
720
|
|
|
703
|
-
|
|
721
|
+
/**
|
|
722
|
+
* Get the drivers current company using their user account.
|
|
723
|
+
*
|
|
724
|
+
* @param \Fleetbase\Models\User $user
|
|
725
|
+
* @return \Fleetbase\Models\Company|null
|
|
726
|
+
*/
|
|
727
|
+
private static function getDriverCompanyFromUser(User $user): ?Company
|
|
704
728
|
{
|
|
705
729
|
// company defaults to null
|
|
706
730
|
$company = null;
|
|
@@ -719,4 +743,20 @@ class DriverController extends Controller
|
|
|
719
743
|
|
|
720
744
|
return $company;
|
|
721
745
|
}
|
|
746
|
+
|
|
747
|
+
/**
|
|
748
|
+
* Patches phone number with international code.
|
|
749
|
+
*/
|
|
750
|
+
private static function phone(string $phone = null): string
|
|
751
|
+
{
|
|
752
|
+
if ($phone === null) {
|
|
753
|
+
$phone = request()->input('phone');
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
if (!Str::startsWith($phone, '+')) {
|
|
757
|
+
$phone = '+' . $phone;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
return $phone;
|
|
761
|
+
}
|
|
722
762
|
}
|
|
@@ -422,6 +422,8 @@ class OrderController extends Controller
|
|
|
422
422
|
public function query(Request $request)
|
|
423
423
|
{
|
|
424
424
|
$results = Order::queryWithRequest($request, function (&$query, $request) {
|
|
425
|
+
$query->where('company_uuid', session('company'));
|
|
426
|
+
|
|
425
427
|
if ($request->has('payload')) {
|
|
426
428
|
$query->whereHas('payload', function ($q) use ($request) {
|
|
427
429
|
$q->where('public_id', $request->input('payload'));
|
|
@@ -806,7 +808,7 @@ class OrderController extends Controller
|
|
|
806
808
|
$driver->current_job_uuid = $order->uuid;
|
|
807
809
|
$driver->save();
|
|
808
810
|
|
|
809
|
-
/** @var \
|
|
811
|
+
/** @var \Fleetbase\LaravelMysqlSpatial\Types\Point */
|
|
810
812
|
$location = $order->getLastLocation();
|
|
811
813
|
|
|
812
814
|
// set first destination for payload
|
|
@@ -888,7 +890,7 @@ class OrderController extends Controller
|
|
|
888
890
|
return new OrderResource($order);
|
|
889
891
|
}
|
|
890
892
|
|
|
891
|
-
/** @var \
|
|
893
|
+
/** @var \Fleetbase\LaravelMysqlSpatial\Types\Point */
|
|
892
894
|
$location = $order->getLastLocation();
|
|
893
895
|
|
|
894
896
|
// if is multi drop order and no current destination set it
|
|
@@ -1021,7 +1023,7 @@ class OrderController extends Controller
|
|
|
1021
1023
|
|
|
1022
1024
|
$order->notifyCompleted();
|
|
1023
1025
|
|
|
1024
|
-
/** @var \
|
|
1026
|
+
/** @var \Fleetbase\LaravelMysqlSpatial\Types\Point */
|
|
1025
1027
|
$location = $order->getLastLocation();
|
|
1026
1028
|
|
|
1027
1029
|
$order->setStatus($activity['code']);
|
|
@@ -9,10 +9,10 @@ use Fleetbase\FleetOps\Http\Resources\v1\Place as PlaceResource;
|
|
|
9
9
|
use Fleetbase\FleetOps\Models\Place;
|
|
10
10
|
use Fleetbase\FleetOps\Support\Utils;
|
|
11
11
|
use Fleetbase\Http\Controllers\Controller;
|
|
12
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
12
13
|
use Geocoder\Laravel\Facades\Geocoder;
|
|
13
14
|
use Geocoder\Provider\GoogleMapsPlaces\GoogleMapsPlaces;
|
|
14
15
|
use Geocoder\Query\GeocodeQuery;
|
|
15
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
16
16
|
use Http\Adapter\Guzzle7\Client;
|
|
17
17
|
use Illuminate\Http\Request;
|
|
18
18
|
use Illuminate\Support\Facades\DB;
|
|
@@ -9,7 +9,7 @@ use Fleetbase\FleetOps\Http\Resources\v1\ServiceArea as ServiceAreaResource;
|
|
|
9
9
|
use Fleetbase\FleetOps\Models\ServiceArea;
|
|
10
10
|
use Fleetbase\FleetOps\Support\Utils;
|
|
11
11
|
use Fleetbase\Http\Controllers\Controller;
|
|
12
|
-
use
|
|
12
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
13
13
|
use Illuminate\Http\Request;
|
|
14
14
|
|
|
15
15
|
class ServiceAreaController extends Controller
|
|
@@ -10,7 +10,7 @@ use Fleetbase\FleetOps\Models\Order;
|
|
|
10
10
|
use Fleetbase\FleetOps\Models\TrackingStatus;
|
|
11
11
|
use Fleetbase\FleetOps\Support\Utils;
|
|
12
12
|
use Fleetbase\Http\Controllers\Controller;
|
|
13
|
-
use
|
|
13
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
14
14
|
use Illuminate\Http\Request;
|
|
15
15
|
|
|
16
16
|
class TrackingStatusController extends Controller
|
|
@@ -9,7 +9,7 @@ use Fleetbase\FleetOps\Http\Resources\v1\Zone as ZoneResource;
|
|
|
9
9
|
use Fleetbase\FleetOps\Models\Zone;
|
|
10
10
|
use Fleetbase\FleetOps\Support\Utils;
|
|
11
11
|
use Fleetbase\Http\Controllers\Controller;
|
|
12
|
-
use
|
|
12
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
13
13
|
use Illuminate\Http\Request;
|
|
14
14
|
|
|
15
15
|
class ZoneController extends Controller
|
|
@@ -13,13 +13,13 @@ use Fleetbase\FleetOps\Models\Driver;
|
|
|
13
13
|
use Fleetbase\FleetOps\Models\Order;
|
|
14
14
|
use Fleetbase\FleetOps\Support\Utils;
|
|
15
15
|
use Fleetbase\Http\Requests\ExportRequest;
|
|
16
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
16
17
|
use Fleetbase\Models\CompanyUser;
|
|
17
18
|
use Fleetbase\Models\Invite;
|
|
18
19
|
use Fleetbase\Models\User;
|
|
19
20
|
use Fleetbase\Models\VerificationCode;
|
|
20
21
|
use Fleetbase\Notifications\UserInvited;
|
|
21
22
|
use Fleetbase\Support\Auth;
|
|
22
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
23
23
|
use Illuminate\Http\Request;
|
|
24
24
|
use Illuminate\Support\Facades\DB;
|
|
25
25
|
use Illuminate\Support\Facades\Validator;
|
|
@@ -94,8 +94,9 @@ class DriverController extends FleetOpsController
|
|
|
94
94
|
->filter()
|
|
95
95
|
->toArray();
|
|
96
96
|
|
|
97
|
-
//
|
|
98
|
-
$
|
|
97
|
+
// Get current session company
|
|
98
|
+
$company = Auth::getCompany();
|
|
99
|
+
$input['company_uuid'] = session('company', $company->uuid);
|
|
99
100
|
$input['user_uuid'] = $existingUser->uuid;
|
|
100
101
|
$input['slug'] = $existingUser->slug;
|
|
101
102
|
|
|
@@ -107,6 +108,18 @@ class DriverController extends FleetOpsController
|
|
|
107
108
|
// create the profile
|
|
108
109
|
$driverProfile = Driver::create($input);
|
|
109
110
|
|
|
111
|
+
// Assign user to company
|
|
112
|
+
if ($company) {
|
|
113
|
+
$existingUser->assignCompany($company);
|
|
114
|
+
|
|
115
|
+
// create company user
|
|
116
|
+
CompanyUser::create([
|
|
117
|
+
'user_uuid' => $existingUser->uuid,
|
|
118
|
+
'company_uuid' => $company->uuid,
|
|
119
|
+
'status' => $isOrganizationMember ? 'active' : 'pending'
|
|
120
|
+
]);
|
|
121
|
+
}
|
|
122
|
+
|
|
110
123
|
if (!$isOrganizationMember) {
|
|
111
124
|
// send invitation to user
|
|
112
125
|
$invitation = Invite::create([
|
|
@@ -159,7 +172,7 @@ class DriverController extends FleetOpsController
|
|
|
159
172
|
|
|
160
173
|
// Get current session company
|
|
161
174
|
$company = Auth::getCompany();
|
|
162
|
-
$userInput['company_uuid'] =
|
|
175
|
+
$userInput['company_uuid'] = session('company', $company->uuid);
|
|
163
176
|
|
|
164
177
|
// Create user account
|
|
165
178
|
$user = User::create($userInput);
|
|
@@ -22,11 +22,11 @@ class GeocoderController extends Controller
|
|
|
22
22
|
$query = $request->or(['coordinates', 'query']);
|
|
23
23
|
$single = $request->boolean('single');
|
|
24
24
|
|
|
25
|
-
/** @var \
|
|
25
|
+
/** @var \Fleetbase\LaravelMysqlSpatial\Types\Point $coordinates */
|
|
26
26
|
$coordinates = Utils::getPointFromCoordinates($query);
|
|
27
27
|
|
|
28
28
|
// if not a valid point error
|
|
29
|
-
if (!$coordinates instanceof \
|
|
29
|
+
if (!$coordinates instanceof \Fleetbase\LaravelMysqlSpatial\Types\Point) {
|
|
30
30
|
return response()->error('Invalid coordinates provided.');
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -8,6 +8,12 @@ use Illuminate\Http\Request;
|
|
|
8
8
|
|
|
9
9
|
class MetricsController extends Controller
|
|
10
10
|
{
|
|
11
|
+
/**
|
|
12
|
+
* Gets all key metrics for the current session.
|
|
13
|
+
*
|
|
14
|
+
* @param \Illuminate\Http\Request $request
|
|
15
|
+
* @return \Illuminate\Http\Response
|
|
16
|
+
*/
|
|
11
17
|
public function all(Request $request)
|
|
12
18
|
{
|
|
13
19
|
$start = $request->date('start');
|
|
@@ -22,54 +28,4 @@ class MetricsController extends Controller
|
|
|
22
28
|
|
|
23
29
|
return response()->json($data);
|
|
24
30
|
}
|
|
25
|
-
|
|
26
|
-
public function dashboard(Request $request)
|
|
27
|
-
{
|
|
28
|
-
$start = $request->date('start');
|
|
29
|
-
$end = $request->date('end');
|
|
30
|
-
$discover = $request->array('discover', []);
|
|
31
|
-
$metrics = [];
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
$metrics = Metrics::forCompany($request->user()->company, $start, $end)->with($discover)->get();
|
|
35
|
-
} catch (\Exception $e) {
|
|
36
|
-
return response()->error($e->getMessage());
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// metrics format map
|
|
40
|
-
$metricsFormats = [
|
|
41
|
-
'earnings' => 'money',
|
|
42
|
-
'fuel_costs' => 'money',
|
|
43
|
-
'total_distance_traveled' => 'meters',
|
|
44
|
-
];
|
|
45
|
-
|
|
46
|
-
// dashboard config
|
|
47
|
-
$dashboardConfig = [
|
|
48
|
-
[
|
|
49
|
-
'size' => 12,
|
|
50
|
-
'title' => 'Fleet-Ops Metrics',
|
|
51
|
-
'classList' => [],
|
|
52
|
-
'component' => null,
|
|
53
|
-
'queryParams' => [
|
|
54
|
-
'start' => ['component' => 'date-picker'],
|
|
55
|
-
'end' => ['component' => 'date-picker'],
|
|
56
|
-
],
|
|
57
|
-
'widgets' => collect($metrics)
|
|
58
|
-
->map(function ($value, $key) use ($metricsFormats) {
|
|
59
|
-
return [
|
|
60
|
-
'component' => 'count',
|
|
61
|
-
'options' => [
|
|
62
|
-
'format' => $metricsFormats[$key] ?? null,
|
|
63
|
-
'title' => str_replace('_', ' ', \Illuminate\Support\Str::title($key)),
|
|
64
|
-
'value' => $value,
|
|
65
|
-
],
|
|
66
|
-
];
|
|
67
|
-
})
|
|
68
|
-
->values()
|
|
69
|
-
->toArray(),
|
|
70
|
-
],
|
|
71
|
-
];
|
|
72
|
-
|
|
73
|
-
return response()->json(array_values($dashboardConfig));
|
|
74
|
-
}
|
|
75
31
|
}
|
|
@@ -82,6 +82,7 @@ class OrderController extends FleetOpsController
|
|
|
82
82
|
$payload = Utils::get($input, 'payload');
|
|
83
83
|
$waypoints = Utils::get($input, 'payload.waypoints');
|
|
84
84
|
$entities = Utils::get($input, 'payload.entities');
|
|
85
|
+
$uploads = Utils::get($input, 'files', []);
|
|
85
86
|
|
|
86
87
|
// save order route & payload with request input
|
|
87
88
|
$order
|
|
@@ -91,6 +92,16 @@ class OrderController extends FleetOpsController
|
|
|
91
92
|
->insertWaypoints($waypoints)
|
|
92
93
|
->insertEntities($entities);
|
|
93
94
|
|
|
95
|
+
// If order creation includes files assosciate each to this order
|
|
96
|
+
if ($uploads) {
|
|
97
|
+
$ids = collect($uploads)->pluck('uuid');
|
|
98
|
+
$files = File::whereIn('uuid', $ids)->get();
|
|
99
|
+
|
|
100
|
+
foreach ($files as $file) {
|
|
101
|
+
$file->setKey($order);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
94
105
|
// if it's integrated vendor order apply to meta
|
|
95
106
|
if ($isIntegratedVendorOrder) {
|
|
96
107
|
$order->updateMeta(
|
|
@@ -370,7 +381,7 @@ class OrderController extends FleetOpsController
|
|
|
370
381
|
$flow = $activity = Flow::getNextActivity($order);
|
|
371
382
|
|
|
372
383
|
/**
|
|
373
|
-
* @var \
|
|
384
|
+
* @var \Fleetbase\LaravelMysqlSpatial\Types\Point
|
|
374
385
|
*/
|
|
375
386
|
$location = $order->getLastLocation();
|
|
376
387
|
|
|
@@ -442,7 +453,7 @@ class OrderController extends FleetOpsController
|
|
|
442
453
|
}
|
|
443
454
|
|
|
444
455
|
/**
|
|
445
|
-
* @var \
|
|
456
|
+
* @var \Fleetbase\LaravelMysqlSpatial\Types\Point
|
|
446
457
|
*/
|
|
447
458
|
$location = $order->getLastLocation();
|
|
448
459
|
|
|
@@ -8,7 +8,7 @@ use Fleetbase\FleetOps\Models\Place;
|
|
|
8
8
|
use Fleetbase\FleetOps\Support\Geocoding;
|
|
9
9
|
use Fleetbase\Http\Requests\ExportRequest;
|
|
10
10
|
use Fleetbase\Http\Requests\Internal\BulkDeleteRequest;
|
|
11
|
-
use
|
|
11
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
12
12
|
use Illuminate\Http\Request;
|
|
13
13
|
use Illuminate\Support\Str;
|
|
14
14
|
use Maatwebsite\Excel\Facades\Excel;
|
|
@@ -6,7 +6,7 @@ use Fleetbase\FleetOps\Models\ServiceArea;
|
|
|
6
6
|
use Fleetbase\FleetOps\Models\Zone;
|
|
7
7
|
use Fleetbase\FleetOps\Support\Utils;
|
|
8
8
|
use Fleetbase\Http\Filter\Filter;
|
|
9
|
-
use
|
|
9
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Geometry;
|
|
10
10
|
|
|
11
11
|
class PlaceFilter extends Filter
|
|
12
12
|
{
|
|
@@ -4,8 +4,8 @@ namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Support\Utils;
|
|
6
6
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
7
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
7
8
|
use Fleetbase\Support\Http;
|
|
8
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
9
9
|
|
|
10
10
|
class Driver extends FleetbaseResource
|
|
11
11
|
{
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
6
7
|
use Fleetbase\Support\Http;
|
|
7
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
8
8
|
|
|
9
9
|
class FuelReport extends FleetbaseResource
|
|
10
10
|
{
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
6
7
|
use Fleetbase\Support\Http;
|
|
7
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
8
8
|
|
|
9
9
|
class Issue extends FleetbaseResource
|
|
10
10
|
{
|
|
@@ -4,6 +4,7 @@ namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Support\Utils;
|
|
6
6
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
7
|
+
use Fleetbase\Http\Resources\Comment;
|
|
7
8
|
use Fleetbase\Support\Http;
|
|
8
9
|
use Fleetbase\Support\Resolve;
|
|
9
10
|
|
|
@@ -43,6 +44,8 @@ class Order extends FleetbaseResource
|
|
|
43
44
|
'driver_assigned' => new Driver($this->driverAssigned()->without(['jobs', 'currentJob'])->first()),
|
|
44
45
|
'tracking_number' => new TrackingNumber($this->trackingNumber),
|
|
45
46
|
'tracking_statuses' => $this->whenLoaded('trackingStatuses', TrackingStatus::collection($this->trackingStatuses)),
|
|
47
|
+
'comments' => $this->when(Http::isInternalRequest(), Comment::collection($this->comments)),
|
|
48
|
+
'files' => $this->when(Http::isInternalRequest(), $this->files),
|
|
46
49
|
'purchase_rate' => new PurchaseRate($this->purchaseRate),
|
|
47
50
|
'notes' => $this->notes,
|
|
48
51
|
'type' => $this->type,
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
6
7
|
use Fleetbase\Support\Http;
|
|
7
8
|
use Fleetbase\Support\Resolve;
|
|
8
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
9
9
|
|
|
10
10
|
class Place extends FleetbaseResource
|
|
11
11
|
{
|
|
@@ -21,13 +21,14 @@ class PurchaseRate extends FleetbaseResource
|
|
|
21
21
|
'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
|
|
22
22
|
'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
|
|
23
23
|
'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
|
|
24
|
-
'service_quote' => $this->service_quote_id,
|
|
24
|
+
'service_quote' => $this->when(Http::isInternalRequest(), $this->serviceQuote(), $this->service_quote_id),
|
|
25
25
|
'order' => $this->order_id,
|
|
26
26
|
'customer' => $this->customer_id,
|
|
27
27
|
'transaction' => $this->transaction_id,
|
|
28
28
|
'amount' => $this->amount,
|
|
29
29
|
'currency' => $this->currency,
|
|
30
30
|
'status' => $this->status,
|
|
31
|
+
// 'type' => $this->when(Http::isInternalRequest(), 'service-rate'),
|
|
31
32
|
'updated_at' => $this->updated_at,
|
|
32
33
|
'created_at' => $this->created_at,
|
|
33
34
|
];
|
|
@@ -25,6 +25,7 @@ class ServiceQuote extends FleetbaseResource
|
|
|
25
25
|
'service_rate_name' => $this->when(Http::isInternalRequest(), data_get($this, 'serviceRate.name')),
|
|
26
26
|
'service_rate' => $this->when(Http::isPublicRequest(), data_get($this, 'serviceRate.public_id')),
|
|
27
27
|
'facilitator' => $this->when(Http::isPublicRequest(), data_get($this, 'integratedVendor.public_id')),
|
|
28
|
+
'items' => ServiceQuoteItem::collection($this->items),
|
|
28
29
|
'request_id' => $this->request_id,
|
|
29
30
|
'amount' => $this->amount,
|
|
30
31
|
'currency' => $this->currency,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\Support\Http;
|
|
7
|
+
|
|
8
|
+
class ServiceQuoteItem extends FleetbaseResource
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Transform the resource into an array.
|
|
12
|
+
*
|
|
13
|
+
* @param \Illuminate\Http\Request $request
|
|
14
|
+
*
|
|
15
|
+
* @return array
|
|
16
|
+
*/
|
|
17
|
+
public function toArray($request)
|
|
18
|
+
{
|
|
19
|
+
return [
|
|
20
|
+
'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
|
|
21
|
+
'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
|
|
22
|
+
'service_quote_uuid' => $this->when(Http::isInternalRequest(), $this->service_quote_uuid),
|
|
23
|
+
'amount' => $this->amount,
|
|
24
|
+
'currency' => $this->currency,
|
|
25
|
+
'details' => $this->details,
|
|
26
|
+
'code' => $this->code,
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -4,8 +4,8 @@ namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Support\Utils;
|
|
6
6
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
7
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
7
8
|
use Fleetbase\Support\Http;
|
|
8
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
9
9
|
|
|
10
10
|
class TrackingStatus extends FleetbaseResource
|
|
11
11
|
{
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
6
7
|
use Fleetbase\Support\Http;
|
|
7
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
8
8
|
|
|
9
9
|
class Vehicle extends FleetbaseResource
|
|
10
10
|
{
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
6
7
|
use Fleetbase\Support\Http;
|
|
7
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
8
8
|
|
|
9
9
|
class VehicleWithoutDriver extends FleetbaseResource
|
|
10
10
|
{
|
|
@@ -4,9 +4,9 @@ namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Models\Waypoint as WaypointModel;
|
|
6
6
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
7
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
7
8
|
use Fleetbase\Support\Http;
|
|
8
9
|
use Fleetbase\Support\Resolve;
|
|
9
|
-
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
10
10
|
|
|
11
11
|
class Waypoint extends FleetbaseResource
|
|
12
12
|
{
|
|
@@ -56,9 +56,7 @@ class Waypoint extends FleetbaseResource
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* Finds the waypoint got a payload and place
|
|
60
|
-
*
|
|
61
|
-
* @return WaypointModel|null
|
|
59
|
+
* Finds the waypoint got a payload and place.
|
|
62
60
|
*/
|
|
63
61
|
private function getWaypoint(): ?WaypointModel
|
|
64
62
|
{
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Integrations\Lalamove;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Models\Place;
|
|
6
|
-
use
|
|
7
|
-
use
|
|
6
|
+
use Fleetbase\LaravelMysqlSpatial\Eloquent\SpatialExpression;
|
|
7
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
8
8
|
use Illuminate\Support\Str;
|
|
9
9
|
|
|
10
10
|
class LalamoveDeliveryStop
|
|
@@ -4,7 +4,7 @@ namespace Fleetbase\FleetOps\Jobs;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Events\DriverSimulatedLocationChanged;
|
|
6
6
|
use Fleetbase\FleetOps\Models\Driver;
|
|
7
|
-
use
|
|
7
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
8
8
|
use Illuminate\Bus\Queueable;
|
|
9
9
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
10
10
|
use Illuminate\Foundation\Bus\Dispatchable;
|
|
@@ -28,7 +28,7 @@ class SimulateWaypointReached implements ShouldQueue
|
|
|
28
28
|
public Driver $driver;
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
* @var \
|
|
31
|
+
* @var \Fleetbase\LaravelMysqlSpatial\Types\Point the waypoint that the driver is simulated to have reached
|
|
32
32
|
*/
|
|
33
33
|
public Point $waypoint;
|
|
34
34
|
|