@fleetbase/fleetops-engine 0.4.16 → 0.4.18
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 +106 -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 +298 -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 +43 -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/config/api.php +3 -650
- 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/migrations/2024_03_12_033527_add_public_id_column_to_order_configs_table.php +34 -0
- package/server/seeders/OrderConfigSeeder.php +23 -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/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 +152 -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 +40 -233
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +58 -28
- 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/Internal/CreateOrderConfigRequest.php +40 -0
- package/server/src/Http/Requests/Internal/CreateOrderRequest.php +66 -0
- package/server/src/Http/Requests/Internal/DeleteOrderConfigRequest.php +0 -0
- package/server/src/Http/Requests/UpdateIssueRequest.php +7 -0
- package/server/src/Http/Resources/v1/Order.php +3 -0
- 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 +467 -0
- package/server/src/Models/Payload.php +6 -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/Observers/CompanyObserver.php +20 -0
- package/server/src/Providers/FleetOpsServiceProvider.php +4 -1
- package/server/src/Providers/NotificationServiceProvider.php +2 -1
- package/server/src/Support/FleetOps.php +137 -0
- 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,75 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
-
use Fleetbase\
|
|
6
|
-
use Fleetbase\FleetOps\
|
|
7
|
-
use Fleetbase\FleetOps\
|
|
8
|
-
use Fleetbase\
|
|
9
|
-
use Fleetbase\Models\Category;
|
|
10
|
-
use Fleetbase\Models\Extension;
|
|
11
|
-
use Fleetbase\Models\ExtensionInstall;
|
|
12
|
-
use Fleetbase\Models\Type;
|
|
5
|
+
use Fleetbase\Exceptions\FleetbaseRequestValidationException;
|
|
6
|
+
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
7
|
+
use Fleetbase\FleetOps\Http\Requests\Internal\CreateOrderConfigRequest;
|
|
8
|
+
use Fleetbase\FleetOps\Models\OrderConfig;
|
|
13
9
|
use Illuminate\Http\Request;
|
|
14
|
-
use Illuminate\Support\
|
|
10
|
+
use Illuminate\Support\Facades\Validator;
|
|
15
11
|
|
|
16
|
-
class OrderConfigController extends
|
|
12
|
+
class OrderConfigController extends FleetOpsController
|
|
17
13
|
{
|
|
18
14
|
/**
|
|
19
|
-
*
|
|
15
|
+
* The resource to query.
|
|
20
16
|
*
|
|
21
|
-
* @
|
|
22
|
-
*/
|
|
23
|
-
public function getInstalled(Request $request)
|
|
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
|
|
17
|
+
* @var string
|
|
121
18
|
*/
|
|
122
|
-
public
|
|
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
|
-
}
|
|
19
|
+
public $resource = 'order-config';
|
|
154
20
|
|
|
155
21
|
/**
|
|
156
|
-
*
|
|
22
|
+
* Creates a record with request payload.
|
|
157
23
|
*
|
|
158
24
|
* @return \Illuminate\Http\Response
|
|
159
25
|
*/
|
|
160
|
-
public function
|
|
26
|
+
public function createRecord(Request $request)
|
|
161
27
|
{
|
|
162
|
-
|
|
163
|
-
$
|
|
164
|
-
$
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if (
|
|
169
|
-
return
|
|
170
|
-
[
|
|
171
|
-
'errors' => ['Extension attempted to clone not found'],
|
|
172
|
-
],
|
|
173
|
-
400
|
|
174
|
-
);
|
|
28
|
+
// Create validation request
|
|
29
|
+
$createOrderRequest = CreateOrderConfigRequest::createFrom($request);
|
|
30
|
+
$rules = $createOrderRequest->rules();
|
|
31
|
+
|
|
32
|
+
// Manually validate request
|
|
33
|
+
$validator = Validator::make($request->input('orderConfig'), $rules);
|
|
34
|
+
if ($validator->fails()) {
|
|
35
|
+
return $createOrderRequest->responseWithErrors($validator);
|
|
175
36
|
}
|
|
176
37
|
|
|
177
|
-
|
|
178
|
-
|
|
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();
|
|
38
|
+
try {
|
|
39
|
+
$record = $this->model->createRecordFromRequest($request);
|
|
196
40
|
|
|
197
|
-
return
|
|
41
|
+
return ['order_config' => new $this->resource($record)];
|
|
42
|
+
} catch (\Exception $e) {
|
|
43
|
+
return response()->error($e->getMessage());
|
|
44
|
+
} catch (\Illuminate\Database\QueryException $e) {
|
|
45
|
+
return response()->error($e->getMessage());
|
|
46
|
+
} catch (FleetbaseRequestValidationException $e) {
|
|
47
|
+
return response()->error($e->getErrors());
|
|
198
48
|
}
|
|
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
49
|
}
|
|
220
50
|
|
|
221
51
|
/**
|
|
222
|
-
*
|
|
52
|
+
* Delete's an order config.
|
|
223
53
|
*
|
|
224
54
|
* @return \Illuminate\Http\Response
|
|
225
55
|
*/
|
|
226
|
-
public function
|
|
56
|
+
public function deleteRecord($id, Request $request)
|
|
227
57
|
{
|
|
228
|
-
$
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
foreach ($orders as $order) {
|
|
233
|
-
$dynamicFields = $dynamicFields->merge(array_keys($order->meta));
|
|
58
|
+
$orderConfig = OrderConfig::where('uuid', $id)->first();
|
|
59
|
+
if (!$orderConfig) {
|
|
60
|
+
return response()->error('No order config found.');
|
|
234
61
|
}
|
|
235
62
|
|
|
236
|
-
|
|
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]);
|
|
63
|
+
// `core_service` order configs cannot be deleted
|
|
64
|
+
if ($orderConfig->core_service) {
|
|
65
|
+
return response()->error('Core service order config\'s cannot be deleted.');
|
|
252
66
|
}
|
|
253
67
|
|
|
254
|
-
|
|
68
|
+
if ($orderConfig) {
|
|
69
|
+
$orderConfig->delete();
|
|
255
70
|
|
|
256
|
-
|
|
257
|
-
$installedExtension->delete();
|
|
71
|
+
$this->resource::wrap($this->resourceSingularlName);
|
|
258
72
|
|
|
259
|
-
return
|
|
73
|
+
return new $this->resource($orderConfig);
|
|
260
74
|
}
|
|
261
|
-
|
|
262
|
-
return response()->json(
|
|
263
|
-
[
|
|
264
|
-
'errors' => 'Unable to uninstall order configuration',
|
|
265
|
-
],
|
|
266
|
-
400
|
|
267
|
-
);
|
|
268
75
|
}
|
|
269
76
|
}
|
|
@@ -6,8 +6,10 @@ 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;
|
|
12
|
+
use Fleetbase\FleetOps\Http\Requests\Internal\CreateOrderRequest;
|
|
11
13
|
use Fleetbase\FleetOps\Imports\OrdersImport;
|
|
12
14
|
use Fleetbase\FleetOps\Models\Driver;
|
|
13
15
|
use Fleetbase\FleetOps\Models\Entity;
|
|
@@ -17,13 +19,14 @@ use Fleetbase\FleetOps\Models\Place;
|
|
|
17
19
|
use Fleetbase\FleetOps\Models\ServiceQuote;
|
|
18
20
|
use Fleetbase\FleetOps\Models\TrackingStatus;
|
|
19
21
|
use Fleetbase\FleetOps\Models\Waypoint;
|
|
20
|
-
use Fleetbase\FleetOps\Support\Flow;
|
|
21
22
|
use Fleetbase\FleetOps\Support\Utils;
|
|
22
23
|
use Fleetbase\Http\Requests\Internal\BulkDeleteRequest;
|
|
24
|
+
use Fleetbase\Models\CustomFieldValue;
|
|
23
25
|
use Fleetbase\Models\File;
|
|
24
26
|
use Fleetbase\Models\Type;
|
|
25
27
|
use Illuminate\Http\Request;
|
|
26
28
|
use Illuminate\Support\Facades\DB;
|
|
29
|
+
use Illuminate\Support\Facades\Validator;
|
|
27
30
|
use Illuminate\Support\Str;
|
|
28
31
|
use Maatwebsite\Excel\Facades\Excel;
|
|
29
32
|
|
|
@@ -43,9 +46,17 @@ class OrderController extends FleetOpsController
|
|
|
43
46
|
*/
|
|
44
47
|
public function createRecord(Request $request)
|
|
45
48
|
{
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
// Create validation request
|
|
50
|
+
$createOrderRequest = CreateOrderRequest::createFrom($request);
|
|
51
|
+
$rules = $createOrderRequest->rules();
|
|
52
|
+
|
|
53
|
+
// Manually validate request
|
|
54
|
+
$validator = Validator::make($request->input('order'), $rules);
|
|
55
|
+
if ($validator->fails()) {
|
|
56
|
+
return $createOrderRequest->responseWithErrors($validator);
|
|
57
|
+
}
|
|
48
58
|
|
|
59
|
+
try {
|
|
49
60
|
$record = $this->model->createRecordFromRequest(
|
|
50
61
|
$request,
|
|
51
62
|
function ($request, &$input) {
|
|
@@ -78,11 +89,12 @@ class OrderController extends FleetOpsController
|
|
|
78
89
|
$isIntegratedVendorOrder = isset($requestInput['integrated_vendor_order']);
|
|
79
90
|
$serviceQuote = ServiceQuote::resolveFromRequest($request);
|
|
80
91
|
|
|
81
|
-
$route
|
|
82
|
-
$payload
|
|
83
|
-
$waypoints
|
|
84
|
-
$entities
|
|
85
|
-
$uploads
|
|
92
|
+
$route = Utils::get($input, 'route');
|
|
93
|
+
$payload = Utils::get($input, 'payload');
|
|
94
|
+
$waypoints = Utils::get($input, 'payload.waypoints');
|
|
95
|
+
$entities = Utils::get($input, 'payload.entities');
|
|
96
|
+
$uploads = Utils::get($input, 'files', []);
|
|
97
|
+
$customFieldValues = Utils::get($input, 'custom_field_values', []);
|
|
86
98
|
|
|
87
99
|
// save order route & payload with request input
|
|
88
100
|
$order
|
|
@@ -102,6 +114,20 @@ class OrderController extends FleetOpsController
|
|
|
102
114
|
}
|
|
103
115
|
}
|
|
104
116
|
|
|
117
|
+
// save custom field values
|
|
118
|
+
if (is_array($customFieldValues)) {
|
|
119
|
+
foreach ($customFieldValues as $customFieldValue) {
|
|
120
|
+
CustomFieldValue::create([
|
|
121
|
+
'company_uuid' => session('company'),
|
|
122
|
+
'custom_field_uuid' => data_get($customFieldValue, 'custom_field_uuid'),
|
|
123
|
+
'subject_uuid' => $order->uuid,
|
|
124
|
+
'subject_type' => Utils::getMutationType($order),
|
|
125
|
+
'value' => data_get($customFieldValue, 'value'),
|
|
126
|
+
'value_type' => data_get($customFieldValue, 'value_type', 'text'),
|
|
127
|
+
]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
105
131
|
// if it's integrated vendor order apply to meta
|
|
106
132
|
if ($isIntegratedVendorOrder) {
|
|
107
133
|
$order->updateMeta(
|
|
@@ -357,7 +383,7 @@ class OrderController extends FleetOpsController
|
|
|
357
383
|
/**
|
|
358
384
|
* @var \Fleetbase\Models\Order
|
|
359
385
|
*/
|
|
360
|
-
$order = Order::select(['uuid', 'driver_assigned_uuid', 'adhoc', 'dispatched', 'dispatched_at'])->where('uuid', $request->input('order'))->withoutGlobalScopes()->first();
|
|
386
|
+
$order = Order::select(['uuid', 'driver_assigned_uuid', 'order_config_uuid', 'adhoc', 'dispatched', 'dispatched_at'])->where('uuid', $request->input('order'))->withoutGlobalScopes()->first();
|
|
361
387
|
|
|
362
388
|
if (!$order->hasDriverAssigned && !$order->adhoc) {
|
|
363
389
|
return response()->error('No driver assigned to dispatch!');
|
|
@@ -367,7 +393,7 @@ class OrderController extends FleetOpsController
|
|
|
367
393
|
return response()->error('Order has already been dispatched!');
|
|
368
394
|
}
|
|
369
395
|
|
|
370
|
-
$order->
|
|
396
|
+
$order->dispatchWithActivity();
|
|
371
397
|
|
|
372
398
|
return response()->json(
|
|
373
399
|
[
|
|
@@ -425,7 +451,7 @@ class OrderController extends FleetOpsController
|
|
|
425
451
|
$driver->save();
|
|
426
452
|
|
|
427
453
|
// get the next order activity
|
|
428
|
-
$flow = $activity =
|
|
454
|
+
$flow = $activity = $order->config()->nextFirstActivity();
|
|
429
455
|
|
|
430
456
|
/**
|
|
431
457
|
* @var \Fleetbase\LaravelMysqlSpatial\Types\Point
|
|
@@ -443,11 +469,11 @@ class OrderController extends FleetOpsController
|
|
|
443
469
|
|
|
444
470
|
// update activity for each waypoint and entity
|
|
445
471
|
foreach ($payload->waypointMarkers as $waypointMarker) {
|
|
446
|
-
$waypointMarker->insertActivity($activity
|
|
472
|
+
$waypointMarker->insertActivity($activity, $location);
|
|
447
473
|
}
|
|
448
474
|
|
|
449
475
|
foreach ($payload->entities as $entity) {
|
|
450
|
-
$entity->insertActivity($activity
|
|
476
|
+
$entity->insertActivity($activity, $location);
|
|
451
477
|
}
|
|
452
478
|
}
|
|
453
479
|
|
|
@@ -477,10 +503,11 @@ class OrderController extends FleetOpsController
|
|
|
477
503
|
return response()->error('No order found.');
|
|
478
504
|
}
|
|
479
505
|
|
|
480
|
-
$activity = $request->
|
|
506
|
+
$activity = $request->array('activity');
|
|
507
|
+
$activity = new Activity($activity, $order->getConfigFlow());
|
|
481
508
|
|
|
482
|
-
//
|
|
483
|
-
if (
|
|
509
|
+
// Handle pickup/dropoff order activity update as normal
|
|
510
|
+
if (Utils::isActivity($activity) && $activity->is('dispatched')) {
|
|
484
511
|
// make sure driver is assigned if not trigger failed dispatch
|
|
485
512
|
if (!$order->hasDriverAssigned && !$order->adhoc) {
|
|
486
513
|
event(new OrderDispatchFailed($order, 'No driver assigned for order to dispatch to.'));
|
|
@@ -493,28 +520,31 @@ class OrderController extends FleetOpsController
|
|
|
493
520
|
return response()->json(['status' => 'dispatched']);
|
|
494
521
|
}
|
|
495
522
|
|
|
496
|
-
if (is_array($activity) && $activity['code'] === 'completed' && $order->driverAssigned) {
|
|
497
|
-
// unset from driver current job
|
|
498
|
-
$order->driverAssigned->unassignCurrentOrder();
|
|
499
|
-
$order->notifyCompleted();
|
|
500
|
-
}
|
|
501
|
-
|
|
502
523
|
/**
|
|
503
524
|
* @var \Fleetbase\LaravelMysqlSpatial\Types\Point
|
|
504
525
|
*/
|
|
505
526
|
$location = $order->getLastLocation();
|
|
506
|
-
|
|
507
|
-
$order->
|
|
508
|
-
$order->insertActivity($activity['status'], $activity['details'], $location, $activity['code']);
|
|
527
|
+
$order->setStatus($activity->code);
|
|
528
|
+
$order->insertActivity($activity, $location);
|
|
509
529
|
|
|
510
530
|
// also update for each order entities if not multiple drop order
|
|
511
531
|
// all entities will share the same activity status as is one drop order
|
|
512
532
|
if (!$order->payload->isMultipleDropOrder) {
|
|
513
533
|
foreach ($order->payload->entities as $entity) {
|
|
514
|
-
$entity->insertActivity($activity
|
|
534
|
+
$entity->insertActivity($activity, $location);
|
|
515
535
|
}
|
|
516
536
|
}
|
|
517
537
|
|
|
538
|
+
// Handle order completed
|
|
539
|
+
if (Utils::isActivity($activity) && $activity->completesOrder() && $order->driverAssigned) {
|
|
540
|
+
// unset from driver current job
|
|
541
|
+
$order->driverAssigned->unassignCurrentOrder();
|
|
542
|
+
$order->complete();
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// Fire activity events
|
|
546
|
+
$activity->fireEvents($order);
|
|
547
|
+
|
|
518
548
|
return response()->json(['status' => 'ok']);
|
|
519
549
|
}
|
|
520
550
|
|
|
@@ -534,9 +564,9 @@ class OrderController extends FleetOpsController
|
|
|
534
564
|
return response()->error('No order found.');
|
|
535
565
|
}
|
|
536
566
|
|
|
537
|
-
$
|
|
567
|
+
$nextActivities = $order->config()->nextActivity();
|
|
538
568
|
|
|
539
|
-
return response()->json($
|
|
569
|
+
return response()->json($nextActivities);
|
|
540
570
|
}
|
|
541
571
|
|
|
542
572
|
/**
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Http\Requests\Internal;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Requests\FleetbaseRequest;
|
|
6
|
+
use Illuminate\Validation\Rule;
|
|
7
|
+
|
|
8
|
+
class CreateOrderConfigRequest extends FleetbaseRequest
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Determine if the user is authorized to make this request.
|
|
12
|
+
*
|
|
13
|
+
* @return bool
|
|
14
|
+
*/
|
|
15
|
+
public function authorize()
|
|
16
|
+
{
|
|
17
|
+
return request()->session()->has('company');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Get the validation rules that apply to the request.
|
|
22
|
+
*
|
|
23
|
+
* @return array
|
|
24
|
+
*/
|
|
25
|
+
public function rules()
|
|
26
|
+
{
|
|
27
|
+
return [
|
|
28
|
+
'name' => [
|
|
29
|
+
'required',
|
|
30
|
+
Rule::unique('order_configs', 'name')
|
|
31
|
+
->where('company_uuid', request()->session()->get('company'))->whereNull('deleted_at'),
|
|
32
|
+
],
|
|
33
|
+
'key' => [
|
|
34
|
+
'required',
|
|
35
|
+
Rule::unique('order_configs', 'key')
|
|
36
|
+
->where('company_uuid', request()->session()->get('company'))->whereNull('deleted_at'),
|
|
37
|
+
],
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
}
|