/** * @param $order * @return bool * @deprecate not needed already cancelled in ProcessController */ protected function _holdCancelOrder($ignoreHasInvoice) { $orderStatus = $this->_getConfigData('payment_cancelled', 'adyen_abstract', $this->_order->getStoreId()); // check if order has in invoice only cancel/hold if this is not the case if ($ignoreHasInvoice || !$this->_order->hasInvoices()) { $this->_order->setActionFlag($orderStatus, true); if ($orderStatus == \Magento\Sales\Model\Order::STATE_HOLDED) { if ($this->_order->canHold()) { $this->_order->hold(); } else { $this->_debugData['warning'] = 'Order can not hold or is already on Hold'; return; } } else { if ($this->_order->canCancel()) { $this->_order->cancel(); } else { $this->_debugData['warning'] = 'Order can not be canceled'; return; } } } else { $this->_debugData['warning'] = 'Order has already an invoice so cannot be canceled'; } }
/** * @param $ignoreHasInvoice * @throws \Magento\Framework\Exception\LocalizedException */ protected function _holdCancelOrder($ignoreHasInvoice) { $orderStatus = $this->_getConfigData('payment_cancelled', 'adyen_abstract', $this->_order->getStoreId()); // check if order has in invoice only cancel/hold if this is not the case if ($ignoreHasInvoice || !$this->_order->hasInvoices()) { if ($orderStatus == \Magento\Sales\Model\Order::STATE_HOLDED) { // Allow magento to hold order $this->_order->setActionFlag(\Magento\Sales\Model\Order::ACTION_FLAG_HOLD, true); if ($this->_order->canHold()) { $this->_order->hold(); } else { $this->_adyenLogger->addAdyenNotificationCronjob('Order can not hold or is already on Hold'); return; } } else { // Allow magento to cancel order $this->_order->setActionFlag(\Magento\Sales\Model\Order::ACTION_FLAG_CANCEL, true); if ($this->_order->canCancel()) { $this->_order->cancel(); } else { $this->_adyenLogger->addAdyenNotificationCronjob('Order can not be canceled'); return; } } } else { $this->_adyenLogger->addAdyenNotificationCronjob('Order has already an invoice so cannot be canceled'); } }
/** * @param bool $cancelActionFlag * @dataProvider dataProviderActionFlag */ public function testCanCancelActionFlag($cancelActionFlag) { $paymentMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Payment') ->disableOriginalConstructor() ->setMethods(['isDeleted', 'canReviewPayment', 'canFetchTransactionInfo', '__wakeUp']) ->getMock(); $paymentMock->expects($this->any()) ->method('canReviewPayment') ->will($this->returnValue(false)); $paymentMock->expects($this->any()) ->method('canFetchTransactionInfo') ->will($this->returnValue(false)); $this->preparePaymentMock($paymentMock); $this->prepareItemMock(1); $actionFlags = [ \Magento\Sales\Model\Order::ACTION_FLAG_UNHOLD => false, \Magento\Sales\Model\Order::ACTION_FLAG_CANCEL => $cancelActionFlag, ]; foreach ($actionFlags as $action => $flag) { $this->order->setActionFlag($action, $flag); } $this->order->setData('state', \Magento\Sales\Model\Order::STATE_NEW); $this->item->expects($this->any()) ->method('isDeleted') ->willReturn(false); $this->item->expects($this->any()) ->method('getQtyToInvoice') ->willReturn(42); $this->assertEquals($cancelActionFlag, $this->order->canCancel()); }