/**
  * @param array $parameters
  * @return ProductUnitPrecision
  */
 protected function createPrecision(array $parameters)
 {
     $unit = new ProductUnit();
     $unit->setCode($parameters['unit']);
     $precision = new ProductUnitPrecision();
     $precision->setUnit($unit)->setPrecision($parameters['precision']);
     return $precision;
 }
Example #2
0
 public function testGetAvailableUnitCodes()
 {
     $unit = new ProductUnit();
     $unit->setCode('kg')->setDefaultPrecision(3);
     $unitPrecision = new ProductUnitPrecision();
     $unitPrecision->setUnit($unit)->setPrecision($unit->getDefaultPrecision());
     $product = new Product();
     $product->addUnitPrecision($unitPrecision);
     $this->assertEquals(['kg'], $product->getAvailableUnitCodes());
 }
 /**
  * @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 testPostRemove()
 {
     $entity = new ProductUnitPrecision();
     $product = new Product();
     $unit = new ProductUnit();
     $entity->setProduct($product)->setUnit($unit);
     $event = $this->getMockBuilder('Doctrine\\ORM\\Event\\LifecycleEventArgs')->disableOriginalConstructor()->getMock();
     $event->expects($this->once())->method('getEntity')->will($this->returnValue($entity));
     $repository = $this->getMockBuilder('OroB2B\\Bundle\\PricingBundle\\Entity\\Repository\\ProductPriceRepository')->disableOriginalConstructor()->getMock();
     $repository->expects($this->once())->method('deleteByProductUnit')->with($product, $unit);
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $em->expects($this->once())->method('getRepository')->with($this->productPriceClass)->will($this->returnValue($repository));
     $event->expects($this->once())->method('getEntityManager')->will($this->returnValue($em));
     $this->eventDispatcher->expects($this->exactly(2))->method('dispatch');
     $this->eventDispatcher->expects($this->at(0))->method('dispatch')->with(ProductPricesRemoveBefore::NAME, $this->isInstanceOf('OroB2B\\Bundle\\PricingBundle\\Event\\ProductPricesRemoveBefore'));
     $this->eventDispatcher->expects($this->at(1))->method('dispatch')->with(ProductPricesRemoveAfter::NAME, $this->isInstanceOf('OroB2B\\Bundle\\PricingBundle\\Event\\ProductPricesRemoveAfter'));
     $this->listener->postRemove($event);
 }
 /**
  * @param string $sku
  * @param ProductUnit|null $productUnit
  * @return Product
  */
 protected function getProductEntity($sku, ProductUnit $productUnit = null)
 {
     $product = new Product();
     $product->setSku($sku);
     if ($productUnit) {
         $productUnitPrecision = new ProductUnitPrecision();
         $productUnitPrecision->setUnit($productUnit);
         $product->addUnitPrecision($productUnitPrecision);
     }
     return $product;
 }
 /**
  * {@inheritdoc}
  */
 public function load(ObjectManager $manager)
 {
     $locator = $this->container->get('file_locator');
     $filePath = $locator->locate('@OroB2BProductBundle/Migrations/Data/Demo/ORM/data/product_unit_precisions.csv');
     if (is_array($filePath)) {
         $filePath = current($filePath);
     }
     $handler = fopen($filePath, 'r');
     $headers = fgetcsv($handler, 1000, ',');
     while (($data = fgetcsv($handler, 1000, ',')) !== false) {
         $row = array_combine($headers, array_values($data));
         $product = $this->getProductBySku($manager, $row['productCode']);
         $productUnit = $this->getProductUnit($manager, $row['unitCode']);
         $productUnitPrecision = new ProductUnitPrecision();
         $productUnitPrecision->setProduct($product)->setUnit($productUnit)->setPrecision($row['precision']);
         $manager->persist($productUnitPrecision);
     }
     fclose($handler);
     $manager->flush();
 }
Example #8
0
 /**
  * Add unitPrecisions
  *
  * @param ProductUnitPrecision $unitPrecision
  * @return Product
  */
 public function addUnitPrecision(ProductUnitPrecision $unitPrecision)
 {
     $existingUnitPrecision = $this->getUnitPrecision($unitPrecision->getUnit()->getCode());
     if ($existingUnitPrecision) {
         $existingUnitPrecision->setPrecision($unitPrecision->getPrecision());
     } else {
         $unitPrecision->setProduct($this);
         $this->unitPrecisions->add($unitPrecision);
     }
     return $this;
 }
 /**
  * @return array
  *
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function finishViewProvider()
 {
     $precision = new ProductUnitPrecision();
     $unit = new ProductUnit();
     $unit->setCode('code');
     $precision->setUnit($unit);
     return ['empty item' => ['inputData' => ['options' => [], 'productUnitHolder' => null], 'expectedData' => ['empty_value' => null, 'choices' => null]], 'without parent form' => ['inputData' => ['options' => [], 'productHolder' => $this->createProductUnitHolder(1, 'sku', new ProductUnit(), $this->createProductHolder(1, 'sku', null))], 'expectedData' => ['empty_value' => null, 'choices' => null], false], 'filled item' => ['inputData' => ['options' => [], 'productUnitHolder' => $this->createProductUnitHolder(1, 'sku', new ProductUnit(), $this->createProductHolder(1, 'sku', null))], 'expectedData' => ['empty_value' => null, 'choices' => []]], 'existing product' => ['inputData' => ['options' => [], 'productUnitHolder' => $this->createProductUnitHolder(1, 'sku', new ProductUnit(), $this->createProductHolder(1, 'sku', (new Product())->addUnitPrecision($precision)))], 'expectedData' => ['empty_value' => 'orob2b.product.productunit.removed:sku', 'choices' => ['code' => 'orob2b.product_unit.code.label.full']]], 'existing product and compact mode' => ['inputData' => ['options' => ['compact' => true], 'productUnitHolder' => $this->createProductUnitHolder(1, 'sku', new ProductUnit(), $this->createProductHolder(1, 'sku', (new Product())->addUnitPrecision($precision)))], 'expectedData' => ['empty_value' => 'orob2b.product.productunit.removed:sku', 'choices' => ['code' => 'orob2b.product_unit.code.label.short']]], 'deleted product' => ['inputData' => ['options' => [], 'productUnitHolder' => $this->createProductUnitHolder(1, 'sku', null, $this->createProductHolder(1, 'sku', null))], 'expectedData' => ['empty_value' => 'orob2b.product.productunit.removed:sku', 'choices' => []]]];
 }
 /**
  * @param boolean $withProductUnitPrecision
  * @return Product
  */
 protected function createExpectedProductEntity($withProductUnitPrecision = false)
 {
     $expectedProduct = new StubProduct();
     $productUnit = new ProductUnit();
     $productUnit->setCode('kg');
     if ($withProductUnitPrecision) {
         $productUnitPrecision = new ProductUnitPrecision();
         $productUnitPrecision->setProduct($expectedProduct)->setUnit($productUnit)->setPrecision(3);
         $expectedProduct->addUnitPrecision($productUnitPrecision);
     }
     return $expectedProduct->setSku('test sku');
 }
 /**
  * @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 boolean $withProductUnitPrecision
  * @param boolean $withNamesAndDescriptions
  * @return Product
  */
 protected function createExpectedProductEntity($withProductUnitPrecision = false, $withNamesAndDescriptions = false)
 {
     $expectedProduct = new StubProduct();
     $productUnit = new ProductUnit();
     $productUnit->setCode('kg');
     if ($withProductUnitPrecision) {
         $productUnitPrecision = new ProductUnitPrecision();
         $productUnitPrecision->setProduct($expectedProduct)->setUnit($productUnit)->setPrecision(3);
         $expectedProduct->addUnitPrecision($productUnitPrecision);
     }
     if ($withNamesAndDescriptions) {
         $expectedProduct->addName($this->createLocalizedValue('first name'))->addName($this->createLocalizedValue('second name'))->addDescription($this->createLocalizedValue(null, 'first description'))->addDescription($this->createLocalizedValue(null, 'second description'));
     }
     return $expectedProduct->setSku('test sku');
 }
 /**
  * @return ProductPrice
  */
 public function getProductPrice()
 {
     $unit = new ProductUnit();
     $unit->setCode('kg');
     $unitPrecision = new ProductUnitPrecision();
     $unitPrecision->setUnit($unit)->setPrecision(3);
     $product = new Product();
     $product->setSku('testSku')->addUnitPrecision($unitPrecision);
     $price = new Price();
     $price->setValue('50')->setCurrency('USD');
     $productPrice = new ProductPrice();
     $productPrice->setPriceList(new PriceList())->setProduct($product)->setQuantity('10')->setPrice($price);
     return $productPrice;
 }
 /**
  * @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);
 }