From 149ae5ff74396a210c84ee522e3cbbefe0e5fda6 Mon Sep 17 00:00:00 2001 From: jitendra Date: Wed, 22 Aug 2018 12:35:17 +0530 Subject: [PATCH] Merge issue fixed --- .../Http/Controllers/ProductController.php | 2 +- .../Webkul/Product/src/Models/Product.php | 20 ++-- .../Product/src/Product/AbstractProduct.php | 36 +++++++ .../src/Product/Collection.php | 64 ++++++----- packages/Webkul/Product/src/Product/Price.php | 102 ++++++++++++++++++ .../{Shop => Product}/src/Product/Review.php | 0 .../src/Repositories/ProductRepository.php | 2 +- .../Shop/src/Product/AbstractProduct.php | 7 -- packages/Webkul/Shop/src/Product/Price.php | 55 ---------- .../Shop/src/Resources/assets/sass/app.scss | 5 + .../Resources/views/products/index.blade.php | 2 +- .../Resources/views/products/price.blade.php | 4 +- .../Resources/views/products/review.blade.php | 2 +- public/themes/default/assets/css/shop.css | 5 + 14 files changed, 196 insertions(+), 110 deletions(-) create mode 100644 packages/Webkul/Product/src/Product/AbstractProduct.php rename packages/Webkul/{Shop => Product}/src/Product/Collection.php (56%) create mode 100644 packages/Webkul/Product/src/Product/Price.php rename packages/Webkul/{Shop => Product}/src/Product/Review.php (100%) delete mode 100644 packages/Webkul/Shop/src/Product/AbstractProduct.php delete mode 100644 packages/Webkul/Shop/src/Product/Price.php diff --git a/packages/Webkul/Product/src/Http/Controllers/ProductController.php b/packages/Webkul/Product/src/Http/Controllers/ProductController.php index 4ab8e35ca..c995bf4f2 100644 --- a/packages/Webkul/Product/src/Http/Controllers/ProductController.php +++ b/packages/Webkul/Product/src/Http/Controllers/ProductController.php @@ -143,7 +143,7 @@ class ProductController extends Controller */ public function edit($id) { - $product = $this->product->findOrFail($id, ['*'], ['variants', 'inventories']); + $product = $this->product->findOrFail($id, ['*'], ['variants']); $categories = $this->category->getCategoryTree(); diff --git a/packages/Webkul/Product/src/Models/Product.php b/packages/Webkul/Product/src/Models/Product.php index befbfdf35..e8c9a6275 100644 --- a/packages/Webkul/Product/src/Models/Product.php +++ b/packages/Webkul/Product/src/Models/Product.php @@ -16,7 +16,7 @@ class Product extends Model { protected $fillable = ['type', 'attribute_family_id', 'sku', 'parent_id']; - protected $with = ['attribute_family', 'attribute_values', 'inventories']; + protected $with = ['attribute_family', 'inventories']; /** * Get the product attribute family that owns the product. @@ -131,14 +131,6 @@ class Product extends Model { return $this->attribute_family->custom_attributes->pluck('code')->contains($attribute); } - - /** - * @return bool - */ - public function getFinalPrice() - { - return 0.00; - } /** * Get an attribute from the model. @@ -148,11 +140,10 @@ class Product extends Model */ public function getAttribute($key) { - - if (!method_exists(self::class, $key) && !isset($this->attributes[$key])) { - $this->attributes[$key] = ''; - + if (!method_exists(self::class, $key) && !in_array($key, ['parent_id', 'attribute_family_id']) && !isset($this->attributes[$key])) { if ($this->isCustomAttribute($key)) { + $this->attributes[$key] = ''; + $attributeModel = $this->attribute_family->custom_attributes()->where('attributes.code', $key)->first(); if($attributeModel) { @@ -176,9 +167,10 @@ class Product extends Model $this->attributes[$key] = $attributeValue[ProductAttributeValue::$attributeTypeFields[$attributeModel->type]]; } + + return $this->getAttributeValue($key); } - return $this->getAttributeValue($key); } return parent::getAttribute($key); diff --git a/packages/Webkul/Product/src/Product/AbstractProduct.php b/packages/Webkul/Product/src/Product/AbstractProduct.php new file mode 100644 index 000000000..b24547164 --- /dev/null +++ b/packages/Webkul/Product/src/Product/AbstractProduct.php @@ -0,0 +1,36 @@ +getCurrentChannelCode(); + + $locale = app()->getLocale(); + + if($attribute->value_per_channel) { + if($attribute->value_per_locale) { + $qb->where($alias . '.channel', $channel) + ->where($alias . '.locale', $locale); + } else { + $qb->where($alias . '.channel', $channel); + } + } else { + if($attribute->value_per_locale) { + $qb->where($alias . '.locale', $locale); + } + } + + return $qb; + } +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Product/Collection.php b/packages/Webkul/Product/src/Product/Collection.php similarity index 56% rename from packages/Webkul/Shop/src/Product/Collection.php rename to packages/Webkul/Product/src/Product/Collection.php index 6590aa3f1..af7af806c 100644 --- a/packages/Webkul/Shop/src/Product/Collection.php +++ b/packages/Webkul/Product/src/Product/Collection.php @@ -1,6 +1,6 @@ attribute = $attribute; } + /** + * @param array $attributes + * @return Void + */ + public function addAttributesToSelect($attributes) + { + $this->attributesToSelect = $attributes; + } + /** * @param integer $categoryId * @return Collection @@ -47,44 +72,27 @@ class Collection extends AbstractProduct ->join('product_categories', 'products.id', '=', 'product_categories.product_id') ->where('product_categories.category_id', $categoryId); - $channel = core()->getCurrentChannelCode(); - $locale = app()->getLocale(); - - foreach (['name', 'description', 'short_description', 'price', 'special_price', 'special_price_from', 'special_price_to'] as $code) { + foreach ($this->attributesToSelect as $code) { $attribute = $this->attribute->findBy('code', $code); $productValueAlias = 'pav_' . $attribute->code; - $qb->leftJoin('product_attribute_values as ' . $productValueAlias, function($leftJoin) use($channel, $locale, $attribute, $productValueAlias) { + $qb->leftJoin('product_attribute_values as ' . $productValueAlias, function($leftJoin) use($attribute, $productValueAlias) { $leftJoin->on('products.id', $productValueAlias . '.product_id'); - if($attribute->value_per_channel) { - if($attribute->value_per_locale) { - $leftJoin->where($productValueAlias . '.channel', $channel) - ->where($productValueAlias . '.locale', $locale); - } else { - $leftJoin->where($productValueAlias . '.channel', $channel); - } - } else { - if($attribute->value_per_locale) { - $leftJoin->where($productValueAlias . '.locale', $locale); - } - } - - $leftJoin->where($productValueAlias . '.attribute_id', $attribute->id); + $leftJoin = $this->applyChannelLocaleFilter($attribute, $leftJoin, $productValueAlias)->where($productValueAlias . '.attribute_id', $attribute->id); }); - $qb->addSelect($productValueAlias . '.' . ProductAttributeValue::$attributeTypeFields[$attribute->type] . ' as ' . $code); - - - // if($code == 'name') { - // $filterAlias = 'filter_' . $attribute->code; + } + + foreach (request()->input() as $code => $value) { + $filterAlias = 'filter_' . $code; - // $qb->leftJoin('product_attribute_values as ' . $filterAlias, 'products.id', '=', $filterAlias . '.product_id'); - // $qb->where($filterAlias . '.' . ProductAttributeValue::$attributeTypeFields[$attribute->type], 'Product Name'); - // } + $qb->leftJoin('product_attribute_values as ' . $filterAlias, 'products.id', '=', $filterAlias . '.product_id'); + + $qb->where($filterAlias . '.' . ProductAttributeValue::$attributeTypeFields[$attribute->type], $value); } // if(0) { diff --git a/packages/Webkul/Product/src/Product/Price.php b/packages/Webkul/Product/src/Product/Price.php new file mode 100644 index 000000000..06f616ffe --- /dev/null +++ b/packages/Webkul/Product/src/Product/Price.php @@ -0,0 +1,102 @@ +attribute = $attribute; + } + + /** + * Returns the product's minimal price + * + * @param Product $product + * @return float + */ + public function getMinimalPrice($product) + { + if($product->type == 'configurable') { + return $this->getVariantMinPrice($product); + } else { + if($this->haveSpecialPrice($product)) { + return $product->special_price; + } else { + return $product->price; + } + } + } + + /** + * Returns the product's minimal price + * + * @param Product $product + * @return float + */ + public function getVariantMinPrice($product) + { + static $attribute; + + if(!$attribute) + $attribute = $this->attribute->findBy('code', 'price'); + + $qb = ProductAttributeValue::join('products', 'product_attribute_values.product_id', '=', 'products.id') + ->join('attributes', 'product_attribute_values.attribute_id', '=', 'attributes.id') + ->where('products.parent_id', $product->id) + ->where('attributes.code', 'price') + ->addSelect('product_attribute_values.*'); + + $qb = $this->applyChannelLocaleFilter($attribute, $qb); + + return $qb->min('product_attribute_values.' . ProductAttributeValue::$attributeTypeFields['price']); + } + + /** + * Returns the product's minimal price + * + * @param Product $product + * @return float + */ + public function getSpecialPrice($product) + { + if($this->haveSpecialPrice($product)) { + return $product->special_price; + } else { + return $product->price; + } + } + + /** + * @param Product $product + * @return boolean + */ + public function haveSpecialPrice($product) + { + if(is_null($product->special_price) || !$product->special_price) + return false; + + if (core()->isChannelDateInInterval($product->special_price_from, $product->special_price_to)) { + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Product/Review.php b/packages/Webkul/Product/src/Product/Review.php similarity index 100% rename from packages/Webkul/Shop/src/Product/Review.php rename to packages/Webkul/Product/src/Product/Review.php diff --git a/packages/Webkul/Product/src/Repositories/ProductRepository.php b/packages/Webkul/Product/src/Repositories/ProductRepository.php index 2c1a32ed0..ebd40d5bf 100644 --- a/packages/Webkul/Product/src/Repositories/ProductRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductRepository.php @@ -141,7 +141,7 @@ class ProductRepository extends Repository $product = $this->findOrFail($id); if($product->parent_id && $this->checkVariantOptionAvailabiliy($data, $product)) { - $data['parent_id'] = null; + $data['parent_id'] = NULL; } $product->update($data); diff --git a/packages/Webkul/Shop/src/Product/AbstractProduct.php b/packages/Webkul/Shop/src/Product/AbstractProduct.php deleted file mode 100644 index c3889b3eb..000000000 --- a/packages/Webkul/Shop/src/Product/AbstractProduct.php +++ /dev/null @@ -1,7 +0,0 @@ -type == 'configurable') { - return $product->variants->min('price'); - } else { - if($this->haveSpecialPrice($product)) { - return $product->special_price; - } else { - return $product->price; - } - } - } - - /** - * Returns the product's minimal price - * - * @return float - */ - public function getSpecialPrice($product) - { - if($this->haveSpecialPrice($product)) { - return $product->special_price; - } else { - return $product->price; - } - } - - /** - * @param Product $product - * @return boolean - */ - public function haveSpecialPrice($product) - { - if(is_null($product->special_price) || !$product->special_price) - return false; - - if (core()->isChannelDateInInterval($product->special_price_from, $product->special_price_to)) { - return true; - } - - return false; - } -} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/assets/sass/app.scss b/packages/Webkul/Shop/src/Resources/assets/sass/app.scss index 5b9425167..2afd51256 100644 --- a/packages/Webkul/Shop/src/Resources/assets/sass/app.scss +++ b/packages/Webkul/Shop/src/Resources/assets/sass/app.scss @@ -441,6 +441,11 @@ section.slider-block { margin-left: 10%; margin-right: 10%; + .content-container { + display: inline-block; + width: 100%; + } + .product-grid { display: grid; grid-gap: 30px; diff --git a/packages/Webkul/Shop/src/Resources/views/products/index.blade.php b/packages/Webkul/Shop/src/Resources/views/products/index.blade.php index d7c5b30e4..ef9b364ea 100644 --- a/packages/Webkul/Shop/src/Resources/views/products/index.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/products/index.blade.php @@ -8,7 +8,7 @@
- @inject ('productHelper', 'Webkul\Shop\Product\Collection') + @inject ('productHelper', 'Webkul\Product\Product\Collection') getProductCollection($category->id); ?> diff --git a/packages/Webkul/Shop/src/Resources/views/products/price.blade.php b/packages/Webkul/Shop/src/Resources/views/products/price.blade.php index 66ae0416b..dedfcc8a7 100644 --- a/packages/Webkul/Shop/src/Resources/views/products/price.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/products/price.blade.php @@ -1,9 +1,9 @@
- @inject ('priceHelper', 'Webkul\Shop\Product\Price') + @inject ('priceHelper', 'Webkul\Product\Product\Price') @if ($product->type == 'configurable') - + {{ __('shop::app.products.price-label') }} {{ core()->currency($priceHelper->getMinimalPrice($product)) }} diff --git a/packages/Webkul/Shop/src/Resources/views/products/review.blade.php b/packages/Webkul/Shop/src/Resources/views/products/review.blade.php index 12f303705..f5cd7d9ed 100644 --- a/packages/Webkul/Shop/src/Resources/views/products/review.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/products/review.blade.php @@ -1,6 +1,6 @@
- @inject ('reviewHelper', 'Webkul\Shop\Product\Review') + @inject ('reviewHelper', 'Webkul\Product\Product\Review') @for ($i = 1; $i <= $reviewHelper->getAverageRating($product); $i++) diff --git a/public/themes/default/assets/css/shop.css b/public/themes/default/assets/css/shop.css index 21951f975..50e623093 100644 --- a/public/themes/default/assets/css/shop.css +++ b/public/themes/default/assets/css/shop.css @@ -514,6 +514,11 @@ section.slider-block div.slider-content div.slider-control .light-right-icon { margin-right: 10%; } +.main-container-wrapper .content-container { + display: inline-block; + width: 100%; +} + .main-container-wrapper .product-grid { display: grid; grid-gap: 30px;