/** * {@inheritdoc} */ public function load(ObjectManager $manager) { foreach ($this->data as $data) { /** @var Product $product */ $product = $this->getReference($data['product']); /** @var PriceList $priceList */ $priceList = $this->getReference($data['priceList']); /** @var ProductUnit $unit */ $unit = $this->getReference($data['unit']); $price = Price::create($data['price'], $data['currency']); $productPrice = new ProductPrice(); $productPrice->setPriceList($priceList)->setUnit($unit)->setQuantity($data['qty'])->setPrice($price)->setProduct($product); $manager->persist($productPrice); $this->setReference($data['reference'], $productPrice); } $manager->flush(); }
/** * @return ProductPrice */ public function getProductPrice() { $priceList = new PriceList(); $priceList->setCurrencies(['USD', 'EUR']); $productPrice = new ProductPrice(); $productPrice->setPriceList($priceList); return $productPrice; }
/** * @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]]]; }
/** * @return array */ public function submitProvider() { $priceList = new PriceList(); $priceList->setCurrencies(['GBP']); /** @var Product $expectedProduct */ $expectedProduct = $this->getProductEntityWithPrecision(2, 'kg', 3); $expectedPrice1 = (new Price())->setValue(42)->setCurrency('USD'); $expectedPrice2 = (new Price())->setValue(42)->setCurrency('GBP'); $expectedProductPrice = new ProductPrice(); $expectedProductPrice->setProduct($expectedProduct)->setQuantity(123)->setUnit($expectedProduct->getUnitPrecision('kg')->getUnit())->setPrice($expectedPrice1)->setPriceList($priceList); $expectedProductPrice2 = clone $expectedProductPrice; $expectedProductPrice2->setQuantity(123.556)->setPrice($expectedPrice2); $defaultProductPrice = new ProductPrice(); $defaultProductPrice->setPriceList($priceList); return ['product price without data' => ['defaultData' => $defaultProductPrice, 'submittedData' => [], 'expectedData' => clone $defaultProductPrice, 'rounding' => false], 'product price with data' => ['defaultData' => clone $defaultProductPrice, 'submittedData' => ['product' => 2, 'quantity' => 123, 'unit' => 'kg', 'price' => ['value' => 42, 'currency' => 'USD']], 'expectedData' => $expectedProductPrice, 'rounding' => true], 'product price with data for rounding' => ['defaultData' => clone $defaultProductPrice, 'submittedData' => ['product' => 2, 'quantity' => 123.5555, 'unit' => 'kg', 'price' => ['value' => 42, 'currency' => 'GBP']], 'expectedData' => $expectedProductPrice2, 'rounding' => true]]; }
/** * Create product form * * @Route( * "/create/{priceListId}", * name="orob2b_product_price_create_widget", * requirements={"priceListId"="\d+"} * ) * @Template("OroB2BPricingBundle:ProductPrice:widget/update.html.twig") * @Acl( * id="orob2b_pricing_product_price_create", * type="entity", * class="OroB2BPricingBundle:ProductPrice", * permission="CREATE" * ) * @ParamConverter("priceList", class="OroB2BPricingBundle:PriceList", options={"id" = "priceListId"}) * * @param PriceList $priceList * @return array|RedirectResponse */ public function createAction(PriceList $priceList) { $productPrice = new ProductPrice(); $productPrice->setPriceList($priceList); return $this->update($productPrice); }
/** * @return ProductPrice */ protected function createProductPrice() { /** @var Product $product */ $product = $this->getReference('product.1'); /** @var PriceList $priceList */ $priceList = $this->getReference('price_list_1'); /** @var ProductUnit $unit */ $unit = $this->getReference('product_unit.liter'); $price = Price::create(1.2, 'USD'); $newProductPrice = new ProductPrice(); $newProductPrice->setPriceList($priceList)->setProduct($product)->setQuantity(1)->setPrice($price)->setUnit($unit); return $newProductPrice; }
/** * @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; }