public function testGetSubtotals()
 {
     $this->translator->expects($this->once())->method('trans')->with(sprintf('orob2b.order.subtotals.%s', Subtotal::TYPE_SUBTOTAL))->willReturn(ucfirst(Subtotal::TYPE_SUBTOTAL));
     $order = new Order();
     $perUnitLineItem = new OrderLineItem();
     $perUnitLineItem->setPriceType(OrderLineItem::PRICE_TYPE_UNIT);
     $perUnitLineItem->setPrice(Price::create(20, 'USD'));
     $perUnitLineItem->setQuantity(2);
     $bundledUnitLineItem = new OrderLineItem();
     $bundledUnitLineItem->setPriceType(OrderLineItem::PRICE_TYPE_BUNDLED);
     $bundledUnitLineItem->setPrice(Price::create(2, 'USD'));
     $bundledUnitLineItem->setQuantity(10);
     $otherCurrencyLineItem = new OrderLineItem();
     $otherCurrencyLineItem->setPriceType(OrderLineItem::PRICE_TYPE_UNIT);
     $otherCurrencyLineItem->setPrice(Price::create(10, 'EUR'));
     $otherCurrencyLineItem->setQuantity(10);
     $emptyLineItem = new OrderLineItem();
     $order->addLineItem($perUnitLineItem);
     $order->addLineItem($bundledUnitLineItem);
     $order->addLineItem($emptyLineItem);
     $order->addLineItem($otherCurrencyLineItem);
     $order->setCurrency('USD');
     $subtotals = $this->provider->getSubtotals($order);
     $this->assertInstanceOf('Doctrine\\Common\\Collections\\ArrayCollection', $subtotals);
     $subtotal = $subtotals->get(Subtotal::TYPE_SUBTOTAL);
     $this->assertInstanceOf('OroB2B\\Bundle\\OrderBundle\\Model\\Subtotal', $subtotal);
     $this->assertEquals(Subtotal::TYPE_SUBTOTAL, $subtotal->getType());
     $this->assertEquals(ucfirst(Subtotal::TYPE_SUBTOTAL), $subtotal->getLabel());
     $this->assertEquals($order->getCurrency(), $subtotal->getCurrency());
     $this->assertInternalType('float', $subtotal->getAmount());
     $this->assertEquals(142.0, $subtotal->getAmount());
 }
 /**
  * @return Price
  */
 protected function createPrice()
 {
     $price = new Price();
     $price->setValue(100);
     $price->setCurrency('USD');
     return $price;
 }
 /**
  * @param Price|null $price
  * @return Price|null
  */
 public function reverseTransform($price)
 {
     if (!$price || !$price instanceof Price || !$price->getValue()) {
         return null;
     }
     return $price;
 }
 /**
  * @param Price|null $price
  * @return Price|null
  */
 public function reverseTransform($price)
 {
     if (!$price || !$price instanceof Price || filter_var($price->getValue(), FILTER_VALIDATE_FLOAT) === false) {
         return null;
     }
     return $price;
 }
 /**
  * Formats currency number according to locale settings.
  *
  * Options format:
  * array(
  *     'attributes' => array(
  *          <attribute> => <value>,
  *          ...
  *      ),
  *     'textAttributes' => array(
  *          <attribute> => <value>,
  *          ...
  *      ),
  *     'symbols' => array(
  *          <symbol> => <value>,
  *          ...
  *      ),
  *     'locale' => <locale>
  * )
  *
  * @param Price $price
  * @param array $options
  * @return string
  */
 public function formatPrice(Price $price, array $options = [])
 {
     $value = $price->getValue();
     $currency = $price->getCurrency();
     $attributes = (array) $this->getOption($options, 'attributes', []);
     $textAttributes = (array) $this->getOption($options, 'textAttributes', []);
     $symbols = (array) $this->getOption($options, 'symbols', []);
     $locale = $this->getOption($options, 'locale');
     return $this->formatter->formatCurrency($value, $currency, $attributes, $textAttributes, $symbols, $locale);
 }
 public function testValidateWithNotAllowedCurrency()
 {
     $invalidCurrency = 'ABC';
     $price = new Price();
     $price->setValue('50')->setCurrency($invalidCurrency);
     $productPrice = $this->getProductPrice();
     $productPrice->setPrice($price);
     $this->context->expects($this->once())->method('addViolationAt')->with('price.currency', $this->constraint->message, $this->equalTo(['%invalidCurrency%' => $invalidCurrency]));
     $this->validator->validate($productPrice, $this->constraint);
 }
 /**
  * {@inheritdoc}
  */
 public function submitDataProvider()
 {
     /** @var Product $product */
     $product = $this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\Product', 1, 'id');
     $date = \DateTime::createFromFormat('Y-m-d H:i:s', '2015-02-03 00:00:00', new \DateTimeZone('UTC'));
     return ['default' => ['options' => ['currency' => 'USD'], 'submittedData' => ['product' => 1, 'productSku' => '', 'freeFormProduct' => '', 'quantity' => 10, 'productUnit' => 'item', 'productUnitCode' => '', 'price' => ['value' => '5', 'currency' => 'USD'], 'priceType' => OrderLineItem::PRICE_TYPE_BUNDLED, 'shipBy' => '2015-02-03', 'comment' => 'Comment'], 'expectedData' => (new OrderLineItem())->setProduct($product)->setQuantity(10)->setProductUnit($this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\ProductUnit', 'item', 'code'))->setPrice(Price::create(5, 'USD'))->setPriceType(OrderLineItem::PRICE_TYPE_BUNDLED)->setShipBy($date)->setComment('Comment')], 'free form entry' => ['options' => ['currency' => 'USD'], 'submittedData' => ['product' => null, 'productSku' => 'SKU02', 'freeFormProduct' => 'Service', 'quantity' => 1, 'productUnit' => 'item', 'price' => ['value' => 5, 'currency' => 'USD'], 'priceType' => OrderLineItem::PRICE_TYPE_UNIT, 'shipBy' => '2015-02-03', 'comment' => 'Comment'], 'expectedData' => (new OrderLineItem())->setQuantity(1)->setFreeFormProduct('Service')->setProductSku('SKU02')->setProductUnit($this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\ProductUnit', 'item', 'code'))->setPrice(Price::create(5, 'USD'))->setPriceType(OrderLineItem::PRICE_TYPE_UNIT)->setShipBy($date)->setComment('Comment')]];
 }
Example #8
0
 public function testCreate()
 {
     $price = Price::create(self::VALUE, self::CURRENCY);
     $this->assertInstanceOf('Oro\\Bundle\\CurrencyBundle\\Model\\Price', $price);
     $this->assertEquals(self::VALUE, $price->getValue());
     $this->assertEquals(self::CURRENCY, $price->getCurrency());
 }
 /**
  * {@inheritdoc}
  */
 public function load(ObjectManager $manager)
 {
     $locator = $this->container->get('file_locator');
     $filePath = $locator->locate('@OroB2BPricingBundle/Migrations/Data/Demo/ORM/data/product_prices.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['sku']);
         $productUnit = $this->getProductUnit($manager, $row['unitCode']);
         $priceList = $this->getPriceList($manager, $row['priceListName']);
         $price = Price::create($row['price'], $row['currency']);
         $productPrice = new ProductPrice();
         $productPrice->setProduct($product)->setUnit($productUnit)->setPriceList($priceList)->setQuantity($row['quantity'])->setPrice($price);
         $manager->persist($productPrice);
         $productPrice10 = clone $productPrice;
         $productPrice10->setQuantity($row['quantity'] * 10)->setPrice($price->setValue($price->getValue() * 0.95));
         $manager->persist($productPrice10);
         $productPrice20 = clone $productPrice;
         $productPrice20->setQuantity($row['quantity'] * 20)->setPrice($price->setValue($price->getValue() * 0.9));
         $manager->persist($productPrice20);
         $productPrice50 = clone $productPrice;
         $productPrice50->setQuantity($row['quantity'] * 50)->setPrice($price->setValue($price->getValue() * 0.85));
         $manager->persist($productPrice50);
         $productPrice100 = clone $productPrice;
         $productPrice100->setQuantity($row['quantity'] * 100)->setPrice($price->setValue($price->getValue() * 0.8));
         $manager->persist($productPrice100);
     }
     fclose($handler);
     $manager->flush();
 }
 /**
  * @return array
  */
 public function reverseTransformDataProvider()
 {
     $zeroPrice = Price::create(0, 'USD');
     $price = Price::create(100, 'USD');
     $lessZeroPrice = Price::create('-1', 'USD');
     return ['zero price' => ['input' => $zeroPrice, 'expected' => $zeroPrice], 'price' => ['input' => $price, 'expected' => $price], 'null' => ['data' => null, 'expected' => null], 'invalid price' => ['input' => 'string', 'expected' => null], 'invalid price value' => ['input' => Price::create('price', 'USD'), 'expected' => null], 'price value less than zero' => ['input' => $lessZeroPrice, 'expected' => $lessZeroPrice]];
 }
 /**
  * @param array $productUnitQuantities
  * @param string $currency
  * @param PriceList|null $priceList
  * @return array|Price[]
  */
 public function getMatchedPrices(array $productUnitQuantities, $currency, PriceList $priceList = null)
 {
     if (!$priceList) {
         $priceList = $this->requestHandler->getPriceList();
     }
     $productIds = [];
     $productUnitCodes = [];
     /** @var ProductUnitQuantity[] $productUnitQuantities */
     foreach ($productUnitQuantities as $productUnitQuantity) {
         $productIds[] = $productUnitQuantity->getProduct()->getId();
         $productUnitCodes[] = $productUnitQuantity->getProductUnit()->getCode();
     }
     $prices = $this->getRepository()->getPricesBatch($priceList->getId(), $productIds, $productUnitCodes, []);
     $result = [];
     foreach ($productUnitQuantities as $productUnitQuantity) {
         $id = $productUnitQuantity->getProduct()->getId();
         $code = $productUnitQuantity->getProductUnit()->getCode();
         $quantity = $productUnitQuantity->getQuantity();
         $productPrices = array_filter($prices, function (array $price) use($id, $code, $currency) {
             return $price['id'] === $id && $price['code'] === $code && $price['currency'] === $currency;
         });
         $price = $this->matchPriceByQuantity($productPrices, $quantity);
         $result[$productUnitQuantity->getIdentifier()] = $price ? Price::create($price, $currency) : null;
     }
     return $result;
 }
 public function testSetPrice()
 {
     $price = Price::create(22, 'EUR');
     $item = new QuoteProductOffer();
     $item->setPrice($price);
     $this->assertEquals($price, $item->getPrice());
     $this->assertEquals(22, $this->getProperty($item, 'value'));
     $this->assertEquals('EUR', $this->getProperty($item, 'currency'));
 }
 public function testPrice()
 {
     $value = 1.1;
     $currency = 'USD';
     $price = new Price();
     $price->setCurrency($currency);
     $price->setValue($value);
     $item = new BaseQuoteProductItem();
     $item->setPrice($price);
     static::assertSame($price, $item->getPrice());
     $item->postLoad();
     static::assertNotSame($price, $item->getPrice());
     static::assertEquals($price, $item->getPrice());
     $item->updatePrice();
     $reflection = new \ReflectionProperty(get_class($item), 'value');
     $reflection->setAccessible(true);
     static::assertEquals($value, $reflection->getValue($item));
     $reflection = new \ReflectionProperty(get_class($item), 'currency');
     $reflection->setAccessible(true);
     static::assertEquals($currency, $reflection->getValue($item));
 }
 /**
  * {@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();
 }
 public function testPrePersist()
 {
     $entity = new OrderLineItem();
     $entity->setPrice(Price::create(42, 'USD'));
     $this->assertEquals(42, $entity->getValue());
     $this->assertEquals('USD', $entity->getCurrency());
     $entity->getPrice()->setValue(84);
     $entity->getPrice()->setCurrency('EUR');
     $this->assertEmpty($entity->getProductSku());
     $this->assertEmpty($entity->getProductUnitCode());
     $entity->setProduct((new Product())->setSku('SKU'));
     $entity->setProductUnit((new ProductUnit())->setCode('kg'));
     $entity->preSave();
     $this->assertEquals(84, $entity->getValue());
     $this->assertEquals('EUR', $entity->getCurrency());
     $this->assertEquals('SKU', $entity->getProductSku());
     $this->assertEquals('kg', $entity->getProductUnitCode());
 }
 public function testSetGetPrice()
 {
     $productPrice = new ProductPrice();
     $this->assertNull($productPrice->getPrice());
     $value = 11;
     $currency = 'EUR';
     $this->setProperty($productPrice, 'value', $value);
     $this->setProperty($productPrice, 'currency', $currency);
     $productPrice->loadPrice();
     $price = $productPrice->getPrice();
     $this->assertInstanceOf('Oro\\Bundle\\CurrencyBundle\\Model\\Price', $price);
     $this->assertEquals($value, $price->getValue());
     $this->assertEquals($currency, $price->getCurrency());
     $price = Price::create(12, 'USD');
     $productPrice->setPrice($price);
     $this->assertEquals($price, $productPrice->getPrice());
     $productPrice->updatePrice();
     $this->assertAttributeEquals($price->getValue(), 'value', $productPrice);
     $this->assertAttributeEquals($price->getCurrency(), 'currency', $productPrice);
 }
 /**
  * @return array
  */
 public function validateDataProvider()
 {
     return [[new OrderLineItem(), ['orob2b.order.orderlineitem.product.blank', 'orob2b.order.orderlineitem.product_price.blank']], [(new OrderLineItem())->setProduct(new Product()), 'orob2b.order.orderlineitem.product_price.blank'], [(new OrderLineItem())->setPrice(Price::create(1, 'USD')), 'orob2b.order.orderlineitem.product.blank']];
 }
 /**
  * @return array
  */
 public function formatOfferProvider()
 {
     return ['existing product unit and bundled price type' => ['inputData' => ['item' => (new QuoteProductOffer())->setPriceType(QuoteProductOffer::PRICE_TYPE_BUNDLED), 'quantity' => 15, 'unitCode' => 'kg', 'price' => Price::create(10, 'USD'), 'unit' => (new ProductUnit())->setCode('kg')], 'expectedData' => ['formattedUnits' => '15 kilogram', 'formattedPrice' => '10.00 USD', 'formattedUnit' => 'kilogram', 'transConstant' => 'orob2b.sale.quoteproductoffer.item_bundled', 'transIndex' => 0]], 'existing product unit and default price type' => ['inputData' => ['item' => new QuoteProductOffer(), 'quantity' => 15, 'unitCode' => 'kg', 'price' => Price::create(10, 'USD'), 'unit' => (new ProductUnit())->setCode('kg')], 'expectedData' => ['formattedUnits' => '15 kilogram', 'formattedPrice' => '10.00 USD', 'formattedUnit' => 'kilogram', 'transConstant' => 'orob2b.sale.quoteproductoffer.item', 'transIndex' => 0]], 'existing product unit and allowed increments' => ['inputData' => ['item' => (new QuoteProductOffer())->setAllowIncrements(true), 'quantity' => 15, 'unitCode' => 'kg', 'price' => Price::create(10, 'USD'), 'unit' => (new ProductUnit())->setCode('kg')], 'expectedData' => ['formattedUnits' => '15 kilogram', 'formattedPrice' => '10.00 USD', 'formattedUnit' => 'kilogram', 'transConstant' => 'orob2b.sale.quoteproductoffer.item', 'transIndex' => 1]], 'deleted product unit' => ['inputData' => ['item' => new QuoteProductOffer(), 'quantity' => 25, 'unitCode' => 'item', 'price' => Price::create(20, 'EUR'), 'unit' => null], 'expectedData' => ['formattedUnits' => '25 item', 'formattedPrice' => '20.00 EUR', 'formattedUnit' => 'item', 'transConstant' => 'orob2b.sale.quoteproductoffer.item', 'transIndex' => 0]]];
 }
 /**
  * @ORM\PrePersist
  * @ORM\PreUpdate
  */
 public function updatePrice()
 {
     $this->value = $this->price ? $this->price->getValue() : null;
     $this->currency = $this->price ? $this->price->getCurrency() : null;
 }
 /**
  * @return array
  */
 public function submitProvider()
 {
     $quoteProductOffer = $this->getQuoteProductOffer(2, 33, 'kg', self::QPO_PRICE_TYPE1, Price::create(44, 'USD'));
     $quoteProduct = $this->getQuoteProduct(2, self::QP_TYPE1, 'comment1', 'comment2', [], [$quoteProductOffer]);
     return ['empty owner' => ['isValid' => false, 'submittedData' => [], 'expectedData' => new Quote()], 'valid data' => ['isValid' => true, 'submittedData' => ['owner' => 1, 'accountUser' => 1, 'account' => 2, 'locked' => false, 'quoteProducts' => [['product' => 2, 'type' => self::QP_TYPE1, 'comment' => 'comment1', 'commentAccount' => 'comment2', 'quoteProductOffers' => [['quantity' => 33, 'productUnit' => 'kg', 'priceType' => self::QPO_PRICE_TYPE1, 'price' => ['value' => 44, 'currency' => 'USD']]]]]], 'expectedData' => $this->getQuote(1, 1, 2, [$quoteProduct], false)]];
 }
 /**
  * @return array
  */
 public function getMatchedPricesDataProvider()
 {
     $prodUnitQty1 = $this->getProductUnitQuantity(1);
     $prodUnitQty105 = $this->getProductUnitQuantity(10.5);
     $prodUnitQty50 = $this->getProductUnitQuantity(50);
     $prodUnitQty200 = $this->getProductUnitQuantity(200);
     $prodUnitQty01 = $this->getProductUnitQuantity(0.1);
     $repositoryData = $this->getRepositoryData($prodUnitQty50);
     return ['with priceList' => ['productUnitQuantities' => [$prodUnitQty1, $prodUnitQty105], 'currency' => 'USD', 'withPriceList' => true, 'repositoryData' => $repositoryData, 'expectedData' => [$prodUnitQty1->getIdentifier() => null, $prodUnitQty105->getIdentifier() => Price::create(15, 'USD')]], 'without priceList' => ['productUnitQuantities' => [$prodUnitQty50, $prodUnitQty200, $prodUnitQty01], 'currency' => 'USD', 'withPriceList' => false, 'repositoryData' => $repositoryData, 'expectedData' => [$prodUnitQty50->getIdentifier() => Price::create(300, 'USD'), $prodUnitQty200->getIdentifier() => Price::create(1400, 'USD'), $prodUnitQty01->getIdentifier() => null]]];
 }
 /**
  * @param integer $priceListId
  * @param integer $quantity
  * @param string $unitCode
  * @param string $currency
  * @return ProductPrice
  */
 protected function createPriceList($priceListId, $quantity, $unitCode, $currency)
 {
     $unit = new ProductUnit();
     $unit->setCode($unitCode);
     $price = new Price();
     $price->setValue(100)->setCurrency($currency);
     $productPrice = new ProductPrice();
     $productPrice->setProduct($this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\Product', 42))->setPriceList($this->getEntity('OroB2B\\Bundle\\PricingBundle\\Entity\\PriceList', $priceListId))->setQuantity($quantity)->setUnit($unit)->setPrice($price);
     return $productPrice;
 }
 public function testGetAvailableCurrencies()
 {
     $this->assertEquals(['EUR' => 'EUR', 'USD' => 'USD'], $this->repository->getAvailableCurrencies());
     $em = $this->getContainer()->get('doctrine')->getManager();
     $price = new Price();
     $price->setValue(1);
     $price->setCurrency('UAH');
     /** @var Product $product */
     $product = $this->getReference('product.1');
     /** @var ProductUnit $unit */
     $unit = $this->getReference('product_unit.liter');
     /** @var PriceList $priceList */
     $priceList = $this->getReference('price_list_1');
     $productPrice = new ProductPrice();
     $productPrice->setPrice($price)->setProduct($product)->setQuantity(1)->setUnit($unit)->setPriceList($priceList);
     $em->persist($productPrice);
     $em->flush();
     $this->assertEquals(['EUR' => 'EUR', 'UAH' => 'UAH', 'USD' => 'USD'], $this->repository->getAvailableCurrencies());
 }
 /**
  * @param float $value
  * @param string $currency
  * @return Price
  */
 protected function createPrice($value, $currency)
 {
     return Price::create($value, $currency);
 }
 /**
  * @param int $productId
  * @param float $value
  * @param string $currency
  * @return ProductPrice
  */
 protected function createPrice($productId, $value, $currency)
 {
     $product = new Product();
     $reflection = new \ReflectionProperty(get_class($product), 'id');
     $reflection->setAccessible(true);
     $reflection->setValue($product, $productId);
     $price = new ProductPrice();
     $price->setProduct($product)->setPrice(Price::create($value, $currency));
     return $price;
 }
 /**
  * @param Price $price
  * @param array $options
  * @param string $expected
  * @dataProvider formatCurrencyDataProvider
  */
 public function testFormatCurrency(Price $price, array $options, $expected)
 {
     $this->formatter->expects($this->once())->method('formatCurrency')->with($price->getValue(), $price->getCurrency(), $options['attributes'], $options['textAttributes'], $options['symbols'], $options['locale'])->will($this->returnValue($expected));
     $this->assertEquals($expected, $this->extension->formatPrice($price, $options));
 }
 /**
  * @param Quote $quote
  * @param ObjectManager $manager
  */
 protected function processQuoteProducts(Quote $quote, ObjectManager $manager)
 {
     $products = $this->getProducts($manager);
     $currencies = $this->getCurrencies();
     $types = [QuoteProduct::TYPE_REQUESTED];
     $priceTypes = [QuoteProductOffer::PRICE_TYPE_UNIT];
     if ($quote->getRequest()) {
         foreach ($quote->getRequest()->getRequestProducts() as $requestProduct) {
             $type = $types[rand(0, count($types) - 1)];
             $quoteProduct = $this->createQuoteProduct($requestProduct->getProduct(), $type);
             $this->processRequestProductItems($quoteProduct, $requestProduct);
             $quote->addQuoteProduct($quoteProduct);
         }
     } else {
         $numProducts = rand(1, 3);
         for ($i = 0; $i < $numProducts; $i++) {
             $product = $products[rand(1, count($products) - 1)];
             $quote->addQuoteProduct($this->createQuoteProduct($product, QuoteProduct::TYPE_OFFER));
         }
     }
     foreach ($quote->getQuoteProducts() as $quoteProduct) {
         $unitPrecisions = $quoteProduct->getProduct()->getUnitPrecisions();
         $numProductOffers = rand(1, 3);
         for ($j = 0; $j < $numProductOffers; $j++) {
             if (!count($unitPrecisions)) {
                 continue;
             }
             $productUnit = $unitPrecisions[rand(0, count($unitPrecisions) - 1)]->getUnit();
             $currency = $currencies[rand(0, count($currencies) - 1)];
             $priceType = $priceTypes[rand(0, count($priceTypes) - 1)];
             $quoteProductOffer = new QuoteProductOffer();
             $quoteProductOffer->setPrice(Price::create(rand(1, 100), $currency))->setQuantity(rand(1, 100))->setProductUnit($productUnit)->setPriceType($priceType)->setAllowIncrements((bool) rand(0, 1));
             if ($quoteProduct->isTypeNotAvailable()) {
                 $productReplacement = $products[rand(1, count($products) - 1)];
                 $unitPrecisionsRepl = $productReplacement->getUnitPrecisions();
                 $productUnitRepl = $unitPrecisionsRepl[rand(0, count($unitPrecisionsRepl) - 1)]->getUnit();
                 $quoteProduct->setProductReplacement($productReplacement);
                 $quoteProductOffer->setProductUnit($productUnitRepl);
             }
             $quoteProduct->addQuoteProductOffer($quoteProductOffer);
         }
     }
 }
 /**
  * @ORM\PrePersist
  * @ORM\PreUpdate
  */
 public function updatePrice()
 {
     if ($this->price) {
         $this->value = $this->price->getValue();
         $this->currency = $this->price->getCurrency();
     }
 }
 /**
  * @param string $sku
  * @param string $unitCode
  * @param float $qty
  * @param int $priceType
  * @param float $priceValue
  * @param string $priceCurrency
  * @return OrderLineItem
  */
 protected function createOrderLineItem($sku, $unitCode, $qty, $priceType, $priceValue, $priceCurrency)
 {
     $orderLineItem = new OrderLineItem();
     $orderLineItem->setProduct((new Product())->setSku($sku))->setProductUnit((new ProductUnit())->setCode($unitCode))->setQuantity($qty)->setPriceType($priceType)->setPrice(Price::create($priceValue, $priceCurrency))->setFromExternalSource(true);
     return $orderLineItem;
 }
 /**
  * @return array
  *
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function submitProvider()
 {
     $quoteProductOffer = $this->getQuoteProductOffer(2, 10, 'kg', self::QPO_PRICE_TYPE1, Price::create(20, 'USD'));
     return ['empty form' => ['isValid' => false, 'submittedData' => [], 'expectedData' => $this->getQuoteProduct(2)->setProduct(null), 'inputData' => $this->getQuoteProduct(2)->setProduct(null)], 'empty quote' => ['isValid' => false, 'submittedData' => ['product' => 2, 'type' => self::QP_TYPE1, 'comment' => 'comment1', 'commentAccount' => 'comment2', 'quoteProductOffers' => [['quantity' => 10, 'productUnit' => 'kg', 'priceType' => self::QPO_PRICE_TYPE1, 'price' => ['value' => 20, 'currency' => 'USD']]]], 'expectedData' => $this->getQuoteProduct(2, self::QP_TYPE1, 'comment1', 'comment2', [], [clone $quoteProductOffer])->setQuote(null), 'inputData' => $this->getQuoteProduct(2)->setQuote(null)->setProduct(null)], 'empty product' => ['isValid' => false, 'submittedData' => ['type' => self::QP_TYPE1, 'comment' => 'comment1', 'commentAccount' => 'comment2', 'quoteProductOffers' => [['quantity' => 10, 'productUnit' => 'kg', 'priceType' => self::QPO_PRICE_TYPE1, 'price' => ['value' => 20, 'currency' => 'USD']]]], 'expectedData' => $this->getQuoteProduct(2, self::QP_TYPE1, 'comment1', 'comment2', [], [clone $quoteProductOffer])->setProduct(null), 'inputData' => $this->getQuoteProduct(2)->setProduct(null)], 'empty type' => ['isValid' => false, 'submittedData' => ['product' => 2, 'comment' => 'comment1', 'commentAccount' => 'comment2', 'quoteProductOffers' => [['quantity' => 10, 'productUnit' => 'kg', 'priceType' => self::QPO_PRICE_TYPE1, 'price' => ['value' => 20, 'currency' => 'USD']]]], 'expectedData' => $this->getQuoteProduct(2, null, 'comment1', 'comment2', [], [clone $quoteProductOffer]), 'inputData' => $this->getQuoteProduct(2)->setProduct(null)], 'empty offers' => ['isValid' => false, 'submittedData' => ['product' => 2, 'comment' => 'comment1', 'commentAccount' => 'comment2'], 'expectedData' => $this->getQuoteProduct(2, null, 'comment1', 'comment2', [], []), 'inputData' => $this->getQuoteProduct(2)->setProduct(null)], 'valid data' => ['isValid' => true, 'submittedData' => ['product' => 2, 'type' => self::QP_TYPE1, 'comment' => 'comment1', 'commentAccount' => 'comment2', 'quoteProductOffers' => [['quantity' => 10, 'productUnit' => 'kg', 'priceType' => self::QPO_PRICE_TYPE1, 'price' => ['value' => 20, 'currency' => 'USD']]]], 'expectedData' => $this->getQuoteProduct(2, self::QP_TYPE1, 'comment1', 'comment2', [], [clone $quoteProductOffer]), 'inputData' => $this->getQuoteProduct(2)->setProduct(null)]];
 }