/**
  * @param integer $productId
  * @param string  $unitCode
  * @param integer $precision
  *
  * @return Product
  */
 protected function getProductEntityWithPrecision($productId, $unitCode, $precision = 0)
 {
     /** @var Product $product */
     $product = $this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\Product', $productId);
     $unit = new ProductUnit();
     $unit->setCode($unitCode);
     $unitPrecision = new ProductUnitPrecision();
     $unitPrecision->setPrecision($precision)->setUnit($unit)->setProduct($product);
     return $product->addUnitPrecision($unitPrecision);
 }
 /**
  * @param ObjectManager $manager
  * @param string $productReference
  * @param string $unitReference
  * @param int $precision
  * @return ProductUnitPrecision
  */
 protected function createProductUnitPrecision(ObjectManager $manager, $productReference, $unitReference, $precision = 0)
 {
     /** @var Product $productReference */
     $product = $this->getReference($productReference);
     /** @var ProductUnit $unitReference */
     $unit = $this->getReference($unitReference);
     $productUnitPrecision = new ProductUnitPrecision();
     $productUnitPrecision->setProduct($product);
     $productUnitPrecision->setPrecision($precision);
     $productUnitPrecision->setUnit($unit);
     $manager->persist($productUnitPrecision);
     $this->addReference(sprintf('product_unit_precision.%s', implode('.', [$product->getSku(), $unit->getCode()])), $productUnitPrecision);
     return $productUnitPrecision;
 }
Exemplo n.º 3
0
 public function testUnitRelation()
 {
     $unitPrecision = new ProductUnitPrecision();
     $unitPrecision->setUnit((new ProductUnit())->setCode('kg'));
     $unitPrecision->setPrecision(0);
     $product = new Product();
     $this->assertCount(0, $product->getUnitPrecisions());
     // Add new ProductUnitPrecision
     $this->assertSame($product, $product->addUnitPrecision($unitPrecision));
     $this->assertCount(1, $product->getUnitPrecisions());
     $actual = $product->getUnitPrecisions();
     $this->assertInstanceOf('Doctrine\\Common\\Collections\\ArrayCollection', $actual);
     $this->assertEquals([$unitPrecision], $actual->toArray());
     // Add already added ProductUnitPrecision
     $this->assertSame($product, $product->addUnitPrecision($unitPrecision));
     $this->assertCount(1, $product->getUnitPrecisions());
     // Remove ProductUnitPrecision
     $this->assertSame($product, $product->removeUnitPrecision($unitPrecision));
     $this->assertCount(0, $product->getUnitPrecisions());
     $actual = $product->getUnitPrecisions();
     $this->assertInstanceOf('Doctrine\\Common\\Collections\\ArrayCollection', $actual);
     $this->assertNotContains($unitPrecision, $actual->toArray());
 }
 /**
  * @return array
  */
 public function submitProvider()
 {
     $product = new Product();
     $product->setSku('sku_test_001');
     $productUnitPrecision = new ProductUnitPrecision();
     $productUnitPrecision->setUnit((new ProductUnit())->setCode('kg'));
     $productUnitPrecision->setPrecision(5);
     $existingUnit = (new ProductUnit())->setCode('kg');
     $existingPrice = (new Price())->setValue(42)->setCurrency('USD');
     $product->addUnitPrecision($productUnitPrecision);
     /** @var PriceList $existingProductPriceList */
     $existingProductPriceList = $this->getEntity('OroB2B\\Bundle\\PricingBundle\\Entity\\PriceList', 1);
     $existingProductPrice = new ProductPrice();
     $existingProductPrice->setProduct($product)->setPriceList($existingProductPriceList)->setQuantity(123)->setUnit($existingUnit)->setPrice($existingPrice);
     /** @var PriceList $expectedPriceList */
     $expectedPriceList = $this->getEntity('OroB2B\\Bundle\\PricingBundle\\Entity\\PriceList', 2);
     $expectedUnit = (new ProductUnit())->setCode('item');
     $expectedPrice = (new Price())->setValue(43)->setCurrency('EUR');
     $expectedProductPrice = new ProductPrice();
     $expectedProductPrice->setPriceList($expectedPriceList)->setQuantity(124)->setUnit($expectedUnit)->setPrice($expectedPrice)->setProduct($product);
     $updatedExpectedProductPrice = clone $expectedProductPrice;
     $updatedExpectedProductPrice->setProduct($product);
     return ['product price with data' => ['defaultData' => (new ProductPrice())->setProduct($product)->setUnit($existingUnit), 'submittedData' => ['priceList' => 2, 'quantity' => 124, 'unit' => 'item', 'price' => ['value' => 43, 'currency' => 'EUR']], 'expectedData' => $expectedProductPrice], 'product price with precision' => ['defaultData' => $existingProductPrice, 'submittedData' => ['priceList' => 2, 'quantity' => 124, 'unit' => 'item', 'price' => ['value' => 43, 'currency' => 'EUR']], 'expectedData' => $updatedExpectedProductPrice, 'expectedOptions' => ['precision' => 5]]];
 }
 /**
  * @param string  $unitCode
  * @param integer $precision
  *
  * @return Product
  */
 protected function getProductEntityWithPrecision($unitCode, $precision = 0)
 {
     $product = new Product();
     $unit = new ProductUnit();
     $unit->setCode($unitCode);
     $unitPrecision = new ProductUnitPrecision();
     $unitPrecision->setPrecision($precision)->setUnit($unit)->setProduct($product);
     return $product->addUnitPrecision($unitPrecision);
 }