@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
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\FleetOps\Casts\OrderConfigEntities;
|
|
7
|
+
use Fleetbase\FleetOps\Flow\Activity;
|
|
8
|
+
use Fleetbase\Models\Company;
|
|
9
|
+
use Fleetbase\Models\Model;
|
|
10
|
+
use Fleetbase\Support\Auth;
|
|
11
|
+
use Fleetbase\Traits\HasApiModelBehavior;
|
|
12
|
+
use Fleetbase\Traits\HasMetaAttributes;
|
|
13
|
+
use Fleetbase\Traits\HasPublicId;
|
|
14
|
+
use Fleetbase\Traits\HasUuid;
|
|
15
|
+
use Fleetbase\Traits\Searchable;
|
|
16
|
+
use Illuminate\Support\Collection;
|
|
17
|
+
use Illuminate\Support\Str;
|
|
18
|
+
|
|
19
|
+
class OrderConfig extends Model
|
|
20
|
+
{
|
|
21
|
+
use HasUuid;
|
|
22
|
+
use HasPublicId;
|
|
23
|
+
use Searchable;
|
|
24
|
+
use HasMetaAttributes;
|
|
25
|
+
use HasApiModelBehavior;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The database table used by the model.
|
|
29
|
+
*
|
|
30
|
+
* @var string
|
|
31
|
+
*/
|
|
32
|
+
protected $table = 'order_configs';
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The type of public Id to generate.
|
|
36
|
+
*
|
|
37
|
+
* @var string
|
|
38
|
+
*/
|
|
39
|
+
protected $publicIdType = 'order_config';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* These attributes that can be queried.
|
|
43
|
+
*
|
|
44
|
+
* @var array
|
|
45
|
+
*/
|
|
46
|
+
protected $searchableColumns = ['name'];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The attributes that are mass assignable.
|
|
50
|
+
*
|
|
51
|
+
* @var array
|
|
52
|
+
*/
|
|
53
|
+
protected $fillable = [
|
|
54
|
+
'public_id',
|
|
55
|
+
'company_uuid',
|
|
56
|
+
'author_uuid',
|
|
57
|
+
'category_uuid',
|
|
58
|
+
'icon_uuid',
|
|
59
|
+
'name',
|
|
60
|
+
'namespace',
|
|
61
|
+
'description',
|
|
62
|
+
'key',
|
|
63
|
+
'status',
|
|
64
|
+
'version',
|
|
65
|
+
'core_service',
|
|
66
|
+
'tags',
|
|
67
|
+
'flow',
|
|
68
|
+
'entities',
|
|
69
|
+
'meta',
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The attributes that should be cast to native types.
|
|
74
|
+
*
|
|
75
|
+
* @var array
|
|
76
|
+
*/
|
|
77
|
+
protected $casts = [
|
|
78
|
+
'tags' => Json::class,
|
|
79
|
+
'flow' => Json::class,
|
|
80
|
+
'entities' => OrderConfigEntities::class,
|
|
81
|
+
'meta' => Json::class,
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Dynamic attributes that are appended to object.
|
|
86
|
+
*
|
|
87
|
+
* @var array
|
|
88
|
+
*/
|
|
89
|
+
protected $appends = ['type'];
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* The attributes excluded from the model's JSON form.
|
|
93
|
+
*
|
|
94
|
+
* @var array
|
|
95
|
+
*/
|
|
96
|
+
protected $hidden = [];
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The current order in context to this config.
|
|
100
|
+
*
|
|
101
|
+
* @var Order
|
|
102
|
+
*/
|
|
103
|
+
protected $orderContext;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Bootstraps the model and its events.
|
|
107
|
+
*
|
|
108
|
+
* This method overrides the default Eloquent model boot method
|
|
109
|
+
* to add a custom 'creating' event listener. This listener is used
|
|
110
|
+
* to set default values when a new model instance is being created.
|
|
111
|
+
*
|
|
112
|
+
* @return void
|
|
113
|
+
*/
|
|
114
|
+
protected static function boot()
|
|
115
|
+
{
|
|
116
|
+
parent::boot();
|
|
117
|
+
|
|
118
|
+
static::creating(function ($model) {
|
|
119
|
+
$model->namespace = empty($model->namespace) ? static::createNamespace($model->name) : $model->namespace;
|
|
120
|
+
$model->version = '0.0.1';
|
|
121
|
+
$model->status = 'private';
|
|
122
|
+
$model->key = Str::slug($model->name);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Creates a namespaced string based on the provided name.
|
|
128
|
+
*
|
|
129
|
+
* This method generates a namespaced string using the company's name
|
|
130
|
+
* retrieved from the authenticated user's company, followed by a fixed
|
|
131
|
+
* segment ':order-config:', and the provided name. This is used to
|
|
132
|
+
* create a unique namespace for each model instance.
|
|
133
|
+
*
|
|
134
|
+
* @param string $name the name to be included in the namespace
|
|
135
|
+
*
|
|
136
|
+
* @return string the generated namespaced string
|
|
137
|
+
*/
|
|
138
|
+
public static function createNamespace(string $name): string
|
|
139
|
+
{
|
|
140
|
+
$company = Auth::getCompany();
|
|
141
|
+
|
|
142
|
+
return Str::slug($company->name) . ':order-config:' . Str::slug($name);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
147
|
+
*/
|
|
148
|
+
public function company()
|
|
149
|
+
{
|
|
150
|
+
return $this->belongsTo(Order::class);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
155
|
+
*/
|
|
156
|
+
public function author()
|
|
157
|
+
{
|
|
158
|
+
return $this->belongsTo(\Fleetbase\Models\User::class);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
163
|
+
*/
|
|
164
|
+
public function category()
|
|
165
|
+
{
|
|
166
|
+
return $this->belongsTo(\Fleetbase\Models\Category::class);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
171
|
+
*/
|
|
172
|
+
public function icon()
|
|
173
|
+
{
|
|
174
|
+
return $this->belongsTo(\Fleetbase\Models\File::class);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
179
|
+
*/
|
|
180
|
+
public function customFields()
|
|
181
|
+
{
|
|
182
|
+
return $this->belongsTo(\Fleetbase\Models\CustomField::class);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Accessor method for getting the type attribute of the order config.
|
|
187
|
+
*
|
|
188
|
+
* @return string the type of the order config
|
|
189
|
+
*/
|
|
190
|
+
public function getTypeAttribute()
|
|
191
|
+
{
|
|
192
|
+
return 'order-config';
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Sets the order context for the current order config.
|
|
197
|
+
*
|
|
198
|
+
* @param Order $order the order to set as the context
|
|
199
|
+
*
|
|
200
|
+
* @return self returns the instance for chaining
|
|
201
|
+
*/
|
|
202
|
+
public function setOrderContext(Order $order): self
|
|
203
|
+
{
|
|
204
|
+
$this->orderContext = $order;
|
|
205
|
+
|
|
206
|
+
return $this;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Retrieves the current order context, setting it if not already set.
|
|
211
|
+
*
|
|
212
|
+
* @param Order|null $order the order to use as context if no current context is set
|
|
213
|
+
*
|
|
214
|
+
* @return Order|null the current order context
|
|
215
|
+
*
|
|
216
|
+
* @throws \Exception if no order context is found and none is provided
|
|
217
|
+
*/
|
|
218
|
+
public function getOrderContext(?Order $order = null): ?Order
|
|
219
|
+
{
|
|
220
|
+
if (!$this->orderContext && $order instanceof Order) {
|
|
221
|
+
$this->setOrderContext($order);
|
|
222
|
+
|
|
223
|
+
return $order;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (!$this->orderContext) {
|
|
227
|
+
throw new \Exception('No order context found to run order config.');
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return $this->orderContext;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Retrieves all activities defined in the order config's flow.
|
|
235
|
+
*
|
|
236
|
+
* @return Collection a collection of Activity objects
|
|
237
|
+
*/
|
|
238
|
+
public function activities(): Collection
|
|
239
|
+
{
|
|
240
|
+
$activities = collect();
|
|
241
|
+
foreach ($this->flow as $activity) {
|
|
242
|
+
$activities->push(new Activity($activity, $this->flow));
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return $activities;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Retrieves the 'created' activity from the flow.
|
|
250
|
+
*
|
|
251
|
+
* @return Activity|null the created Activity object or null if not found
|
|
252
|
+
*/
|
|
253
|
+
public function getCreatedActivity(): ?Activity
|
|
254
|
+
{
|
|
255
|
+
return $this->activities()->firstWhere('code', 'created');
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Retrieves the 'dispatched' activity from the flow.
|
|
260
|
+
*
|
|
261
|
+
* @return Activity|null the dispatched Activity object or null if not found
|
|
262
|
+
*/
|
|
263
|
+
public function getDispatchActivity(): ?Activity
|
|
264
|
+
{
|
|
265
|
+
return $this->activities()->firstWhere('code', 'dispatched');
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Determines the current activity based on the order's status.
|
|
270
|
+
*
|
|
271
|
+
* @param Order|null $order the order to evaluate
|
|
272
|
+
*
|
|
273
|
+
* @return Activity|null the current Activity object or null if not found
|
|
274
|
+
*/
|
|
275
|
+
public function currentActivity(?Order $order = null): ?Activity
|
|
276
|
+
{
|
|
277
|
+
$order = $this->getOrderContext($order);
|
|
278
|
+
|
|
279
|
+
return $this->activities()->firstWhere('code', $order->status);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Determines the next set of activities based on the current activity.
|
|
284
|
+
*
|
|
285
|
+
* @param Order|null $order the order to evaluate
|
|
286
|
+
*
|
|
287
|
+
* @return Collection a collection of the next activities
|
|
288
|
+
*/
|
|
289
|
+
public function nextActivity(?Order $order = null): Collection
|
|
290
|
+
{
|
|
291
|
+
$order = $this->getOrderContext($order);
|
|
292
|
+
$currentActivity = $this->currentActivity($order);
|
|
293
|
+
if ($currentActivity) {
|
|
294
|
+
return $currentActivity->getNext($order);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return collect();
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Retrieves the first activity in the next set of activities.
|
|
302
|
+
*
|
|
303
|
+
* @param Order|null $order the order to evaluate
|
|
304
|
+
*
|
|
305
|
+
* @return Activity|null the first Activity object in the next set or null if not found
|
|
306
|
+
*/
|
|
307
|
+
public function nextFirstActivity(?Order $order = null): ?Activity
|
|
308
|
+
{
|
|
309
|
+
$next = collect();
|
|
310
|
+
$order = $this->getOrderContext($order);
|
|
311
|
+
$currentActivity = $this->currentActivity($order);
|
|
312
|
+
if ($currentActivity) {
|
|
313
|
+
$next = $currentActivity->getNext($order);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
return $next->first();
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Retrieves the activity that follows after the next activity.
|
|
321
|
+
*
|
|
322
|
+
* @param Order|null $order the order to evaluate
|
|
323
|
+
*
|
|
324
|
+
* @return Activity|null the Activity object that follows after the next or null if not found
|
|
325
|
+
*/
|
|
326
|
+
public function afterNextActivity(?Order $order = null): ?Activity
|
|
327
|
+
{
|
|
328
|
+
$afterNext = collect();
|
|
329
|
+
$order = $this->getOrderContext($order);
|
|
330
|
+
$nextActivity = $this->nextFirstActivity($order);
|
|
331
|
+
if ($nextActivity) {
|
|
332
|
+
$afterNext = $nextActivity->getNext($order);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
return $afterNext->first();
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Retrieves the previous activities based on the current activity.
|
|
340
|
+
*
|
|
341
|
+
* @param Order|null $order the order to evaluate
|
|
342
|
+
*
|
|
343
|
+
* @return Collection a collection of previous activities
|
|
344
|
+
*/
|
|
345
|
+
public function previousActivity(?Order $order = null): Collection
|
|
346
|
+
{
|
|
347
|
+
$order = $this->getOrderContext($order);
|
|
348
|
+
$currentActivity = $this->currentActivity($order);
|
|
349
|
+
if ($currentActivity) {
|
|
350
|
+
return $currentActivity->getPrevious($order);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return collect();
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Creates an Activity instance representing a canceled order.
|
|
358
|
+
*
|
|
359
|
+
* This method constructs an Activity object with specific attributes
|
|
360
|
+
* like key, code, status, and details, indicating that the order has been canceled.
|
|
361
|
+
* It utilizes the flow associated with the OrderConfig for this purpose.
|
|
362
|
+
*
|
|
363
|
+
* @return Activity a new Activity instance representing a canceled order
|
|
364
|
+
*/
|
|
365
|
+
public function getCanceledActivity()
|
|
366
|
+
{
|
|
367
|
+
$canceledActivity = $this->activities()->firstWhere('code', 'canceled');
|
|
368
|
+
if ($canceledActivity) {
|
|
369
|
+
return $canceledActivity;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return new Activity([
|
|
373
|
+
'key' => 'order_canceled',
|
|
374
|
+
'code' => 'canceled',
|
|
375
|
+
'status' => 'Order canceled',
|
|
376
|
+
'details' => 'Order was canceled',
|
|
377
|
+
'complete' => false,
|
|
378
|
+
], $this->flow);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Creates an Activity instance representing a completed order.
|
|
383
|
+
*
|
|
384
|
+
* This method constructs an Activity object with specific attributes
|
|
385
|
+
* such as key, code, status, and details, indicating that the order has been completed.
|
|
386
|
+
* It leverages the flow associated with the OrderConfig to construct this Activity.
|
|
387
|
+
*
|
|
388
|
+
* @return Activity a new Activity instance representing a completed order
|
|
389
|
+
*/
|
|
390
|
+
public function getCompletedActivity()
|
|
391
|
+
{
|
|
392
|
+
$completedActivity = $this->activities()->firstWhere('code', 'completed');
|
|
393
|
+
if ($completedActivity) {
|
|
394
|
+
return $completedActivity;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
return new Activity([
|
|
398
|
+
'key' => 'order_completed',
|
|
399
|
+
'code' => 'completed',
|
|
400
|
+
'status' => 'Order completed',
|
|
401
|
+
'details' => 'Order was completed',
|
|
402
|
+
'complete' => true,
|
|
403
|
+
], $this->flow);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Creates an Activity instance representing a started order.
|
|
408
|
+
*
|
|
409
|
+
* This method constructs an Activity object with specific attributes
|
|
410
|
+
* such as key, code, status, and details, indicating that the order has been started.
|
|
411
|
+
* It leverages the flow associated with the OrderConfig to construct this Activity.
|
|
412
|
+
*
|
|
413
|
+
* @return Activity a new Activity instance representing a started order
|
|
414
|
+
*/
|
|
415
|
+
public function getStartedActivity()
|
|
416
|
+
{
|
|
417
|
+
$startedActivity = $this->activities()->firstWhere('code', 'started');
|
|
418
|
+
if ($startedActivity) {
|
|
419
|
+
return $startedActivity;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
return new Activity([
|
|
423
|
+
'key' => 'order_started',
|
|
424
|
+
'code' => 'started',
|
|
425
|
+
'status' => 'Order started',
|
|
426
|
+
'details' => 'Order has started',
|
|
427
|
+
'complete' => false,
|
|
428
|
+
], $this->flow);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Resolves an OrderConfig from a given identifier or an array of identifiers within an optional company context.
|
|
433
|
+
*
|
|
434
|
+
* @param string|array $orderConfigIdentifier the identifier(s) for the OrderConfig (namespace, public_id, or key)
|
|
435
|
+
* @param Company|null $company the company context, if any, to narrow down the search
|
|
436
|
+
*
|
|
437
|
+
* @return OrderConfig|null the found OrderConfig or null if none found
|
|
438
|
+
*/
|
|
439
|
+
public static function resolveFromIdentifier($orderConfigIdentifier, ?Company $company = null): ?OrderConfig
|
|
440
|
+
{
|
|
441
|
+
$query = static::query();
|
|
442
|
+
|
|
443
|
+
if ($company instanceof Company) {
|
|
444
|
+
$query->where('company_uuid', $company->uuid);
|
|
445
|
+
} else {
|
|
446
|
+
$companyUuid = session('company');
|
|
447
|
+
if ($companyUuid) {
|
|
448
|
+
$query->where('company_uuid', $companyUuid);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
$identifiers = is_array($orderConfigIdentifier) ? $orderConfigIdentifier : [$orderConfigIdentifier];
|
|
453
|
+
foreach ($identifiers as $identifier) {
|
|
454
|
+
$orderConfig = $query->where(function ($query) use ($identifier) {
|
|
455
|
+
$query->where('namespace', $identifier)
|
|
456
|
+
->orWhere('public_id', $identifier)
|
|
457
|
+
->orWhere('key', $identifier);
|
|
458
|
+
})->first();
|
|
459
|
+
|
|
460
|
+
if ($orderConfig) {
|
|
461
|
+
return $orderConfig;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Models;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\FleetOps\Flow\Activity;
|
|
6
7
|
use Fleetbase\FleetOps\Support\Utils;
|
|
7
8
|
use Fleetbase\Http\Resources\Internal\v1\Payload as PayloadResource;
|
|
8
9
|
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
@@ -701,12 +702,11 @@ class Payload extends Model
|
|
|
701
702
|
/**
|
|
702
703
|
* Set the first waypoint and update activity.
|
|
703
704
|
*
|
|
704
|
-
* @param array $activity
|
|
705
705
|
* @param Point $location
|
|
706
706
|
*
|
|
707
707
|
* @return void
|
|
708
708
|
*/
|
|
709
|
-
public function setFirstWaypoint($activity = null, $location = null)
|
|
709
|
+
public function setFirstWaypoint(?Activity $activity = null, $location = null)
|
|
710
710
|
{
|
|
711
711
|
$destination = null;
|
|
712
712
|
|
|
@@ -730,27 +730,26 @@ class Payload extends Model
|
|
|
730
730
|
/**
|
|
731
731
|
* Update the current waypoint activity and it's entities.
|
|
732
732
|
*
|
|
733
|
-
* @param array $activity
|
|
734
733
|
* @param Point $location
|
|
735
734
|
* @param \Fleetbase\Models\Proof|string|null $proof resolvable proof of delivery/activity
|
|
736
735
|
*
|
|
737
736
|
* @return $this
|
|
738
737
|
*/
|
|
739
|
-
public function updateWaypointActivity($activity = null, $location = null, $proof = null)
|
|
738
|
+
public function updateWaypointActivity(?Activity $activity = null, $location = null, $proof = null)
|
|
740
739
|
{
|
|
741
|
-
if ($this->isMultipleDropOrder &&
|
|
740
|
+
if ($this->isMultipleDropOrder && Utils::isActivity($activity) && $location) {
|
|
742
741
|
// update activity for the current waypoint
|
|
743
742
|
$currentWaypoint = $this->waypointMarkers->firstWhere('place_uuid', $this->current_waypoint_uuid);
|
|
744
743
|
|
|
745
744
|
if ($currentWaypoint) {
|
|
746
|
-
$currentWaypoint->insertActivity($activity
|
|
745
|
+
$currentWaypoint->insertActivity($activity, $location, $proof);
|
|
747
746
|
}
|
|
748
747
|
|
|
749
748
|
// update activity for all entities for this destination/waypoint
|
|
750
749
|
$entities = $this->entities->where('destination_uuid', $this->current_waypoint_uuid);
|
|
751
750
|
|
|
752
751
|
foreach ($entities as $entity) {
|
|
753
|
-
$entity->insertActivity($activity
|
|
752
|
+
$entity->insertActivity($activity, $location, $proof);
|
|
754
753
|
}
|
|
755
754
|
}
|
|
756
755
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Support\FleetOps;
|
|
6
|
+
use Fleetbase\Models\Company;
|
|
7
|
+
|
|
8
|
+
class CompanyObserver
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Handle the Company "created" event.
|
|
12
|
+
*
|
|
13
|
+
* @return void
|
|
14
|
+
*/
|
|
15
|
+
public function created(Company $company)
|
|
16
|
+
{
|
|
17
|
+
// Add the default transport order config
|
|
18
|
+
FleetOps::createTransportConfig($company);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -6,8 +6,9 @@ use Brick\Geo\Engine\GeometryEngineRegistry;
|
|
|
6
6
|
use Brick\Geo\Engine\GEOSEngine;
|
|
7
7
|
use Fleetbase\Providers\CoreServiceProvider;
|
|
8
8
|
use Fleetbase\Support\NotificationRegistry;
|
|
9
|
+
use Fleetbase\Support\Utils;
|
|
9
10
|
|
|
10
|
-
if (!
|
|
11
|
+
if (!Utils::classExists(CoreServiceProvider::class)) {
|
|
11
12
|
throw new \Exception('FleetOps cannot be loaded without `fleetbase/core-api` installed!');
|
|
12
13
|
}
|
|
13
14
|
|
|
@@ -33,6 +34,7 @@ class FleetOpsServiceProvider extends CoreServiceProvider
|
|
|
33
34
|
\Fleetbase\FleetOps\Models\Vehicle::class => \Fleetbase\FleetOps\Observers\VehicleObserver::class,
|
|
34
35
|
\Fleetbase\FleetOps\Models\Fleet::class => \Fleetbase\FleetOps\Observers\FleetObserver::class,
|
|
35
36
|
\Fleetbase\Models\User::class => \Fleetbase\FleetOps\Observers\UserObserver::class,
|
|
37
|
+
\Fleetbase\Models\Company::class => \Fleetbase\FleetOps\Observers\CompanyObserver::class,
|
|
36
38
|
];
|
|
37
39
|
|
|
38
40
|
/**
|
|
@@ -45,6 +47,7 @@ class FleetOpsServiceProvider extends CoreServiceProvider
|
|
|
45
47
|
\Fleetbase\FleetOps\Console\Commands\DispatchOrders::class,
|
|
46
48
|
\Fleetbase\FleetOps\Console\Commands\TrackOrderDistanceAndTime::class,
|
|
47
49
|
\Fleetbase\FleetOps\Console\Commands\FixDriverCompanies::class,
|
|
50
|
+
\Fleetbase\FleetOps\Console\Commands\FixLegacyOrderConfigs::class,
|
|
48
51
|
];
|
|
49
52
|
|
|
50
53
|
/**
|
|
@@ -4,8 +4,9 @@ namespace Fleetbase\FleetOps\Providers;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Providers\CoreServiceProvider;
|
|
6
6
|
use Fleetbase\Support\NotificationRegistry;
|
|
7
|
+
use Fleetbase\Support\Utils;
|
|
7
8
|
|
|
8
|
-
if (!
|
|
9
|
+
if (!Utils::classExists(CoreServiceProvider::class)) {
|
|
9
10
|
throw new \Exception('FleetOps cannot be loaded without `fleetbase/core-api` installed!');
|
|
10
11
|
}
|
|
11
12
|
|