We will work on Apr 26th (Saturday) and will be off from Apr 30th (Wednesday) until May 2nd (Friday) for public holiday in our country

Commit ec38adaa authored by rikterbeek's avatar rikterbeek

notifications optimalizations

parent 482b60ba
...@@ -49,6 +49,8 @@ class Json extends \Magento\Framework\App\Action\Action ...@@ -49,6 +49,8 @@ class Json extends \Magento\Framework\App\Action\Action
// check duplicates // check duplicates
// _isDuplicate
try { try {
$notificationItems = json_decode(file_get_contents('php://input'), true); $notificationItems = json_decode(file_get_contents('php://input'), true);
// $notificationItems = json_decode('{"live":"false","notificationItems":[{"NotificationRequestItem":{"additionalData":{"expiryDate":"12\/2012"," NAME1 ":"VALUE1","authCode":"1234","cardSummary":"7777","totalFraudScore":"10","hmacSignature":"yGnVWLP+UcpqjHTJbO5IUkG4ZdIk3uHCu62QAJvbbyg=","NAME2":" VALUE2 ","fraudCheck-6-ShopperIpUsage":"10"},"amount":{"currency":"EUR","value":10500},"eventCode":"AUTHORISATION","eventDate":"2015-09-11T13:53:21+02:00","merchantAccountCode":"MagentoMerchantByteShop1","merchantReference":"000000023","operations":["CANCEL","CAPTURE","REFUND"],"paymentMethod":"visa","pspReference":"test_AUTHORISATION_1","reason":"1234:7777:12\/2012","success":"true"}}]}', true); // $notificationItems = json_decode('{"live":"false","notificationItems":[{"NotificationRequestItem":{"additionalData":{"expiryDate":"12\/2012"," NAME1 ":"VALUE1","authCode":"1234","cardSummary":"7777","totalFraudScore":"10","hmacSignature":"yGnVWLP+UcpqjHTJbO5IUkG4ZdIk3uHCu62QAJvbbyg=","NAME2":" VALUE2 ","fraudCheck-6-ShopperIpUsage":"10"},"amount":{"currency":"EUR","value":10500},"eventCode":"AUTHORISATION","eventDate":"2015-09-11T13:53:21+02:00","merchantAccountCode":"MagentoMerchantByteShop1","merchantReference":"000000023","operations":["CANCEL","CAPTURE","REFUND"],"paymentMethod":"visa","pspReference":"test_AUTHORISATION_1","reason":"1234:7777:12\/2012","success":"true"}}]}', true);
......
...@@ -148,7 +148,7 @@ class Cron ...@@ -148,7 +148,7 @@ class Cron
$this->_debugData['_updateOrder info'] = 'Going to cancel the order'; $this->_debugData['_updateOrder info'] = 'Going to cancel the order';
// if payment is API check, check if API result pspreference is the same as reference // if payment is API check, check if API result pspreference is the same as reference
if($this->_eventCode == Adyen_Payment_Model_Event::ADYEN_EVENT_AUTHORISATION && $this->_getPaymentMethodType($this->_order) == 'api') { if($this->_eventCode == Adyen_Payment_Model_Event::ADYEN_EVENT_AUTHORISATION && $this->_getPaymentMethodType() == 'api') {
if($this->_pspReference == $this->_order->getPayment()->getAdyenPspReference()) { if($this->_pspReference == $this->_order->getPayment()->getAdyenPspReference()) {
// don't cancel the order if previous state is authorisation with success=true // don't cancel the order if previous state is authorisation with success=true
if($previousAdyenEventCode != "AUTHORISATION : TRUE") { if($previousAdyenEventCode != "AUTHORISATION : TRUE") {
...@@ -300,6 +300,10 @@ class Cron ...@@ -300,6 +300,10 @@ class Cron
return $this->_order->getPayment()->getMethod(); return $this->_order->getPayment()->getMethod();
} }
protected function _getPaymentMethodType() {
return $this->_order->getPayment()->getPaymentMethodType();
}
/** /**
* @desc order comments or history * @desc order comments or history
* @param type $order * @param type $order
...@@ -386,7 +390,7 @@ class Cron ...@@ -386,7 +390,7 @@ class Cron
if ($ignoreHasInvoice || !$this->_order->hasInvoices()) { if ($ignoreHasInvoice || !$this->_order->hasInvoices()) {
$this->_order->setActionFlag($orderStatus, true); $this->_order->setActionFlag($orderStatus, true);
if($orderStatus == Mage_Sales_Model_Order::STATE_HOLDED) { if($orderStatus == \Magento\Sales\Model\Order::STATE_HOLDED) {
if ($this->_order->canHold()) { if ($this->_order->canHold()) {
$this->_order->hold(); $this->_order->hold();
} else { } else {
...@@ -421,9 +425,9 @@ class Cron ...@@ -421,9 +425,9 @@ class Cron
case Notification::REFUND: case Notification::REFUND:
$ignoreRefundNotification = $this->_getConfigData('ignore_refund_notification', 'adyen_abstract', $this->_order->getStoreId()); $ignoreRefundNotification = $this->_getConfigData('ignore_refund_notification', 'adyen_abstract', $this->_order->getStoreId());
if($ignoreRefundNotification != true) { if($ignoreRefundNotification != true) {
$this->_refundOrder($this->_order); $this->_refundOrder();
//refund completed //refund completed
$this->_setRefundAuthorized($this->_order); $this->_setRefundAuthorized();
} else { } else {
$this->_debugData['_processNotification info'] = 'Setting to ignore refund notification is enabled so ignore this notification'; $this->_debugData['_processNotification info'] = 'Setting to ignore refund notification is enabled so ignore this notification';
} }
...@@ -465,7 +469,7 @@ class Cron ...@@ -465,7 +469,7 @@ class Cron
} else { } else {
// uncancel the order just to be sure that order is going trough // uncancel the order just to be sure that order is going trough
$this->_uncancelOrder($this->_order); // $this->_uncancelOrder($this->_order);
// FOR POS authorize the payment on the CAPTURE notification // FOR POS authorize the payment on the CAPTURE notification
$this->_authorizePayment($this->_order, $this->_paymentMethod); $this->_authorizePayment($this->_order, $this->_paymentMethod);
...@@ -481,22 +485,22 @@ class Cron ...@@ -481,22 +485,22 @@ class Cron
if($this->_modificationResult == "cancel") { if($this->_modificationResult == "cancel") {
$this->_holdCancelOrder(true); $this->_holdCancelOrder(true);
} elseif($this->_modificationResult == "refund") { } elseif($this->_modificationResult == "refund") {
$this->_refundOrder($this->_order); $this->_refundOrder();
//refund completed //refund completed
$this->_setRefundAuthorized($this->_order); $this->_setRefundAuthorized();
} }
} else { } else {
$orderStatus = $this->_getConfigData('order_status', 'adyen_abstract', $this->_order->getStoreId()); if ($this->_order->isCanceled() || $this->_order->getState() === \Magento\Sales\Model\Order::STATE_HOLDED) {
if(($orderStatus != Mage_Sales_Model_Order::STATE_HOLDED && $this->_order->canCancel()) || ($orderStatus == Mage_Sales_Model_Order::STATE_HOLDED && $this->_order->canHold())) { $this->_debugData['_processNotification info'] = 'Order is already cancelled or holded so do nothing';
// cancel order } else if ($this->_order->canCancel() || $this->_order->canHold()) {
$this->_debugData['_processNotification info'] = 'try to cancel the order'; $this->_debugData['_processNotification info'] = 'try to cancel the order';
$this->_holdCancelOrder(true); $this->_holdCancelOrder($this->_order, true);
} else { } else {
$this->_debugData['_processNotification info'] = 'try to refund the order'; $this->_debugData['_processNotification info'] = 'try to refund the order';
// refund // refund
$this->_refundOrder($this->_order); $this->_refundOrder();
//refund completed //refund completed
$this->_setRefundAuthorized($this->_order); $this->_setRefundAuthorized();
} }
} }
break; break;
...@@ -506,6 +510,74 @@ class Cron ...@@ -506,6 +510,74 @@ class Cron
} }
} }
/**
* Not implemented
* @return bool
*/
protected function _refundOrder()
{
$this->_debugData['_refundOrder'] = 'Refunding the order';
// // Don't create a credit memo if refund is initialize in Magento because in this case the credit memo already exits
// $result = Mage::getModel('adyen/event')
// ->getEvent($this->_pspReference, '[refund-received]');
// if (!empty($result)) {
// $this->_debugData['_refundOrder ignore'] = 'Skip refund process because credit memo is already created';
// return false;
// }
//
// $_mail = (bool) $this->_getConfigData('send_update_mail', 'adyen_abstract', $order->getStoreId());
//
// $currency = $order->getOrderCurrencyCode(); // use orderCurrency because adyen respond in the same currency as in the request
// $amount = Mage::helper('adyen')->originalAmount($this->_value, $currency);
//
// if ($order->canCreditmemo()) {
// $service = Mage::getModel('sales/service_order', $order);
// $creditmemo = $service->prepareCreditmemo();
// $creditmemo->getOrder()->setIsInProcess(true);
//
// //set refund data on the order
// $creditmemo->setGrandTotal($amount);
// $creditmemo->setBaseGrandTotal($amount);
// $creditmemo->save();
//
// try {
// Mage::getModel('core/resource_transaction')
// ->addObject($creditmemo)
// ->addObject($creditmemo->getOrder())
// ->save();
// //refund
// $creditmemo->refund();
// $transactionSave = Mage::getModel('core/resource_transaction')
// ->addObject($creditmemo)
// ->addObject($creditmemo->getOrder());
// if ($creditmemo->getInvoice()) {
// $transactionSave->addObject($creditmemo->getInvoice());
// }
// $transactionSave->save();
// if ($_mail) {
// $creditmemo->getOrder()->setCustomerNoteNotify(true);
// $creditmemo->sendEmail();
// }
// $this->_debugData['_refundOrder done'] = 'Credit memo is created';
// } catch (Exception $e) {
// $this->_debugData['_refundOrder error'] = 'Error creating credit memo error message is: ' . $e->getMessage();
// Mage::logException($e);
// }
// } else {
// $this->_debugData['_refundOrder error'] = 'Order can not be refunded';
// }
}
/**
* @param $order
*/
protected function _setRefundAuthorized()
{
$this->_debugData['_setRefundAuthorized'] = 'Status update to default status or refund_authorized status if this is set';
$this->_order->addStatusHistoryComment(__('Adyen Refund Successfully completed'));
}
/** /**
* *
*/ */
...@@ -538,7 +610,7 @@ class Cron ...@@ -538,7 +610,7 @@ class Cron
if(($this->_paymentMethod == "c_cash" && $this->_getConfigData('create_shipment', 'adyen_cash', $this->_order->getStoreId())) || ($this->_getConfigData('create_shipment', 'adyen_pos', $this->_order->getStoreId()) && $_paymentCode == "adyen_pos")) if(($this->_paymentMethod == "c_cash" && $this->_getConfigData('create_shipment', 'adyen_cash', $this->_order->getStoreId())) || ($this->_getConfigData('create_shipment', 'adyen_pos', $this->_order->getStoreId()) && $_paymentCode == "adyen_pos"))
{ {
$this->_createShipment($this->_order); $this->_createShipment();
} }
} }
...@@ -736,9 +808,9 @@ class Cron ...@@ -736,9 +808,9 @@ class Cron
// if amount is zero create a offline invoice // if amount is zero create a offline invoice
$value = (int)$this->_value; $value = (int)$this->_value;
if($value == 0) { if($value == 0) {
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE); $invoice->setRequestedCaptureCase(\Magento\Sales\Model\Order\Invoice::CAPTURE_OFFLINE);
} else { } else {
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::NOT_CAPTURE); $invoice->setRequestedCaptureCase(\Magento\Sales\Model\Order\Invoice::NOT_CAPTURE);
} }
$invoice->register(); $invoice->register();
...@@ -844,6 +916,33 @@ class Cron ...@@ -844,6 +916,33 @@ class Cron
$this->_debugData['_setPaymentAuthorized end'] = 'Order status is changed to authorised status, status is ' . $status; $this->_debugData['_setPaymentAuthorized end'] = 'Order status is changed to authorised status, status is ' . $status;
} }
/**
*
*/
protected function _createShipment() {
$this->_debugData['_createShipment'] = 'Creating shipment for order';
// create shipment for cash payment
$payment = $this->_order->getPayment()->getMethodInstance();
if($this->_order->canShip())
{
$itemQty = array();
$shipment = $this->_order->prepareShipment($itemQty);
if($shipment) {
$shipment->register();
$shipment->getOrder()->setIsInProcess(true);
$comment = __('Shipment created by Adyen');
$shipment->addComment($comment);
Mage::getModel('core/resource_transaction')
->addObject($shipment)
->addObject($shipment->getOrder())
->save();
$this->_debugData['_createShipment done'] = 'Order is shipped';
}
} else {
$this->_debugData['_createShipment error'] = 'Order can\'t be shipped';
}
}
/** /**
* Retrieve information from payment configuration * Retrieve information from payment configuration
......
...@@ -14,7 +14,7 @@ use Magento\Payment\Model\Method\Online\GatewayInterface; ...@@ -14,7 +14,7 @@ use Magento\Payment\Model\Method\Online\GatewayInterface;
*/ */
class AdyenAbstract extends \Magento\Payment\Model\Method\AbstractMethod implements GatewayInterface class AdyenAbstract extends \Magento\Payment\Model\Method\AbstractMethod implements GatewayInterface
{ {
const METHOD_CODE = 'adyen_hpp'; const METHOD_CODE = 'adyen_abstract';
/** /**
* @var string * @var string
......
...@@ -93,6 +93,11 @@ class Cc extends \Magento\Payment\Model\Method\Cc ...@@ -93,6 +93,11 @@ class Cc extends \Magento\Payment\Model\Method\Cc
$this->_adyenLogger = $adyenLogger; $this->_adyenLogger = $adyenLogger;
} }
protected $_paymentMethodType = 'api';
public function getPaymentMethodType() {
return $this->_paymentMethodType;
}
public function isActive($storeId = null) public function isActive($storeId = null)
{ {
......
...@@ -92,6 +92,11 @@ class Hpp extends \Magento\Payment\Model\Method\AbstractMethod implements Gatewa ...@@ -92,6 +92,11 @@ class Hpp extends \Magento\Payment\Model\Method\AbstractMethod implements Gatewa
$this->storeManager = $storeManager; $this->storeManager = $storeManager;
} }
protected $_paymentMethodType = 'hpp';
public function getPaymentMethodType() {
return $this->_paymentMethodType;
}
public function isAvailable($quote = null) public function isAvailable($quote = null)
{ {
$this->_logger->critical("HPP IS AVAILABLE!! IS TRUE"); $this->_logger->critical("HPP IS AVAILABLE!! IS TRUE");
...@@ -120,10 +125,6 @@ class Hpp extends \Magento\Payment\Model\Method\AbstractMethod implements Gatewa ...@@ -120,10 +125,6 @@ class Hpp extends \Magento\Payment\Model\Method\AbstractMethod implements Gatewa
default: default:
break; break;
} }
// magento 1.x code from our plugin
// $state = Mage_Sales_Model_Order::STATE_NEW;
// $stateObject->setState($state);
// $stateObject->setStatus($this->_getConfigData('order_status'));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment