Magento 2: Mise à jour de l'élément de devis


10

J'essaie de mettre à jour l'élément de devis dans magento2. Mais chaque fois que j'enregistre l'article, il crée un nouvel article avec le même identifiant de devis plutôt que de le mettre à jour. Voici mon code

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

Mais chaque fois qu'il enregistre un élément .. un nouvel élément est généré. Je ne sais pas pourquoi. Aussi I couldn't find any class which explicitly load qoute item in magento2. Votre aide sera appréciée.

Dans cette question, /magento/139298/how-to-save-quote-items-in-magento-2ils définissent l'ensemble du produit ... sans essayer de le mettre à jour. Lorsque vous définissez un produit, un nouvel élément de devis sera sûrement généré. Mais pourquoi faire de même en cas de mise à jour.



1
Pas pareil. J'ai édité ma question. @AnkitShah veuillez vérifier.
Kingshuk Deb

Pour Magento 2.2+, reportez-vous à ceci - magento.stackexchange.com/a/182152/4492
Rohan Patil

Réponses:


16

Je ne suis pas sûr de ma solution ci-dessous:

  • Il se peut que vous deviez charger un objet d'élément de devis par identifiant d'élément
  • Comme vous voulez définir le prix, puis en utilisant setPrice (), vous ne pouvez pas définir le prix souhaité pour cet article du panier
$item = $quote->getItemById($item->getId());
if (!$item) {
  continue;
}
$item->setQty((double) $qty);
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$item->getProduct()->setIsSuperMode(true);
$item->save(); 

1
comment mettre à jour des options supplémentaires
sivakumar

salut @Amit, comment mettre à jour le montant de la taxe pour l'article?, pouvons-nous définir un montant de taxe personnalisé pour un article de devis individuel?
jafar pinjar

2

La fonctionnalité que vous demandez est déjà effectuée Magento\Checkout\Controller\Cart\UpdatePost et est exécutée lorsque nous mettons à jour le panier sur la page du panier de magento. Il exécute la updateItems()fonction de Magento\Checkout\Model\Cartmettre à jour les éléments du quote_itemtableau. Il prend des paramètres sous forme de tableau $data ['item id of product']['attribute you want to update'].

Ainsi, vous pouvez appeler un updateItems()objet de modèle de panier et transmettre les données en conséquence pour mettre à jour les articles. De même, si vous n'obtenez pas l'ID de l'article, vous pouvez l'obtenir comme suit $this->cart->getQuote()->getAllItems(), puis appeler getItemId()chaque article.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.