Удалить элемент из стоимости заказа администратора и добавить новый элемент программно

magento.stackexchange https://magento.stackexchange.com//questions/70109

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top