Magento 2: Программно добавьте товар в корзину в соответствии с клиентом с пользовательской ценой
Мне нужно добавить товар в корзину в соответствии с требованиями клиента с индивидуальной ценой.
Я пытаюсь использовать код ниже. Но он возвращает ошибку
Неперехваченная ошибка типа: Аргумент 1, переданный Magento\Цитата\Модель\Цитата::Setcustomer() должен реализовывать интерфейс Magento\Клиент\Api\Данные\Интерфейс пользователя, экземпляр Magento\Клиент\Модель\Клиент\Перехватчик задан, вызывается/media/vendor/ssd_drive/mage2/abcd/app/code/vendor/module/Controller/Index/test.php на линии 133 и определено в /media/поставщике/ssd_drive/mage2/abcd/поставщике/magento/модуле-цитата/Модель/Цитата.php:974
Как это решить?
Код контроллера:
protected $_customer;
protected $quote;
protected $_customerSession;
protected $cart;
public function __construct(
\Magento\Customer\Model\Customer $customer,
\Magento\Customer\Model\Session $customerSession,
\Magento\Quote\Model\Quote $quote,
\Magento\Checkout\Model\Cart $cart,
) {
$this->_customer = $customer;
$this->_customerSession = $customerSession;
$this->quote = $quote;
$this->cart = $cart;
parent::__construct($context);
}
-----------------------------------------------------------------
$customerid = $this->_customerSession->getCustomer()->getId();
$customerData = $this->_customer->load($customerid);
$quote_data = $this->quote->loadByCustomer($customerData);
if (!$quote_data->getId()) {
$quote_data->setCustomer($customerData); //error line here
$quote_data->setIsActive(1);
$quote_data->setStoreId($this->_storeManager->getStore()->getId());
}
$quote_data->addProduct($_products, $params);
$quote_data->collectTotals()->save();
$cart = $this->cart->getQuote()->getAllItems();
$subtotal = 0;
if ($cart) {
foreach ($cart as $item) {
if ($item->getProductId() == $productID) {
$subprice = $this->priceCurrency->currency($customprice, false, false);
$finalprice = round($subprice, 2);
$item->setCustomPrice($finalprice);
$item->setOriginalCustomPrice($finalprice);
$item->getProduct()->setIsSuperMode(true);
$item->save();
}
$subtotal += $item->getCustomPrice();
}
$quote_data->setSubtotal($subtotal);
$quote_data->setGrandTotal($subtotal);
$quote_data->save();
}
Примечание: Я делаю это внутри контроллера, не используя наблюдателя.
1 answers
Вместо Magento\Customer\Model\Customer
попробуйте Magento\Customer\Api\CustomerRepositoryInterface
с getById()
, а затем передайте $customerData
в $quote_data->setCustomer($customerData);