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 int $id * @param array|ProductUnit[] $productUnits * @param string $unitCode * @return \PHPUnit_Framework_MockObject_MockObject|RequestProductItem */ protected function createRequestProductItem($id, array $productUnits = [], $unitCode = null) { $productUnit = null; $product = new Product(); foreach ($productUnits as $unit) { $product->addUnitPrecision((new ProductUnitPrecision())->setUnit($unit)); if ($unitCode && $unit->getCode() == $unitCode) { $productUnit = $unit; } } /* @var $item \PHPUnit_Framework_MockObject_MockObject|RequestProductItem */ $item = $this->getMock('OroB2B\\Bundle\\RFPBundle\\Entity\\RequestProductItem'); $item->expects($this->any())->method('getId')->will($this->returnValue($id)); $item->expects($this->any())->method('getRequestProduct')->will($this->returnValue((new RequestProduct())->setProduct($product))); $item->expects($this->any())->method('getProductUnit')->will($this->returnValue($productUnit)); $item->expects($this->any())->method('getProductUnitCode')->will($this->returnValue($unitCode)); return $item; }
/** * @param array $offers * @param array $productParams * @param array $suggestedProductParams * @return QuoteProduct */ protected function createQuoteProduct(array $offers, array $productParams = [], array $suggestedProductParams = []) { $quoteProduct = new QuoteProduct(); foreach ($offers as $offer) { $quoteProduct->addQuoteProductOffer($offer); } if ($productParams) { $product = new Product(); $product->addUnitPrecision($this->createPrecision($productParams)); $quoteProduct->setProduct($product); } if ($suggestedProductParams) { $suggestedProduct = new Product(); $suggestedProduct->addUnitPrecision($this->createPrecision($suggestedProductParams)); $quoteProduct->setProductReplacement($suggestedProduct); } return $quoteProduct; }
/** * @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; }
/** * @param Product $product * @param Product $productCopy */ protected function cloneChildObjects(Product $product, Product $productCopy) { foreach ($product->getUnitPrecisions() as $unitPrecision) { $productCopy->addUnitPrecision(clone $unitPrecision); } foreach ($product->getNames() as $name) { $productCopy->addName(clone $name); } foreach ($product->getDescriptions() as $description) { $productCopy->addDescription(clone $description); } if ($imageFile = $product->getImage()) { $imageFileCopy = $this->attachmentManager->copyAttachmentFile($imageFile); $productCopy->setImage($imageFileCopy); } $attachments = $this->attachmentProvider->getEntityAttachments($product); foreach ($attachments as $attachment) { $attachmentCopy = clone $attachment; $attachmentFileCopy = $this->attachmentManager->copyAttachmentFile($attachment->getFile()); $attachmentCopy->setFile($attachmentFileCopy); $attachmentCopy->setTarget($productCopy); $this->doctrineHelper->getEntityManager($attachmentCopy)->persist($attachmentCopy); } }
/** * @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]]]; }