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/Controllers/CheckoutController.php b/packages/Webkul/Cart/src/Http/Controllers/CheckoutController.php index e797a15b9..8f8022a0d 100644 --- a/packages/Webkul/Cart/src/Http/Controllers/CheckoutController.php +++ b/packages/Webkul/Cart/src/Http/Controllers/CheckoutController.php @@ -1,13 +1,14 @@ all())) { + // return response()->json(['redirect_url' => route('store.home')], 403) + } return response()->json(Shipping::collectRates()); } @@ -71,7 +76,7 @@ class CheckoutController extends Controller * * @return \Illuminate\Http\Response */ - public function saveAPayment() + public function savePayment() { } } \ No newline at end of file diff --git a/packages/Webkul/Cart/src/Http/Requests/CustomerAddressForm.php b/packages/Webkul/Cart/src/Http/Requests/CustomerAddressForm.php new file mode 100644 index 000000000..bd1043844 --- /dev/null +++ b/packages/Webkul/Cart/src/Http/Requests/CustomerAddressForm.php @@ -0,0 +1,57 @@ +rules = [ + 'billing.first_name' => ['required'], + 'billing.last_name' => ['required'], + 'billing.email' => ['required'], + 'billing.address1' => ['required'], + 'billing.city' => ['required'], + 'billing.state' => ['required'], + 'billing.postcode' => ['required'], + 'billing.phone' => ['required'], + 'billing.country' => ['required'] + ]; + + if(!$this->get('billing')['use_for_shipping']) { + $this->rules = array_merge($this->rules, [ + 'shipping.first_name' => ['required'], + 'shipping.last_name' => ['required'], + 'shipping.email' => ['required'], + 'shipping.address1' => ['required'], + 'shipping.city' => ['required'], + 'shipping.state' => ['required'], + 'shipping.postcode' => ['required'], + 'shipping.phone' => ['required'], + 'shipping.country' => ['required'] + ]); + } + + return $this->rules; + } +} 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/Product/src/Product/ConfigurableOption.php b/packages/Webkul/Product/src/Product/ConfigurableOption.php index 216fd5408..ebf04db1a 100644 --- a/packages/Webkul/Product/src/Product/ConfigurableOption.php +++ b/packages/Webkul/Product/src/Product/ConfigurableOption.php @@ -235,4 +235,14 @@ class ConfigurableOption extends AbstractProduct return $images; } + + /** + * Get product images for configurable variations + * + * @param Product $product + * @return array + */ + protected function is($product) + { + } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/routes.php b/packages/Webkul/Shop/src/Http/routes.php index 8acf7735e..053265fa3 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/app.js b/packages/Webkul/Shop/src/Resources/assets/js/app.js index 1507aa2da..87860f794 100644 --- a/packages/Webkul/Shop/src/Resources/assets/js/app.js +++ b/packages/Webkul/Shop/src/Resources/assets/js/app.js @@ -31,17 +31,27 @@ $(document).ready(function () { }); }, - addServerErrors: function () { - var scope = null; + addServerErrors: function (scope = null) { for (var key in serverErrors) { + var inputNames = []; + key.split('.').forEach(function(chunk, index) { + if(index) { + inputNames.push('[' + chunk + ']') + } else { + inputNames.push(chunk) + } + }) + + var inputName = inputNames.join(''); + const field = this.$validator.fields.find({ - name: key, + name: inputName, scope: scope }); if (field) { this.$validator.errors.add({ id: field.id, - field: key, + field: inputName, msg: serverErrors[key][0], scope: scope }); 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 @@