×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: PHP
Posted by: bejoy balan
Added: Jun 24, 2022 11:45 AM
Views: 11
  1. @@ -0,0 +1,75 @@
  2. diff --git a/vendor/magento/module-elasticsearch/Model/Adapter/BatchDataMapper/PriceFieldsProvider.php b/vendor/magento/module-elasticsearch/Model/Adapter/BatchDataMapper/PriceFieldsProvider.php
  3. index 33e0993..bf742fb 100644
  4. --- a/vendor/magento/module-elasticsearch/Model/Adapter/BatchDataMapper/PriceFieldsProvider.php
  5. +++ b/vendor/magento/module-elasticsearch/Model/Adapter/BatchDataMapper/PriceFieldsProvider.php
  6. @@ -78,11 +78,69 @@ class PriceFieldsProvider implements AdditionalFieldsProviderInterface
  7.  
  8.          $fields = [];
  9.          foreach ($productIds as $productId) {
  10. -            $fields[$productId] = $this->getProductPriceData($productId, $websiteId, $priceData);
  11. +            $configRangePriceCustomerResult = $this->getProductPriceDataFromConfigRangeIndex($productId, $websiteId);
  12. +            if (!empty($configRangePriceCustomerResult)){
  13. +                $fields[$productId] = $this->getProductConfigRangePriceData($productId, $websiteId, $priceData, $configRangePriceCustomerResult);
  14. +            } else {
  15. +                $fields[ $productId ] = $this->getProductPriceData( $productId , $websiteId , $priceData );
  16. +            }
  17.          }
  18.  
  19.          return $fields;
  20.      }
  21. +    /**
  22. +     * get index price from lyonscg_config_range_index  for product
  23. +     *
  24. +     * @param int $productId
  25. +     * @param int $websiteId
  26. +     * @return array
  27. +     */
  28. +    private function getProductPriceDataFromConfigRangeIndex($productId, $websiteId)
  29. +    {
  30. +        $configRangePriceCustomerResult = [];
  31. +        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  32. +
  33. +        $resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
  34. +        $select = $resource->getConnection()
  35. +                           ->select()
  36. +                           ->from('lyonscg_config_range_index')
  37. +                           ->where('entity_id IN (?)', $productId)
  38. +                           ->where('website_id = ?', $websiteId);
  39. +        $configRangePriceResult = $resource->getConnection()->fetchAll($select);
  40. +        if(!empty($configRangePriceResult)){
  41. +            foreach ($configRangePriceResult as $configRangePrice){
  42. +                $configRangePriceCustomerResult[$configRangePrice['customer_group_id']] = $configRangePrice;
  43. +            }
  44. +        }
  45. +        return $configRangePriceCustomerResult;
  46. +    }
  47. +    /**
  48. +     * Prepare price index for product
  49. +     *
  50. +     * @param int $productId
  51. +     * @param int $websiteId
  52. +     * @param array $priceIndexData
  53. +     * @param array $configRangePriceCustomerResult
  54. +     * @return array
  55. +     */
  56. +    private function getProductConfigRangePriceData($productId, $websiteId, array $priceIndexData, array $configRangePriceCustomerResult)
  57. +    {
  58. +        $result = [];
  59. +        if (array_key_exists($productId, $priceIndexData)) {
  60. +            $productPriceIndexData = $priceIndexData[$productId];
  61. +            $priceAttribute = $this->attributeAdapterProvider->getByAttributeCode('price');
  62. +            foreach ($productPriceIndexData as $customerGroupId => $price) {
  63. +                $fieldName = $this->fieldNameResolver->getFieldName(
  64. +                    $priceAttribute,
  65. +                    ['customerGroupId' => $customerGroupId, 'websiteId' => $websiteId]
  66. +                );
  67. +                $result[$fieldName] = sprintf('%F', $configRangePriceCustomerResult[$customerGroupId]['min_final_price']);
  68. +
  69. +            }
  70. +        }
  71. +
  72. +        return $result;
  73. +    }
  74.  
  75.      /**
  76.       * Prepare price index for product