Magento 2: कस्टम मॉड्यूल में क्रमबद्ध रूप से ऑर्डर की स्थिति कैसे अपडेट करें?


11
$orderId = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager->create('\Magento\Sales\Model\Order')->load($orderId); 
$order->setState("processing")->setStatus("processing");
$order->save();

कृपया बताएं कि मैं Magento 2 में ऑर्डर की स्थिति कैसे अपडेट करूं?

जवाबों:


20

आप इसे निम्नलिखित तरीके से कर सकते हैं

नाम स्थान से नीचे घोषित करें

use Magento\Sales\Model\Order;

$orderId = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager->create('\Magento\Sales\Model\Order') ->load($orderId);
$orderState = Order::STATE_PROCESSING;
$order->setState($orderState)->setStatus(Order::STATE_PROCESSING);
$order->save();

उम्मीद है की यह मदद करेगा


उत्तर के लिए धन्यवाद @Dhaval Drcsystems मैं केवल अद्यतन स्थिति स्थिति चाहता हूं
राहुल कटोच

आप इस मॉडल का उल्लेख कर सकते हैं ताकि आपको बेहतर विचार मिले कि Magento \ Sales \ Model \ Order \ Payment यहाँ जाँच करें कि वे कोड के साथ ऑर्डर कैसे संसाधित कर रहे हैं।
धवल सोलंकी

उपरोक्त कोड \ Magento \ Sales \ Model \ Order को त्रुटि नहीं मिली
Jaisa

क्या आप मुझे अपनी फ़ाइल दिखा सकते हैं?
धवल सोलंकी

कस्टम ऑर्डर स्थिति कैसे अपडेट करें? यदि मेरे पास 'sent_to_print' नामक स्थिति है?
जफ़र पिंजर

12

राज्य अद्यतन का आदेश दें

आदेश की स्थिति और स्थिति को प्रो-व्याकरणिक रूप से अपडेट करने के लिए इस प्रारूप में स्थिति और स्थिति को परिभाषित करें। कंस्ट्रक्शन फंक्शन में ऑर्डर ऑब्जेक्ट को इनिशिएट करें और कस्टम फंक्शन में उस ऑर्डर ऑब्जेक्ट को अपडेट करने के लिए इस्तेमाल करें। क्रमबद्ध रूप से मॉडल में राज्य को अपडेट करने के लिए, निर्माण फ़ंक्शन से ऑर्डर ऑब्जेक्ट प्राप्त करें।

public function __construct(
    \Magento\Sales\Model\Order $order
){
    $this->order = $order;
}
public function updateorder(){
    $order = $this->order;
    $order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING, true);
    $order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING);
    $order->addStatusToHistory($order->getStatus(), 'Order processed successfully with reference');
    $order->save();
}

नया आदेश ईमेल

$orderid = '10000000';
$order = $this->_objectManager->get('Magento\Sales\Model\Order')->loadByIncrementId($orderid);
$this->_objectManager->get('Magento\Sales\Model\Order\Email\Sender\OrderSender')->send($order);

उत्तर @calypso के लिए बहुत धन्यवाद, लेकिन मैं केवल ऑर्डर की स्थिति अपडेट करना चाहता हूं
राहुल कटोच

@Rahulocodewire यह भी टिप्पणी में है।
गेलनिविशाल

@ calypso कृपया स्पष्ट करें कि मैंने इस कोड को अपने मॉड्यूल में कहाँ रखा है
राहुल कटोच

मैं नियंत्रक में लंबित स्थिति कैसे दिखाऊं?
राहुल कटोच

5

चूंकि लोड () और सेव () अब अपदस्थ हैं (क्योंकि :)

* @deprecated 100.1.0 because entities must not be responsible for their own loading.
* Service contracts should persist entities. Use resource model "load" or collections to implement
* service contract model loading operations.

आदेश को लोड करने और सहेजने के लिए मैंने OrderRepositoryInterface का उपयोग किया :

use Magento\Sales\Api\OrderRepositoryInterface;

public function __construct(
    OrderRepositoryInterface $orderRepository,
    ...
) {
    $this->orderRepository = $orderRepository;
}

...
$order = $this->orderRepository->get($orderId);
$order->setState(\Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW);
$order->setStatus(\Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW);

try {
    $this->orderRepository->save($order);
} catch (\Exception $e) {
    $this->logger->error($e);
    $this->messageManager->addExceptionMessage($e, $e->getMessage());
}

आशा है ये मदद करेगा


कस्टम ऑर्डर स्थिति कैसे अपडेट करें?
जफ़र पिंजर

3

@Medmek और @ राजकुमार-पटेल जवाब के लिए धन्यवाद। कस्टम आदेश की स्थिति के बारे में @ jafar-pinjar से सवाल के रूप में, setState और setStatus कॉल स्थिति कोड पर ले जा सकते हैं। उदाहरण के लिए, कस्टम स्टेटस कोड "पेड" बनाया गया है। स्थिति / स्थिति को एक आदेश में अद्यतन करने के लिए:

...
use \Magento\Sales\Api\OrderRepositoryInterface;

class nameOfTheClass {
    ...
    protected $_orderRepository;
    ...
    public function __construct(..., OrderRepositoryInterface $orderRepository, ...){

        $this->_orderRepository = $orderRepository;
        ...
    }
    ...
    public function setOrderStatus($orderID, $statusCode){
        try{
            // obtain the order with the order ID
            $order = $this->_orderRepository->get($orderID);
            $order->setState($statusCode)->setStatus($statusCode);
            $this->_orderRepository->save($order);
            return true;
        } catch (\Exception $e){
            // add some logging here
            return false;
        }
    }
    ...
}

आदेश की स्थिति को अद्यतन करने के लिए:

$orderID = 1234; // this is the order ID
$code = 'paid';
$this->setOrderStatus($orderID, $code);

आशा है कि वहाँ किसी को मदद करता है।


1
वृद्धिशील आईडी # 3000001469-1, 1234 की तरह नहीं है। 1234 बल्कि ऑर्डर आईडी है
ग्रीक

@Greck को इंगित करने के लिए धन्यवाद। प्रतिक्रिया अपडेट की गई।
छग

2

Magento 2.2.2 यह केवल निम्नलिखित तरीके से काम करता है!

    $order = $this->order->loadByIncrementId('000000001');
    //$order = $this->order;
    $order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING, true)->save();
    $order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING, true)->save();
    $order->addStatusToHistory($order->getStatus(), 'Order processed successfully with reference again and again');
    //$order->save();

लेकिन मेरे पास एकमात्र समस्या यह है कि यह पूरी तरह से स्थिति को अपडेट नहीं करता है: यहां छवि विवरण दर्ज करें

यह केवल ग्रिड और अपडेट में अद्यतन करता है: यहां छवि विवरण दर्ज करें

इसके अलावा नए चालान, शिपिंग और क्रेडिट मेमो बनाना संभव नहीं है। धन्यवाद

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.