@fleetbase/fleetops-engine 0.4.17 → 0.4.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon/components/activity-form-panel.hbs +19 -0
- package/addon/components/activity-form-panel.js +18 -0
- package/addon/components/live-map.js +14 -7
- package/addon/components/order-config-manager/details.js +15 -6
- package/addon/components/order-config-manager.js +20 -7
- package/addon/controllers/operations/order-config.js +2 -1
- package/addon/controllers/operations/orders/index/new.js +5 -0
- package/addon/controllers/operations/service-rates/index/new.js +23 -2
- package/addon/routes/operations/service-rates/index/edit.js +14 -5
- package/addon/routes/operations/service-rates/index/new.js +2 -6
- package/addon/services/location.js +54 -44
- package/addon/templates/operations/service-rates/index/new.hbs +10 -1
- package/composer.json +3 -3
- package/extension.json +1 -1
- package/package.json +3 -3
- package/server/config/api.php +3 -650
- package/server/config/fleetops.php +127 -4
- package/server/migrations/2024_03_12_033527_add_public_id_column_to_order_configs_table.php +34 -0
- package/server/migrations/2024_03_13_061249_add_order_config_uuid_column_to_service_rates_table.php +28 -0
- package/server/seeders/OrderConfigSeeder.php +2 -130
- package/server/src/Console/Commands/FixLegacyOrderConfigs.php +17 -11
- package/server/src/Http/Controllers/Api/v1/OrderController.php +25 -3
- package/server/src/Http/Controllers/Api/v1/ServiceQuoteController.php +10 -5
- package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +61 -0
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +12 -2
- package/server/src/Http/Controllers/Internal/v1/ServiceRateController.php +3 -0
- package/server/src/Http/Requests/CreateOrderRequest.php +32 -13
- package/server/src/Http/Requests/Internal/CreateOrderConfigRequest.php +40 -0
- package/server/src/Http/Requests/Internal/CreateOrderRequest.php +97 -0
- package/server/src/Http/Requests/Internal/DeleteOrderConfigRequest.php +0 -0
- package/server/src/Http/Resources/v1/Order.php +1 -1
- package/server/src/Http/Resources/v1/ServiceRate.php +34 -31
- package/server/src/Models/OrderConfig.php +48 -0
- package/server/src/Models/ServiceRate.php +9 -0
- package/server/src/Observers/CompanyObserver.php +20 -0
- package/server/src/Providers/FleetOpsServiceProvider.php +1 -0
- package/server/src/Support/FleetOps.php +137 -0
- package/translations/en-us.yaml +6 -1
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* -------------------------------------------
|
|
5
|
-
*
|
|
5
|
+
* FleetOps API Configuration
|
|
6
6
|
* -------------------------------------------
|
|
7
7
|
*/
|
|
8
8
|
return [
|
|
9
|
+
/*
|
|
10
|
+
|--------------------------------------------------------------------------
|
|
11
|
+
| API Config
|
|
12
|
+
|--------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
9
14
|
'api' => [
|
|
10
15
|
'version' => '0.0.1',
|
|
11
16
|
'routing' => [
|
|
@@ -13,10 +18,128 @@ return [
|
|
|
13
18
|
'internal_prefix' => 'int'
|
|
14
19
|
]
|
|
15
20
|
],
|
|
21
|
+
'connection' => [
|
|
22
|
+
'db' => env('DB_CONNECTION', 'mysql')
|
|
23
|
+
],
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
|--------------------------------------------------------------------------
|
|
27
|
+
| Navigator App
|
|
28
|
+
|--------------------------------------------------------------------------
|
|
29
|
+
*/
|
|
16
30
|
'navigator' => [
|
|
17
31
|
'bypass_verification_code' => env('NAVIGATOR_BYPASS_VERIFICATION_CODE', '999000')
|
|
18
32
|
],
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
|--------------------------------------------------------------------------
|
|
36
|
+
| API Events
|
|
37
|
+
|--------------------------------------------------------------------------
|
|
38
|
+
*/
|
|
39
|
+
'events' => [
|
|
40
|
+
// order events
|
|
41
|
+
'order.created',
|
|
42
|
+
'order.updated',
|
|
43
|
+
'order.deleted',
|
|
44
|
+
'order.dispatched',
|
|
45
|
+
'order.dispatch_failed',
|
|
46
|
+
'order.completed',
|
|
47
|
+
'order.failed',
|
|
48
|
+
'order.driver_assigned',
|
|
49
|
+
'order.completed',
|
|
50
|
+
|
|
51
|
+
// payload events
|
|
52
|
+
'payload.created',
|
|
53
|
+
'payload.updated',
|
|
54
|
+
'payload.deleted',
|
|
55
|
+
|
|
56
|
+
// entity events
|
|
57
|
+
'entity.created',
|
|
58
|
+
'entity.updated',
|
|
59
|
+
'entity.deleted',
|
|
60
|
+
'entity.driver_assigned',
|
|
61
|
+
|
|
62
|
+
// driver events
|
|
63
|
+
'driver.created',
|
|
64
|
+
'driver.updated',
|
|
65
|
+
'driver.deleted',
|
|
66
|
+
'driver.assigned',
|
|
67
|
+
// 'driver.entered_zone',
|
|
68
|
+
// 'driver.exited_zone',
|
|
69
|
+
|
|
70
|
+
// fleet events
|
|
71
|
+
'fleet.created',
|
|
72
|
+
'fleet.updated',
|
|
73
|
+
'fleet.deleted',
|
|
74
|
+
|
|
75
|
+
// purchase_rate events
|
|
76
|
+
'purchase_rate.created',
|
|
77
|
+
'purchase_rate.updated',
|
|
78
|
+
'purchase_rate.deleted',
|
|
79
|
+
|
|
80
|
+
// contact events
|
|
81
|
+
'contact.created',
|
|
82
|
+
'contact.updated',
|
|
83
|
+
'contact.deleted',
|
|
84
|
+
|
|
85
|
+
// place events
|
|
86
|
+
'place.created',
|
|
87
|
+
'place.updated',
|
|
88
|
+
'place.deleted',
|
|
89
|
+
|
|
90
|
+
// service_area events
|
|
91
|
+
'service_area.created',
|
|
92
|
+
'service_area.updated',
|
|
93
|
+
'service_area.deleted',
|
|
94
|
+
|
|
95
|
+
// service_quote events
|
|
96
|
+
'service_quote.created',
|
|
97
|
+
'service_quote.updated',
|
|
98
|
+
'service_quote.deleted',
|
|
99
|
+
|
|
100
|
+
// service_rate events
|
|
101
|
+
'service_rate.created',
|
|
102
|
+
'service_rate.updated',
|
|
103
|
+
'service_rate.deleted',
|
|
104
|
+
|
|
105
|
+
// tracking_number events
|
|
106
|
+
'tracking_number.created',
|
|
107
|
+
'tracking_number.updated',
|
|
108
|
+
'tracking_number.deleted',
|
|
109
|
+
|
|
110
|
+
// tracking_status events
|
|
111
|
+
'tracking_status.created',
|
|
112
|
+
'tracking_status.updated',
|
|
113
|
+
'tracking_status.deleted',
|
|
114
|
+
|
|
115
|
+
// vehicle events
|
|
116
|
+
'vehicle.created',
|
|
117
|
+
'vehicle.updated',
|
|
118
|
+
'vehicle.deleted',
|
|
119
|
+
|
|
120
|
+
// vendor events
|
|
121
|
+
'vendor.created',
|
|
122
|
+
'vendor.updated',
|
|
123
|
+
'vendor.deleted',
|
|
124
|
+
|
|
125
|
+
// zone events
|
|
126
|
+
'zone.created',
|
|
127
|
+
'zone.updated',
|
|
128
|
+
'zone.deleted',
|
|
129
|
+
],
|
|
130
|
+
|
|
131
|
+
/*
|
|
132
|
+
|--------------------------------------------------------------------------
|
|
133
|
+
| Proof of Delivery Methods
|
|
134
|
+
|--------------------------------------------------------------------------
|
|
135
|
+
*/
|
|
136
|
+
'pod_methods' => 'scan,signature,photo',
|
|
137
|
+
|
|
138
|
+
/*
|
|
139
|
+
|--------------------------------------------------------------------------
|
|
140
|
+
| API/Webhook Versions
|
|
141
|
+
|--------------------------------------------------------------------------
|
|
142
|
+
*/
|
|
143
|
+
'versions' => ['2020-09-30', '2024-03-12'],
|
|
144
|
+
'version' => '2024-03-12',
|
|
22
145
|
];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Fleetbase\FleetOps\Models\OrderConfig;
|
|
4
|
+
use Illuminate\Database\Migrations\Migration;
|
|
5
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
6
|
+
use Illuminate\Support\Facades\Schema;
|
|
7
|
+
|
|
8
|
+
return new class() extends Migration {
|
|
9
|
+
/**
|
|
10
|
+
* Run the migrations.
|
|
11
|
+
*/
|
|
12
|
+
public function up(): void
|
|
13
|
+
{
|
|
14
|
+
Schema::table('order_configs', function (Blueprint $table) {
|
|
15
|
+
$table->string('public_id')->nullable()->after('uuid')->index();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Update order configs with a public id
|
|
19
|
+
$orderCofigs = OrderConfig::all();
|
|
20
|
+
foreach ($orderCofigs as $orderCofig) {
|
|
21
|
+
$orderCofig->update(['public_id' => OrderConfig::generatePublicId('order_config')]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Reverse the migrations.
|
|
27
|
+
*/
|
|
28
|
+
public function down(): void
|
|
29
|
+
{
|
|
30
|
+
Schema::table('order_configs', function (Blueprint $table) {
|
|
31
|
+
$table->dropColumn('public_id');
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
};
|
package/server/migrations/2024_03_13_061249_add_order_config_uuid_column_to_service_rates_table.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Illuminate\Database\Migrations\Migration;
|
|
4
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
5
|
+
use Illuminate\Support\Facades\Schema;
|
|
6
|
+
|
|
7
|
+
return new class() extends Migration {
|
|
8
|
+
/**
|
|
9
|
+
* Run the migrations.
|
|
10
|
+
*/
|
|
11
|
+
public function up(): void
|
|
12
|
+
{
|
|
13
|
+
Schema::table('service_rates', function (Blueprint $table) {
|
|
14
|
+
$table->foreignUuid('order_config_uuid')->nullable()->after('zone_uuid')->references('uuid')->on('order_configs')->onUpdate('CASCADE')->onDelete('CASCADE');
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Reverse the migrations.
|
|
20
|
+
*/
|
|
21
|
+
public function down(): void
|
|
22
|
+
{
|
|
23
|
+
Schema::table('service_rates', function (Blueprint $table) {
|
|
24
|
+
$table->dropForeign(['order_config_uuid']);
|
|
25
|
+
$table->dropColumn(['order_config_uuid']);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
};
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Seeders;
|
|
4
4
|
|
|
5
|
-
use Fleetbase\FleetOps\
|
|
5
|
+
use Fleetbase\FleetOps\Support\FleetOps;
|
|
6
6
|
use Fleetbase\Models\Company;
|
|
7
7
|
use Illuminate\Database\Seeder;
|
|
8
|
-
use Illuminate\Support\Str;
|
|
9
8
|
|
|
10
9
|
class OrderConfigSeeder extends Seeder
|
|
11
10
|
{
|
|
@@ -18,134 +17,7 @@ class OrderConfigSeeder extends Seeder
|
|
|
18
17
|
{
|
|
19
18
|
$companies = Company::all();
|
|
20
19
|
foreach ($companies as $company) {
|
|
21
|
-
|
|
20
|
+
FleetOps::createTransportConfig($company);
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Creates or retrieves an existing transport configuration for a given company.
|
|
27
|
-
*
|
|
28
|
-
* This method attempts to find a transport configuration (`OrderConfig`) for the specified company.
|
|
29
|
-
* If such a configuration exists, it's returned. Otherwise, a new configuration is created with default values,
|
|
30
|
-
* such as the company UUID, key, core service flag, status, version, tags, and predefined workflow steps.
|
|
31
|
-
* These steps include 'created', 'enroute', 'started', 'completed', and 'dispatched', each with specific attributes.
|
|
32
|
-
*
|
|
33
|
-
* @param Company $company the company for which the transport configuration is being created or retrieved
|
|
34
|
-
*
|
|
35
|
-
* @return OrderConfig the transport configuration associated with the specified company
|
|
36
|
-
*/
|
|
37
|
-
public static function createTransportConfig(Company $company): OrderConfig
|
|
38
|
-
{
|
|
39
|
-
return OrderConfig::firstOrCreate(
|
|
40
|
-
[
|
|
41
|
-
'company_uuid' => $company->uuid,
|
|
42
|
-
'key' => 'transport',
|
|
43
|
-
'namespace' => 'system:order-config:transport',
|
|
44
|
-
],
|
|
45
|
-
[
|
|
46
|
-
'name' => 'Transport',
|
|
47
|
-
'key' => 'transport',
|
|
48
|
-
'namespace' => 'system:order-config:transport',
|
|
49
|
-
'description' => 'Default order configuration for transport',
|
|
50
|
-
'core_service' => 1,
|
|
51
|
-
'status' => 'private',
|
|
52
|
-
'version' => '0.0.1',
|
|
53
|
-
'tags' => ['transport', 'delivery'],
|
|
54
|
-
'entities' => [],
|
|
55
|
-
'meta' => [],
|
|
56
|
-
'flow' => [
|
|
57
|
-
'created' => [
|
|
58
|
-
'key' => 'created',
|
|
59
|
-
'code' => 'created',
|
|
60
|
-
'color' => '#1f2937',
|
|
61
|
-
'logic' => [],
|
|
62
|
-
'events' => [],
|
|
63
|
-
'status' => 'Order Created',
|
|
64
|
-
'actions' => [],
|
|
65
|
-
'details' => 'New order was created.',
|
|
66
|
-
'options' => [],
|
|
67
|
-
'complete' => false,
|
|
68
|
-
'entities' => [],
|
|
69
|
-
'sequence' => 0,
|
|
70
|
-
'activities' => ['dispatched'],
|
|
71
|
-
'internalId' => Str::uuid(),
|
|
72
|
-
'pod_method' => 'scan',
|
|
73
|
-
'require_pod' => false,
|
|
74
|
-
],
|
|
75
|
-
'enroute' => [
|
|
76
|
-
'key' => 'enroute',
|
|
77
|
-
'code' => 'enroute',
|
|
78
|
-
'color' => '#1f2937',
|
|
79
|
-
'logic' => [],
|
|
80
|
-
'events' => [],
|
|
81
|
-
'status' => 'Driver Enroute',
|
|
82
|
-
'actions' => [],
|
|
83
|
-
'details' => 'Driver is en-route.',
|
|
84
|
-
'options' => [],
|
|
85
|
-
'complete' => false,
|
|
86
|
-
'entities' => [],
|
|
87
|
-
'sequence' => 0,
|
|
88
|
-
'activities' => ['completed'],
|
|
89
|
-
'internalId' => Str::uuid(),
|
|
90
|
-
'pod_method' => 'scan',
|
|
91
|
-
'require_pod' => false,
|
|
92
|
-
],
|
|
93
|
-
'started' => [
|
|
94
|
-
'key' => 'started',
|
|
95
|
-
'code' => 'started',
|
|
96
|
-
'color' => '#1f2937',
|
|
97
|
-
'logic' => [],
|
|
98
|
-
'events' => [],
|
|
99
|
-
'status' => 'Order Started',
|
|
100
|
-
'actions' => [],
|
|
101
|
-
'details' => 'Order has been started',
|
|
102
|
-
'options' => [],
|
|
103
|
-
'complete' => false,
|
|
104
|
-
'entities' => [],
|
|
105
|
-
'sequence' => 0,
|
|
106
|
-
'activities' => ['enroute'],
|
|
107
|
-
'internalId' => Str::uuid(),
|
|
108
|
-
'pod_method' => 'scan',
|
|
109
|
-
'require_pod' => false,
|
|
110
|
-
],
|
|
111
|
-
'completed' => [
|
|
112
|
-
'key' => 'completed',
|
|
113
|
-
'code' => 'completed',
|
|
114
|
-
'color' => '#1f2937',
|
|
115
|
-
'logic' => [],
|
|
116
|
-
'events' => [],
|
|
117
|
-
'status' => 'Order Completed',
|
|
118
|
-
'actions' => [],
|
|
119
|
-
'details' => 'Order has been completed.',
|
|
120
|
-
'options' => [],
|
|
121
|
-
'complete' => true,
|
|
122
|
-
'entities' => [],
|
|
123
|
-
'sequence' => 0,
|
|
124
|
-
'activities' => [],
|
|
125
|
-
'internalId' => Str::uuid(),
|
|
126
|
-
'pod_method' => 'scan',
|
|
127
|
-
'require_pod' => false,
|
|
128
|
-
],
|
|
129
|
-
'dispatched' => [
|
|
130
|
-
'key' => 'dispatched',
|
|
131
|
-
'code' => 'dispatched',
|
|
132
|
-
'color' => '#1f2937',
|
|
133
|
-
'logic' => [],
|
|
134
|
-
'events' => [],
|
|
135
|
-
'status' => 'Order Dispatched',
|
|
136
|
-
'actions' => [],
|
|
137
|
-
'details' => 'Order has been dispatched.',
|
|
138
|
-
'options' => [],
|
|
139
|
-
'complete' => false,
|
|
140
|
-
'entities' => [],
|
|
141
|
-
'sequence' => 0,
|
|
142
|
-
'activities' => ['started'],
|
|
143
|
-
'internalId' => Str::uuid(),
|
|
144
|
-
'pod_method' => 'scan',
|
|
145
|
-
'require_pod' => false,
|
|
146
|
-
],
|
|
147
|
-
],
|
|
148
|
-
]
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
23
|
}
|
|
@@ -4,9 +4,9 @@ namespace Fleetbase\FleetOps\Console\Commands;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Models\Order;
|
|
6
6
|
use Fleetbase\FleetOps\Models\OrderConfig;
|
|
7
|
-
use Fleetbase\Support\
|
|
7
|
+
use Fleetbase\FleetOps\Support\FleetOps;
|
|
8
|
+
use Fleetbase\Models\Company;
|
|
8
9
|
use Illuminate\Console\Command;
|
|
9
|
-
use Illuminate\Support\Facades\Artisan;
|
|
10
10
|
|
|
11
11
|
class FixLegacyOrderConfigs extends Command
|
|
12
12
|
{
|
|
@@ -15,7 +15,7 @@ class FixLegacyOrderConfigs extends Command
|
|
|
15
15
|
*
|
|
16
16
|
* @var string
|
|
17
17
|
*/
|
|
18
|
-
protected $signature = 'fleetops:fix-legacy-order-configs';
|
|
18
|
+
protected $signature = 'fleetops:fix-legacy-order-configs {--create-configs}';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* The console command description.
|
|
@@ -35,14 +35,20 @@ class FixLegacyOrderConfigs extends Command
|
|
|
35
35
|
*/
|
|
36
36
|
public function handle()
|
|
37
37
|
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
$
|
|
38
|
+
$shouldCreateConfigs = $this->option('create-configs');
|
|
39
|
+
if ($shouldCreateConfigs) {
|
|
40
|
+
$companies = Company::all();
|
|
41
|
+
$totalCompanies = $companies->count();
|
|
42
|
+
$this->info('Initializing transport config for ' . $totalCompanies . ' companies.');
|
|
43
|
+
$progressBar = $this->output->createProgressBar($totalCompanies);
|
|
44
|
+
$progressBar->start();
|
|
45
|
+
foreach ($companies as $company) {
|
|
46
|
+
FleetOps::createTransportConfig($company);
|
|
47
|
+
$progressBar->advance();
|
|
48
|
+
}
|
|
49
|
+
$progressBar->finish();
|
|
50
|
+
$this->line('');
|
|
51
|
+
$this->info('All transport configs created.');
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
$orders = Order::whereNull('order_config_uuid')->get();
|
|
@@ -15,6 +15,7 @@ use Fleetbase\FleetOps\Http\Resources\v1\Proof as ProofResource;
|
|
|
15
15
|
use Fleetbase\FleetOps\Models\Driver;
|
|
16
16
|
use Fleetbase\FleetOps\Models\Entity;
|
|
17
17
|
use Fleetbase\FleetOps\Models\Order;
|
|
18
|
+
use Fleetbase\FleetOps\Models\OrderConfig;
|
|
18
19
|
use Fleetbase\FleetOps\Models\Payload;
|
|
19
20
|
use Fleetbase\FleetOps\Models\Place;
|
|
20
21
|
use Fleetbase\FleetOps\Models\Proof;
|
|
@@ -42,7 +43,17 @@ class OrderController extends Controller
|
|
|
42
43
|
public function create(CreateOrderRequest $request)
|
|
43
44
|
{
|
|
44
45
|
// get request input
|
|
45
|
-
$input = $request->only(['internal_id', 'payload', 'service_quote', 'purchase_rate', 'adhoc', 'adhoc_distance', 'pod_method', 'pod_required', 'scheduled_at', '
|
|
46
|
+
$input = $request->only(['internal_id', 'payload', 'service_quote', 'purchase_rate', 'adhoc', 'adhoc_distance', 'pod_method', 'pod_required', 'scheduled_at', 'status', 'meta', 'notes']);
|
|
47
|
+
|
|
48
|
+
// Get order config
|
|
49
|
+
$orderConfig = OrderConfig::resolveFromIdentifier($request->only(['type', 'order_config']));
|
|
50
|
+
if (!$orderConfig) {
|
|
51
|
+
return response()->apiError('Invalid order `type` or `order_config` provided.');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Set order config to input
|
|
55
|
+
$input['order_config_uuid'] = $orderConfig->uuid;
|
|
56
|
+
$input['type'] = $orderConfig->key;
|
|
46
57
|
|
|
47
58
|
// make sure company is set
|
|
48
59
|
$input['company_uuid'] = session('company');
|
|
@@ -965,9 +976,20 @@ class OrderController extends Controller
|
|
|
965
976
|
);
|
|
966
977
|
}
|
|
967
978
|
|
|
968
|
-
$
|
|
979
|
+
$activities = $order->config()->nextActivity();
|
|
980
|
+
|
|
981
|
+
// If activity is to complete order add proof of delivery properties if required
|
|
982
|
+
// This is a temporary fix until activity is updated to handle POD on it's own
|
|
983
|
+
$activities = $activities->map(function ($activity) use ($order) {
|
|
984
|
+
if ($activity->completesOrder() && $order->pod_required) {
|
|
985
|
+
$activity->set('require_pod', true);
|
|
986
|
+
$activity->set('pod_method', $order->pod_method);
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
return $activity;
|
|
990
|
+
});
|
|
969
991
|
|
|
970
|
-
return response()->json($
|
|
992
|
+
return response()->json($activities);
|
|
971
993
|
}
|
|
972
994
|
|
|
973
995
|
/**
|
|
@@ -4,6 +4,7 @@ namespace Fleetbase\FleetOps\Http\Controllers\Api\v1;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Http\Requests\QueryServiceQuotesRequest;
|
|
6
6
|
use Fleetbase\FleetOps\Http\Resources\v1\ServiceQuote as ServiceQuoteResource;
|
|
7
|
+
use Fleetbase\FleetOps\Models\Entity;
|
|
7
8
|
use Fleetbase\FleetOps\Models\IntegratedVendor;
|
|
8
9
|
use Fleetbase\FleetOps\Models\Payload;
|
|
9
10
|
use Fleetbase\FleetOps\Models\Place;
|
|
@@ -76,11 +77,15 @@ class ServiceQuoteController extends Controller
|
|
|
76
77
|
|
|
77
78
|
// if quote for single service
|
|
78
79
|
if ($service && $service !== 'all') {
|
|
79
|
-
$serviceRate = ServiceRate::where(
|
|
80
|
-
|
|
81
|
-
$
|
|
82
|
-
}
|
|
83
|
-
|
|
80
|
+
$serviceRate = ServiceRate::where(
|
|
81
|
+
function ($query) use ($service) {
|
|
82
|
+
$query->where('uuid', $service)->orWhere('public_id', $service);
|
|
83
|
+
})->where(
|
|
84
|
+
function ($q) use ($currency) {
|
|
85
|
+
if ($currency) {
|
|
86
|
+
$q->where(DB::raw('lower(currency)'), strtolower($currency));
|
|
87
|
+
}
|
|
88
|
+
})->first();
|
|
84
89
|
$serviceQuotes = collect();
|
|
85
90
|
|
|
86
91
|
if ($serviceRate) {
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\Exceptions\FleetbaseRequestValidationException;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
7
|
+
use Fleetbase\FleetOps\Http\Requests\Internal\CreateOrderConfigRequest;
|
|
8
|
+
use Fleetbase\FleetOps\Models\OrderConfig;
|
|
9
|
+
use Illuminate\Http\Request;
|
|
10
|
+
use Illuminate\Support\Facades\Validator;
|
|
6
11
|
|
|
7
12
|
class OrderConfigController extends FleetOpsController
|
|
8
13
|
{
|
|
@@ -12,4 +17,60 @@ class OrderConfigController extends FleetOpsController
|
|
|
12
17
|
* @var string
|
|
13
18
|
*/
|
|
14
19
|
public $resource = 'order-config';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates a record with request payload.
|
|
23
|
+
*
|
|
24
|
+
* @return \Illuminate\Http\Response
|
|
25
|
+
*/
|
|
26
|
+
public function createRecord(Request $request)
|
|
27
|
+
{
|
|
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);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
$record = $this->model->createRecordFromRequest($request);
|
|
40
|
+
|
|
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());
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Delete's an order config.
|
|
53
|
+
*
|
|
54
|
+
* @return \Illuminate\Http\Response
|
|
55
|
+
*/
|
|
56
|
+
public function deleteRecord($id, Request $request)
|
|
57
|
+
{
|
|
58
|
+
$orderConfig = OrderConfig::where('uuid', $id)->first();
|
|
59
|
+
if (!$orderConfig) {
|
|
60
|
+
return response()->error('No order config found.');
|
|
61
|
+
}
|
|
62
|
+
|
|
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.');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if ($orderConfig) {
|
|
69
|
+
$orderConfig->delete();
|
|
70
|
+
|
|
71
|
+
$this->resource::wrap($this->resourceSingularlName);
|
|
72
|
+
|
|
73
|
+
return new $this->resource($orderConfig);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
15
76
|
}
|
|
@@ -9,6 +9,7 @@ use Fleetbase\FleetOps\Events\OrderStarted;
|
|
|
9
9
|
use Fleetbase\FleetOps\Flow\Activity;
|
|
10
10
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
11
11
|
use Fleetbase\FleetOps\Http\Requests\CancelOrderRequest;
|
|
12
|
+
use Fleetbase\FleetOps\Http\Requests\Internal\CreateOrderRequest;
|
|
12
13
|
use Fleetbase\FleetOps\Imports\OrdersImport;
|
|
13
14
|
use Fleetbase\FleetOps\Models\Driver;
|
|
14
15
|
use Fleetbase\FleetOps\Models\Entity;
|
|
@@ -25,6 +26,7 @@ use Fleetbase\Models\File;
|
|
|
25
26
|
use Fleetbase\Models\Type;
|
|
26
27
|
use Illuminate\Http\Request;
|
|
27
28
|
use Illuminate\Support\Facades\DB;
|
|
29
|
+
use Illuminate\Support\Facades\Validator;
|
|
28
30
|
use Illuminate\Support\Str;
|
|
29
31
|
use Maatwebsite\Excel\Facades\Excel;
|
|
30
32
|
|
|
@@ -44,9 +46,17 @@ class OrderController extends FleetOpsController
|
|
|
44
46
|
*/
|
|
45
47
|
public function createRecord(Request $request)
|
|
46
48
|
{
|
|
47
|
-
|
|
48
|
-
|
|
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
|
+
}
|
|
49
58
|
|
|
59
|
+
try {
|
|
50
60
|
$record = $this->model->createRecordFromRequest(
|
|
51
61
|
$request,
|
|
52
62
|
function ($request, &$input) {
|
|
@@ -39,6 +39,9 @@ class ServiceRateController extends FleetOpsController
|
|
|
39
39
|
$waypoints,
|
|
40
40
|
function ($query) use ($request) {
|
|
41
41
|
$query->where('company_uuid', $request->session()->get('company'));
|
|
42
|
+
if ($request->filled('service_type')) {
|
|
43
|
+
$query->where('service_type', $request->input('service_type'));
|
|
44
|
+
}
|
|
42
45
|
}
|
|
43
46
|
);
|
|
44
47
|
|