public function sales_order_place_after($event) { $order = $event->getOrder(); $doTheStuff = true; //in_array($order->getPayment()->getMethodInstance()->getCode(), Mage::getStoreConfig('evoc/order/auto_invoicing_payment_methods')); // Mage::getModel('payment/config')->getAllMethods(); if ($doTheStuff) { if ($order->canInvoice()) { $invoice = $order->prepareInvoice(); $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE); $invoice->register(); $invoice->getOrder()->setCustomerNoteNotify(false); $invoice->getOrder()->setIsInProcess(true); $order->addStatusHistoryComment('Automatically invoiced by EVO Connector', false); Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder())->save(); $invoice->sendEmail(true, ''); $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true); $order->save(); } else { Vikont_EVOConnector_Model_Log::logWarning(sprintf('Order #%s cannot be invoiced', $order->getIncrementId())); } } return $this; }
public function acknowledgerequestAction() { $this->_authenticate(); $requestBody = file_get_contents('php://input'); /** $requestBody = <<<XML <acknowledgeRequest> <id>100000167</id> <responseType>WEB_ORDER</responseType> <date>2015-07-03 13:56:17.669</date> <responseIssues> <responseIssue> <code>1301</code> <message>Invalid payment type for payment CCSAVE</message> <responseStatus>FAILURE</responseStatus> </responseIssue> </responseIssues> </acknowledgeRequest> XML; /**/ /** $requestBody = <<<XML <acknowledgeRequest> <id>1111111111</id> <responseType>WEB_ORDER</responseType> <date>2014-11-12 10:01:00.662</date> <responseIssues> <responseIssue> <code>1010</code> <message>A web order with id 1111111111 is already imported.</message> <responseStatus>FAILURE</responseStatus> </responseIssue> <responseIssue> <code>222</code> <message>some another message</message> <responseStatus>FAILURE</responseStatus> </responseIssue> </responseIssues> </acknowledgeRequest> XML; /**/ $requestXML = Vikont_EVOConnector_Helper_Data::parseXML($requestBody); if (!$requestXML) { Mage::helper('evoc/order')->sendAcknowledgeResponse('FAILURE'); return; } if ('acknowledgeRequest' !== $requestXML->getName()) { Vikont_EVOConnector_Model_Log::log('unknown request type, should be "acknowledgeRequest", got "$requestXML->getName()" instead'); Mage::helper('evoc/order')->sendAcknowledgeResponse('FAILURE'); return; } $orderId = (string) $requestXML->id; $responseType = (string) $requestXML->responseType; $responseDate = (string) $requestXML->date; switch ($responseType) { case 'WEB_ORDER': $responseIssues = (array) $requestXML->responseIssues; if (isset($responseIssues['responseIssue']) && count($responseIssues['responseIssue'])) { $reportIssues = array(); foreach ($requestXML->responseIssues->responseIssue as $issue) { $issueCode = (int) $issue->code; if (1010 == $issueCode) { $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); // if an order has been dealt with by EVOC, any non-zero value should be at its evo_status field if ((int) $order->getData(Vikont_EVOConnector_Helper_Data::ORDER_EVO_STATUS_FIELD)) { $errorMessage = sprintf('WARNING: unexpected acknowledgeRequest WEB_ORDER issue for order %s at %s:, code: %d, message: %s', $orderId, $responseDate, $issueCode, (string) $issue->message); Vikont_EVOConnector_Model_Log::log($errorMessage); continue; } else { // if the order hasn't been marked as accepted, then let's do that! $order->setData(Vikont_EVOConnector_Helper_Data::ORDER_EVO_STATUS_FIELD, Vikont_EVOConnector_Helper_Data::ORDER_EVO_STATUS_APPROVED)->save(); Vikont_EVOConnector_Model_Log::log('Marked order #%s as already imported, code: %d, message: %s', $orderId, $issueCode, (string) $issue->message); continue; } } $reportIssues[] = sprintf('code: %d, message: %s', $issueCode, (string) $issue->message); } if (count($reportIssues)) { Vikont_EVOConnector_Model_Log::log(sprintf('acknowledgeRequest WEB_ORDER issue(s) for order %s at %s:', $orderId, $responseDate)); $reportIssues = implode(", \n", $reportIssues); Vikont_EVOConnector_Model_Log::log($reportIssues); $comment = 'Rejected by EVO at ' . $responseDate . " with issues:\n" . $reportIssues; // life is pain Mage::helper('evoc/order')->changeOrderState($orderId, 'holded', 'holded', $comment); } Mage::helper('evoc/order')->sendAcknowledgeResponse('SUCCESS'); return; } else { $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); if ($order->canInvoice()) { $invoice = $order->prepareInvoice(); $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE); $invoice->register(); $invoice->getOrder()->setCustomerNoteNotify(false); $invoice->getOrder()->setIsInProcess(true); $order->addStatusHistoryComment('Automatically invoiced by EVO Connector', false); Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder())->save(); $invoice->sendEmail(true, ''); // $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true); // $order->save(); // this is to be called later when changing order state } else { Vikont_EVOConnector_Model_Log::logWarning(sprintf('Order #%s cannot be invoiced', $order->getIncrementId())); } $comment = 'Accepted by EVO at ' . $responseDate; Mage::helper('evoc/order')->changeOrderState($order, Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATE_PROCESSING, $comment); Mage::helper('evoc/order')->sendAcknowledgeResponse('SUCCESS'); return; } break; case 'WEB_ORDER_CANCELLATION': // it seems we don't do this here break; default: Vikont_EVOConnector_Model_Log::log(sprintf('unknown responseType: "%s" for orderId="%s" at %s', $responseType, $orderId, $responseDate)); Mage::helper('evoc/order')->sendAcknowledgeResponse('FAILURE'); } }