coupon ofis and order save finish
This commit is contained in:
parent
e21ae9cb9d
commit
66e7241831
|
|
@ -25,12 +25,13 @@ class Carts extends CartController
|
|||
'data' => $cart ? new CartResource($cart) : null,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add item to the cart.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Webkul\Customer\Repositories\WishlistRepository $wishlistRepository
|
||||
* @param int $productId
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Webkul\Customer\Repositories\WishlistRepository $wishlistRepository
|
||||
* @param int $productId
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function add(Request $request, WishlistRepository $wishlistRepository, int $productId)
|
||||
|
|
@ -57,7 +58,7 @@ class Carts extends CartController
|
|||
$cart = Cart::getCart();
|
||||
|
||||
return response([
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'message' => __('rest-api::app.checkout.cart.item.success'),
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
|
|
@ -70,8 +71,8 @@ class Carts extends CartController
|
|||
/**
|
||||
* Update the cart.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, CartItemRepository $cartItemRepository)
|
||||
|
|
@ -103,14 +104,15 @@ class Carts extends CartController
|
|||
$cart = Cart::getCart();
|
||||
|
||||
return response([
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'message' => __('rest-api::app.checkout.cart.quantity.success'),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove item from the cart.
|
||||
*
|
||||
* @param int $cartItemId
|
||||
* @param int $cartItemId
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function removeItem($cartItemId)
|
||||
|
|
@ -126,16 +128,18 @@ class Carts extends CartController
|
|||
$cart = Cart::getCart();
|
||||
|
||||
return response([
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'message' => __('rest-api::app.checkout.cart.item.success'),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Empty the cart.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
function empty() {
|
||||
function empty()
|
||||
{
|
||||
Event::dispatch('checkout.cart.delete.before');
|
||||
|
||||
Cart::deActivateCart();
|
||||
|
|
@ -145,14 +149,15 @@ class Carts extends CartController
|
|||
$cart = Cart::getCart();
|
||||
|
||||
return response([
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'message' => __('rest-api::app.checkout.cart.item.success-remove'),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move cart item to wishlist.
|
||||
*
|
||||
* @param int $id
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function moveToWishlist($cartItemId)
|
||||
|
|
@ -168,8 +173,59 @@ class Carts extends CartController
|
|||
$cart = Cart::getCart();
|
||||
|
||||
return response([
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
'message' => __('rest-api::app.checkout.cart.move-wishlist.success'),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the coupon code.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function applyCoupon(Request $request)
|
||||
{
|
||||
$couponCode = $request->code;
|
||||
|
||||
try {
|
||||
if (strlen($couponCode)) {
|
||||
Cart::setCouponCode($couponCode)->collectTotals();
|
||||
|
||||
if (Cart::getCart()->coupon_code == $couponCode) {
|
||||
return response([
|
||||
'message' => __('rest-api::app.checkout.cart.coupon.success'),
|
||||
'cart' => new CartResource(Cart::getCart())
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return response([
|
||||
'message' => __('rest-api::app.checkout.cart.coupon.invalid'),
|
||||
], 400);
|
||||
} catch (\Exception $e) {
|
||||
report($e);
|
||||
|
||||
return response([
|
||||
'message' => __('rest-api::app.checkout.cart.coupon.apply-issue'),
|
||||
], 400);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the coupon code.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function removeCoupon()
|
||||
{
|
||||
Cart::removeCouponCode()->collectTotals();
|
||||
|
||||
return response([
|
||||
'message' => __('rest-api::app.checkout.cart.coupon.remove'),
|
||||
'cart' => new CartResource(Cart::getCart())
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -3,18 +3,15 @@
|
|||
namespace Sarga\API\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Config;
|
||||
use Illuminate\Support\Str;
|
||||
use Sarga\API\Http\Resources\Checkout\CartResource;
|
||||
use Sarga\API\Http\Resources\Checkout\CartShippingRateResource;
|
||||
use Sarga\API\Http\Resources\Checkout\PickupAddress;
|
||||
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;
|
||||
use Webkul\RestApi\Http\Resources\V1\Shop\Sales\OrderResource;
|
||||
use Webkul\Sales\Repositories\OrderRepository;
|
||||
use Webkul\Shipping\Facades\Shipping;
|
||||
use Sarga\API\Http\Resources\Sales\Order as OrderResource;
|
||||
|
||||
class Checkout extends CheckoutController
|
||||
{
|
||||
|
|
@ -58,7 +55,7 @@ class Checkout extends CheckoutController
|
|||
}
|
||||
|
||||
$shippingMethod = $request->get('shipping_method');
|
||||
if (Cart::hasError() || ! Cart::saveCustomerAddress($data)
|
||||
if (Cart::hasError() || ! Cart::saveCustomerAddress($data) || ! Shipping::collectRates()
|
||||
|| ! $shippingMethod
|
||||
|| ! Cart::saveShippingMethod($shippingMethod)) {
|
||||
return response(['message'=>'error. wrong shipment method or address'],400);
|
||||
|
|
@ -75,7 +72,31 @@ class Checkout extends CheckoutController
|
|||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save payment method.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function savePayment(Request $request)
|
||||
{
|
||||
$payment = $request->get('payment');
|
||||
|
||||
if (Cart::hasError() || ! $payment || ! Cart::savePaymentMethod($payment)) {
|
||||
return response([
|
||||
'success' => false,
|
||||
'message' => 'Payment unsuccessfull'
|
||||
|
||||
],400);
|
||||
}
|
||||
Cart::collectTotals();
|
||||
return response([
|
||||
'data' => [
|
||||
'cart' => new CartResource(Cart::getCart()),
|
||||
],
|
||||
'message' => 'Payment method saved successfully.',
|
||||
]);
|
||||
}
|
||||
/**
|
||||
* Check for minimum order.
|
||||
*
|
||||
|
|
@ -95,5 +116,71 @@ class Checkout extends CheckoutController
|
|||
'message' => ! $status ? __('rest-api::app.checkout.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) : 'Success',
|
||||
]);
|
||||
}
|
||||
/**
|
||||
* Save order.
|
||||
*
|
||||
* @param \Webkul\Sales\Repositories\OrderRepository $orderRepository
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function saveOrder(OrderRepository $orderRepository)
|
||||
{
|
||||
if (Cart::hasError()) {
|
||||
abort(400);
|
||||
}
|
||||
|
||||
Cart::collectTotals();
|
||||
|
||||
$this->validateOrder();
|
||||
|
||||
$cart = Cart::getCart();
|
||||
|
||||
if ($redirectUrl = Payment::getRedirectUrl($cart)) {
|
||||
return response([
|
||||
'redirect_url' => $redirectUrl,
|
||||
]);
|
||||
}
|
||||
|
||||
$order = $orderRepository->create(Cart::prepareDataForOrder());
|
||||
|
||||
Cart::deActivateCart();
|
||||
|
||||
return response([
|
||||
'data' => [
|
||||
'order' => new OrderResource($order),
|
||||
],
|
||||
'message' => 'Order saved successfully.',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate order before creation.
|
||||
*
|
||||
* @return void|\Exception
|
||||
*/
|
||||
protected function validateOrder()
|
||||
{
|
||||
$cart = Cart::getCart();
|
||||
|
||||
$minimumOrderAmount = core()->getConfigData('sales.orderSettings.minimum-order.minimum_order_amount') ?? 0;
|
||||
|
||||
if (! $cart->checkMinimumOrder()) {
|
||||
throw new \Exception(__('rest-api::app.checkout.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]));
|
||||
}
|
||||
|
||||
if ($cart->haveStockableItems() && ! $cart->shipping_address) {
|
||||
throw new \Exception(__('rest-api::app.checkout.check-shipping-address'));
|
||||
}
|
||||
|
||||
if (! $cart->billing_address) {
|
||||
throw new \Exception(__('rest-api::app.checkout.check-billing-address'));
|
||||
}
|
||||
|
||||
if ($cart->haveStockableItems() && ! $cart->selected_shipping_rate) {
|
||||
throw new \Exception(__('rest-api::app.checkout.specify-shipping-method'));
|
||||
}
|
||||
|
||||
if (! $cart->payment) {
|
||||
throw new \Exception(__('rest-api::app.checkout.specify-payment-method'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -45,7 +45,6 @@ class CartResource extends JsonResource
|
|||
'formatted_discount' => core()->formatPrice($this->base_discount_amount, $this->cart_currency_code),
|
||||
'checkout_method' => $this->checkout_method,
|
||||
'vendors' => $this->groupByVendors($this->items),
|
||||
'selected_shipping_rate' => new CartShippingRateResource($this->selected_shipping_rate),
|
||||
'payment' => new CartPaymentResource($this->payment),
|
||||
'billing_address' => new AddressResource($this->billing_address),
|
||||
'shipping_address' => new AddressResource($this->shipping_address),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
namespace Sarga\API\Http\Resources\Sales;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Webkul\RestApi\Http\Resources\V1\Admin\Customer\CustomerResource;
|
||||
use Webkul\RestApi\Http\Resources\V1\Admin\Sale\InvoiceResource;
|
||||
use Webkul\RestApi\Http\Resources\V1\Admin\Sale\OrderAddressResource;
|
||||
use Webkul\RestApi\Http\Resources\V1\Admin\Sale\OrderItemResource;
|
||||
use Webkul\RestApi\Http\Resources\V1\Admin\Sale\ShipmentResource;
|
||||
use Webkul\RestApi\Http\Resources\V1\Admin\Setting\ChannelResource;
|
||||
|
||||
class Order extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'increment_id' => $this->increment_id,
|
||||
'status' => $this->status,
|
||||
'status_label' => $this->status_label,
|
||||
'customer_first_name' => $this->customer_first_name,
|
||||
'customer_last_name' => $this->customer_last_name,
|
||||
'shipping_method' => $this->shipping_method,
|
||||
'shipping_title' => $this->shipping_title,
|
||||
'payment_title' => core()->getConfigData('sales.paymentmethods.' . $this->payment->method . '.title'),
|
||||
'shipping_description' => $this->shipping_description,
|
||||
'coupon_code' => $this->coupon_code,
|
||||
'total_item_count' => $this->total_item_count,
|
||||
'total_qty_ordered' => $this->total_qty_ordered,
|
||||
'grand_total' => $this->grand_total,
|
||||
'formated_grand_total' => core()->formatPrice($this->base_grand_total, $this->order_currency_code),
|
||||
'grand_total_invoiced' => $this->grand_total_invoiced,
|
||||
'formated_grand_total_invoiced' => core()->formatPrice($this->base_grand_total_invoiced, $this->order_currency_code),
|
||||
'grand_total_refunded' => $this->grand_total_refunded,
|
||||
'formated_grand_total_refunded' => core()->formatPrice($this->base_grand_total_refunded, $this->order_currency_code),
|
||||
'sub_total' => $this->sub_total,
|
||||
'formated_sub_total' => core()->formatPrice($this->base_sub_total, $this->order_currency_code),
|
||||
'sub_total_invoiced' => $this->sub_total_invoiced,
|
||||
'formated_sub_total_invoiced' => core()->formatPrice($this->base_sub_total_invoiced, $this->order_currency_code),
|
||||
'sub_total_refunded' => $this->sub_total_refunded,
|
||||
'discount_percent' => $this->discount_percent,
|
||||
'discount_amount' => $this->discount_amount,
|
||||
'formated_discount_amount' => core()->formatPrice($this->base_discount_amount, $this->order_currency_code),
|
||||
'discount_invoiced' => $this->discount_invoiced,
|
||||
'formated_discount_invoiced' => core()->formatPrice($this->base_discount_invoiced, $this->order_currency_code),
|
||||
'discount_refunded' => $this->discount_refunded,
|
||||
'formated_discount_refunded' => core()->formatPrice($this->base_discount_refunded, $this->order_currency_code),
|
||||
'tax_amount' => $this->tax_amount,
|
||||
'formated_tax_amount' => core()->formatPrice($this->base_tax_amount, $this->order_currency_code),
|
||||
'tax_amount_invoiced' => $this->tax_amount_invoiced,
|
||||
'formated_tax_amount_invoiced' => core()->formatPrice($this->base_tax_amount_invoiced, $this->order_currency_code),
|
||||
'tax_amount_refunded' => $this->tax_amount_refunded,
|
||||
'formated_tax_amount_refunded' => core()->formatPrice($this->base_tax_amount_refunded, $this->order_currency_code),
|
||||
'shipping_amount' => $this->shipping_amount,
|
||||
'formated_shipping_amount' => core()->formatPrice($this->base_shipping_amount, $this->order_currency_code),
|
||||
'shipping_invoiced' => $this->shipping_invoiced,
|
||||
'formated_shipping_invoiced' => core()->formatPrice($this->base_shipping_invoiced, $this->order_currency_code),
|
||||
'shipping_refunded' => $this->shipping_refunded,
|
||||
'formated_shipping_refunded' => core()->formatPrice($this->base_shipping_refunded, $this->order_currency_code),
|
||||
'customer' => $this->when($this->customer_id, new CustomerResource($this->customer)),
|
||||
'shipping_address' => new OrderAddressResource($this->shipping_address),
|
||||
'billing_address' => new OrderAddressResource($this->billing_address),
|
||||
'items' => OrderItemResource::collection($this->items),
|
||||
'invoices' => InvoiceResource::collection($this->invoices),
|
||||
'shipments' => ShipmentResource::collection($this->shipments),
|
||||
'updated_at' => $this->updated_at,
|
||||
'created_at' => $this->created_at,
|
||||
];
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue