From 0eb21dd86e7b572052da32f5bb45f350989d8477 Mon Sep 17 00:00:00 2001
From: Sviatoslav Mankivskyi <smankivskyi@magento.com>
Date: Wed, 21 Dec 2016 11:49:02 +0200
Subject: [PATCH] MAGETWO-60098: Configurable product option price is displayed
 incorrectly per website

---
 .../Product/StatusBaseSelectProcessor.php           |  8 ++++----
 .../Product/StatusBaseSelectProcessorTest.php       | 13 ++++++++-----
 .../Product/Indexer/Price/Configurable.php          |  7 ++++++-
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/StatusBaseSelectProcessor.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/StatusBaseSelectProcessor.php
index 381e09f5d74..b4293a39895 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/StatusBaseSelectProcessor.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/StatusBaseSelectProcessor.php
@@ -61,16 +61,16 @@ class StatusBaseSelectProcessor implements BaseSelectProcessorInterface
         $select->joinLeft(
             ['status_global_attr' => $statusAttribute->getBackendTable()],
             "status_global_attr.{$linkField} = " . self::PRODUCT_TABLE_ALIAS . ".{$linkField}"
-                . ' AND status_global_attr.attribute_id = ' . (int)$statusAttribute->getAttributeId()
-                . ' AND status_global_attr.store_id = ' . Store::DEFAULT_STORE_ID,
+            . ' AND status_global_attr.attribute_id = ' . (int)$statusAttribute->getAttributeId()
+            . ' AND status_global_attr.store_id = ' . Store::DEFAULT_STORE_ID,
             []
         );
 
         $select->joinLeft(
             ['status_attr' => $statusAttribute->getBackendTable()],
             "status_attr.{$linkField} = " . self::PRODUCT_TABLE_ALIAS . ".{$linkField}"
-                . ' AND status_attr.attribute_id = ' . (int)$statusAttribute->getAttributeId()
-                . ' AND status_attr.store_id = ' . $this->storeResolver->getCurrentStoreId(),
+            . ' AND status_attr.attribute_id = ' . (int)$statusAttribute->getAttributeId()
+            . ' AND status_attr.store_id = ' . $this->storeResolver->getCurrentStoreId(),
             []
         );
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/StatusBaseSelectProcessorTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/StatusBaseSelectProcessorTest.php
index c1c78c41ea6..1fada997913 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/StatusBaseSelectProcessorTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/StatusBaseSelectProcessorTest.php
@@ -19,6 +19,9 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Store\Api\StoreResolverInterface;
 use Magento\Store\Model\Store;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class StatusBaseSelectProcessorTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -100,9 +103,9 @@ class StatusBaseSelectProcessorTest extends \PHPUnit_Framework_TestCase
             ->with(
                 ['status_global_attr' => $backendTable],
                 "status_global_attr.{$linkField} = "
-                    . BaseSelectProcessorInterface::PRODUCT_TABLE_ALIAS . ".{$linkField}"
-                    . " AND status_global_attr.attribute_id = {$attributeId}"
-                    . ' AND status_global_attr.store_id = ' . Store::DEFAULT_STORE_ID,
+                . BaseSelectProcessorInterface::PRODUCT_TABLE_ALIAS . ".{$linkField}"
+                . " AND status_global_attr.attribute_id = {$attributeId}"
+                . ' AND status_global_attr.store_id = ' . Store::DEFAULT_STORE_ID,
                 []
             )
             ->willReturnSelf();
@@ -111,8 +114,8 @@ class StatusBaseSelectProcessorTest extends \PHPUnit_Framework_TestCase
             ->with(
                 ['status_attr' => $backendTable],
                 "status_attr.{$linkField} = " . BaseSelectProcessorInterface::PRODUCT_TABLE_ALIAS . ".{$linkField}"
-                    . " AND status_attr.attribute_id = {$attributeId}"
-                    . " AND status_attr.store_id = {$currentStoreId}",
+                . " AND status_attr.attribute_id = {$attributeId}"
+                . " AND status_attr.store_id = {$currentStoreId}",
                 []
             )
             ->willReturnSelf();
diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index 07936cefdeb..ed4863342a9 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -13,6 +13,9 @@ use Magento\Catalog\Model\Product\Attribute\Source\Status;
 use Magento\Store\Api\StoreResolverInterface;
 use Magento\Store\Model\Store;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
 {
     /**
@@ -29,6 +32,7 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param string $connectionName
+     * @param StoreResolverInterface $storeResolver
      */
     public function __construct(
         \Magento\Framework\Model\ResourceModel\Db\Context $context,
@@ -235,7 +239,8 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
             . ' AND status_attr.store_id  = ' . $this->storeResolver->getCurrentStoreId(),
             []
         )->where(
-            'IFNULL(status_attr.value, status_global_attr.value) = ?', Status::STATUS_ENABLED
+            'IFNULL(status_attr.value, status_global_attr.value) = ?',
+            Status::STATUS_ENABLED
         )->group(
             ['e.entity_id', 'i.customer_group_id', 'i.website_id', 'l.product_id']
         );
-- 
GitLab