Les commandes Magento : états et statuts

Les commandes sous Magento possèdent différents états afin de suivre leur processus (facturée, expédiée, remboursée...) au sein du Workflow de commandes. Ces états sont invisibles dans le back office de Magento. En effet ce que l'on peut voir sont les statuts des commandes et non pas leurs états.

Chaque état peut avoir un ou plusieurs statuts alors qu'un statut ne peut avoir qu'un seul état. Par défaut, le statut porte généralement le même nom que l'état, ce qui peut porter à confusion. Voici la liste des états et statuts disponibles par défaut.

Code état Nom état Code statut Nom statut
new New pending Pending
pending_payment Pending Payment pending_paypal
pending_amazon_asp
Pending PayPal
Pending Amazon Simple Pay
processing Processing processing Processing
complete Complete complete Complete
closed Closed closed Closed
canceled Canceled canceled Canceled
holded On Hold holded On Hold

Pour ajouter un nouveau statut à un état, il suffit de le déclarer dans un fichier config.xml

<config>
  ...
  <global>
    <sales>
      <order>
        <!-- Statuses declaration -->
        <statuses>
          <my_processing_status translate="label"><label>My Processing Status</label></my_status>
        </statuses>
        <!-- Linking Status to a state -->
        <states>
          <processing>
            <statuses>
              <my_processing_status/>
            </statuses>
          </processing>
        </states>
      </order>
    </sales>  
  </global>
</config>

Lorsque l'on modifie le statut d'une commande dans le code, on doit être sûr que l'état actuel accepte ce statut. Pour celà, on peut modifier en même temps l'état et le statut avec la méthode setState

$order = Mage::getModel('sales/order')->loadByIncrementId('100000001');
$state = 'processing';
$status = 'my_processing_status';
$comment = 'Changing state to Processing and status to My Processing Status';
$isCustomerNotified = false;
$order->setState($state, $status, $comment, $isCustomerNotified);
$order->save();

$statut peut aussi prendre la valeur false, afin de modifier uniquement l'état de la commande, ou true afin de modifier le statut en prenant le premier statut associé à l'état.

Vous pouvez donc désormais ajuster votre processus de gestion des commandes dans Magento.

Edit du 03/12/09 : Un post intéressant concernant le workflow des statuts de commandes a été publié sur Le blog des équipes... : Workflow des statuts de commande sur Magento.