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
Taggé sur :        

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok