/** * {@inheritdoc} */ public function load(ObjectManager $manager) { /** @var EntityManager $manager */ $user = $this->getUser($manager); $businessUnit = $user->getOwner(); $organization = $user->getOrganization(); $locator = $this->container->get('file_locator'); $filePath = $locator->locate('@OroB2BProductBundle/Migrations/Data/Demo/ORM/data/products.csv'); if (is_array($filePath)) { $filePath = current($filePath); } $handler = fopen($filePath, 'r'); $headers = fgetcsv($handler, 1000, ','); $inventoryStatuses = $this->getAllEnumValuesByCode($manager, 'prod_inventory_status'); $visibilities = $this->getAllEnumValuesByCode($manager, 'prod_visibility'); $statuses = $this->getAllEnumValuesByCode($manager, 'prod_status'); while (($data = fgetcsv($handler, 1000, ',')) !== false) { $row = array_combine($headers, array_values($data)); $product = new Product(); $product->setOwner($businessUnit)->setOrganization($organization)->setSku($row['productCode'])->setInventoryStatus($inventoryStatuses[array_rand($inventoryStatuses)])->setVisibility($visibilities[array_rand($visibilities)])->setStatus($statuses[array_rand($statuses)]); $manager->persist($product); } fclose($handler); $manager->flush(); }
/** * @param Product $product * @param string $unitCode * @param float|int $quantity * * @return float|int Rounded quantity */ public function roundProductQuantity(Product $product, $unitCode, $quantity) { $unitPrecision = $product->getUnitPrecision($unitCode); if ($unitPrecision) { $quantity = $this->roundingService->round($quantity, $unitPrecision->getPrecision()); } return $quantity; }
public function testGetProductSku() { $product = new Product(); $product->setSku('test'); $price = new ProductPrice(); $price->setProduct($product); $this->assertEquals($product->getSku(), $price->getProductSku()); }
/** * @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; }
public function testEvent() { $product = new Product(); $product->setSku('SKU-1'); $sourceProduct = new Product(); $sourceProduct->setSku('SKU-2'); /** @var AbstractProductDuplicateEvent $event */ $event = $this->getMockBuilder('OroB2B\\Bundle\\ProductBundle\\Event\\AbstractProductDuplicateEvent')->setConstructorArgs([$product, $sourceProduct])->getMockForAbstractClass(); $this->assertEquals($product, $event->getProduct()); $this->assertEquals($sourceProduct, $event->getSourceProduct()); }
/** * @param Product $product * @param string $unitCode * @return int|null */ protected function getPrecision(Product $product, $unitCode) { $precision = null; $productUnitPrecisions = $product->getUnitPrecisions(); foreach ($productUnitPrecisions as $productUnitPrecision) { if ($productUnitPrecision->getUnit() && $productUnitPrecision->getUnit()->getCode() === $unitCode) { $precision = $productUnitPrecision->getPrecision(); } } return $precision; }
/** * @param ObjectManager $manager * @param string $sku * @return Product */ protected function createProduct(ObjectManager $manager, $sku) { $businessUnit = $manager->getRepository('OroOrganizationBundle:BusinessUnit')->getFirst(); $organization = $manager->getRepository('OroOrganizationBundle:Organization')->getFirst(); $product = new Product(); $product->setSku($sku); $product->setOwner($businessUnit); $product->setOrganization($organization); $manager->persist($product); $this->addReference($sku, $product); return $product; }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { /** @var EntityManager $manager */ $user = $this->getUser($manager); $businessUnit = $user->getOwner(); $organization = $user->getOrganization(); foreach ($this->products as $item) { $product = new Product(); $product->setOwner($businessUnit)->setOrganization($organization)->setSku($item['productCode']); $manager->persist($product); } $manager->flush(); }
/** * @param Product $product * @param ProductUnit $productUnit * @param float $quantity */ public function __construct(Product $product, ProductUnit $productUnit, $quantity) { if (!$product->getId()) { throw new \InvalidArgumentException('Product must have id.'); } $this->product = $product; if (!$productUnit->getCode()) { throw new \InvalidArgumentException('ProductUnit must have code.'); } $this->productUnit = $productUnit; if (!is_numeric($quantity) || $quantity < 0) { throw new \InvalidArgumentException('Quantity must be numeric and more than or equal zero.'); } $this->quantity = $quantity; }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { /** @var EntityManager $manager */ $user = $this->getUser($manager); $businessUnit = $user->getOwner(); $organization = $user->getOrganization(); foreach ($this->products as $item) { $product = new Product(); $product->setOwner($businessUnit)->setOrganization($organization)->setSku($item['productCode']); $name = new LocalizedFallbackValue(); $product->addName($name); $name->setString($item['productCode']); $manager->persist($product); $this->addReference($item['productCode'], $product); } $manager->flush(); }
/** * @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; }
public function testClone() { $id = 123; $product = new Product(); $product->getUnitPrecisions()->add(new ProductUnitPrecision()); $refProduct = new \ReflectionObject($product); $refId = $refProduct->getProperty('id'); $refId->setAccessible(true); $refId->setValue($product, $id); $this->assertEquals($id, $product->getId()); $this->assertCount(1, $product->getUnitPrecisions()); $productCopy = clone $product; $this->assertNull($productCopy->getId()); $this->assertCount(0, $productCopy->getUnitPrecisions()); }
public function testProcessLoadPriceAndProduct() { $productPrice = new ProductPrice(); $productPrice->setQuantity(555); $this->setValue($productPrice, 'value', 1.2); $this->setValue($productPrice, 'currency', 'USD'); /** @var ProductUnit $unit */ $unit = $this->getReference('product_unit.liter'); /** @var Product $product */ $product = $this->getReference('product.1'); /** @var PriceList $priceList */ $priceList = $this->getReference('price_list_1'); $productObject = new Product(); $productObject->setSku($product->getSku()); $productPrice->setProduct($product); $productPrice->setUnit($unit); $productPrice->setPriceList($priceList); $this->strategy->process($productPrice); $this->assertNotEmpty($productPrice->getPrice()); $this->assertEquals('USD', $productPrice->getPrice()->getCurrency()); $this->assertEquals(1.2, $productPrice->getPrice()->getValue()); $this->assertNotEmpty($productPrice->getProduct()); $this->assertEquals($product->getSku(), $productPrice->getProduct()->getSku()); }
/** * @param array $descriptions * @dataProvider getDefaultDescriptionExceptionDataProvider * * @expectedException \LogicException * @expectedExceptionMessage There must be only one default description */ public function testGetDefaultDescriptionException(array $descriptions) { $product = new Product(); foreach ($descriptions as $description) { $product->addDescription($description); } $product->getDefaultDescription(); }
/** * @param Product $product * @return bool */ public function isVisible(Product $product) { $visibility = $product->getVisibility() === Product::VISIBILITY_BY_CONFIG ? $this->configManager->get('orob2b_product.default_visibility') : $product->getVisibility(); return $visibility === Product::VISIBILITY_VISIBLE; }
/** * @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 Product */ protected function createProduct() { $product = new Product(); $product->setSku('sku_001'); return $product; }
/** * @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 Product $product * @param Locale $locale * @return LocalizedFallbackValue */ protected function getLocalizedName(Product $product, Locale $locale) { $localizedName = null; foreach ($product->getNames() as $name) { $nameLocale = $name->getLocale(); if ($nameLocale && $nameLocale->getId() === $locale->getId()) { $localizedName = $name; break; } } if (!$localizedName) { throw new \LogicException('At least one localized name must be defined'); } return $localizedName; }
/** * @param Product $product * @return array */ protected function getProductUnits(Product $product = null) { $choices = []; if ($product) { foreach ($product->getUnitPrecisions() as $unitPrecision) { $choices[] = $unitPrecision->getUnit(); } } return $choices; }
/** * @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 Product $product * @return ProductPrice */ public function setProduct(Product $product) { $this->product = $product; $this->productSku = $product->getSku(); return $this; }
/** * Set productReplacement * * @param Product $productReplacement * @return QuoteProduct */ public function setProductReplacement(Product $productReplacement = null) { $this->productReplacement = $productReplacement; if ($productReplacement) { $this->productReplacementSku = $productReplacement->getSku(); } return $this; }
/** * Set product * * @param Product $product * @return RequestProduct */ public function setProduct(Product $product = null) { $this->product = $product; if ($product) { $this->productSku = $product->getSku(); } return $this; }
/** * Set product * * @param Product $product * @return $this */ public function setProduct(Product $product = null) { if ($product && (!$this->product || $product->getId() !== $this->product->getId())) { $this->requirePriceRecalculation = true; } $this->product = $product; return $this; }
/** * @param string $sku * @param bool $isReplacement * @return QuoteProduct */ protected function createQuoteProduct($sku, $isReplacement = false) { $product = new Product(); $product->setSku($sku); $quoteProduct = new QuoteProduct(); if ($isReplacement) { $quoteProduct->setProductReplacement($product); } else { $quoteProduct->setProduct($product); } return $quoteProduct; }
/** * @param Product $product * * @return Crawler */ protected function getCrawler(Product $product) { return $this->client->request('GET', $this->getUrl('orob2b_shopping_list_line_item_frontend_add_widget', ['productId' => $product->getId(), '_widgetContainer' => 'dialog', '_wid' => 'test-uuid'])); }