/** * @magentoDataFixture Magento/Catalog/_files/product_simple.php */ public function testGetOrderOptions() { /** @var $product \Magento\Catalog\Model\Product */ $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\Product'); $this->assertEquals([], $this->_model->getOrderOptions($product)); $product->load(1); // fixture $product->addCustomOption('info_buyRequest', serialize(new \Magento\Framework\DataObject(['qty' => 2]))); foreach ($product->getOptions() as $option) { if ('field' == $option->getType()) { $product->addCustomOption('option_ids', $option->getId()); $quoteOption = clone $option; $product->addCustomOption("option_{$option->getId()}", $quoteOption->getValue()); $optionArr = $this->_model->getOrderOptions($product); $this->assertArrayHasKey('info_buyRequest', $optionArr); $this->assertArrayHasKey('options', $optionArr); $this->assertArrayHasKey(0, $optionArr['options']); $renderedOption = $optionArr['options'][0]; $this->assertArrayHasKey('label', $renderedOption); $this->assertArrayHasKey('value', $renderedOption); $this->assertArrayHasKey('print_value', $renderedOption); $this->assertArrayHasKey('option_id', $renderedOption); $this->assertArrayHasKey('option_type', $renderedOption); $this->assertArrayHasKey('option_value', $renderedOption); $this->assertArrayHasKey('custom_view', $renderedOption); $this->assertGreaterThan(0, $renderedOption['option_id']); break; } } }
/** * Prepare additional options/information for order item which will be * created from this product * * @param \Magento\Catalog\Model\Product $product * @return array */ public function getOrderOptions($product) { $options = parent::getOrderOptions($product); $options['attributes_info'] = $this->getSelectedAttributesInfo($product); if ($simpleOption = $product->getCustomOption('simple_product')) { $options['simple_name'] = $simpleOption->getProduct()->getName(); $options['simple_sku'] = $simpleOption->getProduct()->getSku(); } $options['product_calculations'] = self::CALCULATE_PARENT; $options['shipment_type'] = self::SHIPMENT_TOGETHER; return $options; }
/** * Prepare additional options/information for order item which will be * created from this product * * @param \Magento\Catalog\Model\Product $product * @return array */ public function getOrderOptions($product) { $optionArr = parent::getOrderOptions($product); $bundleOptions = []; if ($product->hasCustomOptions()) { $customOption = $product->getCustomOption('bundle_option_ids'); $optionIds = unserialize($customOption->getValue()); $options = $this->getOptionsByIds($optionIds, $product); $customOption = $product->getCustomOption('bundle_selection_ids'); $selectionIds = unserialize($customOption->getValue()); $selections = $this->getSelectionsByIds($selectionIds, $product); foreach ($selections->getItems() as $selection) { if ($selection->isSalable()) { $selectionQty = $product->getCustomOption('selection_qty_' . $selection->getSelectionId()); if ($selectionQty) { $price = $product->getPriceModel()->getSelectionFinalTotalPrice($product, $selection, 0, $selectionQty->getValue()); $option = $options->getItemById($selection->getOptionId()); if (!isset($bundleOptions[$option->getId()])) { $bundleOptions[$option->getId()] = ['option_id' => $option->getId(), 'label' => $option->getTitle(), 'value' => []]; } $bundleOptions[$option->getId()]['value'][] = ['title' => $selection->getName(), 'qty' => $selectionQty->getValue(), 'price' => $this->priceCurrency->convert($price)]; } } } } $optionArr['bundle_options'] = $bundleOptions; /** * Product Prices calculations save */ if ($product->getPriceType()) { $optionArr['product_calculations'] = self::CALCULATE_PARENT; } else { $optionArr['product_calculations'] = self::CALCULATE_CHILD; } $optionArr['shipment_type'] = $product->getShipmentType(); return $optionArr; }