Программно создайте заказ администратора с предварительно заполненной корзиной и клиентом


Я работаю над системой котировок, в которой я хочу, чтобы администратор мог активировать ее, которая затем перенаправит их на страницу создания нового заказа в 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 будет моделью, которую я хотел бы использовать.

Таким образом, рабочий процесс будет следующим:

  1. Настройка объекта цитаты
  2. Вызов $this->redirect('*/sales_order_create');
  3. Затем администратор будет перенаправлен на страницу создания нового заказа с уже выбранным клиентом и корзиной , уже заполненной продуктами

Был бы очень признателен за некоторый вклад.

Author: Moose, 2014-02-07

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;
}
 3
Author: Joseph at SwiftOtter, 2014-02-14 13:43:42