Я совершенно уверен, что «состояние» - это свободные данные, его можно установить на ЛЮБОЕ значение, используя опцию 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>