/**
  * @param QuoteProductOffer $quoteProductOffer
  * @param float|null $quantity
  * @return OrderLineItem
  */
 protected function createOrderLineItem(QuoteProductOffer $quoteProductOffer, $quantity = null)
 {
     $quoteProduct = $quoteProductOffer->getQuoteProduct();
     if ($quoteProduct->getProductReplacement()) {
         $product = $quoteProduct->getProductReplacement();
     } else {
         $product = $quoteProduct->getProduct();
     }
     $orderLineItem = new OrderLineItem();
     $orderLineItem->setProduct($product)->setProductUnit($quoteProductOffer->getProductUnit())->setQuantity($quantity ?: $quoteProductOffer->getQuantity())->setPriceType($quoteProductOffer->getPriceType())->setPrice($quoteProductOffer->getPrice())->setFromExternalSource(true);
     return $orderLineItem;
 }
 /**
  * @param QuoteProductOffer $item
  * @return string
  */
 public function formatOffer(QuoteProductOffer $item)
 {
     switch ($item->getPriceType()) {
         case QuoteProductOffer::PRICE_TYPE_BUNDLED:
             $transConstant = 'orob2b.sale.quoteproductoffer.item_bundled';
             break;
         default:
             $transConstant = 'orob2b.sale.quoteproductoffer.item';
     }
     $str = $this->translator->transChoice($transConstant, (int) $item->isAllowIncrements(), ['{units}' => $this->formatProductUnit($item), '{price}' => $this->formatPrice($item), '{unit}' => $this->formatUnitCode($item)]);
     return $str;
 }