Как статусы / состояния заказов работают в Magento 1.4.x - PullRequest
5 голосов
/ 15 июля 2011

Насколько я понимаю, Magento имеет различные статусы в глобальных / продаж / заказ / статусах, которые можно изменить, скопировав приложение / код / ​​ядро ​​/ Маг / Продажи / etc / config.xml в локальную область или переопределение его с помощью пользовательского модуля.

Есть также глобальные / продажи / заказ / состояния, определенные в том же файле, и, насколько я понимаю, состояния являются чем-то вроде состояния групп. Только состояния (не статусы) могут быть установлены в статусе заказа в magento, а статусы являются чем-то вроде штаты подразделения. Таким образом, в интерфейсе администратора вы можете изменить статусов размещенного заказа, но вы не можете изменить состояние из выпадающего списка статуса заказа (Вы можете изменить его, выставив счет клиенту или отменив заказ).

Насколько я понимаю, вы можете легко добавить новый статус к вашему Magento, но не можете добавить новое состояние как состояния каким-то образом жестко закодированы с помощью логики обработки остатка или Magento. Я действительно надеюсь, что я не прав.

Пожалуйста, исправьте меня, если я ошибаюсь в какой-то момент, так как это всего лишь мои мысли, и это может быть довольно далеко от реального потока Magento 1.4.x.

Ответы [ 2 ]

7 голосов
/ 15 июля 2011

Я совершенно уверен, что «состояние» - это свободные данные, его можно установить на ЛЮБОЕ значение, используя опцию setData в экземпляре заказа. Поэтому, если вы пишете пользовательский модуль, который может загружать заказ, задайте для данных одно из ваших новых «состояний» и протестируйте все, что вам требуется.

$order = Mage::getModel('sales/order')->load(1);
$order->setData('state','myCustomState');
$order->setData('status','onCustomState');
echo $order->getState()
// Returns myCustomState

В моем случае стоит иметь в виду, что CLOSED / CANCELED являются защищенными состояниями, поэтому попытка использовать $ order-> setState ('my_state') не удастся выполнить в этом порядке, но не должна завершиться неудачей в setData, чтобы вы могли перезаписать закрытый отменен заказ этим методом.

если вы хотите перезаписать модель заказа на другую, вы можете добавить свою собственную логику, например isOnCustomState (), и разрешить обработку заказа любым способом, просто загрузив его по идентификатору.

Чтобы добавить «заказную логику» в ваш заказ, вы можете сделать что-то, скопировав app \ code \ core \ Mage \ Sales \ Model \ Order.php в вашу локальную папку, затем вы можете добавить функции в эту модель,

public function isActive(){ if($this->getState() == 'active'){ return true; } else { return false; }
public function isInActive(){ if($this->getState() == 'deactivated'){ return true; } else { return false; }

public function activate(){
    if(!$this->isActive()){
        $this->setData('state','active');
        $this->setData('status','Active Subscription');

        // some custom code to start a recuring payment

        return $this;
    }
}

public function deactiveate(){
    if(!$this->isInActive()){
        $this->setData('state','deactivated');
        $this->sendOrderUpdateEmail(true,'Your subscription has been deactivated.');

        // some custom code to stop a recuring payment

        return $this;
    }
}

теперь вы можете загрузить заказ и установить активацию или деактивацию для этого заказа, чтобы запустить ваш собственный код,

$order = Mage::getModel('sales/order')->load(1)->activate();

этот код не проверен и является лишь примером того, что вы можете попробовать, пожалуйста, не просто помещайте этот код в вашу модель и ожидайте, что он будет работать идеально. в коде \ core \ Mage \ Sales \ etc \ config.xml в узлах продажи / заказ / состояния добавьте

<activated translate="label">
   <label>Active Subscription</label>
   <statuses>
      <pending default="1"/>
   </statuses>
   <visible_on_front/>
</activated>
1 голос
/ 26 июля 2011

Орден Magento - это конечный автомат .

Поэтому, когда вы определяете статус, он автоматически пытается определить его состояние.Изменять состояние напрямую не рекомендуется.

Когда вы определяете статус, он проверяет различные флаги на отгрузку и счета и, в зависимости от всех, получает правильное состояние.Однако, когда заказ находится в утвержденном состоянии, вы можете легко изменить его статус, независимо от наличия счета или какого-либо флага и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...