2018-09-06 06:20:30 +00:00
|
|
|
<?php
|
|
|
|
|
|
2018-09-28 13:28:54 +00:00
|
|
|
namespace Webkul\Shop\Http\Controllers;
|
2018-09-06 06:20:30 +00:00
|
|
|
|
2019-04-02 07:54:11 +00:00
|
|
|
use Webkul\Customer\Repositories\WishlistRepository;
|
2019-09-05 10:06:28 +00:00
|
|
|
use Webkul\Product\Repositories\ProductRepository;
|
2018-09-13 11:06:17 +00:00
|
|
|
use Cart;
|
2018-09-06 06:20:30 +00:00
|
|
|
|
|
|
|
|
/**
|
2018-10-10 10:26:27 +00:00
|
|
|
* Cart controller for the customer and guest users for adding and
|
|
|
|
|
* removing the products in the cart.
|
2018-09-06 06:20:30 +00:00
|
|
|
*
|
2019-06-29 13:17:22 +00:00
|
|
|
* @author Prashant Singh <prashant.singh852@webkul.com> @prashant-webkul
|
2019-08-19 09:30:24 +00:00
|
|
|
* @author Jitendra Singh <jitendra@webkul.com>
|
2018-09-06 06:20:30 +00:00
|
|
|
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
|
|
|
|
|
*/
|
|
|
|
|
class CartController extends Controller
|
|
|
|
|
{
|
|
|
|
|
/**
|
2019-06-28 14:18:52 +00:00
|
|
|
* Contains route related configuration
|
2018-09-06 06:20:30 +00:00
|
|
|
*
|
2019-06-28 14:18:52 +00:00
|
|
|
* @var array
|
2018-09-06 06:20:30 +00:00
|
|
|
*/
|
|
|
|
|
protected $_config;
|
2019-06-17 03:26:30 +00:00
|
|
|
|
2019-06-28 14:18:52 +00:00
|
|
|
/**
|
|
|
|
|
* WishlistRepository Repository object
|
|
|
|
|
*
|
|
|
|
|
* @var Object
|
|
|
|
|
*/
|
|
|
|
|
protected $wishlistRepository;
|
2019-06-17 03:26:30 +00:00
|
|
|
|
2019-09-05 10:06:28 +00:00
|
|
|
/**
|
|
|
|
|
* ProductRepository object
|
|
|
|
|
*
|
|
|
|
|
* @var Object
|
|
|
|
|
*/
|
|
|
|
|
protected $productRepository;
|
|
|
|
|
|
2019-04-02 07:54:11 +00:00
|
|
|
/**
|
2019-06-28 14:18:52 +00:00
|
|
|
* Create a new controller instance.
|
2019-04-02 07:54:11 +00:00
|
|
|
*
|
2019-06-28 14:18:52 +00:00
|
|
|
* @param \Webkul\Customer\Repositories\CartItemRepository $wishlistRepository
|
2019-09-05 10:06:28 +00:00
|
|
|
* @param \Webkul\Product\Repositories\ProductRepository $productRepository
|
2019-06-28 14:18:52 +00:00
|
|
|
* @return void
|
2019-04-02 07:54:11 +00:00
|
|
|
*/
|
2019-09-05 10:06:28 +00:00
|
|
|
public function __construct(
|
|
|
|
|
WishlistRepository $wishlistRepository,
|
|
|
|
|
ProductRepository $productRepository
|
|
|
|
|
)
|
2019-02-14 13:54:44 +00:00
|
|
|
{
|
2019-06-29 09:53:34 +00:00
|
|
|
$this->middleware('customer')->only(['moveToWishlist']);
|
2018-09-06 06:20:30 +00:00
|
|
|
|
2019-06-28 14:18:52 +00:00
|
|
|
$this->wishlistRepository = $wishlistRepository;
|
2019-04-02 07:54:11 +00:00
|
|
|
|
2019-09-05 10:06:28 +00:00
|
|
|
$this->productRepository = $productRepository;
|
|
|
|
|
|
2018-09-24 12:05:09 +00:00
|
|
|
$this->_config = request('_config');
|
2018-09-10 09:31:34 +00:00
|
|
|
}
|
|
|
|
|
|
2018-09-26 04:21:14 +00:00
|
|
|
/**
|
2018-10-04 06:43:49 +00:00
|
|
|
* Method to populate the cart page which will be populated before the checkout process.
|
2018-09-26 04:21:14 +00:00
|
|
|
*
|
2019-12-27 08:00:05 +00:00
|
|
|
* @return \Illuminate\View\View
|
2018-09-26 04:21:14 +00:00
|
|
|
*/
|
2019-01-07 10:30:28 +00:00
|
|
|
public function index()
|
|
|
|
|
{
|
2019-11-05 07:14:26 +00:00
|
|
|
Cart::collectTotals();
|
|
|
|
|
|
2018-09-26 04:21:14 +00:00
|
|
|
return view($this->_config['view'])->with('cart', Cart::getCart());
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-11 11:19:40 +00:00
|
|
|
/**
|
2018-10-10 10:26:27 +00:00
|
|
|
* Function for guests user to add the product in the cart.
|
2018-09-11 11:19:40 +00:00
|
|
|
*
|
|
|
|
|
* @return Mixed
|
|
|
|
|
*/
|
2019-01-07 10:30:28 +00:00
|
|
|
public function add($id)
|
|
|
|
|
{
|
2020-01-27 11:16:58 +00:00
|
|
|
try {
|
2019-08-19 09:30:24 +00:00
|
|
|
$result = Cart::addProduct($id, request()->all());
|
2019-02-15 14:08:10 +00:00
|
|
|
|
2019-01-18 11:10:40 +00:00
|
|
|
if ($result) {
|
|
|
|
|
session()->flash('success', trans('shop::app.checkout.cart.item.success'));
|
2019-02-15 14:08:10 +00:00
|
|
|
|
2019-08-19 09:30:24 +00:00
|
|
|
if ($customer = auth()->guard('customer')->user())
|
2019-10-31 08:20:17 +00:00
|
|
|
$this->wishlistRepository->deleteWhere(['product_id' => $id, 'customer_id' => $customer->id]);
|
2019-04-02 07:54:11 +00:00
|
|
|
|
2019-08-19 09:30:24 +00:00
|
|
|
if (request()->get('is_buy_now'))
|
|
|
|
|
return redirect()->route('shop.checkout.onepage.index');
|
2019-01-18 11:10:40 +00:00
|
|
|
} else {
|
|
|
|
|
session()->flash('warning', trans('shop::app.checkout.cart.item.error-add'));
|
2019-02-15 14:08:10 +00:00
|
|
|
}
|
2020-01-27 11:16:58 +00:00
|
|
|
} catch(\Exception $e) {
|
|
|
|
|
session()->flash('error', trans($e->getMessage()));
|
2019-09-05 10:06:28 +00:00
|
|
|
|
2020-01-27 11:16:58 +00:00
|
|
|
$product = $this->productRepository->find($id);
|
2019-09-05 10:06:28 +00:00
|
|
|
|
2020-01-27 11:16:58 +00:00
|
|
|
return redirect()->route('shop.productOrCategory.index', $product->url_key);
|
|
|
|
|
}
|
2019-08-19 09:30:24 +00:00
|
|
|
|
|
|
|
|
return redirect()->back();
|
2018-09-06 06:20:30 +00:00
|
|
|
}
|
|
|
|
|
|
2018-09-28 12:55:48 +00:00
|
|
|
/**
|
2018-10-10 10:26:27 +00:00
|
|
|
* Removes the item from the cart if it exists
|
2018-09-28 12:55:48 +00:00
|
|
|
*
|
|
|
|
|
* @param integer $itemId
|
2019-08-19 09:30:24 +00:00
|
|
|
* @return Response
|
2018-09-28 12:55:48 +00:00
|
|
|
*/
|
2019-01-07 10:30:28 +00:00
|
|
|
public function remove($itemId)
|
|
|
|
|
{
|
2019-08-19 09:30:24 +00:00
|
|
|
$result = Cart::removeItem($itemId);
|
2019-01-07 10:30:28 +00:00
|
|
|
|
2019-08-19 09:30:24 +00:00
|
|
|
if ($result)
|
|
|
|
|
session()->flash('success', trans('shop::app.checkout.cart.item.success-remove'));
|
2018-10-18 09:31:19 +00:00
|
|
|
|
2018-09-28 12:55:48 +00:00
|
|
|
return redirect()->back();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2018-10-10 10:26:27 +00:00
|
|
|
* Updates the quantity of the items present in the cart.
|
2018-09-28 12:55:48 +00:00
|
|
|
*
|
2019-08-19 09:30:24 +00:00
|
|
|
* @return Response
|
2018-09-28 12:55:48 +00:00
|
|
|
*/
|
2019-01-07 10:30:28 +00:00
|
|
|
public function updateBeforeCheckout()
|
|
|
|
|
{
|
2019-06-07 11:06:50 +00:00
|
|
|
try {
|
2019-08-19 09:30:24 +00:00
|
|
|
$result = Cart::updateItems(request()->all());
|
2018-09-28 12:55:48 +00:00
|
|
|
|
2019-08-19 09:30:24 +00:00
|
|
|
if ($result)
|
|
|
|
|
session()->flash('success', trans('shop::app.checkout.cart.quantity.success'));
|
2019-06-07 11:06:50 +00:00
|
|
|
} catch(\Exception $e) {
|
|
|
|
|
session()->flash('error', trans($e->getMessage()));
|
2019-03-28 10:06:48 +00:00
|
|
|
}
|
|
|
|
|
|
2018-09-14 13:15:49 +00:00
|
|
|
return redirect()->back();
|
2018-09-11 11:19:40 +00:00
|
|
|
}
|
2018-09-17 08:27:32 +00:00
|
|
|
|
2018-10-30 04:31:01 +00:00
|
|
|
/**
|
2019-08-19 09:30:24 +00:00
|
|
|
* Function to move a already added product to wishlist will run only on customer authentication.
|
2018-10-30 04:31:01 +00:00
|
|
|
*
|
2019-08-19 09:30:24 +00:00
|
|
|
* @param integer $id
|
|
|
|
|
* @return Response
|
2018-10-30 04:31:01 +00:00
|
|
|
*/
|
2019-01-07 10:30:28 +00:00
|
|
|
public function moveToWishlist($id)
|
|
|
|
|
{
|
2018-10-30 04:31:01 +00:00
|
|
|
$result = Cart::moveToWishlist($id);
|
|
|
|
|
|
2019-08-19 09:30:24 +00:00
|
|
|
if ($result) {
|
2020-01-13 07:14:36 +00:00
|
|
|
session()->flash('success', trans('shop::app.checkout.cart.move-to-wishlist-success'));
|
2018-10-30 11:22:36 +00:00
|
|
|
} else {
|
2020-01-13 07:14:36 +00:00
|
|
|
session()->flash('warning', trans('shop::app.checkout.cart.move-to-wishlist-error'));
|
2018-10-30 11:22:36 +00:00
|
|
|
}
|
2019-08-19 09:30:24 +00:00
|
|
|
|
|
|
|
|
return redirect()->back();
|
2018-10-30 04:31:01 +00:00
|
|
|
}
|
2019-12-21 07:31:16 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Apply coupon to the cart
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Http\JsonResponse
|
|
|
|
|
*/
|
|
|
|
|
public function applyCoupon()
|
|
|
|
|
{
|
|
|
|
|
$couponCode = request()->get('code');
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (strlen($couponCode)) {
|
|
|
|
|
Cart::setCouponCode($couponCode)->collectTotals();
|
|
|
|
|
|
|
|
|
|
if (Cart::getCart()->coupon_code == $couponCode) {
|
|
|
|
|
return response()->json([
|
|
|
|
|
'success' => true,
|
|
|
|
|
'message' => trans('shop::app.checkout.total.success-coupon')
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'success' => false,
|
|
|
|
|
'message' => trans('shop::app.checkout.total.invalid-coupon')
|
|
|
|
|
]);
|
|
|
|
|
} catch (\Exception $e) {
|
2020-01-27 16:06:03 +00:00
|
|
|
report($e);
|
|
|
|
|
|
2019-12-21 07:31:16 +00:00
|
|
|
return response()->json([
|
|
|
|
|
'success' => false,
|
|
|
|
|
'message' => trans('shop::app.checkout.total.coupon-apply-issue')
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Apply coupon to the cart
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Http\JsonResponse
|
|
|
|
|
*/
|
|
|
|
|
public function removeCoupon()
|
|
|
|
|
{
|
|
|
|
|
Cart::removeCouponCode()->collectTotals();
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'success' => true,
|
|
|
|
|
'message' => trans('shop::app.checkout.total.remove-coupon')
|
|
|
|
|
]);
|
|
|
|
|
}
|
2018-09-06 06:20:30 +00:00
|
|
|
}
|