Files
2026-09-15 10:26:34 +08:00

57 lines
2.2 KiB
PHP

<?php
namespace Stemcell\Checkout\Observer;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Event\ObserverInterface;
use Psr\Log\LoggerInterface;
class FieldCopy implements ObserverInterface
{
protected $objectCopyService;
private \Magento\Quote\Model\ResourceModel\Quote\Item\Collection $quoteItemCollection;
public function __construct(
\Magento\Framework\DataObject\Copy $objectCopyService,
\Magento\Quote\Model\ResourceModel\Quote\Item\Collection $quoteItemCollection
) {
$this->objectCopyService = $objectCopyService;
$this->quoteItemCollection = $quoteItemCollection;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
/* @var $order \Magento\Sales\Model\Order */
$order = $observer->getEvent()->getData('order');
/* @var $quote \Magento\Quote\Model\Quote */
$quote = $observer->getEvent()->getData('quote');
$order->setData('customer_discount', $quote->getData('customer_discount'));
$order->setData('salesperson_id', $quote->getData('salesperson_id'));
$order->setDiscountAmount($quote->getData('discount_amount') + $order->getDiscountAmount());
$orderItems = $order->getItems();
$quoteItemsId = $items = [];
foreach ($orderItems as $item) {
$quoteItemsId[] = $item->getQuoteItemId();
}
$quoteItems = $this->quoteItemCollection->addFieldToFilter('item_id', ['in'=>$quoteItemsId])
->setItemObjectClass(\Magento\Quote\Model\Quote\Item::class)
->load();
foreach ($quoteItems as $item) {
/* @var $item \Magento\Quote\Model\Quote\Item */
$items[$item->getItemId()] = $item;
}
$fields = ['lab_id', 'lab_code', 'pi_sap_id', 'cd', 'quote', 'pi', 'company', 'user', 'user_tel',
'user_email', 'note', 'user_type', 'customer_discount_percent', 'salesperson_id', 'item_sort'
];
foreach ($orderItems as $item) {
foreach ($fields as $field) {
$item->setData($field, $items[$item->getQuoteItemId()]->getData($field));
}
}
return $this;
}
}