Skip to content

Commit

Permalink
Merge remote-tracking branch 'magento2/develop' into PR-11082016
Browse files Browse the repository at this point in the history
  • Loading branch information
viktym committed Nov 25, 2016
2 parents 8810353 + 4bc9fcc commit d6df71e
Show file tree
Hide file tree
Showing 299 changed files with 14,989 additions and 997 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ class AdvancedPricing extends \Magento\CatalogImportExport\Model\Export\Product
ImportAdvancedPricing::COL_TIER_PRICE_CUSTOMER_GROUP => '',
ImportAdvancedPricing::COL_TIER_PRICE_QTY => '',
ImportAdvancedPricing::COL_TIER_PRICE => '',
ImportAdvancedPricing::COL_TIER_PRICE_TYPE => ''
];

/**
Expand Down Expand Up @@ -279,6 +280,8 @@ protected function getExportData()
}

/**
* Correct export data.
*
* @param array $exportData
* @return array
* @SuppressWarnings(PHPMD.UnusedLocalVariable)
Expand All @@ -302,6 +305,12 @@ protected function correctExportData($exportData)
: null
);
unset($exportRow[ImportAdvancedPricing::VALUE_ALL_GROUPS]);
} elseif ($keyTemplate === ImportAdvancedPricing::COL_TIER_PRICE) {
$exportRow[$keyTemplate] = $row[ImportAdvancedPricing::COL_TIER_PRICE_PERCENTAGE_VALUE]
? $row[ImportAdvancedPricing::COL_TIER_PRICE_PERCENTAGE_VALUE]
: $row[ImportAdvancedPricing::COL_TIER_PRICE];
$exportRow[ImportAdvancedPricing::COL_TIER_PRICE_TYPE]
= $this->tierPriceTypeValue($row[ImportAdvancedPricing::COL_TIER_PRICE_PERCENTAGE_VALUE]);
} else {
$exportRow[$keyTemplate] = $row[$keyTemplate];
}
Expand All @@ -311,11 +320,25 @@ protected function correctExportData($exportData)
$customExportData[$key] = $exportRow;
unset($exportRow);
}

return $customExportData;
}

/**
* Get Tier and Group Pricing
* Check type for tier price.
*
* @param string $tierPricePercentage
* @return string
*/
private function tierPriceTypeValue($tierPricePercentage)
{
return $tierPricePercentage
? ImportAdvancedPricing::TIER_PRICE_TYPE_PERCENT
: ImportAdvancedPricing::TIER_PRICE_TYPE_FIXED;
}

/**
* Get tier prices.
*
* @param array $listSku
* @param string $table
Expand All @@ -336,6 +359,7 @@ protected function getTierPrices(array $listSku, $table)
ImportAdvancedPricing::COL_TIER_PRICE_CUSTOMER_GROUP => 'ap.customer_group_id',
ImportAdvancedPricing::COL_TIER_PRICE_QTY => 'ap.qty',
ImportAdvancedPricing::COL_TIER_PRICE => 'ap.value',
ImportAdvancedPricing::COL_TIER_PRICE_PERCENTAGE_VALUE => 'ap.percentage_value',
];
if (isset($exportFilter) && !empty($exportFilter)) {
$price = $exportFilter['tier_price'];
Expand Down Expand Up @@ -371,6 +395,9 @@ protected function getTierPrices(array $listSku, $table)
if (isset($price[1]) && !empty($price[1])) {
$select->where('ap.value <= ?', $price[1]);
}
if (isset($price[0]) && !empty($price[0]) || isset($price[1]) && !empty($price[1])) {
$select->orWhere('ap.percentage_value IS NOT NULL');
}
if (isset($updatedAtFrom) && !empty($updatedAtFrom)) {
$select->where('cpe.updated_at >= ?', $updatedAtFrom);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract

const COL_TIER_PRICE = 'tier_price';

const COL_TIER_PRICE_PERCENTAGE_VALUE = 'percentage_value';

const COL_TIER_PRICE_TYPE = 'tier_price_value_type';

const TIER_PRICE_TYPE_FIXED = 'Fixed';

const TIER_PRICE_TYPE_PERCENT = 'Discount';

const TABLE_TIER_PRICE = 'catalog_product_entity_tier_price';

const DEFAULT_ALL_GROUPS_GROUPED_PRICE_VALUE = '0';
Expand All @@ -46,7 +54,7 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
const VALIDATOR_TEAR_PRICE = 'validator_tear_price';

/**
* Validation failure message template definitions
* Validation failure message template definitions.
*
* @var array
*/
Expand All @@ -57,6 +65,8 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
ValidatorInterface::ERROR_INVALID_TIER_PRICE_QTY => 'Tier Price data price or quantity value is invalid',
ValidatorInterface::ERROR_INVALID_TIER_PRICE_SITE => 'Tier Price data website is invalid',
ValidatorInterface::ERROR_INVALID_TIER_PRICE_GROUP => 'Tier Price customer group is invalid',
ValidatorInterface::ERROR_INVALID_TIER_PRICE_TYPE => 'Value for \'tier_price_value_type\' ' .
'attribute contains incorrect value, acceptable values are Fixed, Discount',
ValidatorInterface::ERROR_TIER_DATA_INCOMPLETE => 'Tier Price data is incomplete',
ValidatorInterface::ERROR_INVALID_ATTRIBUTE_DECIMAL =>
'Value for \'%s\' attribute contains incorrect value, acceptable values are in decimal format',
Expand All @@ -70,7 +80,7 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
protected $needColumnCheck = true;

/**
* Valid column names
* Valid column names.
*
* @array
*/
Expand All @@ -80,6 +90,7 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
self::COL_TIER_PRICE_CUSTOMER_GROUP,
self::COL_TIER_PRICE_QTY,
self::COL_TIER_PRICE,
self::COL_TIER_PRICE_TYPE
];

/**
Expand Down Expand Up @@ -379,7 +390,10 @@ protected function saveAndReplaceAdvancedPrices()
$rowData[self::COL_TIER_PRICE_CUSTOMER_GROUP]
),
'qty' => $rowData[self::COL_TIER_PRICE_QTY],
'value' => $rowData[self::COL_TIER_PRICE],
'value' => $rowData[self::COL_TIER_PRICE_TYPE] === self::TIER_PRICE_TYPE_FIXED
? $rowData[self::COL_TIER_PRICE] : 0,
'percentage_value' => $rowData[self::COL_TIER_PRICE_TYPE] === self::TIER_PRICE_TYPE_PERCENT
? $rowData[self::COL_TIER_PRICE] : null,
'website_id' => $this->getWebsiteId($rowData[self::COL_TIER_PRICE_WEBSITE])
];
}
Expand Down Expand Up @@ -429,7 +443,7 @@ protected function saveProductPrices(array $priceData, $table)
}
}
if ($priceIn) {
$this->_connection->insertOnDuplicate($tableName, $priceIn, ['value']);
$this->_connection->insertOnDuplicate($tableName, $priceIn, ['value', 'percentage_value']);
}
}
return $this;
Expand Down Expand Up @@ -542,19 +556,24 @@ protected function retrieveOldSkus()
*/
protected function processCountExistingPrices($prices, $table)
{
$oldSkus = $this->retrieveOldSkus();
$existProductIds = array_intersect_key($oldSkus, $prices);
if (!count($existProductIds)) {
return $this;
}

$tableName = $this->_resourceFactory->create()->getTable($table);
$productEntityLinkField = $this->getProductEntityLinkField();
$existingPrices = $this->_connection->fetchAssoc(
$this->_connection->select()->from(
$tableName,
['value_id', $productEntityLinkField, 'all_groups', 'customer_group_id']
)
)->where($productEntityLinkField . ' IN (?)', $existProductIds)
);
$oldSkus = $this->retrieveOldSkus();
foreach ($existingPrices as $existingPrice) {
foreach ($oldSkus as $sku => $productId) {
if ($existingPrice[$productEntityLinkField] == $productId && isset($prices[$sku])) {
$this->incrementCounterUpdated($prices[$sku], $existingPrice);
foreach ($prices as $sku => $skuPrices) {
if (isset($oldSkus[$sku]) && $existingPrice[$productEntityLinkField] == $oldSkus[$sku]) {
$this->incrementCounterUpdated($skuPrices, $existingPrice);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ class TierPrice extends \Magento\CatalogImportExport\Model\Import\Product\Valida
AdvancedPricing::COL_TIER_PRICE_WEBSITE,
AdvancedPricing::COL_TIER_PRICE_CUSTOMER_GROUP,
AdvancedPricing::COL_TIER_PRICE_QTY,
AdvancedPricing::COL_TIER_PRICE
AdvancedPricing::COL_TIER_PRICE,
AdvancedPricing::COL_TIER_PRICE_TYPE
];

/**
Expand Down Expand Up @@ -101,6 +102,7 @@ public function isValid($value)
|| !isset($value[AdvancedPricing::COL_TIER_PRICE_CUSTOMER_GROUP])
|| !isset($value[AdvancedPricing::COL_TIER_PRICE_QTY])
|| !isset($value[AdvancedPricing::COL_TIER_PRICE])
|| !isset($value[AdvancedPricing::COL_TIER_PRICE_TYPE])
|| $this->hasEmptyColumns($value)
) {
$this->_addMessages([self::ERROR_TIER_DATA_INCOMPLETE]);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\AdvancedPricingImportExport\Model\Import\AdvancedPricing\Validator;

use Magento\AdvancedPricingImportExport\Model\Import\AdvancedPricing;
use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface;

/**
* Class TierPriceType validates tier price type.
*/
class TierPriceType extends \Magento\CatalogImportExport\Model\Import\Product\Validator\AbstractImportValidator
{
/**
* {@inheritdoc}
*/
public function init($context)
{
return parent::init($context);
}

/**
* Validate tier price type.
*
* @param array $value
* @return bool
*/
public function isValid($value)
{
$isValid = true;

if (isset($value[AdvancedPricing::COL_TIER_PRICE_TYPE])
&& !empty($value[AdvancedPricing::COL_TIER_PRICE_TYPE])
&& !in_array(
$value[AdvancedPricing::COL_TIER_PRICE_TYPE],
[AdvancedPricing::TIER_PRICE_TYPE_FIXED, AdvancedPricing::TIER_PRICE_TYPE_PERCENT]
)
) {
$this->_addMessages([RowValidatorInterface::ERROR_INVALID_TIER_PRICE_TYPE]);
$isValid = false;
}

return $isValid;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\AdvancedPricingImportExport\Test\Unit\Model\Import\AdvancedPricing\Validator;

use \Magento\AdvancedPricingImportExport\Model\Import\AdvancedPricing as AdvancedPricing;

/**
* Class TierPriceTypeTest.
*/
class TierPriceTypeTest extends \PHPUnit_Framework_TestCase
{
/**
* @var AdvancedPricing\Validator\TierPriceType
*/
private $tierPriceType;

/**
* Set up.
*
* @return void
*/
protected function setUp()
{
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
$this->tierPriceType = $objectManager->getObject(
AdvancedPricing\Validator\TierPriceType::class,
[]
);
}

/**
* Test for isValid() method.
*
* @dataProvider isValidDataProvider
* @param array $value
* @param bool $expectedResult
*/
public function testIsValid(array $value, $expectedResult)
{
$result = $this->tierPriceType->isValid($value);
$this->assertEquals($expectedResult, $result);
}

/**
* Data Provider for testIsValid().
*
* @return array
*/
public function isValidDataProvider()
{
return [
[
[AdvancedPricing::COL_TIER_PRICE_TYPE => AdvancedPricing::TIER_PRICE_TYPE_FIXED],
true
],
[
[AdvancedPricing::COL_TIER_PRICE_TYPE => AdvancedPricing::TIER_PRICE_TYPE_PERCENT],
true
],
[
[],
true
],
[
[AdvancedPricing::COL_TIER_PRICE_TYPE => null],
true
],
[
[AdvancedPricing::COL_TIER_PRICE_TYPE => 'wrong type'],
false
]
];
}
}
Loading

0 comments on commit d6df71e

Please sign in to comment.