Пример #1
0
 /**
  * Returns product final price depending on options chosen
  *
  * @param   float $qty
  * @param   \Magento\Catalog\Model\Product $product
  * @return  float
  */
 public function getFinalPrice($qty, $product)
 {
     if ($qty === null && $product->getCalculatedFinalPrice() !== null) {
         return $product->getCalculatedFinalPrice();
     }
     $finalPrice = parent::getFinalPrice($qty, $product);
     if ($product->hasCustomOptions()) {
         /* @var $typeInstance \Magento\GroupedProduct\Model\Product\Type\Grouped */
         $typeInstance = $product->getTypeInstance();
         $associatedProducts = $typeInstance->setStoreFilter($product->getStore(), $product)->getAssociatedProducts($product);
         foreach ($associatedProducts as $childProduct) {
             /* @var $childProduct \Magento\Catalog\Model\Product */
             $option = $product->getCustomOption('associated_product_' . $childProduct->getId());
             if (!$option) {
                 continue;
             }
             $childQty = $option->getValue();
             if (!$childQty) {
                 continue;
             }
             $finalPrice += $childProduct->getFinalPrice($childQty) * $childQty;
         }
     }
     $product->setFinalPrice($finalPrice);
     return max(0, $product->getData('final_price'));
 }
Пример #2
0
 public function testGetFinalPrice()
 {
     /** @var $product \Magento\Catalog\Model\Product */
     $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\Product');
     $product->load(1);
     // fixture
     // regular & tier prices
     $this->assertEquals(10.0, $this->_model->getFinalPrice(1, $product));
     $this->assertEquals(8.0, $this->_model->getFinalPrice(2, $product));
     $this->assertEquals(5.0, $this->_model->getFinalPrice(5, $product));
     // with options
     $product->addCustomOption('option_ids', implode(',', array_keys($product->getOptions())));
     foreach ($product->getOptions() as $id => $option) {
         $product->addCustomOption("option_{$id}", $option->getValue());
     }
     $this->assertEquals(16.0, $this->_model->getFinalPrice(1, $product));
 }
Пример #3
0
 /**
  * Get product final price
  *
  * @param   float $qty
  * @param   \Magento\Catalog\Model\Product $product
  * @return  float
  */
 public function getFinalPrice($qty, $product)
 {
     if ($qty === null && $product->getCalculatedFinalPrice() !== null) {
         return $product->getCalculatedFinalPrice();
     }
     if ($product->getCustomOption('simple_product') && $product->getCustomOption('simple_product')->getProduct()) {
         $finalPrice = parent::getFinalPrice($qty, $product->getCustomOption('simple_product')->getProduct());
     } else {
         $priceInfo = $product->getPriceInfo();
         $finalPrice = $priceInfo->getPrice('final_price')->getAmount()->getValue();
     }
     $finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice);
     $finalPrice = max(0, $finalPrice);
     $product->setFinalPrice($finalPrice);
     return $finalPrice;
 }
Пример #4
0
 public function testGetFinalPrice()
 {
     $repository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\ProductRepository');
     $product = $repository->get('simple');
     // fixture
     // regular & tier prices
     $this->assertEquals(10.0, $this->_model->getFinalPrice(1, $product));
     $this->assertEquals(8.0, $this->_model->getFinalPrice(2, $product));
     $this->assertEquals(5.0, $this->_model->getFinalPrice(5, $product));
     // with options
     $buyRequest = $this->prepareBuyRequest($product);
     $product->getTypeInstance()->prepareForCart($buyRequest, $product);
     //product price + options price(10+1+2+3+3)
     $this->assertEquals(19.0, $this->_model->getFinalPrice(1, $product));
     //product tier price + options price(5+1+2+3+3)
     $this->assertEquals(14.0, $this->_model->getFinalPrice(5, $product));
 }
Пример #5
0
 /**
  * Retrieve product final price
  *
  * @param integer $qty
  * @param \Magento\Catalog\Model\Product $product
  * @return float
  */
 public function getFinalPrice($qty, $product)
 {
     if ($qty === null && $product->getCalculatedFinalPrice() !== null) {
         return $product->getCalculatedFinalPrice();
     }
     $finalPrice = parent::getFinalPrice($qty, $product);
     /**
      * links prices are added to base product price only if they can be purchased separately
      */
     if ($product->getLinksPurchasedSeparately()) {
         if ($linksIds = $product->getCustomOption('downloadable_link_ids')) {
             $linkPrice = 0;
             $links = $product->getTypeInstance()->getLinks($product);
             foreach (explode(',', $linksIds->getValue()) as $linkId) {
                 if (isset($links[$linkId])) {
                     $linkPrice += $links[$linkId]->getPrice();
                 }
             }
             $finalPrice += $linkPrice;
         }
     }
     $product->setData('final_price', $finalPrice);
     return max(0, $product->getData('final_price'));
 }