Magento2: Измените статус заказа на обработку, если был применен какой-либо конкретный код купона


Как я могу изменить статус заказа на "Обработка" автоматически, если какой-либо конкретный код купона был применен во время оформления заказа в Magento 2?

Author: Prince Patel, 2017-11-10

2 answers

Наконец-то я смог получить требуемое решение

  1. Я добавил раскрывающийся список статус заказа в форме добавить/изменить код купона в области администрирования, где администратор может выбрать статус заказа, который будет установлен в качестве статуса заказа, если этот код купона был применен к заказу.

  2. Добавьте поле "order_status" в таблицу "salesrule".

  3. Затем событие "sales_order_place_after", проверьте код купона, примененный к заказу, и статус выбранного заказа, измените статус заказа по отношению к нему.

Код:

Event.xml

 <?xml version="1.0"?>
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">

          <event name="sales_order_place_after">
             <observer name="change_order_status" instance="MPE\Coupon\Observer\ChangeOrderStatus"/>
          </event>
 </config>

ChangeOrderStatus.php

namespace MPE\Coupon\Observer;
use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;

class ChangeOrderStatus implements ObserverInterface{

    protected $_coupon;
    protected $_rule;

    public function __construct(
        \Magento\SalesRule\Model\Coupon $coupon,
        \Magento\SalesRule\Model\Rule $rule
    ){        
        $this->_coupon = $coupon;
        $this->_rule = $rule;
    }

    public function execute(EventObserver $observer){

        $order= $observer->getData('order');

        // Change Order status as per coupon code rule
        $coupon = $this->_coupon->loadByCode($order->getCouponCode());
        $salesRule = $this->_rule->load($coupon->getRuleId());        

        if($salesRule->getOrderStatus()){
            $order->setState($salesRule->getOrderStatus())->setStatus($salesRule->getOrderStatus());
            $order->addStatusToHistory($order->getStatus(), __('Order status has been changed with respect to coupon code rule.'));
            $order->save();
        }



    }
}

ПРИМЕЧАНИЕ: $SalesRule->getorderstatus() - это настраиваемое поле, добавленное в таблицу salesrule.

Надеюсь, это кому-нибудь поможет. Также вы можете использовать этот код и для события sales_order_place_after.

 1
Author: Suman Pradhan, 2017-11-13 11:23:11

Для получения статуса заказа мы должны подтвердить заказ, но если вы размещаете заказ, вы не можете применить код купона

Или, если вам нужно, вы можете проверить состояние вашего заказа после размещения заказа у наблюдателя

 0
Author: Mohamed El Mrabet, 2017-11-10 13:30:09