Программно создайте заказ администратора с предварительно заполненной корзиной и клиентом
Я работаю над системой котировок, в которой я хочу, чтобы администратор мог активировать ее, которая затем перенаправит их на страницу создания нового заказа в Adminhtml, sales_order_create
.
Я хочу, чтобы на этой странице уже был назначен клиент и выбраны продукты.
Изменить:
Я хотел бы иметь возможность предварительно заполнить предложение для страницы Adminhtml для создания заказа.
Вот пример создания предложения корзины на интерфейсе:
$cart = Mage::getModel('checkout/cart');
$product = Mage::getModel('catalog/product')->load($productId);
if ($product){
if ($product->isSaleable()){
$cart->addProduct($product, array('qty' => $qty));
}
}
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
$cart->save();
Я хотите это сделать, но в бэкэнде (sales_order_place
)
Я смотрю на код в app/code/core/Mage/Adminhtml/Model/Sales/Order/Create.php
, и похоже, что adminhtml/session_quote
будет моделью, которую я хотел бы использовать.
Таким образом, рабочий процесс будет следующим:
- Настройка объекта цитаты
- Вызов
$this->redirect('*/sales_order_create');
- Затем администратор будет перенаправлен на страницу создания нового заказа с уже выбранным клиентом и корзиной , уже заполненной продуктами
Был бы очень признателен за некоторый вклад.
1 answers
Это очень возможно. Вот очень сокращенная версия того, как выполнить эту задачу.
Объяснение:
Объект adminhtml/session_quote
предоставляет доступ к объекту Mage_Sales_Model_Quote
. Этот объект связан с сеансом, поэтому внесенные в него изменения сохраняются. Сделайте то, что вы хотели бы, с объектом цитаты. Элементы загружаются через $this->getQuote()->getAllVisibleItems();
(в Mage_Adminhtml_Block_Sales_Order_Create_Items
).
В зависимости от того, как вы собираетесь это использовать, вам может потребоваться очистить сеанс:
if (is_object($this->_order)) {
$this->_order->clearInstance();
$this->_order->reset();
}
$this->_order = null;
$this->_orderCreator = null;
$this->_json = null;
$this->_orderData = null;
$this->_orderItems = null;
$this->_customer = null;
$this->_getSession()->unsetSpecificData();
Mage::unregister('rule_data');
Код:
protected $_orderCreator;
protected $_store;
public function indexAction()
{
$this->_initSession();
$quote = $this->_getSession()->getQuote();
// TODO: REPLACE FOLLOWING CONSTANT WITH PRODUCT(S)
$product = Mage::getModel('catalog/product')->load(16);
$quote->addProduct($product, 1);
$quote->save();
$this->_redirect('*/sales_order_create');
}
/**
* Retrieve order create model
*
* @return Mage_Adminhtml_Model_Sales_Order_Create
*/
protected function _getCreateModel()
{
if (!$this->_orderCreator) {
$this->_orderCreator = Mage::getModel('adminhtml/sales_order_create');
}
return $this->_orderCreator;
}
/**
* Retrieve session object
*
* @return Mage_Adminhtml_Model_Session_Quote
*/
protected function _getSession()
{
$session = Mage::getSingleton('adminhtml/session_quote');
return $session;
}
/**
* Initialize order creation session data
*
* @param array $data
* @return Mage_Adminhtml_Sales_Order_CreateController
*/
protected function _initSession()
{
$this->_getSession()->clear();
// TODO: SET CUSTOMER HERE
$this->_getSession()->setCustomerId(1);
$this->_getSession()->setStore($this->_getStore())
->setStoreId($this->_getStore()->getId());
return $this;
}
protected function _getStore()
{
if (!$this->_store) {
// TODO: SET STORE HERE
$this->_store = Mage::getModel('core/store')->load(1);
}
return $this->_store;
}