Magento 2: Atualizando item de cotação

10

Estou tentando atualizar o item de citação no magento2. Mas sempre que estou salvando o item, ele cria um novo item com o mesmo ID de cotação, em vez de atualizá-lo. Aqui está o meu código

    public function __construct(
            \Magento\Quote\Model\QuoteRepository $quoteRepo
        ){
            $this->_quoteRepo = $quoteRepo;
        }

public function updateItem(){
    $quote = $this->_quoteRepo->get('id here');
    foreach($quote->getAllVisibleItems() as $itemq){
    $itemq->setQty(5);
    $itemq->setPrice(20);
    $itemq->save();
    }
 }

Mas toda vez que ele salva um item, um novo item é gerado. Não sei porque. Também I couldn't find any class which explicitly load qoute item in magento2. Ajuda será apreciada.

Nesta pergunta, /magento/139298/how-to-save-quote-items-in-magento-2eles estão configurando o produto inteiro ... não tentando atualizá-lo. Quando você define um produto, um novo item de cotação certamente será gerado. Mas por que está fazendo o mesmo em caso de atualização?

Kingshuk Deb
fonte
2
Possível duplicata Como salvar itens citação em magento 2
Ankit Shah
11
Não mesmo. Eu editei minha pergunta. @AnkitShah, verifique.
Kingshuk Deb
Para o Magento 2.2 + enviamos esta - magento.stackexchange.com/a/182152/4492
Rohan Patil

Respostas:

16

Não tenho certeza da minha solução abaixo:

  • Pode ser que você precise carregar o objeto do item de cotação pelo ID do item
  • Como você deseja definir o preço , usando setPrice (), não é possível definir o preço desejado para esse item do carrinho
$item = $quote->getItemById($item->getId());
if (!$item) {
  continue;
}
$item->setQty((double) $qty);
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$item->getProduct()->setIsSuperMode(true);
$item->save(); 
Amit Bera
fonte
11
como atualizar opções adicionais
sivakumar 17/04/19
oi @mit, como atualizar taxAmount para o item ?, podemos definir o valor do imposto personalizado para o item de cotação individual?
Jafar pinjar
2

A funcionalidade que você está perguntando já está pronta Magento\Checkout\Controller\Cart\UpdatePost e é executada quando atualizamos o carrinho na página do carrinho do magento. Ele executa a updateItems()função de Magento\Checkout\Model\Cartpara atualizar itens na quote_itemtabela. É necessário parâmetro na forma de matriz $data ['item id of product']['attribute you want to update'].

Assim, você pode chamar updateItems()no carrinho modelo de objeto e passar os dados de acordo com atualizar items.Also se você não está recebendo id item que você pode obtê-lo como $this->cart->getQuote()->getAllItems()e em seguida, chamar getItemId()em cada item.

Vivek Kumar
fonte