From 26de50bc46ca28f3841a5a4e06f368aa47cf74a0 Mon Sep 17 00:00:00 2001 From: prashant-webkul Date: Tue, 25 Sep 2018 14:07:34 +0530 Subject: [PATCH] Fixed bugs and made way for exisiting features of cart to be implemented in new future --- .../views/settings/channels/edit.blade.php | 12 ++-- packages/Webkul/Cart/src/Cart.php | 3 - .../2018_09_05_150444_create_cart_table.php | 5 ++ .../src/Http/Controllers/CartController.php | 65 +++++++++++++++---- .../src/Http/ViewComposers/CartComposer.php | 4 -- .../Cart/src/Repositories/CartRepository.php | 63 +++--------------- packages/Webkul/Core/src/Core.php | 2 +- .../Http/Controllers/ChannelController.php | 5 +- .../Http/Controllers/SessionController.php | 3 - packages/Webkul/Shop/src/Http/routes.php | 4 +- .../views/store/cart/index.blade.php | 35 ---------- 11 files changed, 75 insertions(+), 126 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php index dd6b2da91..085b83936 100644 --- a/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php @@ -65,17 +65,17 @@ @{{ errors.first('locales[]') }} -
+
default_locale_id ?> - @foreach(core()->getAllLocales() as $locale) @endforeach - @{{ errors.first('default_locale') }} + @{{ errors.first('default_locale_id') }}
@@ -91,17 +91,17 @@ @{{ errors.first('currencies[]') }}
-
+
base_currency_id ?> - @foreach(core()->getAllCurrencies() as $currency) @endforeach - @{{ errors.first('base_currency') }} + @{{ errors.first('base_currency_id') }}
diff --git a/packages/Webkul/Cart/src/Cart.php b/packages/Webkul/Cart/src/Cart.php index 21ef0a103..246254906 100644 --- a/packages/Webkul/Cart/src/Cart.php +++ b/packages/Webkul/Cart/src/Cart.php @@ -102,9 +102,6 @@ class Cart { */ public function add($id, $data) { - // session()->forget('cart'); - // return redirect()->back(); - if(session()->has('cart')) { $cart = session()->get('cart'); diff --git a/packages/Webkul/Cart/src/Database/Migrations/2018_09_05_150444_create_cart_table.php b/packages/Webkul/Cart/src/Database/Migrations/2018_09_05_150444_create_cart_table.php index 9809f692d..f5027b241 100644 --- a/packages/Webkul/Cart/src/Database/Migrations/2018_09_05_150444_create_cart_table.php +++ b/packages/Webkul/Cart/src/Database/Migrations/2018_09_05_150444_create_cart_table.php @@ -20,6 +20,11 @@ class CreateCartTable extends Migration $table->string('session_id')->nullable(); $table->integer('channel_id')->unsigned(); $table->foreign('channel_id')->references('id')->on('channels'); + $table->string('sku')->nullable(); + $table->string('type')->nullable(); + $table->string('name')->nullable(); + $table->integer('parent_id')->nullable(); + $table->foreign('parent_id')->references('id')->on('cart'); $table->string('coupon_code')->nullable(); $table->boolean('is_gift')->nullable(); $table->integer('items_count')->nullable(); diff --git a/packages/Webkul/Cart/src/Http/Controllers/CartController.php b/packages/Webkul/Cart/src/Http/Controllers/CartController.php index a27596180..59af6df1b 100644 --- a/packages/Webkul/Cart/src/Http/Controllers/CartController.php +++ b/packages/Webkul/Cart/src/Http/Controllers/CartController.php @@ -4,19 +4,15 @@ namespace Webkul\Cart\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; - use Webkul\Cart\Repositories\CartRepository; use Webkul\Cart\Repositories\CartItemRepository; - use Webkul\Product\Repositories\ProductRepository; - use Webkul\Customer\Repositories\CustomerRepository; - use Webkul\Product\Product\ProductImage; use Webkul\Product\Product\View as ProductView; +use Webkul\Attribute\Repositories\AttributeOptionRepository; use Cart; -use Cookie; /** * Cart controller for the customer @@ -31,9 +27,17 @@ class CartController extends Controller { /** - * Display a listing of the resource. + * Protected Variables that + * holds instances of the + * repository classes. * - * @return \Illuminate\Http\Response + * @param Array $_config + * @param $cart + * @param $cartItem + * @param $customer + * @param $product + * @param $productImage + * @param $productView */ protected $_config; @@ -47,7 +51,26 @@ class CartController extends Controller protected $productView; - public function __construct(CartRepository $cart, CartItemRepository $cartItem, CustomerRepository $customer, ProductRepository $product, ProductImage $productImage, ProductView $productView) { + /** + * Initializing various + * required repositories + * and classes. + * + * @param Mixed $cart + * @param Mixed $cartItem + * @param Mixed $customer + * @param Mixed $product + * @param Mixed $productImage + * @param Mixed $productView + */ + public function __construct( + CartRepository $cart, + CartItemRepository $cartItem, + CustomerRepository $customer, + ProductRepository $product, + ProductImage $productImage, + ProductView $productView) + { $this->middleware('customer')->except(['add', 'remove', 'test']); @@ -75,20 +98,34 @@ class CartController extends Controller */ public function add($id) { + + session()->forget('cart'); + return redirect()->back(); + $data = request()->input(); if(!isset($data['is_configurable']) || !isset($data['product']) ||!isset($data['quantity'])) { - session()->flash('error', 'Cannot Product Due to User\'s miscreancy in system\'s integrity'); + session()->flash('error', 'Cart System Integrity Violation'); return redirect()->back(); + } else { + //handle the accidental case + //when some one deleted + //form fields from the DOM + if($data['is_configurable']) { + if(!isset($data['super_attributes'])) { + session()->flash('error', 'Cart System Integrity Violation'); + + return redirect()->back(); + } + } } - if($data['is_configurable'] == "false") { - $data['price'] = $this->product->findOneByField('id', $data['product'])->price; - } else { - $id = $data['selected_configurable_option']; - + if(isset($data['is_configurable']) && $data['is_configurable']) { $data['price'] = $this->product->findOneByField('id', $data['selected_configurable_option'])->price; + + } else { + $data['price'] = $this->product->findOneByField('id', $data['product'])->price; } Cart::add($id, $data); diff --git a/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php b/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php index d1e88dfbe..6432d6f7e 100644 --- a/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php +++ b/packages/Webkul/Cart/src/Http/ViewComposers/CartComposer.php @@ -48,8 +48,6 @@ class CartComposer $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(); @@ -74,8 +72,6 @@ class CartComposer $cart = session()->get('cart'); if(isset($cart)) { - $cart = $this->cart->findOneByField('id', 144); - $cartItems = $this->cart->items($cart['id']); $products = array(); diff --git a/packages/Webkul/Cart/src/Repositories/CartRepository.php b/packages/Webkul/Cart/src/Repositories/CartRepository.php index 362bad43c..5702461fc 100644 --- a/packages/Webkul/Cart/src/Repositories/CartRepository.php +++ b/packages/Webkul/Cart/src/Repositories/CartRepository.php @@ -42,7 +42,6 @@ class CartRepository extends Repository * @param string $attribute * @return Mixed */ - public function update(array $data, $id, $attribute = "id") { $cart = $this->find($id); @@ -52,60 +51,6 @@ class CartRepository extends Repository return $cart; } - public function getProducts($id) { - - return $this->model->find($id)->with_products; - } - - /** - * Method to attach - * associations - * - * @return Mixed - */ - public function attach($cart_id, $product_id, $quantity, $price) { - return $this->model->findOrFail($cart_id)->with_products()->attach($cart_id, ['product_id' => $product_id, 'cart_id' => $cart_id, 'quantity' => $quantity, 'price' => $price]); - } - - /** - * Create Cart Item - * Through Cart. - * - * @return Collection - */ - public function createItem($cartId, $data) { - $cart = $this->model->findOrFail($cartId); - - return $cart->items()->create($data); - } - - /** - * This will update the - * quantity of product - * for the customer, - * in case of merge. - * - * @return Mixed - */ - public function updateRelatedForMerge($cart_id, $product_id, $column, $value) { - $cart_product = $this->model->findOrFail($cart_id); - - return $cart_product->with_products()->updateExistingPivot($product_id, array($column => $value)); - } - - /** - * Update the quantity of - * previously added item - * in the cart. - * - * @return Mixed - */ - - // public function updateRelatedInItems($cartId, $cartItemId, $column, $value) { - - // return $this->updateItem($cartId)->syncWithoutDetaching($cartItemId, [$column => $value]); - // } - /** * Method to detach * associations. @@ -121,6 +66,14 @@ class CartRepository extends Repository return $this->model->destroy($cart_id); } + /** + * Used to get items + * for cart explicitly, + * use cart instance + * instead. + * + * @return Mixed + */ public function items($cartId) { return $this->model->find($cartId)->items; } diff --git a/packages/Webkul/Core/src/Core.php b/packages/Webkul/Core/src/Core.php index 4457259e3..5c2d895c0 100644 --- a/packages/Webkul/Core/src/Core.php +++ b/packages/Webkul/Core/src/Core.php @@ -140,7 +140,7 @@ class Core $channel = $this->getCurrentChannel(); - $currencyCode = $channel->base_currency; + $currencyCode = $channel->base_currency->code; return currency($price, $currencyCode); } diff --git a/packages/Webkul/Core/src/Http/Controllers/ChannelController.php b/packages/Webkul/Core/src/Http/Controllers/ChannelController.php index 858b69202..5328fc3e9 100644 --- a/packages/Webkul/Core/src/Http/Controllers/ChannelController.php +++ b/packages/Webkul/Core/src/Http/Controllers/ChannelController.php @@ -80,7 +80,6 @@ class ChannelController extends Controller 'base_currency' => 'required' ]); - $this->channel->create(request()->all()); session()->flash('success', 'Channel created successfully.'); @@ -114,9 +113,9 @@ class ChannelController extends Controller 'code' => ['required', 'unique:channels,code,' . $id, new \Webkul\Core\Contracts\Validations\Code], 'name' => 'required', 'locales' => 'required|array|min:1', - 'default_locale' => 'required', + 'default_locale_id' => 'required', 'currencies' => 'required|array|min:1', - 'base_currency' => 'required' + 'base_currency_id' => 'required' ]); $this->channel->update(request()->all(), $id); diff --git a/packages/Webkul/Customer/src/Http/Controllers/SessionController.php b/packages/Webkul/Customer/src/Http/Controllers/SessionController.php index afa24027a..564777325 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/SessionController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/SessionController.php @@ -5,11 +5,8 @@ namespace Webkul\Customer\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Event; - use Webkul\Customer\Models\Customer; use Webkul\Customer\Http\Listeners\CustomerEventsHandler; - -use Cookie; use Cart; /** * Session controller for the user customer diff --git a/packages/Webkul/Shop/src/Http/routes.php b/packages/Webkul/Shop/src/Http/routes.php index 6fb7371e1..68743d727 100644 --- a/packages/Webkul/Shop/src/Http/routes.php +++ b/packages/Webkul/Shop/src/Http/routes.php @@ -35,9 +35,9 @@ Route::group(['middleware' => ['web']], function () { // //Routes for product cart - Route::post('products/add/{id}', 'Webkul\Cart\Http\Controllers\CartController@add')->name('cart.add'); + Route::post('checkout/cart/add/{id}', 'Webkul\Cart\Http\Controllers\CartController@add')->name('cart.add'); - Route::post('product/remove/{id}', 'Webkul\Cart\Http\Controllers\CartController@remove')->name('cart.remove'); + Route::post('checkout/cart/remove/{id}', 'Webkul\Cart\Http\Controllers\CartController@remove')->name('cart.remove'); //Routes for product cart ends diff --git a/packages/Webkul/Shop/src/Resources/views/store/cart/index.blade.php b/packages/Webkul/Shop/src/Resources/views/store/cart/index.blade.php index 4230a8dac..172dc910d 100644 --- a/packages/Webkul/Shop/src/Resources/views/store/cart/index.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/store/cart/index.blade.php @@ -6,45 +6,10 @@
- {{-- {{ dd($products) }} --}}
- {{--
- - -
- -
- Rainbow Creation Embroided -
- -
- - $24.00 - - - $25.00 - - - 10% Off - -
- -
- Color : Gray, Size : S, Sleeve type : Puffed Sleeves, Occasion : Birthday, Marriage Anniversary -
- -
-
Quantity
-
1
- Remove - Move to Wishlist -
-
- -
--}} @foreach($products as $product)