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

หวังว่านี่จะช่วยได้


ขอบคุณสำหรับการตอบกลับ @Davaval Drcsystems ฉันต้องการอัปเดตสถานะการสั่งซื้อเท่านั้น
Rahul Katoch

คุณสามารถอ้างอิงโมเดลนี้เพื่อให้คุณได้แนวคิดที่ดีขึ้น Magento \ Sales \ Model \ Order \ Payment ตรวจสอบที่นี่ว่าพวกเขากำลังประมวลผลใบสั่งด้วยรหัสอย่างไร
Dhaval Solanki

รหัสด้านบนแสดงข้อผิดพลาด \ Magento \ Sales \ Model \ Order ไม่พบ
Jaisa

คุณช่วยโชว์ไฟล์ของคุณให้ฉันได้ไหม
Dhaval Solanki

จะอัปเดตสถานะคำสั่งซื้อที่กำหนดเองได้อย่างไร หากฉันมีสถานะชื่อ 'sent_to_print'
jafar pinjar

12

อัพเดทสถานะการสั่งซื้อ

หากต้องการอัปเดตสถานะคำสั่งซื้อและสถานะแบบ pro-grammatically เพื่อกำหนดสถานะและสถานะในรูปแบบนี้ เริ่มต้นวัตถุคำสั่งในฟังก์ชั่นการสร้างและใช้วัตถุคำสั่งนั้นในฟังก์ชั่นที่กำหนดเองเพื่อปรับปรุง ในการอัพเดทสถานะคำสั่งโดยทางโปรแกรมในรูปแบบให้รับวัตถุคำสั่งจากฟังก์ชั่นสร้าง

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 แต่ฉันต้องการอัปเดตสถานะการสั่งซื้อเท่านั้น
Rahul Katoch

@Rahulocodewire นอกจากนี้ยังมีในความคิดเห็น
gelanivishal

@ calypso โปรดอธิบายว่าฉันใส่รหัสนี้ไว้ในโมดูลของฉันได้
ที่ไหน

ฉันจะแสดงสถานะที่รอดำเนินการในคอนโทรลเลอร์ได้อย่างไร
ราหุล Katoch

5

เนื่องจากload ()และsave ()เลิกใช้แล้วในขณะนี้ (เพราะ :)

* @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());
}

หวังว่ามันจะช่วย


จะอัพเดทสถานะคำสั่งซื้อที่กำหนดเองได้อย่างไร?
jafar pinjar

3

ขอบคุณ @medmek และ @ prince-patel คำตอบ ตามคำถามจาก @ 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 นั้นเป็นรหัสการสั่งซื้อที่ค่อนข้างดี
4259 Greck

ขอบคุณสำหรับการชี้ให้เห็นว่า @Greck อัปเดตการตอบสนอง
qgor

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

แต่ปัญหาเดียวที่ฉันมีคือมันไม่ได้อัพเดตสถานะอย่างสมบูรณ์: ป้อนคำอธิบายรูปภาพที่นี่

มันอัพเดตเฉพาะในกริดและต่อไปนี้: ป้อนคำอธิบายรูปภาพที่นี่

ไม่สามารถสร้างใบแจ้งหนี้การจัดส่งและใบลดหนี้ใหม่ได้ ขอบคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.