We will be off from 27/1 (Monday) to 31/1 (Friday) (GMT +7) for our Tet Holiday (Lunar New Year) 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
// check duplicates
// _isDuplicate
try {
$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);
......
......@@ -148,7 +148,7 @@ class Cron
$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($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()) {
// don't cancel the order if previous state is authorisation with success=true
if($previousAdyenEventCode != "AUTHORISATION : TRUE") {
......@@ -300,6 +300,10 @@ class Cron
return $this->_order->getPayment()->getMethod();
}
protected function _getPaymentMethodType() {
return $this->_order->getPayment()->getPaymentMethodType();
}
/**
* @desc order comments or history
* @param type $order
......@@ -386,7 +390,7 @@ class Cron
if ($ignoreHasInvoice || !$this->_order->hasInvoices()) {
$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()) {
$this->_order->hold();
} else {
......@@ -421,9 +425,9 @@ class Cron
case Notification::REFUND:
$ignoreRefundNotification = $this->_getConfigData('ignore_refund_notification', 'adyen_abstract', $this->_order->getStoreId());
if($ignoreRefundNotification != true) {
$this->_refundOrder($this->_order);
$this->_refundOrder();
//refund completed
$this->_setRefundAuthorized($this->_order);
$this->_setRefundAuthorized();
} else {
$this->_debugData['_processNotification info'] = 'Setting to ignore refund notification is enabled so ignore this notification';
}
......@@ -465,7 +469,7 @@ class Cron
} else {
// 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
$this->_authorizePayment($this->_order, $this->_paymentMethod);
......@@ -481,22 +485,22 @@ class Cron
if($this->_modificationResult == "cancel") {
$this->_holdCancelOrder(true);
} elseif($this->_modificationResult == "refund") {
$this->_refundOrder($this->_order);
$this->_refundOrder();
//refund completed
$this->_setRefundAuthorized($this->_order);
$this->_setRefundAuthorized();
}
} else {
$orderStatus = $this->_getConfigData('order_status', 'adyen_abstract', $this->_order->getStoreId());
if(($orderStatus != Mage_Sales_Model_Order::STATE_HOLDED && $this->_order->canCancel()) || ($orderStatus == Mage_Sales_Model_Order::STATE_HOLDED && $this->_order->canHold())) {
// cancel order
if ($this->_order->isCanceled() || $this->_order->getState() === \Magento\Sales\Model\Order::STATE_HOLDED) {
$this->_debugData['_processNotification info'] = 'Order is already cancelled or holded so do nothing';
} else if ($this->_order->canCancel() || $this->_order->canHold()) {
$this->_debugData['_processNotification info'] = 'try to cancel the order';
$this->_holdCancelOrder(true);
$this->_holdCancelOrder($this->_order, true);
} else {
$this->_debugData['_processNotification info'] = 'try to refund the order';
// refund
$this->_refundOrder($this->_order);
$this->_refundOrder();
//refund completed
$this->_setRefundAuthorized($this->_order);
$this->_setRefundAuthorized();
}
}
break;
......@@ -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
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
// if amount is zero create a offline invoice
$value = (int)$this->_value;
if($value == 0) {
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
$invoice->setRequestedCaptureCase(\Magento\Sales\Model\Order\Invoice::CAPTURE_OFFLINE);
} else {
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::NOT_CAPTURE);
$invoice->setRequestedCaptureCase(\Magento\Sales\Model\Order\Invoice::NOT_CAPTURE);
}
$invoice->register();
......@@ -844,6 +916,33 @@ class Cron
$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
......
......@@ -14,7 +14,7 @@ use Magento\Payment\Model\Method\Online\GatewayInterface;
*/
class AdyenAbstract extends \Magento\Payment\Model\Method\AbstractMethod implements GatewayInterface
{
const METHOD_CODE = 'adyen_hpp';
const METHOD_CODE = 'adyen_abstract';
/**
* @var string
......
......@@ -93,6 +93,11 @@ class Cc extends \Magento\Payment\Model\Method\Cc
$this->_adyenLogger = $adyenLogger;
}
protected $_paymentMethodType = 'api';
public function getPaymentMethodType() {
return $this->_paymentMethodType;
}
public function isActive($storeId = null)
{
......
......@@ -92,6 +92,11 @@ class Hpp extends \Magento\Payment\Model\Method\AbstractMethod implements Gatewa
$this->storeManager = $storeManager;
}
protected $_paymentMethodType = 'hpp';
public function getPaymentMethodType() {
return $this->_paymentMethodType;
}
public function isAvailable($quote = null)
{
$this->_logger->critical("HPP IS AVAILABLE!! IS TRUE");
......@@ -120,10 +125,6 @@ class Hpp extends \Magento\Payment\Model\Method\AbstractMethod implements Gatewa
default:
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