@fleetbase/fleetops-engine 0.4.15 → 0.4.17
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/.php-cs-fixer.php +2 -0
- package/addon/components/activity-event-selector.hbs +35 -0
- package/addon/components/activity-event-selector.js +85 -0
- package/addon/components/activity-form-panel.hbs +23 -0
- package/addon/components/activity-form-panel.js +90 -0
- package/addon/components/activity-logic-builder.hbs +80 -0
- package/addon/components/activity-logic-builder.js +260 -0
- package/addon/components/contact-form-panel.hbs +1 -1
- package/addon/components/contact-panel.hbs +1 -1
- package/addon/components/custom-entity-form-panel.hbs +43 -0
- package/addon/components/custom-entity-form-panel.js +129 -0
- package/addon/components/custom-field-form-panel/options-input.hbs +12 -0
- package/addon/components/custom-field-form-panel/options-input.js +139 -0
- package/addon/components/custom-field-form-panel.hbs +77 -0
- package/addon/components/custom-field-form-panel.js +144 -0
- package/addon/components/custom-field.hbs +63 -41
- package/addon/components/custom-field.js +123 -25
- package/addon/components/driver-form-panel.hbs +1 -1
- package/addon/components/driver-panel.hbs +1 -1
- package/addon/components/edit-order-route-panel.hbs +1 -1
- package/addon/components/fleet-form-panel.hbs +1 -1
- package/addon/components/fleet-panel.hbs +1 -1
- package/addon/components/fuel-report-form-panel.hbs +1 -1
- package/addon/components/fuel-report-panel.hbs +1 -1
- package/addon/components/issue-form-panel.hbs +1 -1
- package/addon/components/issue-panel.hbs +1 -1
- package/addon/components/joint-graph.hbs +1 -0
- package/addon/components/joint-graph.js +103 -0
- package/addon/components/layout/fleet-ops-sidebar.hbs +3 -3
- package/addon/components/layout/fleet-ops-sidebar.js +1 -0
- package/addon/components/live-map.js +71 -28
- package/addon/components/modals/new-custom-field-group.hbs +5 -0
- package/addon/components/modals/new-order-config.hbs +3 -3
- package/addon/components/modals/order-new-activity.hbs +1 -1
- package/addon/components/order-config-manager/activity-flow.hbs +11 -0
- package/addon/components/order-config-manager/activity-flow.js +964 -0
- package/addon/components/order-config-manager/custom-fields.hbs +50 -0
- package/addon/components/order-config-manager/custom-fields.js +276 -0
- package/addon/components/order-config-manager/details.hbs +23 -0
- package/addon/components/order-config-manager/details.js +97 -0
- package/addon/components/order-config-manager/entities.hbs +54 -0
- package/addon/components/order-config-manager/entities.js +227 -0
- package/addon/components/order-config-manager-overlay.hbs +26 -0
- package/addon/components/order-config-manager-overlay.js +60 -0
- package/addon/components/order-config-manager.hbs +15 -0
- package/addon/components/order-config-manager.js +285 -0
- package/addon/components/order-flow.hbs +1 -0
- package/addon/components/order-flow.js +3 -0
- package/addon/components/place-form-panel.hbs +1 -1
- package/addon/components/place-panel.hbs +1 -1
- package/addon/components/vehicle-form-panel.hbs +1 -1
- package/addon/components/vehicle-panel.hbs +1 -1
- package/addon/components/vendor-form-panel.hbs +1 -1
- package/addon/components/vendor-panel.hbs +1 -1
- package/addon/controllers/application.js +5 -1
- package/addon/controllers/operations/order-config.js +42 -0
- package/addon/controllers/operations/orders/index/new.js +125 -21
- package/addon/controllers/operations/orders/index/view.js +87 -4
- package/addon/controllers/operations/orders/index.js +2 -2
- package/addon/engine.js +10 -1
- package/addon/initializers/load-jointjs.js +16 -0
- package/addon/routes/application.js +1 -1
- package/addon/routes/operations/order-config.js +28 -0
- package/addon/routes/operations/orders/index/new.js +2 -3
- package/addon/routes/operations/orders/index/view.js +1 -1
- package/addon/routes.js +1 -0
- package/addon/services/context-panel.js +65 -3
- package/addon/styles/fleetops-engine.css +268 -0
- package/addon/templates/application.hbs +1 -1
- package/addon/templates/operations/order-config.hbs +55 -0
- package/addon/templates/operations/orders/index/new.hbs +98 -339
- package/addon/templates/operations/orders/index/view.hbs +36 -96
- package/addon/templates/operations/orders/index.hbs +0 -1
- package/addon/utils/apply-context-component-arguments.js +4 -2
- package/addon/utils/create-custom-entity.js +22 -0
- package/addon/utils/create-flow-activity.js +31 -0
- package/addon/utils/get-custom-field-type-map.js +34 -0
- package/app/components/activity-event-selector.js +1 -0
- package/app/components/activity-form-panel.js +1 -0
- package/app/components/activity-logic-builder.js +1 -0
- package/app/components/custom-entity-form-panel.js +1 -0
- package/app/components/custom-field-form-panel/options-input.js +1 -0
- package/app/components/custom-field-form-panel.js +1 -0
- package/app/components/joint-graph.js +1 -0
- package/app/components/modals/new-custom-field-group.js +1 -0
- package/app/components/order-config-manager/activity-flow.js +1 -0
- package/app/components/order-config-manager/custom-fields.js +1 -0
- package/app/components/order-config-manager/details.js +1 -0
- package/app/components/order-config-manager/entities.js +1 -0
- package/app/components/order-config-manager-overlay.js +1 -0
- package/app/components/order-config-manager.js +1 -0
- package/app/components/order-flow.js +1 -0
- package/app/controllers/operations/order-config.js +1 -0
- package/app/routes/operations/order-config.js +1 -0
- package/app/templates/operations/order-config.js +1 -0
- package/app/utils/create-custom-entity.js +1 -0
- package/app/utils/create-flow-activity.js +1 -0
- package/app/utils/get-custom-field-type-map.js +1 -0
- package/composer.json +4 -3
- package/config/environment.js +1 -0
- package/extension.json +1 -1
- package/index.js +20 -0
- package/package.json +7 -5
- package/server/migrations/2023_04_27_053456_create_contacts_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_drivers_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_entities_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_fleets_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_integrated_vendors_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_issues_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_orders_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_payloads_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_places_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_positions_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_proofs_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_routes_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_service_areas_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_service_rates_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_vehicles_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_vendors_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_waypoints_table.php +1 -2
- package/server/migrations/2023_04_27_053456_create_zones_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_companies_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_contacts_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_drivers_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_entities_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleet_drivers_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleets_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fuel_reports_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_integrated_vendors_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_issues_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_orders_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_payloads_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_places_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_positions_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_proofs_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_purchase_rates_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_routes_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_areas_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quote_items_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quotes_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_fees_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_parcel_fees_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rates_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_numbers_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_statuses_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vehicles_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vendors_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_waypoints_table.php +1 -2
- package/server/migrations/2023_04_27_053459_add_foreign_keys_to_zones_table.php +1 -2
- package/server/migrations/2023_09_14_074512_update_vehicles_table.php +1 -2
- package/server/migrations/2023_09_14_074619_create_vehicle_devices_table.php +35 -36
- package/server/migrations/2023_09_26_071205_add_online_column_to_vehicles_table.php +1 -2
- package/server/migrations/2023_09_26_083957_create_fleet_vehicles_table.php +1 -2
- package/server/migrations/2023_09_27_023757_add_column_to_fleets_table.php +1 -2
- package/server/migrations/2023_10_05_074811_update_vehicle.php +1 -2
- package/server/migrations/2023_10_25_093014_create_vehicle_device_events_table.php +1 -2
- package/server/migrations/2023_11_03_072503_refactor_issues_table_columns.php +1 -2
- package/server/migrations/2023_11_06_040645_refactor_fuel_reports_table.php +1 -2
- package/server/migrations/2023_11_09_041807_add_status_column_to_fuel_reports_table.php +1 -2
- package/server/migrations/2023_11_15_062814_add_comments_column_and_resolved_at_column_to_vehicle_device_events_table.php +1 -2
- package/server/migrations/2023_11_17_053001_add_category_uuid_to_entities_table.php +1 -2
- package/server/migrations/2023_11_28_074244_add_supplier_uuid_column_to_entities_table.php +1 -2
- package/server/migrations/2023_12_14_100209_add_meta_column_on_driver_table copy.php +1 -2
- package/server/migrations/2024_02_18_100209_add_avatar_url_columns_table.php +3 -4
- package/server/migrations/2024_02_27_093648_create_order_configs_table.php +43 -0
- package/server/migrations/2024_03_07_075508_add_order_config_uuid_column_to_orders_table.php +28 -0
- package/server/seeders/OrderConfigSeeder.php +151 -0
- package/server/src/Casts/OrderConfigEntities.php +53 -0
- package/server/src/Console/Commands/FixLegacyOrderConfigs.php +66 -0
- package/server/src/Events/DriverLocationChanged.php +1 -1
- package/server/src/Events/DriverSimulatedLocationChanged.php +1 -1
- package/server/src/Expansions/UserExpansion.php +4 -4
- package/server/src/Flow/Activity.php +232 -6
- package/server/src/Flow/Condition.php +84 -0
- package/server/src/Flow/Event.php +88 -0
- package/server/src/Flow/Flow.php +50 -0
- package/server/src/Flow/FlowResource.php +143 -0
- package/server/src/Flow/Logic.php +57 -1
- package/server/src/Http/Controllers/Api/v1/DriverController.php +2 -2
- package/server/src/Http/Controllers/Api/v1/IssueController.php +132 -0
- package/server/src/Http/Controllers/Api/v1/OrderController.php +130 -57
- package/server/src/Http/Controllers/Api/v1/OrganizationController.php +27 -0
- package/server/src/Http/Controllers/Api/v1/PlaceController.php +2 -3
- package/server/src/Http/Controllers/Controller.php +9 -0
- package/server/src/Http/Controllers/FleetOpsController.php +7 -0
- package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +5 -259
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +56 -35
- package/server/src/Http/Controllers/Internal/v1/SettingController.php +20 -0
- package/server/src/Http/Filter/OrderConfigFilter.php +13 -0
- package/server/src/Http/Requests/CreateIssueRequest.php +19 -0
- package/server/src/Http/Requests/UpdateIssueRequest.php +7 -0
- package/server/src/Http/Resources/v1/Order.php +3 -0
- package/server/src/Http/Resources/v1/Payload.php +1 -1
- package/server/src/Listeners/HandleOrderCanceled.php +8 -4
- package/server/src/Listeners/HandleOrderDispatched.php +14 -12
- package/server/src/Models/Order.php +527 -31
- package/server/src/Models/OrderConfig.php +419 -0
- package/server/src/Models/Payload.php +8 -7
- package/server/src/Notifications/OrderAssigned.php +1 -1
- package/server/src/Notifications/OrderCanceled.php +1 -1
- package/server/src/Notifications/OrderDispatchFailed.php +1 -1
- package/server/src/Notifications/OrderDispatched.php +1 -1
- package/server/src/Notifications/OrderPing.php +1 -1
- package/server/src/Providers/FleetOpsServiceProvider.php +3 -1
- package/server/src/Providers/NotificationServiceProvider.php +2 -1
- package/server/src/Support/Utils.php +17 -0
- package/server/src/Traits/HasTrackingNumber.php +9 -9
- package/server/src/routes.php +19 -11
- package/translations/en-us.yaml +137 -0
- package/server/src/Flow/Config.php +0 -7
- package/server/src/Support/Flow.php +0 -653
|
@@ -2,268 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
-
use Fleetbase\FleetOps\
|
|
6
|
-
use Fleetbase\FleetOps\Support\Flow;
|
|
7
|
-
use Fleetbase\FleetOps\Support\Utils;
|
|
8
|
-
use Fleetbase\Http\Controllers\Controller;
|
|
9
|
-
use Fleetbase\Models\Category;
|
|
10
|
-
use Fleetbase\Models\Extension;
|
|
11
|
-
use Fleetbase\Models\ExtensionInstall;
|
|
12
|
-
use Fleetbase\Models\Type;
|
|
13
|
-
use Illuminate\Http\Request;
|
|
14
|
-
use Illuminate\Support\Str;
|
|
5
|
+
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
15
6
|
|
|
16
|
-
class OrderConfigController extends
|
|
7
|
+
class OrderConfigController extends FleetOpsController
|
|
17
8
|
{
|
|
18
9
|
/**
|
|
19
|
-
*
|
|
10
|
+
* The resource to query.
|
|
20
11
|
*
|
|
21
|
-
* @
|
|
12
|
+
* @var string
|
|
22
13
|
*/
|
|
23
|
-
public
|
|
24
|
-
{
|
|
25
|
-
$key = $request->input('key');
|
|
26
|
-
$namespace = $request->input('namespace');
|
|
27
|
-
$single = $request->input('single', false);
|
|
28
|
-
$installedExtensions = [];
|
|
29
|
-
|
|
30
|
-
// get all installed order configs
|
|
31
|
-
$installed = ExtensionInstall::where('company_uuid', session('company'))
|
|
32
|
-
->whereHas(
|
|
33
|
-
'extension',
|
|
34
|
-
function ($query) {
|
|
35
|
-
$query->where('meta_type', 'order_config');
|
|
36
|
-
}
|
|
37
|
-
)
|
|
38
|
-
->with('extension')->get();
|
|
39
|
-
|
|
40
|
-
// morph installed into extensions
|
|
41
|
-
foreach ($installed as $install) {
|
|
42
|
-
$installedExtensions[] = $install->asExtension();
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// get authored extension installs
|
|
46
|
-
$authored = Extension::where(['author_uuid' => session('company'), 'meta_type' => 'order_config', 'status' => 'private'])->get();
|
|
47
|
-
|
|
48
|
-
// create array of configs
|
|
49
|
-
$configs = collect([...$installedExtensions, ...$authored]);
|
|
50
|
-
|
|
51
|
-
// if no installed configs always place default config
|
|
52
|
-
if ($configs->isEmpty()) {
|
|
53
|
-
$configs = $configs->merge(Flow::getAllDefaultOrderConfigs());
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// filter by key
|
|
57
|
-
if ($key) {
|
|
58
|
-
$configs = $configs->where('key', $key);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// filter by namespace
|
|
62
|
-
if ($namespace) {
|
|
63
|
-
$configs = $configs->where('namespace', $namespace);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if ($single) {
|
|
67
|
-
return response()->json($configs->first());
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return response()->json($configs->values()->toArray());
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Save an order extension, whether installed or authored.
|
|
75
|
-
*
|
|
76
|
-
* @return \Illuminate\Http\Response
|
|
77
|
-
*/
|
|
78
|
-
public function save(Request $request)
|
|
79
|
-
{
|
|
80
|
-
$data = $request->input('data', []);
|
|
81
|
-
$isInstalled = isset($data['installed']) && Utils::isTrue($data['installed']);
|
|
82
|
-
|
|
83
|
-
// if the extension is from installed
|
|
84
|
-
if ($isInstalled) {
|
|
85
|
-
// get the extension install record
|
|
86
|
-
$install = ExtensionInstall::where('uuid', $data['install_uuid'])->first();
|
|
87
|
-
|
|
88
|
-
// update install record
|
|
89
|
-
$overwrite = $install->overwrite ?? [];
|
|
90
|
-
$overwrite['name'] = $data['name'];
|
|
91
|
-
$overwrite['description'] = $data['description'];
|
|
92
|
-
|
|
93
|
-
// update json fields
|
|
94
|
-
$install->overwrite = $overwrite;
|
|
95
|
-
$install->meta = $data['meta'];
|
|
96
|
-
|
|
97
|
-
// save changes
|
|
98
|
-
$install->save();
|
|
99
|
-
|
|
100
|
-
return response()->json(['status' => 'OK']);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// get the extension record
|
|
104
|
-
$extension = Extension::where('uuid', $data['uuid'])->first();
|
|
105
|
-
|
|
106
|
-
// update extension record
|
|
107
|
-
$extension->name = $data['name'];
|
|
108
|
-
$extension->description = $data['description'];
|
|
109
|
-
$extension->meta = $data['meta'];
|
|
110
|
-
|
|
111
|
-
// save
|
|
112
|
-
$extension->save();
|
|
113
|
-
|
|
114
|
-
return response()->json(['status' => 'OK']);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Creates a new empty order configuration.
|
|
119
|
-
*
|
|
120
|
-
* @return \Illuminate\Http\Response
|
|
121
|
-
*/
|
|
122
|
-
public function new(Request $request)
|
|
123
|
-
{
|
|
124
|
-
$name = $request->input('name');
|
|
125
|
-
$description = $request->input('description');
|
|
126
|
-
$tags = $request->input('tags', []);
|
|
127
|
-
|
|
128
|
-
$company = Flow::getCompanySession();
|
|
129
|
-
$category = Category::where(['for' => 'extension', 'name' => 'Logistics'])->first();
|
|
130
|
-
$type = Type::where(['for' => 'extension', 'key' => 'config'])->first();
|
|
131
|
-
|
|
132
|
-
$orderConfig = Extension::create(
|
|
133
|
-
[
|
|
134
|
-
'author_uuid' => session('company'),
|
|
135
|
-
'category_uuid' => $category->uuid,
|
|
136
|
-
'type_uuid' => $type->uuid,
|
|
137
|
-
'name' => $name,
|
|
138
|
-
'description' => $description,
|
|
139
|
-
'display_name' => $name,
|
|
140
|
-
'key' => Str::slug($name),
|
|
141
|
-
'tags' => $tags,
|
|
142
|
-
'namespace' => Extension::createNamespace($company->slug, 'order-config', $name),
|
|
143
|
-
'version' => '0.0.1',
|
|
144
|
-
'core_service' => 0,
|
|
145
|
-
'meta' => ['flow' => Flow::getDefaultOrderFlow()],
|
|
146
|
-
'meta_type' => 'order_config',
|
|
147
|
-
'config' => [],
|
|
148
|
-
'status' => 'private',
|
|
149
|
-
]
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
return response()->json($orderConfig);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Clones an order configuration into a new configuration.
|
|
157
|
-
*
|
|
158
|
-
* @return \Illuminate\Http\Response
|
|
159
|
-
*/
|
|
160
|
-
public function clone(Request $request)
|
|
161
|
-
{
|
|
162
|
-
$name = $request->input('name');
|
|
163
|
-
$description = $request->input('description');
|
|
164
|
-
$id = $request->input('id');
|
|
165
|
-
$installed = $request->input('installed', false);
|
|
166
|
-
$company = Flow::getCompanySession();
|
|
167
|
-
|
|
168
|
-
if (!$id) {
|
|
169
|
-
return response()->json(
|
|
170
|
-
[
|
|
171
|
-
'errors' => ['Extension attempted to clone not found'],
|
|
172
|
-
],
|
|
173
|
-
400
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// if the extension is from installed
|
|
178
|
-
if ($installed) {
|
|
179
|
-
// get the extension install record
|
|
180
|
-
$install = ExtensionInstall::where('uuid', $id)->first();
|
|
181
|
-
|
|
182
|
-
// replicate the install
|
|
183
|
-
$clonedInstall = $install->replicate();
|
|
184
|
-
$clonedInstall->id = null;
|
|
185
|
-
$clonedInstall->uuid = Extension::generateUuid();
|
|
186
|
-
$clonedInstall->overwrite = [
|
|
187
|
-
'name' => $name,
|
|
188
|
-
'display_name' => $name,
|
|
189
|
-
'description' => $description,
|
|
190
|
-
'key' => Str::slug($name),
|
|
191
|
-
'namespace' => Extension::createNamespace($company->slug, 'order-config', $name, Str::random(5)),
|
|
192
|
-
];
|
|
193
|
-
|
|
194
|
-
// save clone
|
|
195
|
-
$clonedInstall->save();
|
|
196
|
-
|
|
197
|
-
return response()->json($clonedInstall->asExtension());
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// get the extension record
|
|
201
|
-
$extension = Extension::where('uuid', $id)->first();
|
|
202
|
-
|
|
203
|
-
// replicate the extension record
|
|
204
|
-
$clonedExtension = $extension->replicate();
|
|
205
|
-
$clonedExtension->id = null;
|
|
206
|
-
$clonedExtension->uuid = Extension::generateUuid();
|
|
207
|
-
$clonedExtension->public_id = Extension::generatePublicId('ext');
|
|
208
|
-
$clonedExtension->name = $name;
|
|
209
|
-
$clonedExtension->display_name = $name;
|
|
210
|
-
$clonedExtension->description = $description;
|
|
211
|
-
$clonedExtension->key = Str::slug($name);
|
|
212
|
-
$clonedExtension->namespace = Extension::createNamespace($company->slug, 'order-config', $name, Str::random(5));
|
|
213
|
-
$clonedExtension->status = 'private';
|
|
214
|
-
|
|
215
|
-
// save clone
|
|
216
|
-
$clonedExtension->save();
|
|
217
|
-
|
|
218
|
-
return response()->json($clonedExtension);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Pull all dynamically created meta fields throughout orders of a specific type.
|
|
223
|
-
*
|
|
224
|
-
* @return \Illuminate\Http\Response
|
|
225
|
-
*/
|
|
226
|
-
public function getDynamicMetaFields(Request $request)
|
|
227
|
-
{
|
|
228
|
-
$type = $request->input('type', 'transport');
|
|
229
|
-
$orders = Order::select('meta')->where('type', $type)->whereNull('deleted_at')->get();
|
|
230
|
-
$dynamicFields = collect();
|
|
231
|
-
|
|
232
|
-
foreach ($orders as $order) {
|
|
233
|
-
$dynamicFields = $dynamicFields->merge(array_keys($order->meta));
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
return response()->json($dynamicFields->unique()->values());
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Pull all dynamically created meta fields throughout orders of a specific type.
|
|
241
|
-
*
|
|
242
|
-
* @return \Illuminate\Http\Response
|
|
243
|
-
*/
|
|
244
|
-
public function delete(string $id)
|
|
245
|
-
{
|
|
246
|
-
$extension = Extension::where(['uuid' => $id, 'author_uuid' => session('company'), 'meta_type' => 'order_config'])->first();
|
|
247
|
-
|
|
248
|
-
if ($extension) {
|
|
249
|
-
$extension->delete();
|
|
250
|
-
|
|
251
|
-
return response()->json(['status' => 'OK', 'deleted' => $extension->uuid]);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
$installedExtension = ExtensionInstall::where(['uuid' => $id, 'company_uuid' => session('company')])->first();
|
|
255
|
-
|
|
256
|
-
if ($installedExtension) {
|
|
257
|
-
$installedExtension->delete();
|
|
258
|
-
|
|
259
|
-
return response()->json(['status' => 'OK', 'deleted' => $installedExtension->uuid]);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
return response()->json(
|
|
263
|
-
[
|
|
264
|
-
'errors' => 'Unable to uninstall order configuration',
|
|
265
|
-
],
|
|
266
|
-
400
|
|
267
|
-
);
|
|
268
|
-
}
|
|
14
|
+
public $resource = 'order-config';
|
|
269
15
|
}
|
|
@@ -6,6 +6,7 @@ use Fleetbase\Exceptions\FleetbaseRequestValidationException;
|
|
|
6
6
|
use Fleetbase\FleetOps\Events\OrderDispatchFailed;
|
|
7
7
|
use Fleetbase\FleetOps\Events\OrderReady;
|
|
8
8
|
use Fleetbase\FleetOps\Events\OrderStarted;
|
|
9
|
+
use Fleetbase\FleetOps\Flow\Activity;
|
|
9
10
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
10
11
|
use Fleetbase\FleetOps\Http\Requests\CancelOrderRequest;
|
|
11
12
|
use Fleetbase\FleetOps\Imports\OrdersImport;
|
|
@@ -17,9 +18,9 @@ use Fleetbase\FleetOps\Models\Place;
|
|
|
17
18
|
use Fleetbase\FleetOps\Models\ServiceQuote;
|
|
18
19
|
use Fleetbase\FleetOps\Models\TrackingStatus;
|
|
19
20
|
use Fleetbase\FleetOps\Models\Waypoint;
|
|
20
|
-
use Fleetbase\FleetOps\Support\Flow;
|
|
21
21
|
use Fleetbase\FleetOps\Support\Utils;
|
|
22
22
|
use Fleetbase\Http\Requests\Internal\BulkDeleteRequest;
|
|
23
|
+
use Fleetbase\Models\CustomFieldValue;
|
|
23
24
|
use Fleetbase\Models\File;
|
|
24
25
|
use Fleetbase\Models\Type;
|
|
25
26
|
use Illuminate\Http\Request;
|
|
@@ -78,11 +79,12 @@ class OrderController extends FleetOpsController
|
|
|
78
79
|
$isIntegratedVendorOrder = isset($requestInput['integrated_vendor_order']);
|
|
79
80
|
$serviceQuote = ServiceQuote::resolveFromRequest($request);
|
|
80
81
|
|
|
81
|
-
$route
|
|
82
|
-
$payload
|
|
83
|
-
$waypoints
|
|
84
|
-
$entities
|
|
85
|
-
$uploads
|
|
82
|
+
$route = Utils::get($input, 'route');
|
|
83
|
+
$payload = Utils::get($input, 'payload');
|
|
84
|
+
$waypoints = Utils::get($input, 'payload.waypoints');
|
|
85
|
+
$entities = Utils::get($input, 'payload.entities');
|
|
86
|
+
$uploads = Utils::get($input, 'files', []);
|
|
87
|
+
$customFieldValues = Utils::get($input, 'custom_field_values', []);
|
|
86
88
|
|
|
87
89
|
// save order route & payload with request input
|
|
88
90
|
$order
|
|
@@ -102,6 +104,20 @@ class OrderController extends FleetOpsController
|
|
|
102
104
|
}
|
|
103
105
|
}
|
|
104
106
|
|
|
107
|
+
// save custom field values
|
|
108
|
+
if (is_array($customFieldValues)) {
|
|
109
|
+
foreach ($customFieldValues as $customFieldValue) {
|
|
110
|
+
CustomFieldValue::create([
|
|
111
|
+
'company_uuid' => session('company'),
|
|
112
|
+
'custom_field_uuid' => data_get($customFieldValue, 'custom_field_uuid'),
|
|
113
|
+
'subject_uuid' => $order->uuid,
|
|
114
|
+
'subject_type' => Utils::getMutationType($order),
|
|
115
|
+
'value' => data_get($customFieldValue, 'value'),
|
|
116
|
+
'value_type' => data_get($customFieldValue, 'value_type', 'text'),
|
|
117
|
+
]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
105
121
|
// if it's integrated vendor order apply to meta
|
|
106
122
|
if ($isIntegratedVendorOrder) {
|
|
107
123
|
$order->updateMeta(
|
|
@@ -144,15 +160,16 @@ class OrderController extends FleetOpsController
|
|
|
144
160
|
|
|
145
161
|
/**
|
|
146
162
|
* Route which enables editing of an order route.
|
|
147
|
-
*
|
|
148
|
-
* @param string $id - The order ID
|
|
149
|
-
*
|
|
163
|
+
*
|
|
164
|
+
* @param string $id - The order ID
|
|
165
|
+
*
|
|
150
166
|
* @return Response
|
|
151
167
|
*/
|
|
152
|
-
public function editOrderRoute(string $id, Request $request)
|
|
153
|
-
|
|
154
|
-
$
|
|
155
|
-
$
|
|
168
|
+
public function editOrderRoute(string $id, Request $request)
|
|
169
|
+
{
|
|
170
|
+
$pickup = $request->input('pickup');
|
|
171
|
+
$dropoff = $request->input('dropoff');
|
|
172
|
+
$return = $request->input('return');
|
|
156
173
|
$waypoints = $request->array('waypoints', []);
|
|
157
174
|
|
|
158
175
|
// Get the order
|
|
@@ -160,7 +177,7 @@ class OrderController extends FleetOpsController
|
|
|
160
177
|
if (!$order) {
|
|
161
178
|
return response()->error('Unable to find order to update route for.');
|
|
162
179
|
}
|
|
163
|
-
|
|
180
|
+
|
|
164
181
|
// Handle update of multiple waypoints
|
|
165
182
|
if ($waypoints) {
|
|
166
183
|
$order->payload->updateWaypoints($waypoints);
|
|
@@ -185,7 +202,7 @@ class OrderController extends FleetOpsController
|
|
|
185
202
|
$order->payload->removeWaypoints();
|
|
186
203
|
}
|
|
187
204
|
|
|
188
|
-
return ['order' => new $this->resource($order)];
|
|
205
|
+
return ['order' => new $this->resource($order)];
|
|
189
206
|
}
|
|
190
207
|
|
|
191
208
|
/**
|
|
@@ -356,7 +373,7 @@ class OrderController extends FleetOpsController
|
|
|
356
373
|
/**
|
|
357
374
|
* @var \Fleetbase\Models\Order
|
|
358
375
|
*/
|
|
359
|
-
$order = Order::select(['uuid', 'driver_assigned_uuid', 'adhoc', 'dispatched', 'dispatched_at'])->where('uuid', $request->input('order'))->withoutGlobalScopes()->first();
|
|
376
|
+
$order = Order::select(['uuid', 'driver_assigned_uuid', 'order_config_uuid', 'adhoc', 'dispatched', 'dispatched_at'])->where('uuid', $request->input('order'))->withoutGlobalScopes()->first();
|
|
360
377
|
|
|
361
378
|
if (!$order->hasDriverAssigned && !$order->adhoc) {
|
|
362
379
|
return response()->error('No driver assigned to dispatch!');
|
|
@@ -366,7 +383,7 @@ class OrderController extends FleetOpsController
|
|
|
366
383
|
return response()->error('Order has already been dispatched!');
|
|
367
384
|
}
|
|
368
385
|
|
|
369
|
-
$order->
|
|
386
|
+
$order->dispatchWithActivity();
|
|
370
387
|
|
|
371
388
|
return response()->json(
|
|
372
389
|
[
|
|
@@ -424,7 +441,7 @@ class OrderController extends FleetOpsController
|
|
|
424
441
|
$driver->save();
|
|
425
442
|
|
|
426
443
|
// get the next order activity
|
|
427
|
-
$flow = $activity =
|
|
444
|
+
$flow = $activity = $order->config()->nextFirstActivity();
|
|
428
445
|
|
|
429
446
|
/**
|
|
430
447
|
* @var \Fleetbase\LaravelMysqlSpatial\Types\Point
|
|
@@ -442,11 +459,11 @@ class OrderController extends FleetOpsController
|
|
|
442
459
|
|
|
443
460
|
// update activity for each waypoint and entity
|
|
444
461
|
foreach ($payload->waypointMarkers as $waypointMarker) {
|
|
445
|
-
$waypointMarker->insertActivity($activity
|
|
462
|
+
$waypointMarker->insertActivity($activity, $location);
|
|
446
463
|
}
|
|
447
464
|
|
|
448
465
|
foreach ($payload->entities as $entity) {
|
|
449
|
-
$entity->insertActivity($activity
|
|
466
|
+
$entity->insertActivity($activity, $location);
|
|
450
467
|
}
|
|
451
468
|
}
|
|
452
469
|
|
|
@@ -476,10 +493,11 @@ class OrderController extends FleetOpsController
|
|
|
476
493
|
return response()->error('No order found.');
|
|
477
494
|
}
|
|
478
495
|
|
|
479
|
-
$activity = $request->
|
|
496
|
+
$activity = $request->array('activity');
|
|
497
|
+
$activity = new Activity($activity, $order->getConfigFlow());
|
|
480
498
|
|
|
481
|
-
//
|
|
482
|
-
if (
|
|
499
|
+
// Handle pickup/dropoff order activity update as normal
|
|
500
|
+
if (Utils::isActivity($activity) && $activity->is('dispatched')) {
|
|
483
501
|
// make sure driver is assigned if not trigger failed dispatch
|
|
484
502
|
if (!$order->hasDriverAssigned && !$order->adhoc) {
|
|
485
503
|
event(new OrderDispatchFailed($order, 'No driver assigned for order to dispatch to.'));
|
|
@@ -492,28 +510,31 @@ class OrderController extends FleetOpsController
|
|
|
492
510
|
return response()->json(['status' => 'dispatched']);
|
|
493
511
|
}
|
|
494
512
|
|
|
495
|
-
if (is_array($activity) && $activity['code'] === 'completed' && $order->driverAssigned) {
|
|
496
|
-
// unset from driver current job
|
|
497
|
-
$order->driverAssigned->unassignCurrentOrder();
|
|
498
|
-
$order->notifyCompleted();
|
|
499
|
-
}
|
|
500
|
-
|
|
501
513
|
/**
|
|
502
514
|
* @var \Fleetbase\LaravelMysqlSpatial\Types\Point
|
|
503
515
|
*/
|
|
504
516
|
$location = $order->getLastLocation();
|
|
505
|
-
|
|
506
|
-
$order->
|
|
507
|
-
$order->insertActivity($activity['status'], $activity['details'], $location, $activity['code']);
|
|
517
|
+
$order->setStatus($activity->code);
|
|
518
|
+
$order->insertActivity($activity, $location);
|
|
508
519
|
|
|
509
520
|
// also update for each order entities if not multiple drop order
|
|
510
521
|
// all entities will share the same activity status as is one drop order
|
|
511
522
|
if (!$order->payload->isMultipleDropOrder) {
|
|
512
523
|
foreach ($order->payload->entities as $entity) {
|
|
513
|
-
$entity->insertActivity($activity
|
|
524
|
+
$entity->insertActivity($activity, $location);
|
|
514
525
|
}
|
|
515
526
|
}
|
|
516
527
|
|
|
528
|
+
// Handle order completed
|
|
529
|
+
if (Utils::isActivity($activity) && $activity->completesOrder() && $order->driverAssigned) {
|
|
530
|
+
// unset from driver current job
|
|
531
|
+
$order->driverAssigned->unassignCurrentOrder();
|
|
532
|
+
$order->complete();
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
// Fire activity events
|
|
536
|
+
$activity->fireEvents($order);
|
|
537
|
+
|
|
517
538
|
return response()->json(['status' => 'ok']);
|
|
518
539
|
}
|
|
519
540
|
|
|
@@ -533,9 +554,9 @@ class OrderController extends FleetOpsController
|
|
|
533
554
|
return response()->error('No order found.');
|
|
534
555
|
}
|
|
535
556
|
|
|
536
|
-
$
|
|
557
|
+
$nextActivities = $order->config()->nextActivity();
|
|
537
558
|
|
|
538
|
-
return response()->json($
|
|
559
|
+
return response()->json($nextActivities);
|
|
539
560
|
}
|
|
540
561
|
|
|
541
562
|
/**
|
|
@@ -11,6 +11,15 @@ use Illuminate\Http\Request;
|
|
|
11
11
|
*/
|
|
12
12
|
class SettingController extends Controller
|
|
13
13
|
{
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves the current visibility settings.
|
|
16
|
+
*
|
|
17
|
+
* This method fetches the visibility settings for 'fleet-ops' from the database and
|
|
18
|
+
* returns them in a JSON response. The settings are retrieved based on a specific key
|
|
19
|
+
* from the 'Setting' model.
|
|
20
|
+
*
|
|
21
|
+
* @return \Illuminate\Http\Response the visibility settings in JSON format
|
|
22
|
+
*/
|
|
14
23
|
public function getVisibilitySettings()
|
|
15
24
|
{
|
|
16
25
|
$visibilitySettings = Setting::where('key', 'fleet-ops.visibility')->value('value');
|
|
@@ -18,6 +27,17 @@ class SettingController extends Controller
|
|
|
18
27
|
return response()->json(['visibilitySettings' => $visibilitySettings]);
|
|
19
28
|
}
|
|
20
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Saves the visibility settings provided in the request.
|
|
32
|
+
*
|
|
33
|
+
* This method accepts visibility settings via the request and updates them in the database.
|
|
34
|
+
* The new settings are saved using a specific key in the 'Setting' model. The method
|
|
35
|
+
* returns the updated settings in a JSON response.
|
|
36
|
+
*
|
|
37
|
+
* @param Request $request the HTTP request containing the visibility settings
|
|
38
|
+
*
|
|
39
|
+
* @return \Illuminate\Http\Response the updated visibility settings in JSON format
|
|
40
|
+
*/
|
|
21
41
|
public function saveVisibilitySettings(Request $request)
|
|
22
42
|
{
|
|
23
43
|
$visibilitySettings = $request->input('visibilitySettings', []);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Http\Filter;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Filter\Filter;
|
|
6
|
+
|
|
7
|
+
class OrderConfigFilter extends Filter
|
|
8
|
+
{
|
|
9
|
+
public function queryForInternal()
|
|
10
|
+
{
|
|
11
|
+
$this->builder->where('company_uuid', $this->session->get('company'));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Http\Requests;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Requests\FleetbaseRequest;
|
|
6
|
+
|
|
7
|
+
class CreateIssueRequest extends FleetbaseRequest
|
|
8
|
+
{
|
|
9
|
+
public function rules()
|
|
10
|
+
{
|
|
11
|
+
return [
|
|
12
|
+
'driver' => ['required'],
|
|
13
|
+
'location' => ['required'],
|
|
14
|
+
'category' => ['nullable'],
|
|
15
|
+
'type' => ['nullable'],
|
|
16
|
+
'priority' => ['nullable'],
|
|
17
|
+
];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -39,6 +39,8 @@ class Order extends FleetbaseResource
|
|
|
39
39
|
'service_quote_uuid' => $this->when(Http::isInternalRequest(), $this->service_quote_uuid),
|
|
40
40
|
'has_driver_assigned' => $this->when(Http::isInternalRequest(), $this->has_driver_assigned),
|
|
41
41
|
'is_scheduled' => $this->when(Http::isInternalRequest(), $this->is_scheduled),
|
|
42
|
+
'order_config' => $this->when(Http::isInternalRequest(), $this->whenLoaded('orderConfig', $this->orderConfig)),
|
|
43
|
+
'custom_field_values' => $this->when(Http::isInternalRequest(), $this->customFieldValues),
|
|
42
44
|
'customer' => $this->setCustomerType(Resolve::resourceForMorph($this->customer_type, $this->customer_uuid)),
|
|
43
45
|
'payload' => new Payload($this->payload),
|
|
44
46
|
'facilitator' => $this->setFacilitatorType(Resolve::resourceForMorph($this->facilitator_type, $this->facilitator_uuid)),
|
|
@@ -49,6 +51,7 @@ class Order extends FleetbaseResource
|
|
|
49
51
|
'files' => $this->when(Http::isInternalRequest(), $this->files, File::collection($this->files)),
|
|
50
52
|
'purchase_rate' => new PurchaseRate($this->purchaseRate),
|
|
51
53
|
'notes' => $this->notes,
|
|
54
|
+
...$this->getCustomFieldValues(),
|
|
52
55
|
'type' => $this->type,
|
|
53
56
|
'status' => $this->status,
|
|
54
57
|
'pod_method' => $this->pod_method,
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Listeners;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Events\OrderCanceled;
|
|
6
|
+
use Fleetbase\FleetOps\Flow\Activity;
|
|
6
7
|
use Fleetbase\FleetOps\Models\Driver;
|
|
7
8
|
use Fleetbase\FleetOps\Notifications\OrderCanceled as OrderCanceledNotification;
|
|
8
9
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
@@ -25,15 +26,18 @@ class HandleOrderCanceled implements ShouldQueue
|
|
|
25
26
|
$order = $event->getModelRecord();
|
|
26
27
|
$location = $order->getLastLocation();
|
|
27
28
|
|
|
28
|
-
//
|
|
29
|
-
$order->
|
|
30
|
-
|
|
29
|
+
// Create order cancel activity
|
|
30
|
+
$activity = $order->config()->getCanceledActivity();
|
|
31
|
+
|
|
32
|
+
// Update order activity
|
|
33
|
+
$order->setStatus($activity->status);
|
|
34
|
+
$order->createActivity($activity, $location);
|
|
31
35
|
|
|
32
36
|
if ($order->isIntegratedVendorOrder()) {
|
|
33
37
|
$order->facilitator->provider()->callback('onCanceled', $order);
|
|
34
38
|
}
|
|
35
39
|
|
|
36
|
-
//
|
|
40
|
+
// Notify driver assigned order was canceled
|
|
37
41
|
if ($order->hasDriverAssigned) {
|
|
38
42
|
/** @var \Fleetbase\Models\Driver */
|
|
39
43
|
$driver = Driver::where('uuid', $order->driver_assigned_uuid)->withoutGlobalScopes()->first();
|
|
@@ -5,9 +5,9 @@ namespace Fleetbase\FleetOps\Listeners;
|
|
|
5
5
|
use Fleetbase\FleetOps\Events\OrderDispatched;
|
|
6
6
|
use Fleetbase\FleetOps\Events\OrderDispatchFailed;
|
|
7
7
|
use Fleetbase\FleetOps\Models\Driver;
|
|
8
|
+
use Fleetbase\FleetOps\Models\TrackingStatus;
|
|
8
9
|
use Fleetbase\FleetOps\Notifications\OrderDispatched as OrderDispatchedNotification;
|
|
9
10
|
use Fleetbase\FleetOps\Notifications\OrderPing;
|
|
10
|
-
use Fleetbase\FleetOps\Support\Flow;
|
|
11
11
|
use Fleetbase\FleetOps\Support\Utils;
|
|
12
12
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
13
13
|
use Illuminate\Queue\InteractsWithQueue;
|
|
@@ -39,15 +39,19 @@ class HandleOrderDispatched implements ShouldQueue
|
|
|
39
39
|
return event(new OrderDispatchFailed($order, 'No driver assigned for order to dispatch to.'));
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Check if dispatch activity already exists, if not -
|
|
44
|
+
* Check for dispatch code in activity options, if there is the correct dispatch code update activity.
|
|
45
|
+
**/
|
|
46
|
+
$doesntHaveDispatchActivity = TrackingStatus::where(['code' => 'DISPATCHED', 'tracking_number_uuid' => $order->tracking_number_uuid])->doesntExist();
|
|
47
|
+
if ($doesntHaveDispatchActivity) {
|
|
48
|
+
$activity = $order->config()->getDispatchActivity();
|
|
49
|
+
if ($activity) {
|
|
50
|
+
/** update order activity */
|
|
51
|
+
$location = $order->getLastLocation();
|
|
52
|
+
$order->setStatus($activity->code);
|
|
53
|
+
$order->createActivity($activity, $location);
|
|
54
|
+
}
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
/* update dispatch attributes */
|
|
@@ -59,10 +63,8 @@ class HandleOrderDispatched implements ShouldQueue
|
|
|
59
63
|
/* if order is adhoc ping drivers within radius of pickup to accept order * */
|
|
60
64
|
if ($order->adhoc) {
|
|
61
65
|
$order->load(['company']);
|
|
62
|
-
|
|
63
66
|
$pickup = $order->getPickupLocation();
|
|
64
67
|
$distance = $order->getAdhocDistance();
|
|
65
|
-
|
|
66
68
|
if (!Utils::isPoint($pickup)) {
|
|
67
69
|
return;
|
|
68
70
|
}
|