Example #1
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 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]]];
 }