2022-02-08 10:32:33 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Sarga\API\Http\Controllers;
|
|
|
|
|
|
|
|
|
|
use Illuminate\Http\Request;
|
2022-02-25 10:04:35 +00:00
|
|
|
use Illuminate\Support\Facades\Config;
|
2022-02-08 10:32:33 +00:00
|
|
|
use Illuminate\Support\Str;
|
|
|
|
|
use Sarga\API\Http\Resources\Checkout\CartResource;
|
|
|
|
|
use Sarga\API\Http\Resources\Checkout\CartShippingRateResource;
|
2022-02-25 10:04:35 +00:00
|
|
|
use Sarga\API\Http\Resources\Checkout\PickupAddress;
|
2022-02-08 10:32:33 +00:00
|
|
|
use Webkul\Checkout\Facades\Cart;
|
|
|
|
|
use Webkul\Checkout\Http\Requests\CustomerAddressForm;
|
|
|
|
|
use Webkul\Payment\Facades\Payment;
|
|
|
|
|
use Webkul\RestApi\Http\Controllers\V1\Shop\Customer\CheckoutController;
|
2022-02-28 08:43:02 +00:00
|
|
|
use Webkul\RestApi\Http\Resources\V1\Shop\Sales\OrderResource;
|
|
|
|
|
use Webkul\Sales\Repositories\OrderRepository;
|
2022-02-08 10:32:33 +00:00
|
|
|
use Webkul\Shipping\Facades\Shipping;
|
|
|
|
|
|
|
|
|
|
class Checkout extends CheckoutController
|
|
|
|
|
{
|
2022-02-28 08:43:02 +00:00
|
|
|
public function index(){
|
|
|
|
|
if (Cart::hasError()){
|
|
|
|
|
return response([
|
|
|
|
|
'success' => false,
|
2022-03-01 09:01:46 +00:00
|
|
|
'message' => 'Refresh cart'
|
2022-02-28 08:43:02 +00:00
|
|
|
|
|
|
|
|
],400);
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-25 10:04:35 +00:00
|
|
|
$addresses = core()->getCurrentChannel()->inventory_sources()->get();
|
2022-02-24 13:55:23 +00:00
|
|
|
return response([
|
2022-03-01 11:19:06 +00:00
|
|
|
'shipping' => Shipping::getShippingMethods(),
|
2022-02-28 08:43:02 +00:00
|
|
|
'pickup_addresses' => PickupAddress::collection($addresses),
|
2022-02-24 13:55:23 +00:00
|
|
|
]);
|
|
|
|
|
}
|
2022-03-01 09:01:46 +00:00
|
|
|
/**
|
|
|
|
|
* Save shipping method.
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Http\Request $request
|
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
|
*/
|
|
|
|
|
public function saveShipping(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$data = $request->all();
|
2022-02-24 13:55:23 +00:00
|
|
|
|
2022-03-01 09:01:46 +00:00
|
|
|
$data['billing']['address1'] = implode(PHP_EOL, array_filter($data['billing']['address1']));
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-03-01 09:01:46 +00:00
|
|
|
$data['shipping']['address1'] = implode(PHP_EOL, array_filter($data['shipping']['address1']));
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-03-01 09:01:46 +00:00
|
|
|
if (isset($data['billing']['id']) && str_contains($data['billing']['id'], 'address_')) {
|
|
|
|
|
unset($data['billing']['id']);
|
|
|
|
|
unset($data['billing']['address_id']);
|
2022-02-08 10:32:33 +00:00
|
|
|
}
|
|
|
|
|
|
2022-03-01 09:01:46 +00:00
|
|
|
if (isset($data['shipping']['id']) && Str::contains($data['shipping']['id'], 'address_')) {
|
|
|
|
|
unset($data['shipping']['id']);
|
|
|
|
|
unset($data['shipping']['address_id']);
|
2022-02-08 10:32:33 +00:00
|
|
|
}
|
|
|
|
|
|
2022-03-01 09:01:46 +00:00
|
|
|
$shippingMethod = $request->get('shipping_method');
|
|
|
|
|
if (Cart::hasError() || ! Cart::saveCustomerAddress($data)
|
|
|
|
|
|| ! $shippingMethod
|
|
|
|
|
|| ! Cart::saveShippingMethod($shippingMethod)) {
|
2022-03-02 13:10:22 +00:00
|
|
|
return response(['message'=>'error. wrong shipment method or address'],400);
|
2022-02-08 10:32:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Cart::collectTotals();
|
|
|
|
|
|
|
|
|
|
return response([
|
|
|
|
|
'data' => [
|
2022-03-01 09:01:46 +00:00
|
|
|
'methods' => Payment::getPaymentMethods(),
|
|
|
|
|
'cart' => new CartResource(Cart::getCart()),
|
2022-02-08 10:32:33 +00:00
|
|
|
],
|
2022-03-01 09:01:46 +00:00
|
|
|
'message' => 'Shipping method saved successfully.',
|
2022-02-08 10:32:33 +00:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-01 09:01:46 +00:00
|
|
|
|
2022-02-08 10:32:33 +00:00
|
|
|
/**
|
|
|
|
|
* Check for minimum order.
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
|
*/
|
|
|
|
|
public function checkMinimumOrder()
|
|
|
|
|
{
|
|
|
|
|
$minimumOrderAmount = (float) core()->getConfigData('sales.orderSettings.minimum-order.minimum_order_amount') ?? 0;
|
|
|
|
|
|
|
|
|
|
$status = Cart::checkMinimumOrder();
|
|
|
|
|
|
|
|
|
|
return response([
|
|
|
|
|
'data' => [
|
|
|
|
|
'cart' => new CartResource(Cart::getCart()),
|
|
|
|
|
'status' => ! $status ? false : true,
|
|
|
|
|
],
|
|
|
|
|
'message' => ! $status ? __('rest-api::app.checkout.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) : 'Success',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|