_order = new Varien_Object; #echo ""; echo "
OrderPaymentShippingRefundReturnAdmin StatusFrontend StatusActions
"; 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 ""; echo ""; // } } } } } echo "
OrderPaymentRefundShippingActions
$orderStatus$paymentStatus$shippingStatus$refundStatus$returnStatus$adminStatus$frontendStatus$actions
$orderStatus$paymentStatus$refundStatus$shippingStatus$actions
"; } 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();