sarga/packages/Sarga/API/Http/Controllers/Checkout.php

122 lines
4.0 KiB
PHP
Raw Normal View History

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',
]);
}
}