Skip to content

Commit

Permalink
Merge pull request #10 from orocommerce/commerce-1.0.0-beta.3
Browse files Browse the repository at this point in the history
Commerce 1.0.0 beta.3
  • Loading branch information
Petrov Yehven committed Jul 26, 2016
2 parents 061272d + da23784 commit b5b9791
Show file tree
Hide file tree
Showing 13 changed files with 130 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

use Oro\Bundle\EntityBundle\ORM\DoctrineHelper;

use OroB2B\Bundle\PricingBundle\Entity\CombinedProductPrice;
use OroB2B\Bundle\PricingBundle\Entity\ProductPrice;
use OroB2B\Bundle\PricingBundle\Entity\Repository\ProductPriceRepository;
use OroB2B\Bundle\PricingBundle\Model\PriceListRequestHandler;
Expand Down Expand Up @@ -78,20 +79,19 @@ public function getData(ContextInterface $context)
]
);
if (count($prices)) {
$unitPrecisions = current($prices)->getProduct()->getUnitPrecisions();
$unitPrecisions = $product->getUnitPrecisions();

$unitsToSell = [];
foreach ($unitPrecisions as $unitPrecision) {
if ($unitPrecision->isSell()) {
$unitsToSell[] = $unitPrecision->getUnit();
}
$unitsToSell[$unitPrecision->getUnit()->getCode()] = $unitPrecision->isSell();
}

foreach ($prices as $key => $combinedProductPrice) {
if (!in_array($combinedProductPrice->getUnit(), $unitsToSell)) {
unset($prices[$key]);
$prices = array_filter(
$prices,
function (CombinedProductPrice $price) use ($unitsToSell) {
return !empty($unitsToSell[$price->getProductUnitCode()]);
}
}
);
}

$this->data[$productId] = $prices;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,6 @@ protected function addOrob2BCmbPriceListToAccForeignKeys(Schema $schema)
['id'],
['onUpdate' => null, 'onDelete' => 'CASCADE']
);

}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public function up(Schema $schema, QueryBag $queries)

/**
* @param Schema $schema
* @param QueryBag $queries
* @throws \Doctrine\DBAL\Schema\SchemaException
*/
protected function updatePriceListTable(Schema $schema, QueryBag $queries)
Expand All @@ -46,6 +47,7 @@ protected function updatePriceListTable(Schema $schema, QueryBag $queries)

/**
* @param Schema $schema
* @param QueryBag $queries
* @throws \Doctrine\DBAL\Schema\SchemaException
*/
protected function updatePriceListCombinedTable(Schema $schema, QueryBag $queries)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@

use Oro\Bundle\EntityBundle\ORM\DoctrineHelper;

use OroB2B\Bundle\PricingBundle\Entity\CombinedProductPrice;
use OroB2B\Bundle\PricingBundle\Layout\DataProvider\FrontendProductPricesProvider;
use OroB2B\Bundle\PricingBundle\Model\PriceListRequestHandler;
use OroB2B\Bundle\PricingBundle\Manager\UserCurrencyManager;
use OroB2B\Bundle\ProductBundle\Entity\Product;
use OroB2B\Bundle\ProductBundle\Entity\ProductUnit;
use OroB2B\Bundle\ProductBundle\Entity\ProductUnitPrecision;

class FrontendProductPricesProviderTest extends \PHPUnit_Framework_TestCase
{
Expand Down Expand Up @@ -68,13 +72,13 @@ public function testGetDataWithEmptyContext()

public function testGetData()
{
$prices = [1 => 'test', 2 => 'test2'];
$priceListId = 23;
$priceList = $this->getEntity('OroB2B\Bundle\PricingBundle\Entity\PriceList', ['id' => $priceListId]);
$productId = 24;
$product = $this->getMockBuilder('OroB2B\Bundle\ProductBundle\Entity\Product')
->disableOriginalConstructor()
->getMock();
/** @var Product|\PHPUnit_Framework_MockObject_MockObject $product */
$product = $this->getMockBuilder('OroB2B\Bundle\ProductBundle\Entity\Product')
->disableOriginalConstructor()
->getMock();

$product->expects($this->once())
->method('getId')
Expand All @@ -84,13 +88,13 @@ public function testGetData()
$unitPrecisions[] = $this->createUnitPrecision('set', false);

$product->expects($this->once())
->method('getUnitPrecisions')
->willReturn($unitPrecisions);
->method('getUnitPrecisions')
->willReturn($unitPrecisions);

$productPrice1 = $this->createProductPrice('each', $product);
$productPrice2 = $this->createProductPrice('set', $product);
$prices = [$productPrice1, $productPrice2];

$priceSorting = ['unit' => 'ASC', 'currency' => 'DESC', 'quantity' => 'ASC'];
$context = new LayoutContext();
$context->data()->set('product', null, $product);
Expand All @@ -117,29 +121,20 @@ public function testGetData()
->willReturn('EUR');

$actual = $this->provider->getData($context);
$this->assertEquals(1, count($actual));
$this->assertCount(1, $actual);
$this->assertEquals('each', current($actual)->getUnit());
}

/**
* @param string $unitCode
* @param boolen $sell
* @return productUnitPresion
* @param boolean $sell
* @return ProductUnitPrecision
*/
private function createUnitPrecision($unitCode, $sell)
{
$p = $this->getMockBuilder('OroB2B\Bundle\ProductBundle\Entity\ProductUnionPrecision')
->setMethods(array('isSell', 'getUnit'))
->disableOriginalConstructor()
->getMock();

$p->expects($this->once())
->method('isSell')
->willReturn($sell);

$p->expects($this->any())
->method('getUnit')
->willReturn($unitCode);
$p = new ProductUnitPrecision();
$p->setSell($sell);
$p->setUnit($this->getUnit($unitCode));

return $p;
}
Expand All @@ -151,21 +146,22 @@ private function createUnitPrecision($unitCode, $sell)
*/
private function createProductPrice($unit, $product)
{
$p = $this->getMockBuilder(
'OroB2B\Bundle\PricingBundle\Entity\CombinedProductPrice',
array('getUnit', 'getProduct')
)
->disableOriginalConstructor()
->getMock();
$p = new CombinedProductPrice();
$p->setProduct($product);
$p->setUnit($this->getUnit($unit));

$p->expects($this->any())
->method('getProduct')
->willReturn($product);
return $p;
}

$p->expects($this->any())
->method('getUnit')
->willReturn($unit);
/**
* @param string $unitCode
* @return ProductUnit
*/
private function getUnit($unitCode)
{
$unit = new ProductUnit();
$unit->setCode($unitCode);

return $p;
return $unit;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class ProductUnitPrecision implements ProductUnitHolderInterface
/**
* @var bool
*
* @ORM\Column(name="sell",type="boolean",nullable=true)
* @ORM\Column(name="sell",type="boolean",nullable=false)
* @ConfigField(
* defaultValues={
* "importexport"={
Expand All @@ -105,7 +105,7 @@ class ProductUnitPrecision implements ProductUnitHolderInterface
* }
* )
*/
protected $sell;
protected $sell = true;

public function __clone()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,22 @@ public function setEventDispatcher(EventDispatcherInterface $eventDispatcher)
protected function getBackendHeader()
{
$backendHeader = parent::getBackendHeader();

// According to business logic Product should have Primary and Additional unit precisions.
// But Product Entity has primaryUnitPrecision property and unitPrecisions property which
// is collection of all unit precisions. AdditionalUnitPrecisions is calculated by excluding
// PrimaryUnitPrecision from all UnitPrecisions. This fix was done in order to display
// correct column headers during Products Export.
foreach ($backendHeader as $k => &$v) {
$arr = explode(":", $v);
if ($arr[0] == "unitPrecisions" && $arr[1] == "0") {
unset($backendHeader[$k]);
} elseif ($arr[0] == "unitPrecisions") {
$arr[0] = "additionalUnitPrecisions";
$arr[1] = $arr[1] - 1;
$v = implode(":", $arr);
$arr = explode(':', $v);
if ($arr[0] === 'unitPrecisions') {
if ((int)$arr[1] === 0) {
unset($backendHeader[$k]);
} else {
$arr[0] = 'additionalUnitPrecisions';
--$arr[1];
$v = implode(':', $arr);
}
}
}
unset($v);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,17 @@ public function setProductClass($productClass)
}

/**
* @param Product $object
*
* {@inheritdoc}
*/
public function normalize($object, $format = null, array $context = [])
{
$data = parent::normalize($object, $format, $context);

if (array_key_exists('unitPrecisions', $data)) {
if (array_key_exists('unitPrecisions', $data) && is_array($data['unitPrecisions'])) {
foreach ($data['unitPrecisions'] as $v) {
if ($v['unit']['code'] != $object->getPrimaryUnitPrecision()->getUnit()->getCode()) {
if ($v['unit']['code'] !== $object->getPrimaryUnitPrecision()->getUnit()->getCode()) {
$data['additionalUnitPrecisions'][] = $v;
}
}
Expand All @@ -69,6 +71,10 @@ public function denormalize($data, $class, $format = null, array $context = [])
if (array_key_exists('additionalUnitPrecisions', $data)) {
$data['unitPrecisions'] = $data['additionalUnitPrecisions'];
unset($data['additionalUnitPrecisions']);
foreach ($data['unitPrecisions'] as &$unitPrecisionData) {
$unitPrecisionData['sell'] = !empty($unitPrecisionData['sell']);
}
unset($unitPrecisionData);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ protected function createOroB2BProductUnitPrecisionTable(Schema $schema)
$table->addColumn('unit_code', 'string', ['notnull' => false, 'length' => 255]);
$table->addColumn('unit_precision', 'integer', []);
$table->addColumn('conversion_rate', 'float', ['notnull' => false]);
$table->addColumn('sell', 'boolean', ['notnull' => false]);
$table->addColumn('sell', 'boolean', ['notnull' => true]);
$table->setPrimaryKey(['id']);
$table->addUniqueIndex(['product_id', 'unit_code'], 'product_unit_precision__product_id__unit_code__uidx');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Schema\Schema;

use Oro\Bundle\AttachmentBundle\Migration\Extension\AttachmentExtension;
use Oro\Bundle\AttachmentBundle\Migration\Extension\AttachmentExtensionAwareInterface;
use Oro\Bundle\MigrationBundle\Migration\Extension\RenameExtension;
use Oro\Bundle\MigrationBundle\Migration\Extension\RenameExtensionAwareInterface;
use Oro\Bundle\MigrationBundle\Migration\ParametrizedSqlMigrationQuery;
use Oro\Bundle\MigrationBundle\Migration\Migration;
use Oro\Bundle\MigrationBundle\Migration\OrderedMigrationInterface;
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
Expand Down Expand Up @@ -94,7 +96,7 @@ public function up(Schema $schema, QueryBag $queries)
'oro_fallback_localization_val',
['localized_value_id']
);
$this->updateOroB2BProductUnitPrecisionTable($schema);
$this->updateOroB2BProductUnitPrecisionTable($schema, $queries);
$this->updateOroB2BProductTable($schema);
$this->addOroB2BProductForeignKeys($schema);

Expand Down Expand Up @@ -132,12 +134,27 @@ protected function createConstraint(Schema $schema, QueryBag $queries, $tableNam
* Update orob2b_product_unit_precision table
*
* @param Schema $schema
* @param QueryBag $queries
*/
protected function updateOroB2BProductUnitPrecisionTable(Schema $schema)
protected function updateOroB2BProductUnitPrecisionTable(Schema $schema, QueryBag $queries)
{
$table = $schema->getTable(self::PRODUCT_UNIT_PRECISION_TABLE_NAME);
$table->addColumn('conversion_rate', 'float', ['notnull' => false]);
$table->addColumn('sell', 'boolean', ['notnull' => false]);

$queries->addQuery(
new ParametrizedSqlMigrationQuery(
'UPDATE orob2b_product_unit_precision SET conversion_rate = :conversion_rate, sell = :sell',
[
'conversion_rate' => 1.0,
'sell' => true,
],
[
'conversion_rate' => Type::FLOAT,
'sell' => Type::BOOLEAN
]
)
);
}

/**
Expand Down Expand Up @@ -289,6 +306,6 @@ protected function getImageTypesSubSelect()
$selects[] = sprintf('SELECT \'%s\' as type', $imageType->getName());
}

return join(' UNION ', $selects);
return implode(' UNION ', $selects);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace OroB2B\Bundle\ProductBundle\Migrations\Schema\v1_4;

use Doctrine\DBAL\Schema\Schema;

use Oro\Bundle\MigrationBundle\Migration\Migration;
use Oro\Bundle\MigrationBundle\Migration\OrderedMigrationInterface;
use Oro\Bundle\MigrationBundle\Migration\QueryBag;

class PostMigrationUpdates implements Migration, OrderedMigrationInterface
{
/**
* {@inheritdoc}
*/
public function getOrder()
{
return 30;
}

/**
* {@inheritdoc}
*/
public function up(Schema $schema, QueryBag $queries)
{
$this->updateProductUnitPrecisionTable($schema);
}

/**
* @param Schema $schema
* @throws \Doctrine\DBAL\Schema\SchemaException
*/
protected function updateProductUnitPrecisionTable(Schema $schema)
{
$table = $schema->getTable('orob2b_product_unit_precision');
$table->getColumn('sell')->setNotnull(true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ public function up(Schema $schema, QueryBag $queries)
self::PRODUCT_IMAGE_ASSOCCIATION_NAME
)
);

}

/**
Expand Down

0 comments on commit b5b9791

Please sign in to comment.