Magento 2: Actualización de elemento de presupuesto

10

Estoy tratando de actualizar el elemento de presupuesto en magento2. Pero cada vez que guardo el elemento, crea un nuevo elemento con el mismo ID de presupuesto en lugar de actualizarlo. Aqui esta mi codigo

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

Pero cada vez que se guarda un elemento ... se genera un nuevo elemento. No sé por qué También I couldn't find any class which explicitly load qoute item in magento2. La ayuda será apreciada.

En esta pregunta /magento/139298/how-to-save-quote-items-in-magento-2, están configurando todo el producto ... no tratando de actualizarlo. Cuando configura un producto, seguramente generará un nuevo artículo de presupuesto. Pero por qué está haciendo lo mismo en caso de actualización.

Kingshuk Deb
fuente
2
Posible duplicado de Cómo guardar elementos de cotización en magento 2
Ankit Shah
1
No es lo mismo. He editado mi pregunta. @AnkitShah por favor verifique.
Kingshuk Deb
Para el Magento 2.2+, consulte esto: magento.stackexchange.com/a/182152/4492
Rohan Patil

Respuestas:

16

No estoy seguro de mi solución a continuación:

  • Puede ser que necesite cargar el objeto del artículo de presupuesto por ID de artículo
  • Como desea establecer el precio , utilizando setPrice () no puede establecer el precio deseado para ese artículo del carrito
$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
fuente
1
cómo actualizar opciones adicionales
sivakumar
hola @Amit, ¿Cómo actualizar taxAmount para el artículo ?, ¿podemos establecer un monto de impuestos personalizado para un artículo de cotización individual?
jafar pinjar
2

La funcionalidad por la que está preguntando ya está hecha y Magento\Checkout\Controller\Cart\UpdatePost se ejecuta cuando actualizamos el carrito en la página del carrito de magento. Ejecuta la updateItems()función de Magento\Checkout\Model\Cartactualizar elementos en la quote_itemtabla. Toma el parámetro en forma de matriz $data ['item id of product']['attribute you want to update'].

Por lo tanto, puede llamar updateItems()al objeto del modelo de carro y pasar los datos en consecuencia para actualizar los artículos. Además, si no obtiene la identificación del artículo, puede obtenerlo $this->cart->getQuote()->getAllItems()y luego llamar getItemId()a cada artículo.

Vivek Kumar
fuente