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