@fleetbase/fleetops-engine 0.4.0 → 0.4.1
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/admin/navigator-app.hbs +3 -3
- package/addon/components/admin/visibility-controls.hbs +4 -4
- package/addon/components/cell/driver-name.hbs +1 -1
- package/addon/components/contact-form-panel.hbs +15 -15
- package/addon/components/contact-form-panel.js +5 -1
- package/addon/components/contact-panel/details.hbs +7 -7
- package/addon/components/contact-panel.hbs +2 -2
- package/addon/components/display-place.hbs +2 -2
- package/addon/components/driver-card.hbs +1 -1
- package/addon/components/driver-form-panel.hbs +36 -29
- package/addon/components/driver-form-panel.js +5 -1
- package/addon/components/driver-panel/details.hbs +10 -10
- package/addon/components/driver-panel.hbs +5 -5
- package/addon/components/fleet-driver-listing.hbs +5 -5
- package/addon/components/fleet-form-panel.hbs +16 -16
- package/addon/components/fleet-form-panel.js +5 -1
- package/addon/components/fleet-panel/details.hbs +7 -7
- package/addon/components/fleet-panel/driver-listing.hbs +5 -5
- package/addon/components/fleet-panel/driver-listing.js +6 -0
- package/addon/components/fleet-panel/vehicle-listing.hbs +5 -5
- package/addon/components/fleet-panel/vehicle-listing.js +6 -0
- package/addon/components/fleet-vehicle-listing.hbs +5 -5
- package/addon/components/fuel-report-form-panel.hbs +16 -16
- package/addon/components/fuel-report-form-panel.js +5 -1
- package/addon/components/fuel-report-panel/details.hbs +11 -11
- package/addon/components/fuel-report-panel.hbs +3 -3
- package/addon/components/global-search.hbs +1 -1
- package/addon/components/horizontal-route.hbs +1 -1
- package/addon/components/integrated-order-details.hbs +13 -13
- package/addon/components/issue-form-panel.hbs +25 -25
- package/addon/components/issue-form-panel.js +6 -1
- package/addon/components/issue-panel/details.hbs +11 -11
- package/addon/components/issue-panel.hbs +3 -3
- package/addon/components/layout/fleet-ops-sidebar.hbs +2 -2
- package/addon/components/layout/fleet-ops-sidebar.js +28 -12
- package/addon/components/live-map-drawer/driver-listing.hbs +1 -1
- package/addon/components/live-map-drawer/driver-listing.js +16 -10
- package/addon/components/live-map-drawer/place-listing.hbs +1 -1
- package/addon/components/live-map-drawer/place-listing.js +12 -7
- package/addon/components/live-map-drawer/vehicle-listing.hbs +1 -1
- package/addon/components/live-map-drawer/vehicle-listing.js +15 -9
- package/addon/components/live-map.hbs +10 -92
- package/addon/components/live-map.js +29 -24
- package/addon/components/map-container/toolbar/visibility-control-panel.hbs +9 -9
- package/addon/components/map-container/toolbar/zones-panel.hbs +10 -10
- package/addon/components/map-container/toolbar.hbs +6 -6
- package/addon/components/modals/assign-driver.hbs +2 -2
- package/addon/components/modals/clone-config-form.hbs +2 -2
- package/addon/components/modals/contact-details.hbs +6 -6
- package/addon/components/modals/contact-form.hbs +11 -11
- package/addon/components/modals/driver-assign-order.hbs +2 -2
- package/addon/components/modals/driver-assign-vehicle.hbs +2 -2
- package/addon/components/modals/driver-assign-vendor.hbs +2 -2
- package/addon/components/modals/driver-details.hbs +14 -14
- package/addon/components/modals/driver-form.hbs +18 -18
- package/addon/components/modals/edit-meta-form.hbs +2 -2
- package/addon/components/modals/entity-form.hbs +16 -16
- package/addon/components/modals/entity-meta-field-prompt.hbs +1 -1
- package/addon/components/modals/fleet-details.hbs +6 -6
- package/addon/components/modals/fleet-form.hbs +8 -8
- package/addon/components/modals/fuel-report-details.hbs +9 -9
- package/addon/components/modals/fuel-report-form.hbs +8 -8
- package/addon/components/modals/group-details.hbs +4 -4
- package/addon/components/modals/group-form.hbs +6 -6
- package/addon/components/modals/install-prompt.hbs +2 -3
- package/addon/components/modals/issue-details.hbs +8 -8
- package/addon/components/modals/issue-from.hbs +21 -21
- package/addon/components/modals/map-field-form.hbs +2 -2
- package/addon/components/modals/map-field-group-form.hbs +1 -1
- package/addon/components/modals/map-layer-form.hbs +10 -10
- package/addon/components/modals/meta-field-form.hbs +2 -2
- package/addon/components/modals/meta-field-group-form.hbs +1 -1
- package/addon/components/modals/new-order-config.hbs +4 -4
- package/addon/components/modals/order-assign-driver.hbs +2 -2
- package/addon/components/modals/order-config-new-status.hbs +1 -1
- package/addon/components/modals/order-event.hbs +2 -2
- package/addon/components/modals/order-form.hbs +8 -8
- package/addon/components/modals/order-import.hbs +8 -8
- package/addon/components/modals/order-label.hbs +1 -1
- package/addon/components/modals/order-new-activity.hbs +10 -10
- package/addon/components/modals/order-route-form.hbs +17 -17
- package/addon/components/modals/place-assign-vendor.hbs +2 -2
- package/addon/components/modals/place-details.hbs +13 -13
- package/addon/components/modals/place-form.hbs +15 -15
- package/addon/components/modals/policy-form.hbs +5 -5
- package/addon/components/modals/role-form.hbs +3 -3
- package/addon/components/modals/select-payment-method.hbs +1 -1
- package/addon/components/modals/service-area-form.hbs +8 -8
- package/addon/components/modals/set-password.hbs +3 -3
- package/addon/components/modals/uninstall-prompt.hbs +2 -3
- package/addon/components/modals/user-form.hbs +9 -9
- package/addon/components/modals/vehicle-details.hbs +41 -41
- package/addon/components/modals/vehicle-form.hbs +73 -73
- package/addon/components/modals/vendor-details.hbs +10 -10
- package/addon/components/modals/vendor-form.hbs +36 -36
- package/addon/components/modals/view-service-area.hbs +1 -1
- package/addon/components/modals/zone-form.hbs +6 -6
- package/addon/components/order/header.hbs +11 -11
- package/addon/components/order/place-card.hbs +2 -2
- package/addon/components/order/schedule-card.hbs +6 -6
- package/addon/components/order/schedule-card.js +11 -7
- package/addon/components/order-config/activity-flow-editor.hbs +14 -14
- package/addon/components/order-config/activity-flow-editor.js +11 -11
- package/addon/components/order-config/details-editor.hbs +9 -9
- package/addon/components/order-config/entities-editor.hbs +13 -13
- package/addon/components/order-config/entities-editor.js +2 -2
- package/addon/components/order-config/fields-editor.hbs +14 -14
- package/addon/components/order-config/fields-editor.js +13 -12
- package/addon/components/order-config.hbs +9 -9
- package/addon/components/order-config.js +12 -11
- package/addon/components/order-list-overlay.hbs +14 -14
- package/addon/components/place-form-panel.hbs +18 -18
- package/addon/components/place-form-panel.js +6 -1
- package/addon/components/place-panel/details.hbs +10 -10
- package/addon/components/place-panel.hbs +2 -2
- package/addon/components/route-list.hbs +2 -2
- package/addon/components/settings-window.hbs +5 -5
- package/addon/components/settings-window.js +2 -1
- package/addon/components/vehicle-form-panel.hbs +27 -27
- package/addon/components/vehicle-form-panel.js +7 -2
- package/addon/components/vehicle-panel/details.hbs +7 -7
- package/addon/components/vehicle-panel.hbs +4 -4
- package/addon/components/vendor-form-panel/create-form.hbs +34 -33
- package/addon/components/vendor-form-panel/create-form.js +6 -2
- package/addon/components/vendor-form-panel/edit-form.hbs +27 -27
- package/addon/components/vendor-form-panel/edit-form.js +1 -0
- package/addon/components/vendor-form-panel.hbs +6 -6
- package/addon/components/vendor-form-panel.js +6 -1
- package/addon/components/vendor-panel/details.hbs +10 -10
- package/addon/components/vendor-panel.hbs +3 -3
- package/addon/components/widget/fleet-ops-quickstart.hbs +2 -2
- package/addon/components/widget/fleet-ops-quickstart.js +1 -0
- package/addon/components/widget/key-metrics.hbs +12 -12
- package/addon/components/widget/live-order-map.hbs +4 -4
- package/addon/components/widget/recent-orders.hbs +4 -4
- package/addon/components/widget/transactions.hbs +4 -4
- package/addon/controllers/management/contacts/index/edit.js +10 -3
- package/addon/controllers/management/contacts/index/new.js +7 -0
- package/addon/controllers/management/contacts/index.js +23 -16
- package/addon/controllers/management/drivers/index/edit.js +10 -3
- package/addon/controllers/management/drivers/index/new.js +7 -0
- package/addon/controllers/management/drivers/index.js +33 -19
- package/addon/controllers/management/fleets/index/edit.js +10 -3
- package/addon/controllers/management/fleets/index/new.js +7 -0
- package/addon/controllers/management/fleets/index.js +24 -17
- package/addon/controllers/management/fuel-reports/index/edit.js +10 -3
- package/addon/controllers/management/fuel-reports/index/new.js +7 -0
- package/addon/controllers/management/fuel-reports/index.js +20 -13
- package/addon/controllers/management/issues/index/edit.js +10 -3
- package/addon/controllers/management/issues/index/new.js +8 -0
- package/addon/controllers/management/issues/index.js +22 -15
- package/addon/controllers/management/places/index/edit.js +10 -3
- package/addon/controllers/management/places/index/new.js +7 -0
- package/addon/controllers/management/places/index.js +27 -20
- package/addon/controllers/management/vehicles/index/edit.js +10 -3
- package/addon/controllers/management/vehicles/index/new.js +7 -0
- package/addon/controllers/management/vehicles/index.js +22 -15
- package/addon/controllers/management/vendors/index/edit.js +10 -3
- package/addon/controllers/management/vendors/index/new.js +7 -0
- package/addon/controllers/management/vendors/index.js +23 -16
- package/addon/controllers/operations/orders/index/new.js +110 -25
- package/addon/controllers/operations/orders/index/view.js +40 -16
- package/addon/controllers/operations/orders/index.js +34 -27
- package/addon/controllers/operations/scheduler/index.js +3 -2
- package/addon/controllers/operations/service-rates/index/edit.js +9 -1
- package/addon/controllers/operations/service-rates/index/new.js +9 -1
- package/addon/controllers/operations/service-rates/index.js +16 -9
- package/addon/routes/management/places/index.js +1 -1
- package/addon/routes/operations/orders/index/view.js +2 -14
- package/addon/services/driver-actions.js +9 -8
- package/addon/services/vehicle-actions.js +2 -1
- package/addon/templates/management/contacts/index.hbs +6 -6
- package/addon/templates/management/drivers/index.hbs +6 -6
- package/addon/templates/management/fleets/index.hbs +6 -6
- package/addon/templates/management/fuel-reports/index.hbs +7 -7
- package/addon/templates/management/index.hbs +17 -17
- package/addon/templates/management/issues/index.hbs +6 -6
- package/addon/templates/management/places/index.hbs +6 -6
- package/addon/templates/management/vehicles/index.hbs +6 -6
- package/addon/templates/management/vendors/index.hbs +6 -6
- package/addon/templates/operations/orders/index/config/types.hbs +3 -3
- package/addon/templates/operations/orders/index/config.hbs +3 -4
- package/addon/templates/operations/orders/index/new.hbs +72 -72
- package/addon/templates/operations/orders/index/view.hbs +147 -53
- package/addon/templates/operations/orders/index.hbs +13 -13
- package/addon/templates/operations/scheduler/index.hbs +3 -3
- package/addon/templates/operations/service-rates/index/new.hbs +79 -81
- package/addon/templates/operations/service-rates/index.hbs +6 -6
- package/composer.json +2 -2
- package/extension.json +1 -1
- package/package.json +3 -1
- package/server/resources/views/labels/default.php +40 -18
- package/server/resources/views/labels/waypoint-label.php +126 -0
- package/server/src/Http/Controllers/Api/v1/OrderController.php +1 -1
- package/server/src/Http/Resources/v1/Entity.php +2 -2
- package/server/src/Http/Resources/v1/Payload.php +11 -30
- package/server/src/Http/Resources/v1/Place.php +3 -3
- package/server/src/Http/Resources/v1/Waypoint.php +101 -0
- package/server/src/Models/Payload.php +39 -0
- package/server/src/Models/Place.php +5 -2
- package/server/src/Models/Waypoint.php +15 -3
- package/translations/en-us.yaml +1341 -3
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
use Fleetbase\Support\Utils;
|
|
3
|
+
?>
|
|
4
|
+
|
|
5
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
7
|
+
|
|
8
|
+
<head>
|
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
10
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
11
|
+
<title><?= $company->name ?? ($waypoint->internal_id ?? $waypoint->public_id) ?> Waypoint Label</title>
|
|
12
|
+
</head>
|
|
13
|
+
|
|
14
|
+
<style>
|
|
15
|
+
.group:after {
|
|
16
|
+
content: "";
|
|
17
|
+
display: table;
|
|
18
|
+
clear: both;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.places--display-address {
|
|
22
|
+
display: block;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.places--display-address .line {
|
|
26
|
+
display: block;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.places--display-address .line:first-child {
|
|
30
|
+
display: block;
|
|
31
|
+
font-weight: 600;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.places--display-address .line .segment {
|
|
35
|
+
display: inline-block;
|
|
36
|
+
margin-right: 3px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.places--display-address .line .segment:not(:last-child):after {
|
|
40
|
+
content: ", ";
|
|
41
|
+
}
|
|
42
|
+
</style>
|
|
43
|
+
|
|
44
|
+
<body bgcolor="#f7f7f7">
|
|
45
|
+
<div style="width: 420px; border: 2px #414141 solid; margin: auto;">
|
|
46
|
+
<div class="group" style="border-bottom: 1px #414141 solid; overflow: hidden;">
|
|
47
|
+
<div style="float: left; width: 130px; height: 120px; border-right: 1px #414141 solid; text-align: center; padding: 10px; box-sizing: border-box;">
|
|
48
|
+
<img src="data:image/png;base64,<?= Utils::notEmpty($trackingNumber) ? $trackingNumber->qr_code : $order->trackingNumber->qr_code ?>" style="width: 100%; height: 100%; object-fit: cover;">
|
|
49
|
+
</div>
|
|
50
|
+
<div style="margin-top: 10px;">
|
|
51
|
+
<span style="padding-left: 10px; font-size: 18px; font-weight: bold;"><?= strtoupper($company->name) ?></span>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<?php if ($dropoff) { ?>
|
|
56
|
+
<div class="group">
|
|
57
|
+
<div style="padding: 15px;" class="group" style="border-bottom: 1px #414141 solid; padding: 15px;">
|
|
58
|
+
<div style="float: left; display: inline-block; margin-right: 15px; font-weight: bold;">
|
|
59
|
+
ADDRESS:
|
|
60
|
+
</div>
|
|
61
|
+
<div class="places--display-address" style="float: left; display: inline-block">
|
|
62
|
+
<div class="line"><strong><?= $dropoff->name ?></strong></div>
|
|
63
|
+
<div class="line"><?= $dropoff->street1 ?></div>
|
|
64
|
+
<?php if (!empty($dropoff->street2)) { ?>
|
|
65
|
+
<div class="line"><?= $dropoff->street2 ?></div>
|
|
66
|
+
<?php } ?>
|
|
67
|
+
<div class="line">
|
|
68
|
+
<?php if (!empty($dropoff->neighborhood)) { ?>
|
|
69
|
+
<span class="segment"><?= $dropoff->neighborhood ?></span>
|
|
70
|
+
<?php } ?>
|
|
71
|
+
<?php if (!empty($dropoff->district)) { ?>
|
|
72
|
+
<span class="segment"><?= $dropoff->district ?></span>
|
|
73
|
+
<?php } ?>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="line">
|
|
76
|
+
<?php if (!empty($dropoff->postal_code)) { ?>
|
|
77
|
+
<span class="segment"><?= $dropoff->postal_code ?></span>
|
|
78
|
+
<?php } ?>
|
|
79
|
+
<?php if (!empty($dropoff->city)) { ?>
|
|
80
|
+
<span class="segment"><?= $dropoff->city ?></span>
|
|
81
|
+
<?php } ?>
|
|
82
|
+
<?php if (!empty($dropoff->province)) { ?>
|
|
83
|
+
<span class="segment"><?= $dropoff->province ?></span>
|
|
84
|
+
<?php } ?>
|
|
85
|
+
<?php if (!empty($dropoff->country)) { ?>
|
|
86
|
+
<span class="segment"><?= $dropoff->country ?></span>
|
|
87
|
+
<?php } ?>
|
|
88
|
+
</div>
|
|
89
|
+
<?php if (!empty($dropoff->phone_number)) { ?>
|
|
90
|
+
<div class="line"><?= $dropoff->phone_number ?></div>
|
|
91
|
+
<?php } ?>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
<?php } ?>
|
|
96
|
+
<?php if ($entities) { ?>
|
|
97
|
+
<div class="group">
|
|
98
|
+
<div style="padding: 15px;" class="group" style="border-bottom: 1px #414141 solid; padding: 15px;">
|
|
99
|
+
<div style="float: left; display: inline-block; margin-right: 15px">
|
|
100
|
+
<?php foreach ($entities as $entity) { ?>
|
|
101
|
+
<div class="line">
|
|
102
|
+
<strong>
|
|
103
|
+
<?php
|
|
104
|
+
if (data_get($entity, 'name')) {
|
|
105
|
+
echo strtoupper(data_get($entity, 'name') . ' - ' . data_get($entity, 'internal_id', ''));
|
|
106
|
+
} else {
|
|
107
|
+
echo strtoupper('ITEM - ' . data_get($entity, 'internal_id', ''));
|
|
108
|
+
}
|
|
109
|
+
?>
|
|
110
|
+
</strong>
|
|
111
|
+
</div>
|
|
112
|
+
<?php } ?>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
<?php } ?>
|
|
117
|
+
<div class="group">
|
|
118
|
+
<div style="text-align: center; padding: 15px 0px; border-top: 1px #414141 solid;">
|
|
119
|
+
<img src="data:image/png;base64,<?= isset($trackingNumber) ? $trackingNumber->barcode : $order->trackingNumber->barcode ?>" style="height: 90px; margin-top: 10px;">
|
|
120
|
+
<div><?= strtoupper(isset($trackingNumber) ? $trackingNumber->tracking_number : $order->trackingNumber->tracking_number) ?></div>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
</body>
|
|
125
|
+
|
|
126
|
+
</html>
|
|
@@ -1114,7 +1114,7 @@ class OrderController extends Controller
|
|
|
1114
1114
|
{
|
|
1115
1115
|
$code = $request->input('code');
|
|
1116
1116
|
$data = $request->input('data', []);
|
|
1117
|
-
$rawData = $request->input('raw_data'
|
|
1117
|
+
$rawData = $request->input('raw_data');
|
|
1118
1118
|
$type = $subjectId ? strtok($subjectId, '_') : null;
|
|
1119
1119
|
|
|
1120
1120
|
try {
|
|
@@ -31,8 +31,8 @@ class Entity extends FleetbaseResource
|
|
|
31
31
|
'internal_id' => $this->internal_id,
|
|
32
32
|
'name' => $this->name,
|
|
33
33
|
'type' => $this->type,
|
|
34
|
-
'payload' => $this->when(Http::isPublicRequest(), data_get($this, 'payload.public_id')
|
|
35
|
-
'destination' => $this->when(Http::isPublicRequest(), data_get($this, 'destination.public_id')
|
|
34
|
+
'payload' => $this->when(Http::isPublicRequest(), data_get($this, 'payload.public_id')),
|
|
35
|
+
'destination' => $this->when(Http::isPublicRequest(), data_get($this, 'destination.public_id')),
|
|
36
36
|
'customer' => $this->setCustomerType(Resolve::resourceForMorph($this->customer_type, $this->customer_uuid)),
|
|
37
37
|
'supplier' => $this->whenLoaded('supplier', $this->supplier),
|
|
38
38
|
'tracking_number' => new TrackingNumber($this->trackingNumber),
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
4
|
|
|
5
|
-
use Fleetbase\FleetOps\Models\Waypoint;
|
|
6
5
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
7
6
|
use Fleetbase\Support\Http;
|
|
8
7
|
|
|
@@ -25,12 +24,12 @@ class Payload extends FleetbaseResource
|
|
|
25
24
|
'pickup_uuid' => $this->when(Http::isInternalRequest(), $this->pickup_uuid),
|
|
26
25
|
'dropoff_uuid' => $this->when(Http::isInternalRequest(), $this->dropoff_uuid),
|
|
27
26
|
'return_uuid' => $this->when(Http::isInternalRequest(), $this->return_uuid),
|
|
28
|
-
'current_waypoint' => $this->when(!Http::isInternalRequest() && $this->currentWaypoint, data_get($this, 'currentWaypoint.public_id')
|
|
27
|
+
'current_waypoint' => $this->when(!Http::isInternalRequest() && $this->currentWaypoint, data_get($this, 'currentWaypoint.public_id')),
|
|
29
28
|
'pickup' => new Place($this->pickup),
|
|
30
29
|
'dropoff' => new Place($this->dropoff),
|
|
31
30
|
'return' => new Place($this->return),
|
|
32
|
-
'waypoints' => $this->
|
|
33
|
-
'entities' => Entity::collection($this->entities
|
|
31
|
+
'waypoints' => Waypoint::collection($this->getWaypoints()),
|
|
32
|
+
'entities' => Entity::collection($this->entities),
|
|
34
33
|
'cod_amount' => $this->cod_amount ?? null,
|
|
35
34
|
'cod_currency' => $this->cod_currency ?? null,
|
|
36
35
|
'cod_payment_method' => $this->cod_payment_method ?? null,
|
|
@@ -40,6 +39,14 @@ class Payload extends FleetbaseResource
|
|
|
40
39
|
];
|
|
41
40
|
}
|
|
42
41
|
|
|
42
|
+
private function getWaypoints(): ?\Illuminate\Support\Collection
|
|
43
|
+
{
|
|
44
|
+
return $this->waypoints->map(function ($waypoint) {
|
|
45
|
+
$waypoint->payload_uuid = $this->uuid;
|
|
46
|
+
return $waypoint;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
43
50
|
/**
|
|
44
51
|
* Transform the resource into an webhook payload.
|
|
45
52
|
*
|
|
@@ -62,30 +69,4 @@ class Payload extends FleetbaseResource
|
|
|
62
69
|
'created_at' => $this->created_at,
|
|
63
70
|
];
|
|
64
71
|
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Returns the correct pickup resource if applicable.
|
|
68
|
-
*
|
|
69
|
-
* @param \Illuminate\Support\Collection $waypoints
|
|
70
|
-
*
|
|
71
|
-
* @return Illuminate\Http\Resources\Json\JsonResource|null
|
|
72
|
-
*/
|
|
73
|
-
public function waypoints($waypoints)
|
|
74
|
-
{
|
|
75
|
-
if (empty($waypoints)) {
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
$waypoints = $waypoints->map(
|
|
80
|
-
function ($place) {
|
|
81
|
-
$waypoint = Waypoint::where(['payload_uuid' => $this->uuid, 'place_uuid' => $place->uuid])->without(['place'])->with(['trackingNumber'])->first();
|
|
82
|
-
$place->tracking_number = new TrackingNumber($waypoint->trackingNumber);
|
|
83
|
-
$place->order = $waypoint->order;
|
|
84
|
-
|
|
85
|
-
return $place;
|
|
86
|
-
}
|
|
87
|
-
)->sortBy('order');
|
|
88
|
-
|
|
89
|
-
return Place::collection($waypoints ?? []);
|
|
90
|
-
}
|
|
91
72
|
}
|
|
@@ -23,7 +23,7 @@ class Place extends FleetbaseResource
|
|
|
23
23
|
'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
|
|
24
24
|
'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
|
|
25
25
|
'name' => $this->name,
|
|
26
|
-
'location' => $this
|
|
26
|
+
'location' => data_get($this, 'location', new Point(0, 0)),
|
|
27
27
|
'address' => $this->address,
|
|
28
28
|
'address_html' => $this->when(Http::isInternalRequest(), $this->address_html),
|
|
29
29
|
'street1' => $this->street1 ?? null,
|
|
@@ -40,8 +40,8 @@ class Place extends FleetbaseResource
|
|
|
40
40
|
'phone' => $this->phone ?? null,
|
|
41
41
|
'owner' => $this->when(!Http::isInternalRequest(), Resolve::resourceForMorph($this->owner_type, $this->owner_uuid)),
|
|
42
42
|
'tracking_number' => $this->whenLoaded('trackingNumber', $this->trackingNumber),
|
|
43
|
-
'type' => $this->type
|
|
44
|
-
'meta' => $this
|
|
43
|
+
'type' => $this->type,
|
|
44
|
+
'meta' => data_get($this, 'meta', []),
|
|
45
45
|
'updated_at' => $this->updated_at,
|
|
46
46
|
'created_at' => $this->created_at,
|
|
47
47
|
];
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Http\Resources\v1;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\Waypoint as WaypointModel;
|
|
6
|
+
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
7
|
+
use Fleetbase\Support\Http;
|
|
8
|
+
use Fleetbase\Support\Resolve;
|
|
9
|
+
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
10
|
+
|
|
11
|
+
class Waypoint extends FleetbaseResource
|
|
12
|
+
{
|
|
13
|
+
/**
|
|
14
|
+
* Transform the resource into an array.
|
|
15
|
+
*
|
|
16
|
+
* @param \Illuminate\Http\Request $request
|
|
17
|
+
*
|
|
18
|
+
* @return array
|
|
19
|
+
*/
|
|
20
|
+
public function toArray($request)
|
|
21
|
+
{
|
|
22
|
+
$waypoint = $this->getWaypoint();
|
|
23
|
+
|
|
24
|
+
return [
|
|
25
|
+
'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
|
|
26
|
+
'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
|
|
27
|
+
'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
|
|
28
|
+
'waypoint_public_id' => $this->when(Http::isInternalRequest(), $waypoint->public_id),
|
|
29
|
+
'order' => $waypoint->order,
|
|
30
|
+
'tracking' => $waypoint->tracking,
|
|
31
|
+
'status' => $waypoint->status,
|
|
32
|
+
'status_code' => $waypoint->status_code,
|
|
33
|
+
'name' => $this->name,
|
|
34
|
+
'location' => data_get($this, 'location', new Point(0, 0)),
|
|
35
|
+
'address' => $this->address,
|
|
36
|
+
'address_html' => $this->when(Http::isInternalRequest(), $this->address_html),
|
|
37
|
+
'street1' => $this->street1 ?? null,
|
|
38
|
+
'street2' => $this->street2 ?? null,
|
|
39
|
+
'city' => $this->city ?? null,
|
|
40
|
+
'province' => $this->province ?? null,
|
|
41
|
+
'postal_code' => $this->postal_code ?? null,
|
|
42
|
+
'neighborhood' => $this->neighborhood ?? null,
|
|
43
|
+
'district' => $this->district ?? null,
|
|
44
|
+
'building' => $this->building ?? null,
|
|
45
|
+
'security_access_code' => $this->security_access_code ?? null,
|
|
46
|
+
'country' => $this->country ?? null,
|
|
47
|
+
'country_name' => $this->when(Http::isInternalRequest(), $this->country_name),
|
|
48
|
+
'phone' => $this->phone ?? null,
|
|
49
|
+
'owner' => $this->when(!Http::isInternalRequest(), Resolve::resourceForMorph($this->owner_type, $this->owner_uuid)),
|
|
50
|
+
'tracking_number' => $this->whenLoaded('trackingNumber', $waypoint->trackingNumber),
|
|
51
|
+
'type' => $this->type,
|
|
52
|
+
'meta' => data_get($this, 'meta', []),
|
|
53
|
+
'updated_at' => $this->updated_at,
|
|
54
|
+
'created_at' => $this->created_at,
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Finds the waypoint got a payload and place
|
|
60
|
+
*
|
|
61
|
+
* @return WaypointModel|null
|
|
62
|
+
*/
|
|
63
|
+
private function getWaypoint(): ?WaypointModel
|
|
64
|
+
{
|
|
65
|
+
return WaypointModel::where(['payload_uuid' => $this->payload_uuid, 'place_uuid' => $this->uuid])->without(['place'])->with(['trackingNumber'])->first();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Transform the resource into an webhook payload.
|
|
70
|
+
*
|
|
71
|
+
* @return array
|
|
72
|
+
*/
|
|
73
|
+
public function toWebhookPayload()
|
|
74
|
+
{
|
|
75
|
+
return [
|
|
76
|
+
'id' => $this->public_id,
|
|
77
|
+
'internal_id' => $this->internal_id,
|
|
78
|
+
'name' => $this->name,
|
|
79
|
+
'type' => data_get($this, 'type'),
|
|
80
|
+
'destination' => $this->destination ? $this->destination->public_id : null,
|
|
81
|
+
'customer' => Resolve::resourceForMorph($this->customer_type, $this->customer_uuid),
|
|
82
|
+
'tracking_number' => new TrackingNumber($this->trackingNumber),
|
|
83
|
+
'description' => data_get($this, 'description'),
|
|
84
|
+
'photo_url' => data_get($this, 'photo_url'),
|
|
85
|
+
'length' => data_get($this, 'length'),
|
|
86
|
+
'width' => data_get($this, 'width'),
|
|
87
|
+
'height' => data_get($this, 'height'),
|
|
88
|
+
'dimensions_unit' => data_get($this, 'dimensions_unit'),
|
|
89
|
+
'weight' => data_get($this, 'weight'),
|
|
90
|
+
'weight_unit' => data_get($this, 'weight_unit'),
|
|
91
|
+
'declared_value' => data_get($this, 'declared_value'),
|
|
92
|
+
'price' => data_get($this, 'price'),
|
|
93
|
+
'sale_price' => data_get($this, 'sale_price'),
|
|
94
|
+
'sku' => data_get($this, 'sku'),
|
|
95
|
+
'currency' => data_get($this, 'currency'),
|
|
96
|
+
'meta' => $this->meta ?? [],
|
|
97
|
+
'updated_at' => $this->updated_at,
|
|
98
|
+
'created_at' => $this->created_at,
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -216,6 +216,14 @@ class Payload extends Model
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
+
// Validate destination actually exists
|
|
220
|
+
if (isset($attributes['destination_uuid']) && Place::where('uuid', $attributes['destination_uuid'])->doesntExist()) {
|
|
221
|
+
$validDestination = $this->_findCorrectDestinationForEntity($attributes);
|
|
222
|
+
if ($validDestination) {
|
|
223
|
+
$attributes['destination_uuid'] = $validDestination->uuid;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
219
227
|
$entity = new Entity($attributes);
|
|
220
228
|
$this->entities()->save($entity);
|
|
221
229
|
}
|
|
@@ -249,6 +257,14 @@ class Payload extends Model
|
|
|
249
257
|
}
|
|
250
258
|
}
|
|
251
259
|
|
|
260
|
+
// Validate destination actually exists
|
|
261
|
+
if (isset($attributes['destination_uuid']) && Place::where('uuid', $attributes['destination_uuid'])->doesntExist()) {
|
|
262
|
+
$validDestination = $this->_findCorrectDestinationForEntity($attributes);
|
|
263
|
+
if ($validDestination) {
|
|
264
|
+
$attributes['destination_uuid'] = $validDestination->uuid;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
252
268
|
Entity::insertGetUuid($attributes, $this);
|
|
253
269
|
}
|
|
254
270
|
|
|
@@ -334,7 +350,9 @@ class Payload extends Model
|
|
|
334
350
|
if (Str::isUuid($placeUuid) && isset($attributes['uuid']) && $placeUuid !== $attributes['uuid']) {
|
|
335
351
|
$place = Place::where('uuid', $placeUuid)->first();
|
|
336
352
|
|
|
353
|
+
// set the original destination uuid in meta
|
|
337
354
|
if ($place instanceof Place) {
|
|
355
|
+
$place->updateMeta('_console_destination_uuid', $attributes['uuid']);
|
|
338
356
|
$place->updateMeta('search_uuid', $attributes['uuid']);
|
|
339
357
|
}
|
|
340
358
|
}
|
|
@@ -399,6 +417,18 @@ class Payload extends Model
|
|
|
399
417
|
return $this->refresh()->load(['waypoints']);
|
|
400
418
|
}
|
|
401
419
|
|
|
420
|
+
public function _findCorrectDestinationForEntity($entityAttributes = []): ?Place
|
|
421
|
+
{
|
|
422
|
+
$destinationId = Utils::get($entityAttributes, 'destination_uuid');
|
|
423
|
+
|
|
424
|
+
$destination = Place::where('meta->search_uuid', $destinationId)->first();
|
|
425
|
+
if (!$destination) {
|
|
426
|
+
$destination = Place::where('meta->_console_destination_uuid', $destinationId)->first();
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
return $destination;
|
|
430
|
+
}
|
|
431
|
+
|
|
402
432
|
/**
|
|
403
433
|
* Get the payload pickup point or the first waypoint.
|
|
404
434
|
*
|
|
@@ -783,6 +813,15 @@ class Payload extends Model
|
|
|
783
813
|
}
|
|
784
814
|
}
|
|
785
815
|
|
|
816
|
+
// Validate destination actually exists
|
|
817
|
+
if (isset($attributes['destination_uuid']) && Place::where('uuid', $attributes['destination_uuid'])->doesntExist()) {
|
|
818
|
+
$destination = $this->_findCorrectDestinationForEntity($attributes);
|
|
819
|
+
|
|
820
|
+
if ($destination instanceof Place) {
|
|
821
|
+
return $destination;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
|
|
786
825
|
return null;
|
|
787
826
|
}
|
|
788
827
|
}
|
|
@@ -447,9 +447,12 @@ class Place extends Model
|
|
|
447
447
|
return static::createFromCoordinates($place, $attributes, $saveInstance);
|
|
448
448
|
}
|
|
449
449
|
|
|
450
|
+
// Get uuid if set
|
|
451
|
+
$uuid = data_get($place, 'uuid');
|
|
452
|
+
|
|
450
453
|
// If $place has a valid uuid and a matching Place object exists, return the uuid
|
|
451
|
-
if (
|
|
452
|
-
return $place
|
|
454
|
+
if (Str::isUuid($uuid) && $place = Place::where('uuid', $uuid)->first()) {
|
|
455
|
+
return $place;
|
|
453
456
|
}
|
|
454
457
|
|
|
455
458
|
// Otherwise, create a new Place object with the given attributes
|
|
@@ -83,16 +83,28 @@ class Waypoint extends Model
|
|
|
83
83
|
return $this->pdfLabel()->stream();
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
/**
|
|
87
|
+
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
88
|
+
*/
|
|
89
|
+
public function entities()
|
|
90
|
+
{
|
|
91
|
+
return $this->hasMany(Entity::class, 'destination_uuid', 'place_uuid')->where('payload_uuid', $this->payload_uuid);
|
|
92
|
+
}
|
|
93
|
+
|
|
86
94
|
/**
|
|
87
95
|
* The html for the shipment label.
|
|
88
96
|
*/
|
|
89
97
|
public function label()
|
|
90
98
|
{
|
|
91
|
-
$this->load(['trackingNumber', 'company', 'place']);
|
|
99
|
+
$this->load(['trackingNumber', 'company', 'place', 'entities']);
|
|
100
|
+
|
|
101
|
+
// $entities = Entity::where(['payload_uuid' => $this->payload_uuid, 'destination_uuid' => $this->place_uuid])->get();
|
|
102
|
+
// dd($entities, );
|
|
92
103
|
|
|
93
|
-
return view('labels/
|
|
94
|
-
'
|
|
104
|
+
return view('fleetops::labels/waypoint-label', [
|
|
105
|
+
'waypoint' => $this,
|
|
95
106
|
'dropoff' => $this->place,
|
|
107
|
+
'entities' => $this->entities()->get(),
|
|
96
108
|
'trackingNumber' => $this->trackingNumber,
|
|
97
109
|
'company' => $this->company,
|
|
98
110
|
])->render();
|