Problem: How to delete (test) orders from Magento.
Possible solution:
Here is a free but 'quick and dirty' way to do it.
Create a file on the same level as index.php. Let's call it orders.php
<?php $mageFilename = 'app/Mage.php'; require_once $mageFilename; Varien_Profiler::enable(); Mage::setIsDeveloperMode(true); ini_set('display_errors', 1); umask(0); Mage::app('default'); Mage::register('isSecureArea', 1); //until here you gained access to the Magento models. The rest is custom code $orderId = 156;//put here the id of the order you want to delete. THE ONE FROM THE DATABASE NOT THE INCREMENT_ID $order = Mage::getModel('sales/order')->load($orderId); $invoices = $order->getInvoiceCollection(); foreach ($invoices as $invoice){ $invoice->delete(); } $creditnotes = $order->getCreditmemosCollection(); foreach ($creditnotes as $creditnote){ $creditnote->delete(); } $shipments = $order->getShipmentsCollection(); foreach ($shipments as $shipment){ $shipment->delete(); } $order->delete(); ?>Save and call it in your browser (http://my-magento.root/orders.php)
This will delete an order with the id you specify.
If you want to delete more of them just create a for (foreach) loop that will execute this code for each order you want to delete.
For example, if all your test orders are consecutive up to a number you can do this:
//let's say that the orders with ids less than 200 are test orders $collection = Mage::getModel('sales/order')->getCollection()->addAttributeToFilter(array(array('attribute'=>'entity_id', 'lt'=>200))); foreach ($collection as $o){ $orderId = $o->getId(); //here goes the code above starting below $orderId = 156. }
I've used it in several occasions and it worked, but please back-up before using it. I will not be responsible if something goes wrong :)