I have setting the custom price of the product on adding to cart which I am doing through some observer .
Everything is working fine except I am not getting the item id in the observer.I tried different ways but not able to get the item id of the added product .
Below is the code for reference. If anybody has some idea please revert.
class CustomPrice implements ObserverInterface
{
protected $_request;
protected $_helper;
protected $cart;
public function __construct(\Magento\Framework\App\RequestInterface $request,\TW\Product\Helper\Data $helper,\Magento\Checkout\Model\Cart $cart)
{
$this->_request = $request;
$this->_helper = $helper;
$this->cart= $cart;
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$writer = new \Zend\Log\Writer\Stream(BP.'/var/log/my.log');
$logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$reqeustParams = $this->_request->getParams();
$custom_price = $reqeustParams['custom_price'];
$item = $observer->getEvent()->getData('quote_item');
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
$item_id = $item->getId(); **// I get nothing in this**
$item->setCustomPrice($custom_price);
$item->setOriginalCustomPrice($custom_price);
$item->getProduct()->setIsSuperMode(true);
$pid = $item->getProductId();
$logger->info("item id=====pid ".$item_id." ==== ".$pid);
$this->_helper->updateIteminSession($pid,$item_id);
//$logger->info("success !!!!");
}
}
The response which i get on debug is below .. I don't see item id there :
[store_id] => 1
[product (Magento\Catalog\Model\Product\Interceptor)] => Array
(
[store_id] => 1
[row_id] => 1
[entity_id] => 1
[created_in] => 1
[updated_in] => 2147483647
[attribute_set_id] => 4
[type_id] => simple
[sku] => 1
[has_options] => 0
[required_options] => 0
[created_at] => 2017-06-12 08:00:07
[updated_at] => 2017-06-12 08:00:07
[name] => Retro Eyeglasses
[meta_title] => Retro Eyeglasses
[meta_description] => Retro Eyeglasses
[image] => /1/1/118179.jpg
[small_image] => /1/1/118179.jpg
[thumbnail] => /1/1/118179.jpg
[options_container] => container2
[country_of_manufacture] => US
[url_key] => retro-eyeglasses
[gift_message_available] => 2
[gift_wrapping_available] => 2
[is_returnable] => 2
[swatch_image] => /1/1/118179.jpg
[meta_keyword] => Retro Eyeglasses
[price] => 12.9500
[weight] => 1.0000
[status] => 1
[visibility] => 4
[quantity_and_stock_status] => Array
(
[is_in_stock] => 1
[qty] => 999997
)
[tax_class_id] => 2
[options] => Array
(
)
[media_gallery] => Array
(
[images] => Array
(
[1] => Array
(
[value_id] => 1
[file] => /1/1/118179.jpg
[media_type] => image
[row_id] => 1
[position] => 1
[disabled] => 0
[position_default] => 1
[disabled_default] => 0
)
)
[values] => Array
(
)
)
[category_ids] => Array
(
[0] => 3
)
[tier_price] => Array
(
)
[tier_price_changed] => 0
[is_salable] => 1
[website_ids] => Array
(
[0] => 1
)
[cart_qty] => 1
[qty] => 1
[event] =>
)
[product_id] => 1
[product_type] => simple
[sku] => 1
[name] => Retro Eyeglasses
[weight] => 1.0000
[tax_class_id] => 2
[is_qty_decimal] =>
[qty_to_add] => 1
[qty] => 1
[qty_options] => Array
(
)
Best Answer
You need to do like