/** * {@inheritdoc} */ protected function addItem(Product $product, $entity, array $itemData = []) { if (!$entity instanceof Order) { return; } $lineItem = new OrderLineItem(); $lineItem->setProduct($product)->setProductSku($product->getSku()); if (array_key_exists(ProductDataStorage::PRODUCT_QUANTITY_KEY, $itemData)) { $lineItem->setQuantity($itemData[ProductDataStorage::PRODUCT_QUANTITY_KEY]); } $this->fillEntityData($lineItem, $itemData); if (!$lineItem->getProductUnit()) { /** @var ProductUnitPrecision $unitPrecision */ $unitPrecision = $product->getUnitPrecisions()->first(); if (!$unitPrecision) { return; } /** @var ProductUnit $unit */ $unit = $unitPrecision->getUnit(); if (!$unit) { return; } $lineItem->setProductUnit($unit); $lineItem->setProductUnitCode($unit->getCode()); } if ($lineItem->getProduct()) { $entity->addLineItem($lineItem); } }
/** * @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; }
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()); }
/** * @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; }