diff --git a/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php b/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php index 38eb6e439..60e3aa629 100644 --- a/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php +++ b/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php @@ -124,7 +124,6 @@ class CatalogRuleProduct ->addSelect('products.*') ->leftJoin('product_flat', 'products.id', '=', 'product_flat.product_id') ->leftJoin('channels', 'product_flat.channel', '=', 'channels.code') - ->where('product_flat.status', 1) ->whereIn('channels.id', $rule->channels()->pluck('id')->toArray()); if ($product) @@ -209,17 +208,16 @@ class CatalogRuleProduct $results = $this->catalogRuleProductRepository->scopeQuery(function($query) use($product) { $qb = $query->distinct() ->select('catalog_rule_products.*') - ->leftJoin('product_flat', 'catalog_rule_products.product_id', '=', 'product_flat.product_id') - ->where('product_flat.status', 1) - ->addSelect('product_flat.price') + ->leftJoin('products', 'catalog_rule_products.product_id', '=', 'products.id') ->orderBy('channel_id', 'asc') ->orderBy('customer_group_id', 'asc') ->orderBy('product_id', 'asc') ->orderBy('sort_order', 'asc') ->orderBy('catalog_rule_id', 'asc'); - if ($product) { + $qb = $this->addAttributeToSelect('price', $qb); + if ($product) { if (! $product->getTypeInstance()->priceRuleCanBeApplied()) return $qb; diff --git a/packages/Webkul/Product/src/Type/AbstractType.php b/packages/Webkul/Product/src/Type/AbstractType.php index a761d5b2a..a7f24968e 100644 --- a/packages/Webkul/Product/src/Type/AbstractType.php +++ b/packages/Webkul/Product/src/Type/AbstractType.php @@ -487,12 +487,26 @@ abstract class AbstractType */ public function haveSpecialPrice() { - if (is_null($this->product->special_price) || ! (float) $this->product->special_price) { - return false; - } + $rulePrice = app('Webkul\CatalogRule\Helpers\CatalogRuleProductPrice')->getRulePrice($this->product); - if (core()->isChannelDateInInterval($this->product->special_price_from, $this->product->special_price_to)) { - return true; + if ((is_null($this->product->special_price) || ! (float) $this->product->special_price) && ! $rulePrice) + return false; + + if (! (float) $this->product->special_price) { + if ($rulePrice) { + $this->product->special_price = $rulePrice->price; + + return true; + } + } else { + if ($rulePrice && $rulePrice->price <= $this->product->special_price) { + $this->product->special_price = $rulePrice->price; + + return true; + } else { + if (core()->isChannelDateInInterval($this->product->special_price_from, $this->product->special_price_to)) + return true; + } } return false; diff --git a/packages/Webkul/Product/src/Type/Grouped.php b/packages/Webkul/Product/src/Type/Grouped.php index ec2fc4c39..b173c027c 100644 --- a/packages/Webkul/Product/src/Type/Grouped.php +++ b/packages/Webkul/Product/src/Type/Grouped.php @@ -114,6 +114,16 @@ class Grouped extends AbstractType return array_unique($this->product->grouped_products()->pluck('product_id')->toArray()); } + /** + * Check if catalog rule can be applied + * + * @return bool + */ + public function priceRuleCanBeApplied() + { + return false; + } + /** * Get product minimal price *