Удалить элемент из стоимости заказа администратора и добавить новый элемент программно
-
13-12-2019 - |
Вопрос
Я работаю над проектом, который нужно настроить создание заказа администратором функция магенто.
Мне нужно удалить элемент, а затем программно добавить другой элемент при создании заказа.
Например, в заказ уже добавлено несколько товаров, теперь если идентификатор товара совпадает с my_product_id
, удалите этот товар из quote
и добавьте новый товар (my_new_product
) заказать.
Это будет не от observer
, так как мне нужно будет добавить кнопка чтобы вызвать это действие и выполнить работу.
Я успешно добавил кнопку и связал ее с моим пользовательским контроллером.
Я просмотрел кучу ссылок, но безуспешно.
Пожалуйста, предложите.
Решение 2
После нескольких дней раскопок я смог получить результат.
Большое спасибо @lloiacono за то, что указал мне правильное направление, однако его/ее ответ был недостаточно хорош.
В моем файле контроллера:
public function removeAndAddAction()
{
$quote = $this->_getSession()->getQuote();
foreach($quote->getAllItems() as $item){
$quote->removeItem($item->getId());
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$quote->addProduct($product, 1);
}
$quote->collectTotals()->save();
$this->_redirect('*/sales_order_create');
}
//get session
protected function _getSession()
{
$session = Mage::getSingleton('adminhtml/session_quote');
return $session;
}
Другие советы
Обновлять
Поскольку вам нужно только настроить существующее создание административного заказа, вы можете подключиться к: sales_order_save_before или adminhtml_sales_order_create_process_data но обязательно добавьте это в <adminhtml>
узел в вашем config.xml
.
Как только в вашем Observer.php вы сможете удалить нужные элементы, я бы вместо этого попытался подключиться к событию цитаты также в <adminhtml>
node, а затем удалите элемент на уровне котировки, если это возможно.
Чтобы добавить товар в предложение:
$quote->addProduct($product, new Varien_Object($eventArgs));
$quote->save();
Чтобы удалить товар из предложения:
$quote->removeItem($item->getItemId())->save();
Затем вы можете заставить magento создать порядок администратора:
$adminSalesOrderCreate = Mage::getSingleton('adminhtml/sales_order_create');
$adminSalesOrderCreate->setQuote($quote)->save();
Здесь есть очень полный ответ: https://magento.stackexchange.com/a/15050/5913