In Magento può essere utile estrarre l’elenco degli stati di avanzamento dell’ordine.
Con il codice seguente estraiamo etichette e valori
$collection = Mage::getModel('sales/order_status')
->getResourceCollection()
->getData();
Con questo foreach estraiamo il contenuto dell’array
foreach ($collection as $co):
echo $co['status']; //valore
echo $co['label']; //etichetta
endforeach;
Citando da https://www.riccardotempesta.com/modificare-lo-stato-ordine-di-magento/ riportiamo la differenza esistente in Magento tra “state” e “status”.
Lo “state” è lo stato “interno” di Magento, ovvero lo stato di avanzamento dell’ordine:
- new
- pending
- pending_payment
- processing
- complete
- closed
- canceled
Uno “state” ha uno o più “status” associati ed almeno uno “status” di default. Gli “status” possono essere aggiunti, modificati o rimossi dall’utente e sono da intendere come delle “specializzazioni” di uno “state”.
Possiamo ad esempio ipotizzare che lo state “processing” debba essere diviso in vari passaggi:
- Ordine passato al magazzino
- Merce verificata
- Pronta per la spedizione
I vari passaggi sono appunto gli “status”.
E’ bene conoscere questo meccanismo perché la modifica dello “state” ha ripercussioni sullo “status”, è ovvio che nell’esempio fatto non potremo avere uno “state” impostato a “new” e uno “status” impostato a “Merce verificata”.
A livello di codice è possibile alterare lo stato ordine utilizzando la chiamata “setState” della classe “Mage_Sales_Model_Order”:
$order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
$order
->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)
->save();
Le costanti degli “state” sono:
- new: Mage_Sales_Model_Order::STATE_NEW
- pending: Mage_Sales_Model_Order::STATE_PENDING
- pending_payment: Mage_Sales_Model_Order::STATE_PENDING_PAYMENT
- processing: Mage_Sales_Model_Order::STATE_PROCESSING
- complete: Mage_Sales_Model_Order::STATE_COMPLETE
- closed: Mage_Sales_Model_Order::STATE_CLOSED
- canceled: Mage_Sales_Model_Order::STATE_CANCELED