Créez un observer sur le sales_order_save_before dans le config.xml de votre module :
<events> <sales_order_save_before> <observers> <mypackage_mymodule_cancel_add_history> <class>mymodule/observer</class> <method>cancelAddHistory</method> </mypackage_mymodule_cancel_add_history> </observers> </sales_order_save_before> </events>
Créez votre observer avec ce code :
<?php class Mypackage_Mymodule_Model_Observer { public function cancelAddHistory(Varien_Event_Observer $observer) { $order = $observer->getEvent()->getOrder(); // My logic here, I take only orders with entityId if(!$order->getId()){ return $this; } $status = $order->getStatus(); $origStatus = $order->getOrigData('status'); // If the new status is the same as the old if($status == $origStatus){ // Fetch histories $histories = $order->getStatusHistoryCollection(); foreach($histories AS $itemId => $history){ // If the item has no id, it's a new (which is not saved), so we remove it if(!$history->getId()){ $histories->removeItemByKey($itemId); } } } return $this; } }
Ici je décide de ne pas avoir de statuts en doublon.
Si il n’y a pas de addStatusHistory, ils auront tous un ID, donc je ne supprimerai rien.
En revanche s’il y’en a eu un, il sera supprimé et pas pris en compte durant le save.
La partie importante est donc ici :
$histories = $order->getStatusHistoryCollection(); foreach($histories AS $itemId => $history){ // If the item has no id, it's a new (which is not saved), so we remove it if(!$history->getId()){ $histories->removeItemByKey($itemId); } }
Annuler un addStatusHistory avec un Observer