public function testSetProductUnit() { $item = new QuoteProductOffer(); $this->assertNull($item->getProductUnitCode()); $item->setProductUnit((new ProductUnit())->setCode('kg')); $this->assertEquals('kg', $item->getProductUnitCode()); }
/** * @param string $unitCode * @param float $quantity * @param bool $allowIncrements * @return QuoteProductOffer */ protected function createQuoteProductOffer($unitCode, $quantity, $allowIncrements) { $unit = new ProductUnit(); $unit->setCode($unitCode); $item = new QuoteProductOffer(); $item->setProductUnit($unit)->setQuantity($quantity)->setAllowIncrements($allowIncrements); return $item; }
/** * @param ObjectManager $manager * @param Quote $quote * @param string $sku * @param array $items */ protected function addQuoteProduct(ObjectManager $manager, Quote $quote, $sku, $items) { $product = new QuoteProduct(); if ($this->hasReference($sku)) { $product->setProduct($this->getReference($sku)); } else { $product->setProductSku($sku); } foreach ($items as $item) { $productOffer = new QuoteProductOffer(); $productOffer->setQuantity($item['quantity'])->setPrice((new Price())->setValue($item['price'])->setCurrency($item['currency'])); if ($this->hasReference($item['unit'])) { $productOffer->setProductUnit($this->getReference($item['unit'])); } else { $productOffer->setProductUnitCode($item['unit']); } $manager->persist($productOffer); $product->addQuoteProductOffer($productOffer); } $manager->persist($product); $quote->addQuoteProduct($product); }
/** * @param ObjectManager $manager * @param Quote $quote * @param string $sku * @param array $items */ protected function addQuoteProduct(ObjectManager $manager, Quote $quote, $sku, $items) { $product = new QuoteProduct(); if ($this->hasReference($sku)) { $product->setProduct($this->getReference($sku)); } else { $product->setProductSku($sku); } foreach ($items as $index => $item) { $productOffer = new QuoteProductOffer(); $productOffer->setAllowIncrements($item['allow_increments'])->setQuantity($item['quantity'])->setPriceType($item['priceType'])->setPrice((new Price())->setValue($item['price'])->setCurrency($item['currency'])); if ($this->hasReference($item['unit'])) { $productOffer->setProductUnit($this->getReference($item['unit'])); } else { $productOffer->setProductUnitCode($item['unit']); } $manager->persist($productOffer); // e.g sale.quote.1.product.1.offer.1 $this->addReference($quote->getQid() . '.' . $sku . '.offer.' . ($index + 1), $productOffer); $product->addQuoteProductOffer($productOffer); } $manager->persist($product); $quote->addQuoteProduct($product); }
/** * @param string $unitCode * @param float $quantity * @param float $priceValue * @param string $priceCurrency * @param int $priceType * @return QuoteProductOffer */ protected function createQuoteProductOffer($unitCode, $quantity, $priceType, $priceValue, $priceCurrency) { $unit = new ProductUnit(); $unit->setCode($unitCode); $price = Price::create($priceValue, $priceCurrency); $quoteProductOffer = new QuoteProductOffer(); $quoteProductOffer->setProductUnit($unit)->setQuantity($quantity)->setPrice($price)->setPriceType($priceType); return $quoteProductOffer; }
/** * @param int $productId * @param float $quantity * @param string $unitCode * @param int $priceType * @param Price $price * @return QuoteProductOffer */ protected function getQuoteProductOffer($productId = null, $quantity = null, $unitCode = null, $priceType = null, Price $price = null) { $quoteProductOffer = new QuoteProductOffer(); $quoteProductOffer->setQuoteProduct($this->getQuoteProduct($productId)); if (null !== $quantity) { $quoteProductOffer->setQuantity($quantity); } if (null !== $unitCode) { $quoteProductOffer->setProductUnit($this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\ProductUnit', $unitCode, 'code')); } if (null !== $priceType) { $quoteProductOffer->setPriceType($priceType); } if (null !== $price) { $quoteProductOffer->setPrice($price); } return $quoteProductOffer; }
/** * @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); } } }