/** * @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; }
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); }