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

251 lines
7.1 KiB
PHP
Raw Normal View History

2022-02-08 10:32:33 +00:00
<?php
namespace Sarga\API\Http\Controllers;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Event;
2022-04-14 12:16:12 +00:00
use Illuminate\Support\Facades\Log;
2022-02-08 10:32:33 +00:00
use Sarga\API\Http\Resources\Checkout\CartResource;
2023-02-13 09:07:49 +00:00
use Webkul\CartRule\Repositories\CartRuleCouponRepository;
2022-02-08 10:32:33 +00:00
use Webkul\Checkout\Facades\Cart;
use Webkul\Checkout\Repositories\CartItemRepository;
use Webkul\Customer\Repositories\WishlistRepository;
use Webkul\RestApi\Http\Controllers\V1\Shop\Customer\CartController;
class Carts extends CartController
{
/**
* Get the customer cart.
*
* @return \Illuminate\Http\Response
*/
public function get()
{
$cart = Cart::getCart();
return response([
'data' => $cart ? new CartResource($cart) : null,
]);
}
2022-03-03 07:05:28 +00:00
2022-02-08 10:32:33 +00:00
/**
* Add item to the cart.
*
2022-03-03 07:05:28 +00:00
* @param \Illuminate\Http\Request $request
* @param \Webkul\Customer\Repositories\WishlistRepository $wishlistRepository
* @param int $productId
2022-02-08 10:32:33 +00:00
* @return \Illuminate\Http\Response
*/
public function add(Request $request, WishlistRepository $wishlistRepository, int $productId)
{
$customer = $request->user();
2022-04-14 12:16:55 +00:00
2022-02-08 10:32:33 +00:00
try {
Event::dispatch('checkout.cart.item.add.before', $productId);
$result = Cart::addProduct($productId, $request->all());
if (is_array($result) && isset($result['warning'])) {
return response([
'message' => $result['warning'],
], 400);
}
$wishlistRepository->deleteWhere(['product_id' => $productId, 'customer_id' => $customer->id]);
Event::dispatch('checkout.cart.item.add.after', $result);
Cart::collectTotals();
$cart = Cart::getCart();
return response([
2022-03-03 07:05:28 +00:00
'data' => $cart ? new CartResource($cart) : null,
2022-04-23 12:55:18 +00:00
'message' => __('sarga-api::app.cart.item.success'),
2022-02-08 10:32:33 +00:00
]);
} catch (Exception $e) {
return response([
'message' => $e->getMessage(),
], 400);
}
}
/**
* Update the cart.
*
2022-03-03 07:05:28 +00:00
* @param \Illuminate\Http\Request $request
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
2022-02-08 10:32:33 +00:00
* @return \Illuminate\Http\Response
*/
public function update(Request $request, CartItemRepository $cartItemRepository)
{
$this->validate($request, [
'qty' => 'required|array',
]);
2022-04-14 12:20:35 +00:00
// Log::info($request);
2022-02-08 10:32:33 +00:00
foreach ($request->qty as $qty) {
if ($qty <= 0) {
return response([
2022-04-23 12:55:18 +00:00
'message' => __('sarga-api::app.cart.quantity.illegal'),
2022-02-08 10:32:33 +00:00
], 400);
}
}
foreach ($request->qty as $itemId => $qty) {
$item = $cartItemRepository->findOneByField('id', $itemId);
Event::dispatch('checkout.cart.item.update.before', $itemId);
Cart::updateItems(['qty' => $request->qty]);
Event::dispatch('checkout.cart.item.update.after', $item);
}
Cart::collectTotals();
$cart = Cart::getCart();
return response([
2022-03-03 07:05:28 +00:00
'data' => $cart ? new CartResource($cart) : null,
2022-04-23 12:55:18 +00:00
'message' => __('sarga-api::app.cart.quantity.success'),
2022-02-08 10:32:33 +00:00
]);
}
2022-03-03 07:05:28 +00:00
2022-02-08 10:32:33 +00:00
/**
* Remove item from the cart.
*
2022-03-03 07:05:28 +00:00
* @param int $cartItemId
2022-02-08 10:32:33 +00:00
* @return \Illuminate\Http\Response
*/
public function removeItem($cartItemId)
{
Event::dispatch('checkout.cart.item.delete.before', $cartItemId);
Cart::removeItem($cartItemId);
Event::dispatch('checkout.cart.item.delete.after', $cartItemId);
Cart::collectTotals();
$cart = Cart::getCart();
return response([
2022-03-03 07:05:28 +00:00
'data' => $cart ? new CartResource($cart) : null,
2022-04-23 12:55:18 +00:00
'message' => __('sarga-api::app.cart.item.success-remove'),
2022-02-08 10:32:33 +00:00
]);
}
2022-03-03 07:05:28 +00:00
2022-02-08 10:32:33 +00:00
/**
* Empty the cart.
*
* @return \Illuminate\Http\Response
*/
2022-03-03 07:05:28 +00:00
function empty()
{
2022-02-08 10:32:33 +00:00
Event::dispatch('checkout.cart.delete.before');
Cart::deActivateCart();
Event::dispatch('checkout.cart.delete.after');
$cart = Cart::getCart();
return response([
2022-03-03 07:05:28 +00:00
'data' => $cart ? new CartResource($cart) : null,
2022-04-23 12:55:18 +00:00
'message' => __('sarga-api::app.cart.item.success-remove-all'),
2022-02-08 10:32:33 +00:00
]);
}
2022-03-03 07:05:28 +00:00
2022-02-08 10:32:33 +00:00
/**
* Move cart item to wishlist.
*
2022-03-03 07:05:28 +00:00
* @param int $id
2022-02-08 10:32:33 +00:00
* @return \Illuminate\Http\Response
*/
public function moveToWishlist($cartItemId)
{
Event::dispatch('checkout.cart.item.move-to-wishlist.before', $cartItemId);
Cart::moveToWishlist($cartItemId);
Event::dispatch('checkout.cart.item.move-to-wishlist.after', $cartItemId);
Cart::collectTotals();
$cart = Cart::getCart();
return response([
2022-03-03 07:05:28 +00:00
'data' => $cart ? new CartResource($cart) : null,
2022-02-08 10:32:33 +00:00
'message' => __('rest-api::app.checkout.cart.move-wishlist.success'),
]);
}
2022-03-03 07:05:28 +00:00
/**
* Apply the coupon code.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
2023-02-14 12:43:50 +00:00
public function applyCoupon($request)
2022-03-03 07:05:28 +00:00
{
2023-02-13 09:07:49 +00:00
$couponCode = request()->get('code');
2023-02-14 12:43:50 +00:00
$cartRuleCouponRepository =app(CartRuleCouponRepository::class);
2022-03-03 07:05:28 +00:00
try {
if (strlen($couponCode)) {
2023-02-13 09:07:49 +00:00
$coupon = $cartRuleCouponRepository->findOneByField('code', $couponCode);
if ($coupon->cart_rule->status) {
if (Cart::getCart()->coupon_code == $couponCode) {
return response()->json([
'success' => false,
'message' => trans('shop::app.checkout.total.coupon-already-applied'),
]);
}
Cart::setCouponCode($couponCode)->collectTotals();
$cart = Cart::getCart();
if ($cart->coupon_code == $couponCode) {
return response()->json([
'success' => true,
2023-02-14 11:20:59 +00:00
'data' => new CartResource($cart),
2023-02-13 09:07:49 +00:00
'message' => trans('shop::app.checkout.total.success-coupon'),
]);
}
2022-03-03 07:05:28 +00:00
}
}
2023-02-13 09:07:49 +00:00
return response()->json([
'success' => false,
'message' => trans('shop::app.checkout.total.invalid-coupon'),
]);
2022-03-03 07:05:28 +00:00
} catch (\Exception $e) {
report($e);
2023-02-13 09:07:49 +00:00
return response()->json([
'success' => false,
'message' => trans('shop::app.checkout.total.coupon-apply-issue'),
]);
2022-03-03 07:05:28 +00:00
}
}
/**
* Remove the coupon code.
*
* @return \Illuminate\Http\Response
*/
public function removeCoupon()
{
Cart::removeCouponCode()->collectTotals();
return response([
'message' => __('rest-api::app.checkout.cart.coupon.remove'),
2023-02-14 06:37:44 +00:00
'success' => true,
2022-03-03 07:05:28 +00:00
'cart' => new CartResource(Cart::getCart())
]);
}
2022-02-08 10:32:33 +00:00
}