_order = new Varien_Object;
#echo "
Order | Payment | Shipping | Refund | Return | Admin Status | Frontend Status | Actions |
";
echo "Order | Payment | Refund | Shipping | Actions |
";
foreach (array('new', 'onhold', 'processing', 'complete', 'closed', 'cancelled', 'void') as $orderStatus) {
$this->getOrder()->setOrderStatus($orderStatus);
foreach (array('not_authorized', 'pending', 'authorized', 'partial', 'paid') as $paymentStatus) {
$this->getOrder()->setPaymentStatus($paymentStatus);
foreach (array('pending', 'partial', 'shipped') as $shippingStatus) {
$this->getOrder()->setShippingStatus($shippingStatus);
foreach (array('not_refunded', 'partial', 'refunded') as $refundStatus) {
$this->getOrder()->setRefundStatus($refundStatus);
// foreach (array('not_returned', 'partial', 'returned') as $returnStatus) {
// $this->getOrder()->setReturnStatus($returnStatus);
if (!$this->validateOrderStatus()) {
continue;
}
$adminStatus = $this->getAdminStatus();
$frontendStatus = $this->getFrontendStatus();
$actions = $this->getOrderActions();
$actions = join(', ', array_keys($actions));
#echo "$orderStatus | $paymentStatus | $shippingStatus | $refundStatus | $returnStatus | $adminStatus | $frontendStatus | $actions |
";
echo "$orderStatus | $paymentStatus | $refundStatus | $shippingStatus | $actions |
";
// }
}
}
}
}
echo "
";
}
public function getOrder()
{
return $this->_order;
}
/**
* Check if type and status matches for the order
*
* @param string $type order, payment, shipment
* @param string $status comma separated
* - order
* - new
* - onhold
* - processing
* - complete
* - closed
* - cancelled
* - void
*
* - payment
* - not_authorized
* - pending
* - authorized
* - partial
* - paid
*
* - shipping
* - pending
* - partial
* - shipped
*
* - refund
* - not_refunded
* - pending
* - partial
* - refunded
*
* - return
* - not_returned
* - partial
* - returned
*/
function matchOrderStatus($type, $status) {
$statuses = explode(',', $status);
$value = $this->getOrder()->getData($type.'_status');
foreach ($statuses as $status) {
if ($value==$status) {
return true;
}
}
return false;
}
function validateOrderStatus()
{
if ($this->matchOrderStatus('order', 'new')) {
if (!$this->matchOrderStatus('shipping', 'pending')
// || !$this->matchOrderStatus('return', 'not_returned')
|| !$this->matchOrderStatus('refund', 'not_refunded')
) {
return false;
}
if ($this->matchOrderStatus('payment', 'partial')) {
return false;
}
}
if ($this->matchOrderStatus('order', 'onhold')) {
if (!$this->matchOrderStatus('shipping', 'pending')
|| !$this->matchOrderStatus('payment', 'pending')
|| !$this->matchOrderStatus('refund', 'not_refunded')
// || !$this->matchOrderStatus('return', 'not_returned')
) {
return false;
}
}
if ($this->matchOrderStatus('order', 'cancelled')) {
if (!$this->matchOrderStatus('shipping', 'pending')
|| !$this->matchOrderStatus('payment', 'pending,not_authorized')
|| !$this->matchOrderStatus('refund', 'not_refunded')
// || !$this->matchOrderStatus('return', 'not_returned')
) {
return false;
}
}
if ($this->matchOrderStatus('order', 'complete,closed')) {
if (!$this->matchOrderStatus('payment', 'paid')
|| !$this->matchOrderStatus('shipping', 'shipped')
) {
return false;
}
}
if ($this->matchOrderStatus('order', 'void')) {
if ($this->matchOrderStatus('payment', 'pending,not_authorized')) {
return false;
}
if (!$this->matchOrderStatus('refund', 'not_refunded')) {
return false;
}
}
if ($this->matchOrderStatus('payment', 'pending,not_authorized')
&& !$this->matchOrderStatus('refund', 'not_refunded')
) {
return false;
}
if ($this->matchOrderStatus('payment', 'authorized')
&& !$this->matchOrderStatus('refund', 'not_refunded')
) {
return false;
}
if ($this->matchOrderStatus('payment', 'partial')
&& $this->matchOrderStatus('refund', 'refunded')
) {
return false;
}
// if ($this->matchOrderStatus('shipping', 'pending')
// && !$this->matchOrderStatus('return', 'not_returned')
// ) {
// return false;
// }
//
// if ($this->matchOrderStatus('shipping', 'partial') && $this->matchOrderStatus('return', 'returned')) {
// return false;
// }
return true;
}
/**
* Available actions for admin user
*
* @return array available actions array
* - cancel
* - authorize
* - capture
* - invoice
* - creditmemo
* - hold
* - unhold
* - ship
* - edit
* - comment
* - status
* - reorder
*/
function getOrderActions()
{
$actions = array();
$actions['comment'] = 1;
if ($this->matchOrderStatus('order', 'cancelled')) {
$actions['reorder'] = 1;
return $actions;
}
if ($this->matchOrderStatus('order', 'closed')) {
$actions['reorder'] = 1;
if (!$this->matchOrderStatus('refund', 'refunded')) {
$actions['creditmemo'] = 1;
}
return $actions;
}
if ($this->matchOrderStatus('order', 'onhold')) {
$actions['unhold'] = 1;
return $actions;
}
$actions['edit'] = 1;
$actions['hold'] = 1;
if (!$this->matchOrderStatus('order', 'void')) {
$actions['cancel'] = 1;
}
if ($this->matchOrderStatus('payment', 'not_authorized')) {
$actions['authorize'] = 1;
$actions['capture'] = 1;
}
if (!$this->matchOrderStatus('payment', 'not_authorized,pending,paid')) {
$actions['invoice'] = 1;
}
if (!$this->matchOrderStatus('shipping', 'shipped')) {
$actions['ship'] = 1;
}
if ($this->matchOrderStatus('payment', 'partial,paid') && !$this->matchOrderStatus('refund', 'refunded')) {
$actions['creditmemo'] = 1;
}
if ($this->matchOrderStatus('order', 'void')) {
unset($actions['ship'], $actions['invoice'], $actions['ship'], $actions['hold']);
}
return $actions;
}
/**
* Order status for admin
*
* @return array
* - new
* - pending
* - processing
* - complete
* - cancelled
*/
function getAdminStatus()
{
return $this->getOrder()->getOrderStatus();
}
/**
* Order status for customers
*
* @return array
* - new
* - pending
* - processing
* - complete
* - cancelled
*/
function getFrontendStatus()
{
return $this->getOrder()->getOrderStatus();
}
}
$test = new Test;
$test->runTest();