Nakliye işlemini Magento'daki mevcut bir siparişte değiştirmeye çalışıyorum. Bu, gönderim adresi nesnesinde yeni gönderim yöntemini ayarladıktan ve teklif toplamlarını yeniden hesapladıktan sonra sipariş alanlarının/özniteliklerin birçoğunu el ile güncellemem gerektiğinden, bu işlem oldukça verimli olsa bile, yönetici arka planından iyi çalışır.Magento: Mevcut sipariş üzerinde gönderim yöntemini değiştir
Sorunum, aynı kodu ön uçta çalıştırırken, hiç çalışmıyor, quoteToTotals, shippingAddress'de yaptığım tüm değişiklikleri geri döndürecek ve nasıl çözüleceğine veya neden çözüleceğine dair hiçbir fikrim yok. arka uçtan çalışır.
$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();
Ve dediğim gibi bu arka uç ince her zaman çalıştı, ama Önyüzden aramadı zaman:
Bu görünüyordu nasıl.
Eski nakliye yönteminin herhangi bir izini denemek ve yok etmek için şanssız bir şekilde, bu gibi varyasyonları denedim. Ben collectTotals çağırıyorum zaman alıntı olursa olsun benim yaptığım, sevkıyat adresi eski/diffrent kopyasını kullanıyor sanki
$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();
Bana bakıyor.
Önceden değil, arka uçta çalışmanın nasıl mümkün olabileceğine dair herhangi bir öneri, ya da belki bir kavrayış?
DÜZENLEME daha ayıklama sonra, gönderim önyüzü ve arka uçta hem değiştirmek olmadığını görebiliriz. Sorun şu ki, ücret sadece bu kodu arka uçtan geçirirken değişecektir. Çok ilginç. Sadece nakliye ücretini güncellemeyi reddediyor.
Daha eksiksiz bir kod (snippet'inizi nereye koydunuz) ve kullanım durumunuz hakkında daha fazla bilgi verebilir misiniz? Sorunuza cevap vermek için biraz bağlama ihtiyacım var. –
Bu tam bir koddur ve gönderim sırasına göre değiştirildiği zaman yönetici ve ön uçtan çalıştırıyorum –
Hangi sınıfı snippet'inize yazdınız ve bu kodu ön uçtan nasıl almayı teklif ediyorsunuz? –