coupon ofis and order save finish

This commit is contained in:
merdan 2022-03-03 12:05:28 +05:00
parent e21ae9cb9d
commit 66e7241831
4 changed files with 238 additions and 19 deletions

View File

@ -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())
]);
}
}

View File

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

View File

@ -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),

View File

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