/**
  * @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;
         }
     }
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 /**
  * 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;
 }