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

256 lines
7.2 KiB
PHP

<?php
namespace Sarga\API\Http\Controllers;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Log;
use Sarga\API\Http\Resources\Checkout\CartResource;
use Webkul\CartRule\Repositories\CartRuleCouponRepository;
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,
]);
}
/**
* Add item to the cart.
*
* @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)
{
$customer = $request->user();
try {
Event::dispatch('checkout.cart.item.add.before', $productId);
$data = $request->all();
if(!isset($data['weight']) || empty($data['weight']) ) {
$data['weight'] = 0;
}
$result = Cart::addProduct($productId, $data);
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([
'data' => $cart ? new CartResource($cart) : null,
'message' => __('sarga-api::app.cart.item.success'),
]);
} catch (Exception $e) {
Log::error($e);
return response([
'message' => $e->getMessage(),
], 400);
}
}
/**
* Update the cart.
*
* @param \Illuminate\Http\Request $request
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
* @return \Illuminate\Http\Response
*/
public function update(Request $request, CartItemRepository $cartItemRepository)
{
$this->validate($request, [
'qty' => 'required|array',
]);
// Log::info($request);
foreach ($request->qty as $qty) {
if ($qty <= 0) {
return response([
'message' => __('sarga-api::app.cart.quantity.illegal'),
], 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([
'data' => $cart ? new CartResource($cart) : null,
'message' => __('sarga-api::app.cart.quantity.success'),
]);
}
/**
* Remove item from the cart.
*
* @param int $cartItemId
* @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([
'data' => $cart ? new CartResource($cart) : null,
'message' => __('sarga-api::app.cart.item.success-remove'),
]);
}
/**
* Empty the cart.
*
* @return \Illuminate\Http\Response
*/
function empty()
{
Event::dispatch('checkout.cart.delete.before');
Cart::deActivateCart();
Event::dispatch('checkout.cart.delete.after');
$cart = Cart::getCart();
return response([
'data' => $cart ? new CartResource($cart) : null,
'message' => __('sarga-api::app.cart.item.success-remove-all'),
]);
}
/**
* Move cart item to wishlist.
*
* @param int $id
* @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([
'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->get('code');
$cartRuleCouponRepository =app(CartRuleCouponRepository::class);
try {
if (strlen($couponCode)) {
$coupon = $cartRuleCouponRepository->findOneByField('code', $couponCode);
if ($coupon->cart_rule->status) {
if (Cart::getCart()->coupon_code == $couponCode) {
return response()->json([
'success' => false,
'message' => trans('sarga-api::app.checkout.coupon-already-applied'),
]);
}
Cart::setCouponCode($couponCode)->collectTotals();
$cart = Cart::getCart();
if ($cart->coupon_code == $couponCode) {
return response()->json([
'success' => true,
'data' => new CartResource($cart),
'message' => trans('sarga-api::app.checkout.success-coupon'),
]);
}
}
}
return response()->json([
'success' => false,
'message' => trans('sarga-api::app.checkout.invalid-coupon'),
]);
} catch (\Exception $e) {
report($e);
return response()->json([
'success' => false,
'message' => trans('sarga-api::app.checkout.coupon-apply-issue'),
]);
}
}
/**
* Remove the coupon code.
*
* @return \Illuminate\Http\Response
*/
public function removeCoupon()
{
Cart::removeCouponCode()->collectTotals();
return response([
'message' => __('sarga-api::app.checkout.coupon-remove'),
'success' => true,
'cart' => new CartResource(Cart::getCart())
]);
}
}