@fleetbase/storefront-engine 0.2.4 → 0.2.6
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/README.md +4 -4
- package/addon/components/modals/import-products.hbs +1 -1
- package/addon/components/schedule-manager.hbs +2 -2
- package/addon/components/widget/customers.hbs +1 -1
- package/addon/components/widget/customers.js +7 -4
- package/addon/components/widget/orders.js +4 -0
- package/addon/controllers/base-controller.js +31 -0
- package/addon/controllers/networks/index/network.js +2 -2
- package/addon/controllers/networks/index.js +3 -2
- package/addon/controllers/products/index/category/new.js +14 -11
- package/addon/controllers/products/index/category.js +2 -2
- package/addon/controllers/products/index/index.js +2 -2
- package/addon/controllers/products/index.js +2 -3
- package/addon/models/network.js +0 -1
- package/addon/models/product-addon-category.js +10 -1
- package/addon/models/product-variant.js +0 -2
- package/addon/models/product.js +35 -2
- package/addon/routes/customers/index.js +11 -1
- package/addon/routes/networks/index.js +9 -0
- package/addon/routes/orders/index.js +11 -1
- package/addon/routes/products/index.js +8 -2
- package/addon/serializers/product.js +16 -0
- package/addon/services/storefront.js +81 -0
- package/addon/templates/networks/index/network/stores.hbs +2 -2
- package/addon/templates/networks/index/network.hbs +1 -1
- package/addon/templates/products/index/category/new.hbs +3 -3
- package/addon/templates/products/index/category.hbs +20 -3
- package/app/controllers/base-controller.js +1 -0
- package/assets/sounds/storefront_order_alert.mp3 +0 -0
- package/composer.json +3 -3
- package/config/environment.js +11 -1
- package/extension.json +1 -1
- package/index.js +15 -0
- package/package.json +132 -125
- package/server/src/Auth/Schemas/Storefront.php +31 -39
- package/server/src/Console/Commands/NotifyStorefrontOrderNearby.php +9 -11
- package/server/src/Expansions/ContactFilterExpansion.php +36 -0
- package/server/src/Expansions/EntityExpansion.php +12 -12
- package/server/src/Expansions/OrderFilterExpansion.php +31 -0
- package/server/src/Expansions/VendorFilterExpansion.php +36 -0
- package/server/src/Http/Controllers/ActionController.php +9 -11
- package/server/src/Http/Controllers/AddonCategoryController.php +1 -1
- package/server/src/Http/Controllers/CustomerController.php +1 -1
- package/server/src/Http/Controllers/GatewayController.php +1 -1
- package/server/src/Http/Controllers/MetricsController.php +17 -17
- package/server/src/Http/Controllers/NetworkController.php +16 -26
- package/server/src/Http/Controllers/NotificationChannelController.php +1 -1
- package/server/src/Http/Controllers/OrderController.php +18 -22
- package/server/src/Http/Controllers/ProductAddonCategoryController.php +1 -2
- package/server/src/Http/Controllers/ProductAddonController.php +1 -2
- package/server/src/Http/Controllers/ProductController.php +89 -44
- package/server/src/Http/Controllers/ProductHourController.php +1 -1
- package/server/src/Http/Controllers/ProductVariantController.php +1 -1
- package/server/src/Http/Controllers/ProductVariantOptionController.php +1 -1
- package/server/src/Http/Controllers/ReviewController.php +1 -1
- package/server/src/Http/Controllers/StoreController.php +1 -2
- package/server/src/Http/Controllers/StoreHourController.php +1 -1
- package/server/src/Http/Controllers/StoreLocationController.php +1 -1
- package/server/src/Http/Controllers/StorefrontController.php +0 -2
- package/server/src/Http/Controllers/VoteController.php +1 -1
- package/server/src/Http/Controllers/v1/CartController.php +16 -26
- package/server/src/Http/Controllers/v1/CategoryController.php +3 -4
- package/server/src/Http/Controllers/v1/CheckoutController.php +283 -286
- package/server/src/Http/Controllers/v1/CustomerController.php +54 -67
- package/server/src/Http/Controllers/v1/GatewayControllerController.php +0 -2
- package/server/src/Http/Controllers/v1/NetworkController.php +26 -23
- package/server/src/Http/Controllers/v1/PaymentMethodController.php +0 -2
- package/server/src/Http/Controllers/v1/ProductController.php +1 -4
- package/server/src/Http/Controllers/v1/ReviewController.php +31 -35
- package/server/src/Http/Controllers/v1/ServiceQuoteController.php +57 -53
- package/server/src/Http/Controllers/v1/StoreController.php +8 -16
- package/server/src/Http/Filter/AddonCategoryFilter.php +1 -1
- package/server/src/Http/Filter/OrderFilter.php +2 -2
- package/server/src/Http/Middleware/SetStorefrontSession.php +9 -20
- package/server/src/Http/Requests/AddStoreToNetworkCategory.php +3 -3
- package/server/src/Http/Requests/CreateCustomerRequest.php +5 -7
- package/server/src/Http/Requests/CreateReviewRequest.php +4 -5
- package/server/src/Http/Requests/GetServiceQuoteFromCart.php +2 -2
- package/server/src/Http/Requests/InitializeCheckoutRequest.php +5 -5
- package/server/src/Http/Requests/NetworkActionRequest.php +2 -2
- package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +2 -2
- package/server/src/Http/Resources/Cart.php +20 -11
- package/server/src/Http/Resources/Category.php +12 -11
- package/server/src/Http/Resources/Customer.php +15 -14
- package/server/src/Http/Resources/Gateway.php +12 -11
- package/server/src/Http/Resources/Media.php +9 -8
- package/server/src/Http/Resources/Network.php +33 -28
- package/server/src/Http/Resources/Product.php +89 -81
- package/server/src/Http/Resources/Review.php +14 -13
- package/server/src/Http/Resources/ReviewCustomer.php +12 -11
- package/server/src/Http/Resources/Store.php +39 -33
- package/server/src/Http/Resources/StoreHour.php +9 -8
- package/server/src/Http/Resources/StoreLocation.php +9 -9
- package/server/src/Imports/ProductsImport.php +0 -2
- package/server/src/Jobs/DownloadProductImageUrl.php +7 -4
- package/server/src/Listeners/HandleOrderCompleted.php +2 -1
- package/server/src/Listeners/HandleOrderDispatched.php +2 -1
- package/server/src/Listeners/HandleOrderDriverAssigned.php +2 -1
- package/server/src/Listeners/HandleOrderStarted.php +4 -3
- package/server/src/Mail/StorefrontNetworkInvite.php +7 -6
- package/server/src/Models/AddonCategory.php +2 -4
- package/server/src/Models/Cart.php +117 -124
- package/server/src/Models/Checkout.php +14 -12
- package/server/src/Models/Customer.php +9 -9
- package/server/src/Models/Gateway.php +22 -22
- package/server/src/Models/Network.php +41 -52
- package/server/src/Models/NetworkStore.php +6 -5
- package/server/src/Models/NotificationChannel.php +11 -9
- package/server/src/Models/PaymentMethod.php +9 -7
- package/server/src/Models/Product.php +152 -30
- package/server/src/Models/ProductAddon.php +14 -11
- package/server/src/Models/ProductAddonCategory.php +9 -8
- package/server/src/Models/ProductHour.php +6 -5
- package/server/src/Models/ProductStoreLocation.php +7 -5
- package/server/src/Models/ProductVariant.php +15 -11
- package/server/src/Models/ProductVariantOption.php +12 -9
- package/server/src/Models/Review.php +9 -7
- package/server/src/Models/Store.php +68 -84
- package/server/src/Models/StoreHour.php +6 -5
- package/server/src/Models/StoreLocation.php +12 -8
- package/server/src/Models/StorefrontModel.php +1 -1
- package/server/src/Models/Vote.php +8 -6
- package/server/src/Notifications/StorefrontOrderCanceled.php +15 -19
- package/server/src/Notifications/StorefrontOrderCompleted.php +15 -19
- package/server/src/Notifications/StorefrontOrderCreated.php +31 -36
- package/server/src/Notifications/StorefrontOrderDriverAssigned.php +15 -20
- package/server/src/Notifications/StorefrontOrderEnroute.php +14 -19
- package/server/src/Notifications/StorefrontOrderNearby.php +16 -21
- package/server/src/Notifications/StorefrontOrderPreparing.php +15 -18
- package/server/src/Notifications/StorefrontOrderReadyForPickup.php +15 -18
- package/server/src/Observers/NetworkObserver.php +2 -3
- package/server/src/Observers/ProductObserver.php +17 -33
- package/server/src/Providers/EventServiceProvider.php +15 -4
- package/server/src/Providers/StorefrontServiceProvider.php +8 -10
- package/server/src/Support/Metrics.php +12 -12
- package/server/src/Support/OrderConfig.php +3 -2
- package/server/src/Support/QPay.php +22 -20
- package/server/src/Support/Storefront.php +18 -17
- package/server/src/routes.php +1 -1
- package/tsconfig.declarations.json +10 -0
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\Storefront\Http\Controllers\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Http\Resources\v1\DeletedResource;
|
|
6
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
5
7
|
use Fleetbase\Http\Controllers\Controller;
|
|
8
|
+
use Fleetbase\Models\File;
|
|
6
9
|
use Fleetbase\Storefront\Http\Requests\CreateReviewRequest;
|
|
7
10
|
use Fleetbase\Storefront\Http\Resources\Review as StorefrontReview;
|
|
8
|
-
use Fleetbase\FleetOps\Http\Resources\v1\DeletedResource;
|
|
9
|
-
use Fleetbase\Storefront\Models\Store;
|
|
10
11
|
use Fleetbase\Storefront\Models\Review;
|
|
12
|
+
use Fleetbase\Storefront\Models\Store;
|
|
11
13
|
use Fleetbase\Storefront\Support\Storefront;
|
|
12
|
-
use Fleetbase\FleetOps\Support\Utils;
|
|
13
|
-
use Fleetbase\Models\File;
|
|
14
14
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
|
15
15
|
use Illuminate\Http\Request;
|
|
16
16
|
use Illuminate\Support\Facades\Storage;
|
|
@@ -20,14 +20,13 @@ class ReviewController extends Controller
|
|
|
20
20
|
/**
|
|
21
21
|
* Query for Storefront Review resources.
|
|
22
22
|
*
|
|
23
|
-
* @param \Illuminate\Http\Request $request
|
|
24
23
|
* @return \Illuminate\Http\Response
|
|
25
24
|
*/
|
|
26
25
|
public function query(Request $request)
|
|
27
26
|
{
|
|
28
|
-
$limit
|
|
27
|
+
$limit = $request->input('limit', false);
|
|
29
28
|
$offset = $request->input('offset', false);
|
|
30
|
-
$sort
|
|
29
|
+
$sort = $request->input('sort');
|
|
31
30
|
|
|
32
31
|
if (session('storefront_store')) {
|
|
33
32
|
$results = Review::queryWithRequest($request, function (&$query) use ($limit, $offset, $sort) {
|
|
@@ -71,7 +70,7 @@ class ReviewController extends Controller
|
|
|
71
70
|
if ($request->filled('store')) {
|
|
72
71
|
$store = Store::where([
|
|
73
72
|
'company_uuid' => session('company'),
|
|
74
|
-
'public_id'
|
|
73
|
+
'public_id' => $request->input('store'),
|
|
75
74
|
])->whereHas('networks', function ($q) {
|
|
76
75
|
$q->where('network_uuid', session('storefront_network'));
|
|
77
76
|
})->first();
|
|
@@ -124,13 +123,12 @@ class ReviewController extends Controller
|
|
|
124
123
|
/**
|
|
125
124
|
* Coutns the number of ratings between 1-5 for a store.
|
|
126
125
|
*
|
|
127
|
-
* @param \Illuminate\Http\Request $request
|
|
128
126
|
* @return \Illuminate\Http\Response
|
|
129
127
|
*/
|
|
130
128
|
public function count(Request $request)
|
|
131
129
|
{
|
|
132
130
|
$counts = [];
|
|
133
|
-
$range
|
|
131
|
+
$range = range(1, 5);
|
|
134
132
|
|
|
135
133
|
if (session('storefront_store')) {
|
|
136
134
|
foreach ($range as $rating) {
|
|
@@ -142,7 +140,7 @@ class ReviewController extends Controller
|
|
|
142
140
|
if ($request->filled('store')) {
|
|
143
141
|
$store = Store::where([
|
|
144
142
|
'company_uuid' => session('company'),
|
|
145
|
-
'public_id'
|
|
143
|
+
'public_id' => $request->input('store'),
|
|
146
144
|
])->whereHas('networks', function ($q) {
|
|
147
145
|
$q->where('network_uuid', session('storefront_network'));
|
|
148
146
|
})->first();
|
|
@@ -163,7 +161,8 @@ class ReviewController extends Controller
|
|
|
163
161
|
/**
|
|
164
162
|
* Finds a single Storefront Review resources.
|
|
165
163
|
*
|
|
166
|
-
* @param
|
|
164
|
+
* @param string $id
|
|
165
|
+
*
|
|
167
166
|
* @return \Fleetbase\Http\Response
|
|
168
167
|
*/
|
|
169
168
|
public function find($id)
|
|
@@ -182,13 +181,12 @@ class ReviewController extends Controller
|
|
|
182
181
|
/**
|
|
183
182
|
* Create a review.
|
|
184
183
|
*
|
|
185
|
-
* @param \Fleetbase\Storefront\Http\Requests\CreateReviewRequest $request
|
|
186
184
|
* @return \Fleetbase\Http\Response
|
|
187
185
|
*/
|
|
188
186
|
public function create(CreateReviewRequest $request)
|
|
189
187
|
{
|
|
190
188
|
$customer = Storefront::getCustomerFromToken();
|
|
191
|
-
$about
|
|
189
|
+
$about = Storefront::about();
|
|
192
190
|
|
|
193
191
|
if (!$customer) {
|
|
194
192
|
return response()->error('Not authorized to create reviews');
|
|
@@ -202,11 +200,11 @@ class ReviewController extends Controller
|
|
|
202
200
|
|
|
203
201
|
$review = Review::create([
|
|
204
202
|
'created_by_uuid' => $customer->user_uuid,
|
|
205
|
-
'customer_uuid'
|
|
206
|
-
'subject_uuid'
|
|
207
|
-
'subject_type'
|
|
208
|
-
'rating'
|
|
209
|
-
'content'
|
|
203
|
+
'customer_uuid' => $customer->uuid,
|
|
204
|
+
'subject_uuid' => $subject->uuid,
|
|
205
|
+
'subject_type' => Utils::getMutationType($subject),
|
|
206
|
+
'rating' => $request->input('rating'),
|
|
207
|
+
'content' => $request->input('content'),
|
|
210
208
|
]);
|
|
211
209
|
|
|
212
210
|
// if files provided
|
|
@@ -214,10 +212,9 @@ class ReviewController extends Controller
|
|
|
214
212
|
$files = $request->input('files');
|
|
215
213
|
|
|
216
214
|
foreach ($files as $upload) {
|
|
217
|
-
|
|
218
|
-
$
|
|
219
|
-
$
|
|
220
|
-
$extension = File::getExtensionFromMimeType($mimeType);
|
|
215
|
+
$data = Utils::get($upload, 'data');
|
|
216
|
+
$mimeType = Utils::get($upload, 'type');
|
|
217
|
+
$extension = File::getExtensionFromMimeType($mimeType);
|
|
221
218
|
$bucketPath = 'hyperstore/' . $about->public_id . '/review-photos/' . $review->uuid . '/' . File::randomFileName($extension);
|
|
222
219
|
|
|
223
220
|
// upload file to path
|
|
@@ -225,18 +222,18 @@ class ReviewController extends Controller
|
|
|
225
222
|
|
|
226
223
|
// create the file
|
|
227
224
|
$file = File::create([
|
|
228
|
-
'company_uuid'
|
|
229
|
-
'uploader_uuid'
|
|
230
|
-
'subject_uuid'
|
|
231
|
-
'subject_type'
|
|
232
|
-
'name'
|
|
225
|
+
'company_uuid' => session('company'),
|
|
226
|
+
'uploader_uuid' => $customer->user_uuid,
|
|
227
|
+
'subject_uuid' => $review->uuid,
|
|
228
|
+
'subject_type' => Utils::getMutationType($review),
|
|
229
|
+
'name' => basename($bucketPath),
|
|
233
230
|
'original_filename' => basename($bucketPath),
|
|
234
|
-
'extension'
|
|
235
|
-
'content_type'
|
|
236
|
-
'path'
|
|
237
|
-
'bucket'
|
|
238
|
-
'type'
|
|
239
|
-
'size'
|
|
231
|
+
'extension' => $extension,
|
|
232
|
+
'content_type' => $mimeType,
|
|
233
|
+
'path' => $bucketPath,
|
|
234
|
+
'bucket' => config('filesystems.disks.s3.bucket'),
|
|
235
|
+
'type' => 'storefront_review_upload',
|
|
236
|
+
'size' => Utils::getBase64ImageSize($data),
|
|
240
237
|
]);
|
|
241
238
|
|
|
242
239
|
$review->files->push($file);
|
|
@@ -249,7 +246,6 @@ class ReviewController extends Controller
|
|
|
249
246
|
/**
|
|
250
247
|
* Deletes a Storefront Review resources.
|
|
251
248
|
*
|
|
252
|
-
* @param \Illuminate\Http\Request $request
|
|
253
249
|
* @return \Fleetbase\Http\Resources\v1\DeletedResource
|
|
254
250
|
*/
|
|
255
251
|
public function delete($id)
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\Storefront\Http\Controllers\v1;
|
|
4
4
|
|
|
5
|
-
use Fleetbase\Http\Controllers\Controller;
|
|
6
|
-
use Fleetbase\Storefront\Http\Requests\GetServiceQuoteFromCart;
|
|
7
5
|
use Fleetbase\FleetOps\Http\Resources\v1\ServiceQuote as ServiceQuoteResource;
|
|
8
6
|
use Fleetbase\FleetOps\Models\Entity;
|
|
7
|
+
use Fleetbase\FleetOps\Models\IntegratedVendor;
|
|
9
8
|
use Fleetbase\FleetOps\Models\Place;
|
|
10
9
|
use Fleetbase\FleetOps\Models\ServiceQuote;
|
|
11
10
|
use Fleetbase\FleetOps\Models\ServiceQuoteItem;
|
|
12
11
|
use Fleetbase\FleetOps\Models\ServiceRate;
|
|
13
|
-
use Fleetbase\FleetOps\
|
|
14
|
-
use Fleetbase\
|
|
12
|
+
use Fleetbase\FleetOps\Support\Flow;
|
|
13
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
14
|
+
use Fleetbase\Http\Controllers\Controller;
|
|
15
|
+
use Fleetbase\Storefront\Http\Requests\GetServiceQuoteFromCart;
|
|
15
16
|
use Fleetbase\Storefront\Models\Cart;
|
|
16
17
|
use Fleetbase\Storefront\Models\Product;
|
|
18
|
+
use Fleetbase\Storefront\Models\Store;
|
|
17
19
|
use Fleetbase\Storefront\Models\StoreLocation;
|
|
18
|
-
use Fleetbase\FleetOps\Support\Flow;
|
|
19
|
-
use Fleetbase\FleetOps\Support\Utils;
|
|
20
20
|
use Illuminate\Support\Str;
|
|
21
21
|
|
|
22
22
|
class ServiceQuoteController extends Controller
|
|
@@ -24,23 +24,24 @@ class ServiceQuoteController extends Controller
|
|
|
24
24
|
/**
|
|
25
25
|
* Query for Storefront Product resources.
|
|
26
26
|
*
|
|
27
|
-
* @param
|
|
27
|
+
* @param \Illuminate\Http\Request $request
|
|
28
|
+
*
|
|
28
29
|
* @return \Fleetbase\Http\Resources\DriverCollection
|
|
29
30
|
*/
|
|
30
31
|
public function fromCart(GetServiceQuoteFromCart $request)
|
|
31
32
|
{
|
|
32
|
-
$requestId
|
|
33
|
-
$origin
|
|
34
|
-
$destination
|
|
35
|
-
$facilitator
|
|
36
|
-
$scheduledAt
|
|
37
|
-
$serviceType
|
|
38
|
-
$cart
|
|
39
|
-
$currency
|
|
40
|
-
$config
|
|
41
|
-
$all
|
|
33
|
+
$requestId = ServiceQuote::generatePublicId('request');
|
|
34
|
+
$origin = $this->getPlaceFromId($request->input('origin'));
|
|
35
|
+
$destination = $this->getPlaceFromId($request->input('destination'));
|
|
36
|
+
$facilitator = $request->input('facilitator');
|
|
37
|
+
$scheduledAt = $request->input('scheduled_at');
|
|
38
|
+
$serviceType = $request->input('service_type');
|
|
39
|
+
$cart = Cart::retrieve($request->input('cart'));
|
|
40
|
+
$currency = $cart->currency;
|
|
41
|
+
$config = $request->input('config', 'storefront');
|
|
42
|
+
$all = $request->boolean('all');
|
|
42
43
|
$isRouteOptimized = $request->boolean('is_route_optimized', true);
|
|
43
|
-
$isNetwork
|
|
44
|
+
$isNetwork = Str::startsWith(session('storefront_key'), 'network_');
|
|
44
45
|
|
|
45
46
|
if ($isNetwork) {
|
|
46
47
|
return $this->fromCartForNetwork($request);
|
|
@@ -77,7 +78,7 @@ class ServiceQuoteController extends Controller
|
|
|
77
78
|
|
|
78
79
|
// set origin and destination in service quote meta
|
|
79
80
|
$serviceQuote->updateMeta([
|
|
80
|
-
'origin'
|
|
81
|
+
'origin' => $origin->public_id,
|
|
81
82
|
'destination' => $destination->public_id,
|
|
82
83
|
]);
|
|
83
84
|
|
|
@@ -120,7 +121,7 @@ class ServiceQuoteController extends Controller
|
|
|
120
121
|
|
|
121
122
|
// set origin and destination in service quote meta
|
|
122
123
|
$serviceQuote->updateMeta([
|
|
123
|
-
'origin'
|
|
124
|
+
'origin' => $origin->public_id,
|
|
124
125
|
'destination' => $destination->public_id,
|
|
125
126
|
]);
|
|
126
127
|
|
|
@@ -135,24 +136,24 @@ class ServiceQuoteController extends Controller
|
|
|
135
136
|
[$subTotal, $lines] = $serviceRate->quoteFromPreliminaryData($entities, [$origin, $destination], $matrix->distance, $matrix->time, false);
|
|
136
137
|
|
|
137
138
|
$quote = ServiceQuote::create([
|
|
138
|
-
'request_id'
|
|
139
|
-
'company_uuid'
|
|
139
|
+
'request_id' => $requestId,
|
|
140
|
+
'company_uuid' => $serviceRate->company_uuid,
|
|
140
141
|
'service_rate_uuid' => $serviceRate->uuid,
|
|
141
|
-
'amount'
|
|
142
|
-
'currency'
|
|
143
|
-
'meta'
|
|
144
|
-
'origin'
|
|
142
|
+
'amount' => $subTotal,
|
|
143
|
+
'currency' => $serviceRate->currency,
|
|
144
|
+
'meta' => [
|
|
145
|
+
'origin' => $origin->public_id,
|
|
145
146
|
'destination' => $destination->public_id,
|
|
146
|
-
]
|
|
147
|
+
],
|
|
147
148
|
]);
|
|
148
149
|
|
|
149
150
|
$items = $lines->map(function ($line) use ($quote) {
|
|
150
151
|
return ServiceQuoteItem::create([
|
|
151
152
|
'service_quote_uuid' => $quote->uuid,
|
|
152
|
-
'amount'
|
|
153
|
-
'currency'
|
|
154
|
-
'details'
|
|
155
|
-
'code'
|
|
153
|
+
'amount' => $line['amount'],
|
|
154
|
+
'currency' => $line['currency'],
|
|
155
|
+
'details' => $line['details'],
|
|
156
|
+
'code' => $line['code'],
|
|
156
157
|
]);
|
|
157
158
|
});
|
|
158
159
|
|
|
@@ -179,24 +180,26 @@ class ServiceQuoteController extends Controller
|
|
|
179
180
|
|
|
180
181
|
return new ServiceQuoteResource($bestQuote);
|
|
181
182
|
}
|
|
183
|
+
|
|
182
184
|
/**
|
|
183
185
|
* Query for Storefront Product resources.
|
|
184
186
|
*
|
|
185
|
-
* @param
|
|
187
|
+
* @param \Illuminate\Http\Request $request
|
|
188
|
+
*
|
|
186
189
|
* @return \Fleetbase\Http\Resources\DriverCollection
|
|
187
190
|
*/
|
|
188
191
|
public function fromCartForNetwork(GetServiceQuoteFromCart $request)
|
|
189
192
|
{
|
|
190
193
|
$requestId = ServiceQuote::generatePublicId('request');
|
|
191
194
|
// $origin = $this->getPlaceFromId($request->input('origin'));
|
|
192
|
-
$destination
|
|
193
|
-
$facilitator
|
|
194
|
-
$scheduledAt
|
|
195
|
-
$serviceType
|
|
196
|
-
$cart
|
|
197
|
-
$currency
|
|
198
|
-
$config
|
|
199
|
-
$all
|
|
195
|
+
$destination = $this->getPlaceFromId($request->input('destination'));
|
|
196
|
+
$facilitator = $request->input('facilitator');
|
|
197
|
+
$scheduledAt = $request->input('scheduled_at');
|
|
198
|
+
$serviceType = $request->input('service_type');
|
|
199
|
+
$cart = Cart::retrieve($request->input('cart'));
|
|
200
|
+
$currency = $cart->currency;
|
|
201
|
+
$config = $request->input('config', 'storefront');
|
|
202
|
+
$all = $request->boolean('all');
|
|
200
203
|
$isRouteOptimized = $request->boolean('is_route_optimized', true);
|
|
201
204
|
|
|
202
205
|
// make sure destination is set
|
|
@@ -263,7 +266,7 @@ class ServiceQuoteController extends Controller
|
|
|
263
266
|
|
|
264
267
|
// set origin and destination in service quote meta
|
|
265
268
|
$serviceQuote->updateMeta([
|
|
266
|
-
'origin'
|
|
269
|
+
'origin' => $origins->pluck('public_id')->toArray(),
|
|
267
270
|
'destination' => $destination->public_id,
|
|
268
271
|
]);
|
|
269
272
|
|
|
@@ -307,7 +310,7 @@ class ServiceQuoteController extends Controller
|
|
|
307
310
|
|
|
308
311
|
// set origin and destination in service quote meta
|
|
309
312
|
$serviceQuote->updateMeta([
|
|
310
|
-
'origin'
|
|
313
|
+
'origin' => $origins->pluck('public_id')->toArray(),
|
|
311
314
|
'destination' => $destination->public_id,
|
|
312
315
|
]);
|
|
313
316
|
|
|
@@ -322,24 +325,24 @@ class ServiceQuoteController extends Controller
|
|
|
322
325
|
[$subTotal, $lines] = $serviceRate->quoteFromPreliminaryData($entities, [...$origins, $destination], $matrix->distance, $matrix->time, false);
|
|
323
326
|
|
|
324
327
|
$quote = ServiceQuote::create([
|
|
325
|
-
'request_id'
|
|
326
|
-
'company_uuid'
|
|
328
|
+
'request_id' => $requestId,
|
|
329
|
+
'company_uuid' => $serviceRate->company_uuid,
|
|
327
330
|
'service_rate_uuid' => $serviceRate->uuid,
|
|
328
|
-
'amount'
|
|
329
|
-
'currency'
|
|
330
|
-
'meta'
|
|
331
|
-
'origin'
|
|
331
|
+
'amount' => $subTotal,
|
|
332
|
+
'currency' => $serviceRate->currency,
|
|
333
|
+
'meta' => [
|
|
334
|
+
'origin' => $origins->pluck('public_id')->toArray(),
|
|
332
335
|
'destination' => $destination->public_id,
|
|
333
|
-
]
|
|
336
|
+
],
|
|
334
337
|
]);
|
|
335
338
|
|
|
336
339
|
$items = $lines->map(function ($line) use ($quote) {
|
|
337
340
|
return ServiceQuoteItem::create([
|
|
338
341
|
'service_quote_uuid' => $quote->uuid,
|
|
339
|
-
'amount'
|
|
340
|
-
'currency'
|
|
341
|
-
'details'
|
|
342
|
-
'code'
|
|
342
|
+
'amount' => $line['amount'],
|
|
343
|
+
'currency' => $line['currency'],
|
|
344
|
+
'details' => $line['details'],
|
|
345
|
+
'code' => $line['code'],
|
|
343
346
|
]);
|
|
344
347
|
});
|
|
345
348
|
|
|
@@ -371,6 +374,7 @@ class ServiceQuoteController extends Controller
|
|
|
371
374
|
* Returns a place from either a place id or store location id.
|
|
372
375
|
*
|
|
373
376
|
* @param string $id
|
|
377
|
+
*
|
|
374
378
|
* @return Place
|
|
375
379
|
*/
|
|
376
380
|
public function getPlaceFromId($id)
|
|
@@ -21,7 +21,6 @@ class StoreController extends Controller
|
|
|
21
21
|
/**
|
|
22
22
|
* Returns general information and settings about the storefront or network given the key.
|
|
23
23
|
*
|
|
24
|
-
* @param \Illuminate\Http\Request $request
|
|
25
24
|
* @return \Illuminate\Http\Response
|
|
26
25
|
*/
|
|
27
26
|
public function about()
|
|
@@ -42,7 +41,6 @@ class StoreController extends Controller
|
|
|
42
41
|
/**
|
|
43
42
|
* Returns all locations and their hours for the current store.
|
|
44
43
|
*
|
|
45
|
-
* @param \Illuminate\Http\Request $request
|
|
46
44
|
* @return \Illuminate\Http\Response
|
|
47
45
|
*/
|
|
48
46
|
public function locations(Request $request)
|
|
@@ -65,8 +63,6 @@ class StoreController extends Controller
|
|
|
65
63
|
/**
|
|
66
64
|
* Returns a specific store location given the id.
|
|
67
65
|
*
|
|
68
|
-
* @param string $id
|
|
69
|
-
* @param \Illuminate\Http\Request $request
|
|
70
66
|
* @return \Illuminate\Http\Response
|
|
71
67
|
*/
|
|
72
68
|
public function location(string $id, Request $request)
|
|
@@ -76,11 +72,11 @@ class StoreController extends Controller
|
|
|
76
72
|
}
|
|
77
73
|
|
|
78
74
|
$storeId = $request->input('store', session('storefront_store'));
|
|
79
|
-
$store
|
|
75
|
+
$store = Store::where('public_id', $storeId)->orWhere('uuid', $storeId)->first();
|
|
80
76
|
|
|
81
77
|
$location = StoreLocation::where([
|
|
82
|
-
'public_id'
|
|
83
|
-
'store_uuid' => $store->uuid
|
|
78
|
+
'public_id' => $id,
|
|
79
|
+
'store_uuid' => $store->uuid,
|
|
84
80
|
])
|
|
85
81
|
->with(['place', 'hours'])
|
|
86
82
|
->first();
|
|
@@ -91,7 +87,6 @@ class StoreController extends Controller
|
|
|
91
87
|
/**
|
|
92
88
|
* Returns all payment gateways for the current store.
|
|
93
89
|
*
|
|
94
|
-
* @param \Illuminate\Http\Request $request
|
|
95
90
|
* @return \Illuminate\Http\Response
|
|
96
91
|
*/
|
|
97
92
|
public function gateways(Request $request)
|
|
@@ -99,7 +94,7 @@ class StoreController extends Controller
|
|
|
99
94
|
$id = session('storefront_store') ?? session('storefront_network');
|
|
100
95
|
|
|
101
96
|
$sandbox = $request->input('sandbox', false);
|
|
102
|
-
$query
|
|
97
|
+
$query = Gateway::select(['public_id', 'name', 'code', 'type', 'sandbox', 'return_url', 'callback_url'])->where('owner_uuid', $id);
|
|
103
98
|
|
|
104
99
|
if ($sandbox) {
|
|
105
100
|
$query->where('sandbox', 1);
|
|
@@ -123,8 +118,6 @@ class StoreController extends Controller
|
|
|
123
118
|
/**
|
|
124
119
|
* Returns a specific payment gateway given the id.
|
|
125
120
|
*
|
|
126
|
-
* @param string $id
|
|
127
|
-
* @param \Illuminate\Http\Request $request
|
|
128
121
|
* @return \Illuminate\Http\Response
|
|
129
122
|
*/
|
|
130
123
|
public function gateway(string $id, Request $request)
|
|
@@ -132,7 +125,7 @@ class StoreController extends Controller
|
|
|
132
125
|
$ownerId = session('storefront_store') ?? session('storefront_network');
|
|
133
126
|
|
|
134
127
|
$sandbox = $request->input('sandbox', false);
|
|
135
|
-
$query
|
|
128
|
+
$query = Gateway::select(['public_id', 'name', 'code', 'type', 'sandbox', 'return_url', 'callback_url'])->where(['public_id' => $id, 'owner_uuid' => $ownerId]);
|
|
136
129
|
|
|
137
130
|
if ($sandbox) {
|
|
138
131
|
$query->where('sandbox', 1);
|
|
@@ -147,15 +140,14 @@ class StoreController extends Controller
|
|
|
147
140
|
/**
|
|
148
141
|
* Search current store or network.
|
|
149
142
|
*
|
|
150
|
-
* @param \Illuminate\Http\Request $request
|
|
151
143
|
* @return \Illuminate\Http\Response
|
|
152
144
|
*/
|
|
153
145
|
public function search(Request $request)
|
|
154
146
|
{
|
|
155
147
|
$searchQuery = $request->input('query', '');
|
|
156
|
-
$limit
|
|
157
|
-
$store
|
|
158
|
-
$key
|
|
148
|
+
$limit = $request->input('limit', 14);
|
|
149
|
+
$store = $request->input('store');
|
|
150
|
+
$key = session('storefront_key');
|
|
159
151
|
|
|
160
152
|
if (Str::startsWith($key, 'store')) {
|
|
161
153
|
$results = Product::where('store_uuid', session('storefront_store'))
|
|
@@ -12,7 +12,7 @@ class OrderFilter extends FleetOpsOrderFilter
|
|
|
12
12
|
->where(
|
|
13
13
|
[
|
|
14
14
|
'company_uuid' => $this->session->get('company'),
|
|
15
|
-
'type'
|
|
15
|
+
'type' => 'storefront',
|
|
16
16
|
]
|
|
17
17
|
)
|
|
18
18
|
->whereHas(
|
|
@@ -34,7 +34,7 @@ class OrderFilter extends FleetOpsOrderFilter
|
|
|
34
34
|
[
|
|
35
35
|
'payload',
|
|
36
36
|
'trackingNumber',
|
|
37
|
-
'trackingStatuses'
|
|
37
|
+
'trackingStatuses',
|
|
38
38
|
]
|
|
39
39
|
);
|
|
40
40
|
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\Storefront\Http\Middleware;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Models\Contact;
|
|
5
6
|
use Fleetbase\Storefront\Models\Network;
|
|
6
7
|
use Fleetbase\Storefront\Models\Store;
|
|
7
|
-
use Fleetbase\FleetOps\Models\Contact;
|
|
8
8
|
use Illuminate\Http\Request;
|
|
9
9
|
use Illuminate\Support\Str;
|
|
10
10
|
use Laravel\Sanctum\PersonalAccessToken;
|
|
@@ -13,10 +13,6 @@ class SetStorefrontSession
|
|
|
13
13
|
{
|
|
14
14
|
/**
|
|
15
15
|
* Handle an incoming request.
|
|
16
|
-
*
|
|
17
|
-
* @param \Illuminate\Http\Request $request
|
|
18
|
-
* @param \Closure $next
|
|
19
|
-
* @return mixed
|
|
20
16
|
*/
|
|
21
17
|
public function handle(Request $request, \Closure $next)
|
|
22
18
|
{
|
|
@@ -38,9 +34,6 @@ class SetStorefrontSession
|
|
|
38
34
|
|
|
39
35
|
/**
|
|
40
36
|
* Checks if storefront key is valid.
|
|
41
|
-
*
|
|
42
|
-
* @param string $key
|
|
43
|
-
* @return boolean
|
|
44
37
|
*/
|
|
45
38
|
public function isValidKey(string $key): bool
|
|
46
39
|
{
|
|
@@ -57,9 +50,6 @@ class SetStorefrontSession
|
|
|
57
50
|
|
|
58
51
|
/**
|
|
59
52
|
* Sets the storefront key to session.
|
|
60
|
-
*
|
|
61
|
-
* @param string $key
|
|
62
|
-
* @return void
|
|
63
53
|
*/
|
|
64
54
|
public function setKey(string $key): void
|
|
65
55
|
{
|
|
@@ -69,17 +59,17 @@ class SetStorefrontSession
|
|
|
69
59
|
$store = Store::select(['uuid', 'company_uuid', 'currency'])->where('key', $key)->first();
|
|
70
60
|
|
|
71
61
|
if ($store) {
|
|
72
|
-
$session['storefront_store']
|
|
62
|
+
$session['storefront_store'] = $store->uuid;
|
|
73
63
|
$session['storefront_currency'] = $store->currency;
|
|
74
|
-
$session['company']
|
|
64
|
+
$session['company'] = $store->company_uuid;
|
|
75
65
|
}
|
|
76
|
-
}
|
|
66
|
+
} elseif (Str::startsWith($key, 'network')) {
|
|
77
67
|
$network = Network::select(['uuid', 'company_uuid', 'currency'])->where('key', $key)->first();
|
|
78
68
|
|
|
79
69
|
if ($network) {
|
|
80
|
-
$session['storefront_network']
|
|
70
|
+
$session['storefront_network'] = $network->uuid;
|
|
81
71
|
$session['storefront_currency'] = $network->currency;
|
|
82
|
-
$session['company']
|
|
72
|
+
$session['company'] = $network->company_uuid;
|
|
83
73
|
}
|
|
84
74
|
}
|
|
85
75
|
|
|
@@ -89,9 +79,8 @@ class SetStorefrontSession
|
|
|
89
79
|
}
|
|
90
80
|
|
|
91
81
|
/**
|
|
92
|
-
* Set the customer id to session if applicable
|
|
82
|
+
* Set the customer id to session if applicable.
|
|
93
83
|
*
|
|
94
|
-
* @param Request $request
|
|
95
84
|
* @return void
|
|
96
85
|
*/
|
|
97
86
|
public function setupCustomerSession(Request $request)
|
|
@@ -112,8 +101,8 @@ class SetStorefrontSession
|
|
|
112
101
|
|
|
113
102
|
session([
|
|
114
103
|
'customer_id' => Str::replaceFirst('contact', 'customer', $contact->public_id),
|
|
115
|
-
'contact_id'
|
|
116
|
-
'customer'
|
|
104
|
+
'contact_id' => $contact->public_id,
|
|
105
|
+
'customer' => $contact->uuid,
|
|
117
106
|
]);
|
|
118
107
|
}
|
|
119
108
|
}
|
|
@@ -13,7 +13,7 @@ class AddStoreToNetworkCategory extends FleetbaseRequest
|
|
|
13
13
|
*/
|
|
14
14
|
public function all($keys = null)
|
|
15
15
|
{
|
|
16
|
-
$data
|
|
16
|
+
$data = parent::all($keys);
|
|
17
17
|
$data['id'] = $this->route('id');
|
|
18
18
|
|
|
19
19
|
return $data;
|
|
@@ -37,9 +37,9 @@ class AddStoreToNetworkCategory extends FleetbaseRequest
|
|
|
37
37
|
public function rules()
|
|
38
38
|
{
|
|
39
39
|
return [
|
|
40
|
-
'id'
|
|
40
|
+
'id' => ['required', 'exists:storefront.networks,uuid'],
|
|
41
41
|
'category' => ['required', 'exists:categories,uuid'],
|
|
42
|
-
'store'
|
|
42
|
+
'store' => ['required', 'exists:storefront.stores,uuid', 'exists:storefront.network_stores,store_uuid'],
|
|
43
43
|
];
|
|
44
44
|
}
|
|
45
45
|
}
|
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
namespace Fleetbase\Storefront\Http\Requests;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Http\Requests\FleetbaseRequest;
|
|
6
|
-
use Fleetbase\Rules\ExistsInAny;
|
|
7
6
|
use Illuminate\Validation\Rule;
|
|
8
7
|
|
|
9
|
-
|
|
10
8
|
class CreateCustomerRequest extends FleetbaseRequest
|
|
11
9
|
{
|
|
12
10
|
/**
|
|
@@ -27,18 +25,18 @@ class CreateCustomerRequest extends FleetbaseRequest
|
|
|
27
25
|
public function rules()
|
|
28
26
|
{
|
|
29
27
|
return [
|
|
30
|
-
'code'
|
|
31
|
-
'name'
|
|
28
|
+
'code' => 'required|exists:verification_codes,code',
|
|
29
|
+
'name' => 'required',
|
|
32
30
|
'email' => [
|
|
33
31
|
'email', 'nullable', Rule::unique('contacts')->where(function ($query) {
|
|
34
32
|
return $query->whereNull('deleted_at');
|
|
35
|
-
})
|
|
33
|
+
}),
|
|
36
34
|
],
|
|
37
35
|
'phone' => [
|
|
38
36
|
'nullable', Rule::unique('contacts')->where(function ($query) {
|
|
39
37
|
return $query->whereNull('deleted_at');
|
|
40
|
-
})
|
|
41
|
-
]
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
42
40
|
];
|
|
43
41
|
}
|
|
44
42
|
}
|
|
@@ -8,7 +8,6 @@ class CreateReviewRequest extends FleetbaseRequest
|
|
|
8
8
|
{
|
|
9
9
|
/**
|
|
10
10
|
* Determine if the user is authorized to make this request.
|
|
11
|
-
*
|
|
12
11
|
*
|
|
13
12
|
* @return bool
|
|
14
13
|
*/
|
|
@@ -25,10 +24,10 @@ class CreateReviewRequest extends FleetbaseRequest
|
|
|
25
24
|
public function rules()
|
|
26
25
|
{
|
|
27
26
|
return [
|
|
28
|
-
'rating'
|
|
29
|
-
'content'
|
|
30
|
-
'files'
|
|
31
|
-
'rejected' => 'sometimes|boolean'
|
|
27
|
+
'rating' => 'required|numeric',
|
|
28
|
+
'content' => 'required',
|
|
29
|
+
'files' => 'sometimes|array',
|
|
30
|
+
'rejected' => 'sometimes|boolean',
|
|
32
31
|
];
|
|
33
32
|
}
|
|
34
33
|
}
|