Bir siparişi durum tamamlanmaya zorlama


11

Durum gerektiren özel bir modül kullanıyoruz: "complete" (ioncube kullandığından modülü değiştiremiyorum)

Ayrıca, durum seçeneği sunmayan bir ödeme sistemi kullanıyoruz: "tamamlandı"

Benim sorum şu: Bir siparişi statüye tamamlanmaya nasıl zorlayabilirim?

Not: Bu işe yaramaz:

$order = Mage::getSingleton('sales/order');
$order->loadByIncrementId('12345');
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true);
$order->save();

Burada sağlanan çözüm: magento.stackexchange.com/a/244601/15769 Benim için çalışıyor. <br/> Umarım Magento kullanan herkes için yararlı olacaktır 1.9.2.4 <br/> Teşekkürler @ ctrl-z pls

Yanıtlar:


12

Sipariş durumunu manuel olarak 'tamamlandı' olarak ayarlamanıza izin verilmiyor ve siparişi 'tamamlandı' durumuyla çağırdığınızda bu istisnayı almanız gerekir setState:

Sipariş Durumu "tamamlandı" manuel olarak ayarlanmamalıdır.

Bunun nedeni basittir: 'tam' durumu (ve durumu, 'tam' statüsüne sahip tek durum olduğu için), bir siparişin tamamen doldurulduğunu göstermeyi amaçlamaktadır. Yani müşteriye gönderilir, faturalanır ve gönderilir.

Sipariş faturalandırılıp gönderildikten sonra, Magento bu durumu siparişe otomatik olarak koyacaktır.

Ödeme sisteminiz "tam" durumuna "izin vermezse, özellikle ionCube ile kodlanmış olduğundan, buna güvenmem. Bununla birlikte, bunun nedeni faturayı Magento dışında işlemesi durumunda, sipariş için manuel olarak bir "Çevrimdışı" fatura oluşturmanız gerekir, böylece Magento bunun ödenmiş olduğunu fark eder.

Normalde olması gerektiği gibi tamamlanmış duruma isabet etmeyen emirlerin problemi üzerinde çalışarak kendinizi değiştirmeye çalışmayın. Bunun yerine, siparişlerin hem Magento'da hem faturalandığından hem de gönderildiğinden emin olarak gerçek sorunu giderin, böylece sistem tarafından tamamlandı olarak işaretlenirler.


Bu soruya cevap vermiyor. Bunun yapılmaması gereken nedenleri ele alsa da, bu her şey için bir yakalama değil. Kendim, sipariş işleme için Magento'nun çoğunun atlandığı ve siparişin tam duruma ayarlanması gereken bir durum elde ettim.
Navarr

1
@Navarr aslında ... sipariş için manuel olarak bir çevrimdışı fatura oluşturma hakkındaki bölüme bakın. Bunu yaptığınızda sipariş, kullanılan ödeme işlemcisinden bağımsız olarak tamamlanacak.
davidalger


2
@Navarr Tabii, SQL yoluyla doğrudan db'ye de yazabiliriz, ancak bu, model uygulaması başına korumalı bir durum olduğunu reddetmez. En iyi cevaplar, altta yatan konuyu ele almadan "x'i başaralım" şeklinde körü körüne cevap vermez. Her neyse, bu konuda burada yorum yapacağım son.
davidalger

Engin Check arabanın kontrol panelinde ışık yanıyor. Sorunu nasıl çözeceğimizi bilmiyordum. Sonra o küçük ışığı açan sigortayı çıkardım. Sanırım motorum şimdi iyi çalışıyor.
Mohammed Joraid

0

Durumu değiştirmek için:

$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);

Durumu değiştirmek için:

$order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);

Ve sonra $order->save();

setDataManuel olarak arama yapamayacağınızı bildiren istisnalardan kaçınmak için durumunu kullanarak değiştirmeniz gerekirsetState


-3

Bunu dene.

$order = Mage::getModel('sales/order')->load(Mage::getSingleton('checkout/session')->getLastOrderId());
$order_id=$order->getData('entity_id');
$order2 = Mage::getModel('sales/order')->load($order_id); 
$order2->setData('state', "new");
    $order2->setStatus("pending");
$order2->save();

Projemde benim için çalışıyor ..


Aha, bu yüzden siparişi 'yeniden başlattınız' ve ardından şu şekilde ayarladınız: new-> bekleyen-> tamamlandı mı?
Bob van Luijt

hayır Siparişi yükledim ve ardından siparişe yeni durum ve durumu atadım.
Kuldeep

Bu durum / durum yeni / beklemede, sorun değil. Asıl sorun, manuel olarak 'tamamlanacak' şekilde nasıl ayarlanacağıdır.
7ochem

-3
$oResource = Mage::getSingleton('core/resource'); 

$oConnection = $oResource->getConnection('core_write'); 

$sSql = "UPDATE " . ' ' . $oResource->getTableName('sales_flat_order') .
        " SET status = '" . Mage_Sales_Model_Order::STATE_COMPLETE . "', state = '" . Mage_Sales_Model_Order::STATE_COMPLETE . "' WHERE
entity_id = " . $oOrder->getId();

$oConnection->query($sSql);

Doğrudan SQL yürütme kullanımını engeller ve Magento ORM uygulamasına güvenirim.
7ochem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.