Sto provando a cambiare la spedizione su un ordine esistente in Magento. Funziona bene dal back-end dell'amministratore, anche se è piuttosto il processo poiché devo aggiornare manualmente molti campi/attributi dell'ordine dopo aver impostato il nuovo metodo di spedizione sull'oggetto indirizzo di spedizione e aver ricalcolato i totali delle quote.Magento: modifica il metodo di spedizione sull'ordine esistente
Il mio problema è quando si esegue lo stesso codice sul frontend, non funziona affatto, la quota collectTotals ripristinerà tutte le modifiche apportate nel shippingAddress, e non ho idea di come risolverlo o perché Funziona dal back-end.
Ecco come sembrava:
$shippingAddress = $quote->getShippingAddress();
$shippingAddress->setShippingMethod('dynamicshipping_'.$shippingCode);
$shippingAddress->setCollectShippingRates(true);
$shippingAddress->collectShippingRates();
$quote->setUseCustomerBalance(1)->setTotalsCollectedFlag(false)->collectTotals()->save();
$order->setShippingHiddenTaxAmount($shippingAddress->getShippingHiddenTaxAmount());
$order->setBaseShippingHiddenTaxAmount($shippingAddress->getBaseShippingHiddenTaxAmount());
$order->setBaseShippingHiddenTaxAmnt($shippingAddress->getBaseShippingHiddenTaxAmnt());
$order->setShippingInclTax($shippingAddress->getShippingInclTax());
$order->setBaseShippingInclTax($shippingAddress->getBaseShippingInclTax());
$order->setShippingTaxAmount($shippingAddress->getShippingTaxAmount());
$order->setBaseShippingTaxAmount($shippingAddress->getBaseShippingTaxAmount());
$order->setShippingAmount($shippingAddress->getShippingAmount());
$order->setBaseShippingAmount($shippingAddress->getBaseShippingAmount());
$order->setShippingDiscountAmount($shippingAddress->getShippingDiscountAmount());
$order->setBaseShippingDiscountAmount($shippingAddress->getBaseShippingDiscountAmount());
$order->setGrandTotal($shippingAddress->getGrandTotal());
$order->setBaseGrandTotal($shippingAddress->getBaseGrandTotal());
$order->setShippingMethod('dynamicshipping_'.$shippingCode);
$order->setShippingDescription($shippingDescription);
$order->setServicePoint($servicePoint);
$order->save();
E come ho detto, che ha funzionato benissimo ogni volta dal backend, ma non quando chiamato dal frontend.
Ho provato delle varianti, come questa per cercare di sradicare qualsiasi traccia del vecchio metodo di spedizione, senza fortuna.
$quote->getShippingAddress()->removeAllShippingRates()
->setShippingMethod('dynamicshipping_'.$shippingCode)
->setShippingDescription($shippingDescription)
//->setBaseShippingAmount(0)
//->setBaseShippingTaxAmount(0)
//->setShippingTaxAmount(0)
//->setShippingInclTax(0)
->setCollectShippingRates(true)
//->unsetData('cached_items_all')
//->unsetData('cached_items_nominal')
//->unsetData('cached_items_nonnominal')
->collectShippingRates()
//->collectTotals()
->save();
Sembra a me come se la citazione utilizza un/copia precedente differente del indirizzo di trasporto quando sto chiamando collectTotals, non importa quello che faccio.
Qualche suggerimento o forse idea di come sia possibile che funzioni nel back-end ma non nel frontend?
EDIT
Dopo più di debug, vedo che la spedizione non cambia sia in frontend e backend. Il problema è che la commissione cambierà solo quando si esegue questo codice attraverso il back-end. Molto strano. Si rifiuta semplicemente di aggiornare la tassa di spedizione.
Potresti fornire un codice più completo (dove hai inserito lo snippet) e maggiori informazioni sul tuo caso d'uso? Avrei bisogno di un contesto, per rispondere alla tua domanda. –
È il codice completo e lo eseguo da admin e frontend ogni volta che la spedizione viene modificata su un ordine disposto –
Intendevo in quale classe hai inserito il tuo snippet e come proponi di utilizzare questo codice dal front-end? –