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();
}

Примечание: Я делаю это внутри контроллера, не используя наблюдателя.

Author: Rohan Hapani, 2018-11-14

1 answers

Вместо Magento\Customer\Model\Customer попробуйте Magento\Customer\Api\CustomerRepositoryInterface с getById(), а затем передайте $customerData в $quote_data->setCustomer($customerData);

 2
Author: Rakesh Varma, 2018-11-14 10:42:50