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,
|
|
|
|
|
'message' => 'Korzina ustarel. Pozhaluysta obnavite korzinu'
|
|
|
|
|
|
|
|
|
|
],400);
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-24 13:55:23 +00:00
|
|
|
$rates = [];
|
|
|
|
|
|
2022-02-25 10:04:35 +00:00
|
|
|
Shipping::collectRates();
|
|
|
|
|
|
2022-02-24 13:55:23 +00:00
|
|
|
foreach (Shipping::getGroupedAllShippingRates() as $code => $shippingMethod) {
|
|
|
|
|
$rates[] = [
|
|
|
|
|
'carrier_title' => $shippingMethod['carrier_title'],
|
|
|
|
|
'rates' => CartShippingRateResource::collection(collect($shippingMethod['rates'])),
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
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-02-28 08:43:02 +00:00
|
|
|
'shipping_rates' => $rates,
|
|
|
|
|
'pickup_addresses' => PickupAddress::collection($addresses),
|
|
|
|
|
'payment_methods' => Payment::getPaymentMethods()
|
2022-02-24 13:55:23 +00:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
public function saveOrder(OrderRepository $orderRepository){
|
|
|
|
|
//save address
|
|
|
|
|
$addresses['billing'] = request()->get('billing');
|
|
|
|
|
$addresses['shipping'] = request()->get('shipping');
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
$addresses['billing']['address1'] = implode(PHP_EOL, array_filter($addresses['billing']['address1']));
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
$addresses['shipping']['address1'] = implode(PHP_EOL, array_filter($addresses['shipping']['address1']));
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
if (isset($addresses['billing']['id']) && str_contains($addresses['billing']['id'], 'address_')) {
|
|
|
|
|
unset($addresses['billing']['id']);
|
|
|
|
|
unset($addresses['billing']['address_id']);
|
2022-02-08 10:32:33 +00:00
|
|
|
}
|
|
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
if (isset($addresses['shipping']['id']) && Str::contains($addresses['shipping']['id'], 'address_')) {
|
|
|
|
|
unset($addresses['shipping']['id']);
|
|
|
|
|
unset($addresses['shipping']['address_id']);
|
2022-02-08 10:32:33 +00:00
|
|
|
}
|
|
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
$shippingMethod = request()->get('shipping_method');
|
|
|
|
|
$payment = request()->get('payment');
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
if (Cart::hasError() ||
|
|
|
|
|
! Cart::saveCustomerAddress($addresses) ||
|
|
|
|
|
! Cart::saveShippingMethod($shippingMethod) ||
|
|
|
|
|
! Cart::savePaymentMethod($payment)) {
|
|
|
|
|
abort(400);
|
2022-02-08 10:32:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Cart::collectTotals();
|
|
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
$this->validateOrder();
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
$cart = Cart::getCart();
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
if ($redirectUrl = Payment::getRedirectUrl($cart)) {
|
|
|
|
|
return response([
|
|
|
|
|
'redirect_url' => $redirectUrl,
|
|
|
|
|
]);
|
2022-02-08 10:32:33 +00:00
|
|
|
}
|
|
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
$order = $orderRepository->create(Cart::prepareDataForOrder());
|
2022-02-08 10:32:33 +00:00
|
|
|
|
2022-02-28 08:43:02 +00:00
|
|
|
Cart::deActivateCart();
|
2022-02-08 10:32:33 +00:00
|
|
|
|
|
|
|
|
return response([
|
|
|
|
|
'data' => [
|
2022-02-28 08:43:02 +00:00
|
|
|
'order' => new OrderResource($order),
|
2022-02-08 10:32:33 +00:00
|
|
|
],
|
2022-02-28 08:43:02 +00:00
|
|
|
'message' => 'Order saved successfully.',
|
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',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|