diff --git a/packages/Webkul/Cart/src/Cart.php b/packages/Webkul/Cart/src/Cart.php index 094ca5330..21ef0a103 100644 --- a/packages/Webkul/Cart/src/Cart.php +++ b/packages/Webkul/Cart/src/Cart.php @@ -50,8 +50,8 @@ class Cart { * instance with the * current item added. * - * @param @id - * @param $data + * @param Integer $id + * @param Mixed $data * * @return Mixed */ @@ -68,6 +68,14 @@ class Cart { $data['cart_id'] = $cart->id; $data['product_id'] = $id; + if ($data['is_configurable'] == "true") { + $temp = $data['super_attribute']; + + unset($data['super_attribute']); + + $data['additional'] = json_encode($temp); + } + if($result = $this->cartItem->create($data)) { session()->put('cart', $cart); @@ -93,6 +101,10 @@ class Cart { * @return Mixed */ public function add($id, $data) { + + // session()->forget('cart'); + // return redirect()->back(); + if(session()->has('cart')) { $cart = session()->get('cart'); @@ -117,6 +129,14 @@ class Cart { $data['product_id'] = $id; + if ($data['is_configurable'] == "true") { + $temp = $data['super_attribute']; + + unset($data['super_attribute']); + + $data['additional'] = json_encode($temp); + } + $cart->items()->create($data); session()->flash('success', 'Item Successfully Added To Cart'); @@ -136,6 +156,7 @@ class Cart { * use detach to remove the * current product from cart tables * + * @param Integer $id * @return Mixed */ public function remove($id) { diff --git a/packages/Webkul/Cart/src/Http/Controllers/CartController.php b/packages/Webkul/Cart/src/Http/Controllers/CartController.php index 5b77c35d4..a27596180 100644 --- a/packages/Webkul/Cart/src/Http/Controllers/CartController.php +++ b/packages/Webkul/Cart/src/Http/Controllers/CartController.php @@ -5,16 +5,16 @@ namespace Webkul\Cart\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; -//Cart repositories use Webkul\Cart\Repositories\CartRepository; use Webkul\Cart\Repositories\CartItemRepository; -//Product Repository use Webkul\Product\Repositories\ProductRepository; -//Customer repositories use Webkul\Customer\Repositories\CustomerRepository; +use Webkul\Product\Product\ProductImage; +use Webkul\Product\Product\View as ProductView; + use Cart; use Cookie; @@ -45,7 +45,9 @@ class CartController extends Controller protected $product; - public function __construct(CartRepository $cart, CartItemRepository $cartItem, CustomerRepository $customer, ProductRepository $product) { + protected $productView; + + public function __construct(CartRepository $cart, CartItemRepository $cartItem, CustomerRepository $customer, ProductRepository $product, ProductImage $productImage, ProductView $productView) { $this->middleware('customer')->except(['add', 'remove', 'test']); @@ -56,6 +58,12 @@ class CartController extends Controller $this->cartItem = $cartItem; $this->product = $product; + + $this->productImage = $productImage; + + $this->productView = $productView; + + $this->_config = request('_config'); } /** @@ -99,6 +107,67 @@ class CartController extends Controller return redirect()->back(); } + /** + * Method to populate + * the cart page which + * will be populated + * before the checkout + * process. + * + * @return Mixed + */ + public function beforeCheckout() { + if(auth()->guard('customer')->check()) { + $cart = $this->cart->findOneByField('customer_id', auth()->guard('customer')->user()->id); + + if(isset($cart)) { + $cart = $this->cart->findOneByField('id', 144); + + $cartItems = $this->cart->items($cart['id']); + + $products = array(); + + foreach($cartItems as $cartItem) { + $image = $this->productImage->getGalleryImages($cartItem->product); + + if(isset($image[0]['small_image_url'])) { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, $image[0]['small_image_url'], $cartItem->quantity]; + } + else { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, 'null', $cartItem->quantity]; + } + + } + } + } else { + if(session()->has('cart')) { + $cart = session()->get('cart'); + + if(isset($cart)) { + $cart = $this->cart->findOneByField('id', 144); + + $cartItems = $this->cart->items($cart['id']); + + $products = array(); + + foreach($cartItems as $cartItem) { + $image = $this->productImage->getGalleryImages($cartItem->product); + + if(isset($image[0]['small_image_url'])) { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, $image[0]['small_image_url'], $cartItem->quantity]; + } + else { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, 'null', $cartItem->quantity]; + } + + } + } + } + } + + return view($this->_config['view'])->with('products', $products); + } + /** * This method will return * the quantities from @@ -151,6 +220,26 @@ class CartController extends Controller } public function test() { + $cart = $this->cart->findOneByField('id', 144); + $cartItems = $this->cart->items($cart['id']); + + $products = array(); + + foreach($cartItems as $cartItem) { + $image = $this->productImage->getGalleryImages($cartItem->product); + + dump($cartItem->product); + + if(isset($image[0]['small_image_url'])) { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, $image[0]['small_image_url'], $cartItem->quantity]; + } + else { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, 'null', $cartItem->quantity]; + } + + } + + dd($products); } } \ No newline at end of file diff --git a/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php b/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php index 372f40d14..d1e88dfbe 100644 --- a/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php +++ b/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php @@ -6,17 +6,19 @@ use Illuminate\View\View; use Illuminate\Support\Collection; use Webkul\Cart\Repositories\CartRepository; - use Webkul\Cart\Repositories\CartItemRepository; +//Product Image Helper Class +use Webkul\Product\Product\ProductImage; + use Cart; + /** * cart List Composer on Navigation Menu * * @author Prashant Singh * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) */ - class CartComposer { @@ -33,10 +35,12 @@ class CartComposer * @param View $view * @return void */ - public function __construct(CartRepository $cart, CartItemRepository $cartItem) { + public function __construct(CartRepository $cart, CartItemRepository $cartItem, ProductImage $productImage) { $this->cart = $cart; $this->cartItem = $cartItem; + + $this->productImage = $productImage; } public function compose(View $view) { @@ -44,30 +48,51 @@ class CartComposer $cart = $this->cart->findOneByField('customer_id', auth()->guard('customer')->user()->id); if(isset($cart)) { - $cart_items = $this->cart->items($cart['id']); + $cart = $this->cart->findOneByField('id', 144); - $cart_products = array(); + $cartItems = $this->cart->items($cart['id']); + + $products = array(); + + foreach($cartItems as $cartItem) { + $image = $this->productImage->getGalleryImages($cartItem->product); + + if(isset($image[0]['small_image_url'])) { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, $image[0]['small_image_url'], $cartItem->quantity]; + } + else { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, 'null', $cartItem->quantity]; + } - foreach($cart_items as $cart_item) { - array_push($cart_products, $this->cartItem->getProduct($cart_item->id)); } + session()->put('cart', $cart); - $view->with('cart', $cart_products); + $view->with('cart', $products); } } else { if(session()->has('cart')) { $cart = session()->get('cart'); if(isset($cart)) { + $cart = $this->cart->findOneByField('id', 144); + $cartItems = $this->cart->items($cart['id']); - $cart_products = array(); + $products = array(); + + foreach($cartItems as $cartItem) { + $image = $this->productImage->getGalleryImages($cartItem->product); + + if(isset($image[0]['small_image_url'])) { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, $image[0]['small_image_url'], $cartItem->quantity]; + } + else { + $products[$cartItem->product->id] = [$cartItem->product->name, $cartItem->price, 'null', $cartItem->quantity]; + } - foreach($cart_items as $cart_item) { - array_push($cart_products, $this->cartItem->getProduct($cart_item->id)); } - $view->with('cart', $cart_products); + $view->with('cart', $products); } } } diff --git a/packages/Webkul/Shop/src/Http/routes.php b/packages/Webkul/Shop/src/Http/routes.php index d8da68161..6fb7371e1 100644 --- a/packages/Webkul/Shop/src/Http/routes.php +++ b/packages/Webkul/Shop/src/Http/routes.php @@ -16,6 +16,10 @@ Route::group(['middleware' => ['web']], function () { Route::get('test', 'Webkul\Cart\Http\Controllers\CartController@test'); + Route::get('cart', 'Webkul\Cart\Http\Controllers\CartController@beforeCheckout')->defaults('_config', [ + 'view' => 'shop::store.cart.index' + ]); + Route::post('/checkout/save-address', 'Webkul\Cart\Http\Controllers\CheckoutController@saveAddress')->name('shop.checkout.save-address'); Route::post('/checkout/save-shipping', 'Webkul\Cart\Http\Controllers\CheckoutController@saveShipping')->name('shop.checkout.save-shipping'); diff --git a/packages/Webkul/Shop/src/Resources/assets/js/components/cart-dropdown.vue b/packages/Webkul/Shop/src/Resources/assets/js/components/cart-dropdown.vue index bea9aa806..d9f8b74ba 100644 --- a/packages/Webkul/Shop/src/Resources/assets/js/components/cart-dropdown.vue +++ b/packages/Webkul/Shop/src/Resources/assets/js/components/cart-dropdown.vue @@ -11,19 +11,22 @@