Как пользовательский атрибут таблицы "товар заказа на продажу" будет сохранен также в "заказе на продажу"


Я использую плагин для преобразования "quote_item" в "sales_order_item" снизу, чтобы код работал.

public function aroundConvert(
        \Magento\Quote\Model\Quote\Item\ToOrderItem $subject,
        \Closure $proceed,
        \Magento\Quote\Model\Quote\Item\AbstractItem $item,
        $additional = []
    ) {
        /** @var $orderItem \Magento\Sales\Model\Order\Item */
        $orderItem = $proceed($item, $additional);
        $orderItem->setCurrentSellerId($item->getCurrentSellerId());
        return $orderItem;
    }

Но теперь я хочу преобразовать данные своего пользовательского атрибута ("current_seller_id") в пользовательский столбец "sales_order".

Author: Tajveez Rehman, 2019-02-18

1 answers

Вы можете создать наблюдателя для события sales_model_service_quote_submit_before. Это происходит непосредственно перед размещением преобразованного заказа. В своем наблюдателе вы можете получить доступ к предложению и объекту заказа и можете перенести значение пользовательского атрибута из предложения в заказ.

Попробуйте сделать что-то подобное в своем наблюдателе:

public function execute(\Magento\Framework\Event\Observer $observer)
{
    $quote = $observer->getData('order');
    $order = $observer->getData('order');

    //get the current_seller_id from quote 
    $order->setCurrentSellerId($quote->getCurrentSellerId());

    //alternative: get the current_seller_id from the first quote_item where it is set 
    $quoteItems = $quote->getItems();
    foreach ($quoteItems as $quoteItem){
        if ($quoteItem->getCurrentSellerId() != ""){
            $order->setCurrentSellerId($quoteItem->getCurrentSellerId());
            break;
        }
    }
    return $this;
}
 1
Author: HelgeB, 2019-02-18 14:49:43