स्थिति को पूरा करने के लिए एक आदेश को बाध्य करें


11

हम एक कस्टम मॉड्यूल का उपयोग कर रहे हैं जिसे स्थिति की आवश्यकता है: "पूर्ण" (मैं मॉड्यूल को बदल नहीं सकता क्योंकि यह आयनक्यूब का उपयोग करता है)

हम एक भुगतान प्रणाली का भी उपयोग कर रहे हैं जो स्थिति विकल्प की पेशकश नहीं करती है: "पूर्ण"

तो मेरा सवाल यह है: मैं एक स्थिति को पूर्ण स्थिति में जाने के लिए कैसे बाध्य कर सकता हूं?

पुनश्च: यह काम नहीं करता है:

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

इसका समाधान यहां दिया गया है: magento.stackexchange.com/a/244601/15769 यह मेरे लिए काम करता है। <br/> मुझे आशा है कि यह Magento 1.9.2.4 <br/> का उपयोग करने वाले किसी के लिए भी उपयोगी होगा। धन्यवाद @ ctrl-z pls

जवाबों:


12

इसे ऑर्डर स्टेट को 'पूरा' करने के लिए मैन्युअल रूप से सेट करने की अनुमति नहीं है और जब आप setStateऑर्डर के साथ कॉल करते हैं तो आपको यह अपवाद मिलना चाहिए :

ऑर्डर राज्य "पूर्ण" को मैन्युअल रूप से सेट नहीं किया जाना चाहिए।

इसका कारण सरल है: 'पूर्ण' राज्य (और स्थिति, क्योंकि यह 'पूर्ण' की स्थिति वाला एकमात्र राज्य है) का उद्देश्य यह इंगित करना है कि एक आदेश पूरी तरह से भरा गया है। यानी इसे ग्राहक के पास रखा गया, उसका चालान किया गया और उसे भेज दिया गया।

एक बार जब आदेश का चालान और भेज दिया गया है, तो Magento इस राज्य को स्वचालित रूप से आदेश पर सेट कर देगा।

यदि आपकी भुगतान प्रणाली "पूर्ण" स्थिति की अनुमति नहीं देती है, तो मुझे इस पर भरोसा नहीं होगा, विशेष रूप से इसके साथ आयनक्यूब एनकोडेड होने के नाते। यदि, हालांकि, यह इसलिए है क्योंकि यह Magento के बाहर चालान को संभाल रहा है, तो आपको मैन्युअल रूप से ऑर्डर के लिए "ऑफ़लाइन" चालान जनरेट करना होगा, ताकि Magento यह पहचान सके कि इसके लिए भुगतान किया गया है।

आदेशों की समस्या के चारों ओर काम करके अपने आप को छोटा बदलने की कोशिश न करें, जैसे कि सामान्य रूप से पूरा होने वाले राज्य को नहीं मारना चाहिए। इसके बजाय, यह सुनिश्चित करके वास्तविक समस्या को ठीक करें कि आदेशों को मैजेंटो में चालान और भेज दिया गया है ताकि उन्हें सिस्टम द्वारा पूरा चिह्नित किया जा सके।


इस सवाल का जवाब नहीं है। हालांकि यह पते के कारण ऐसा नहीं होना चाहिए, यह सब कुछ के लिए एक पकड़ नहीं है। मैंने खुद एक ऐसी स्थिति हासिल कर ली है जहां ऑर्डर प्रोसेसिंग के लिए ज्यादातर मैगनेटो को छोड़ दिया जाता है और ऑर्डर को पूरी स्थिति पर सेट करने की आवश्यकता होती है।
नेवेर

1
@Navarr वास्तव में यह करता है ... आदेश के लिए मैन्युअल रूप से ऑफ़लाइन चालान जनरेट करने के बारे में भाग देखें। ऐसा करें, और भुगतान प्रोसेसर का उपयोग किए बिना आदेश पूरा हो जाएगा।
डेविडलगर

3
या, आप जानते हैं: stackoverflow.com/a/8906785/43790
Navarr

2
@Navarr ज़रूर, कोई सीधे SQL के माध्यम से db को भी लिख सकता है, लेकिन वह इसे मॉडल कार्यान्वयन के प्रति संरक्षित राज्य होने की अवहेलना नहीं करता है। सबसे अच्छे उत्तर अंतर्निहित मामले को संबोधित किए बिना "चलो एक्स को पूरा करने" के लिए आँख बंद करके जवाब नहीं देते हैं। किसी भी तरह, यह आखिरी मैं इस बारे में यहाँ टिप्पणी कर रहा हूँ।
davidalger

Engin चेक लाइट, कार के डैशबोर्ड पर जलाई गई। मुझे नहीं पता था कि समस्या को कैसे ठीक किया जाए। मैंने तब फ्यूज को हटा दिया जो उस छोटी रोशनी को चालू करता है। मुझे लगता है कि मेरा इंजन अब ठीक काम कर रहा है।
मोहम्मद जोरैद

0

राज्य बदलने के लिए:

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

स्थिति बदलने के लिए:

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

और तब $order->save();

आपको यह कहते हुए setDataकि आप मैन्युअल रूप से कॉल नहीं कर सकते हैं, से बचने के लिए आपको राज्य का उपयोग करके बदलना होगाsetState


-3

इसे इस्तेमाल करे।

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

यह मेरे प्रोजेक्ट पर मेरे लिए काम करता है ।।


अहा, तो आपने आदेश को 'पुनः आरंभ' कर दिया है और फिर इसे सेट कर दिया है: नया-> लंबित-> पूरा?
बॉब वैन लुइज़्ट

नहीं, मैंने ऑर्डर लोड किया और फिर ऑर्डर को नई स्थिति और राज्य सौंपा।
कुलदीप

यह राज्य / स्थिति नई / लंबित है, जिसे कोई समस्या नहीं है। वास्तविक समस्या यह है कि इसे मैन्युअल रूप से 'पूरा' करने के लिए कैसे सेट किया जाए।
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);

मैं प्रत्यक्ष SQL निष्पादन के उपयोग को हतोत्साहित करूँगा और Magento ORM कार्यान्वयन पर निर्भर रहूँगा।
7ochem
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.