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 524a9911 authored by Rik ter Beek's avatar Rik ter Beek Committed by GitHub

Merge pull request #646 from Adyen/develop

Release 5.4.0
parents 1a3da231 7125e128
...@@ -31,17 +31,20 @@ class CronMessage implements \Magento\Framework\Notification\MessageInterface ...@@ -31,17 +31,20 @@ class CronMessage implements \Magento\Framework\Notification\MessageInterface
protected $_dateChecked; protected $_dateChecked;
protected $_adyenHelper; protected $_adyenHelper;
protected $_timezoneInterface; protected $_timezoneInterface;
protected $backendHelper;
public function __construct( public function __construct(
\Magento\Backend\Model\Auth\Session $authSession, \Magento\Backend\Model\Auth\Session $authSession,
\Adyen\Payment\Helper\Data $adyenHelper, \Adyen\Payment\Helper\Data $adyenHelper,
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezoneInterface \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezoneInterface,
\Magento\Backend\Helper\Data $backendHelper
) { ) {
$this->_authSession = $authSession; $this->_authSession = $authSession;
$this->_cronCheck = $this->getSessionData("cronCheck"); $this->_cronCheck = $this->getSessionData("cronCheck");
$this->_dateChecked = $this->getSessionData("dateChecked"); $this->_dateChecked = $this->getSessionData("dateChecked");
$this->_adyenHelper = $adyenHelper; $this->_adyenHelper = $adyenHelper;
$this->_timezoneInterface = $timezoneInterface; $this->_timezoneInterface = $timezoneInterface;
$this->backendHelper = $backendHelper;
} }
/** /**
...@@ -89,7 +92,8 @@ class CronMessage implements \Magento\Framework\Notification\MessageInterface ...@@ -89,7 +92,8 @@ class CronMessage implements \Magento\Framework\Notification\MessageInterface
*/ */
public function getText() public function getText()
{ {
$message = __('You have ' . $this->_cronCheck . ' unprocessed notification(s). Please check your Cron'); $urlNotificationsOverview = $this->backendHelper->getUrl("adyen/NotificationsOverview/index");
$message = __('You have <a href="%1">%2 unprocessed notification(s)</a>. Please check your Cron', $urlNotificationsOverview, $this->_cronCheck);
$urlMagento = "http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-cron.html"; $urlMagento = "http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-cron.html";
$urlAdyen = "https://docs.adyen.com/developers/plugins/magento-2/set-up-the-plugin-in-magento#step2runcron"; $urlAdyen = "https://docs.adyen.com/developers/plugins/magento-2/set-up-the-plugin-in-magento#step2runcron";
$message .= __( $message .= __(
......
...@@ -81,6 +81,18 @@ interface NotificationInterface ...@@ -81,6 +81,18 @@ interface NotificationInterface
* Additional data * Additional data
*/ */
const ADDITIONAL_DATA = 'additional_data'; const ADDITIONAL_DATA = 'additional_data';
/*
* Processing
*/
const PROCESSING = 'processing';
/*
* Error count
*/
const ERROR_COUNT = 'error_count';
/*
* Error message
*/
const ERROR_MESSAGE = 'error_message';
/* /*
* Created-at timestamp. * Created-at timestamp.
*/ */
......
<?php
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2020 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/
namespace Adyen\Payment\Controller\Adminhtml\Notifications;
class Overview extends \Magento\Backend\App\Action
{
/**
* Load the page defined in corresponding layout XML
*
* @return \Magento\Framework\View\Result\Page
*/
public function execute()
{
$resultPage = $this->resultFactory->create(\Magento\Framework\Controller\ResultFactory::TYPE_PAGE);
$resultPage->setActiveMenu('Adyen_Payment::notifications_overview')
->getConfig()->getTitle()->prepend(__('Adyen Notifications Overview'));
return $resultPage;
}
}
\ No newline at end of file
...@@ -99,8 +99,6 @@ class Result extends \Magento\Framework\App\Action\Action ...@@ -99,8 +99,6 @@ class Result extends \Magento\Framework\App\Action\Action
$response = $this->getRequest()->getParams(); $response = $this->getRequest()->getParams();
$this->_adyenLogger->addAdyenResult(print_r($response, true)); $this->_adyenLogger->addAdyenResult(print_r($response, true));
$failReturnPath = $this->_adyenHelper->getAdyenAbstractConfigData('return_path');
if ($response) { if ($response) {
$result = $this->validateResponse($response); $result = $this->validateResponse($response);
...@@ -110,10 +108,12 @@ class Result extends \Magento\Framework\App\Action\Action ...@@ -110,10 +108,12 @@ class Result extends \Magento\Framework\App\Action\Action
$this->_redirect('checkout/onepage/success', ['_query' => ['utm_nooverride' => '1']]); $this->_redirect('checkout/onepage/success', ['_query' => ['utm_nooverride' => '1']]);
} else { } else {
$this->_cancel($response); $this->_cancel($response);
$failReturnPath = $this->_adyenHelper->getAdyenAbstractConfigData('return_path');
$this->_redirect($failReturnPath); $this->_redirect($failReturnPath);
} }
} else { } else {
// redirect to checkout page // redirect to checkout page
$failReturnPath = $this->_adyenHelper->getAdyenAbstractConfigData('return_path');
$this->_redirect($failReturnPath); $this->_redirect($failReturnPath);
} }
} }
......
...@@ -1853,4 +1853,27 @@ class Data extends AbstractHelper ...@@ -1853,4 +1853,27 @@ class Data extends AbstractHelper
return $localeCode; return $localeCode;
} }
/**
* Get the Customer Area PSP Search URL with a preset PSP Reference
*
* @param string $pspReference
* @param string $liveEnvironment
* @return string
*/
public function getPspReferenceSearchUrl($pspReference, $liveEnvironment)
{
if ($liveEnvironment === "true") {
$checkoutEnvironment = "live";
} else {
$checkoutEnvironment = "test";
}
return sprintf(
"https://ca-%s.adyen.com/ca/ca/accounts/showTx.shtml?pspReference=%s",
$checkoutEnvironment,
$pspReference
);
}
} }
...@@ -230,6 +230,11 @@ class Cron ...@@ -230,6 +230,11 @@ class Cron
*/ */
private $notifierPool; private $notifierPool;
/**
* @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
*/
private $timezone;
/** /**
* Cron constructor. * Cron constructor.
* *
...@@ -276,7 +281,8 @@ class Cron ...@@ -276,7 +281,8 @@ class Cron
\Adyen\Payment\Model\ResourceModel\Billing\Agreement $agreementResourceModel, \Adyen\Payment\Model\ResourceModel\Billing\Agreement $agreementResourceModel,
\Magento\Sales\Model\Order\Payment\Transaction\Builder $transactionBuilder, \Magento\Sales\Model\Order\Payment\Transaction\Builder $transactionBuilder,
\Magento\Framework\Serialize\SerializerInterface $serializer, \Magento\Framework\Serialize\SerializerInterface $serializer,
\Magento\Framework\Notification\NotifierInterface $notifierPool \Magento\Framework\Notification\NotifierInterface $notifierPool,
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
) { ) {
$this->_scopeConfig = $scopeConfig; $this->_scopeConfig = $scopeConfig;
$this->_adyenLogger = $adyenLogger; $this->_adyenLogger = $adyenLogger;
...@@ -300,6 +306,7 @@ class Cron ...@@ -300,6 +306,7 @@ class Cron
$this->transactionBuilder = $transactionBuilder; $this->transactionBuilder = $transactionBuilder;
$this->serializer = $serializer; $this->serializer = $serializer;
$this->notifierPool = $notifierPool; $this->notifierPool = $notifierPool;
$this->timezone = $timezone;
} }
/** /**
...@@ -339,6 +346,7 @@ class Cron ...@@ -339,6 +346,7 @@ class Cron
$notifications->addFieldToFilter('done', 0); $notifications->addFieldToFilter('done', 0);
$notifications->addFieldToFilter('processing', 0); $notifications->addFieldToFilter('processing', 0);
$notifications->addFieldToFilter('created_at', $dateRange); $notifications->addFieldToFilter('created_at', $dateRange);
$notifications->addFieldToFilter('error_count', ['lt' => Notification::MAX_ERROR_COUNT]);
foreach ($notifications as $notification) { foreach ($notifications as $notification) {
// set Cron processing to true // set Cron processing to true
...@@ -464,6 +472,7 @@ class Cron ...@@ -464,6 +472,7 @@ class Cron
++$count; ++$count;
} catch (\Exception $e) { } catch (\Exception $e) {
$this->_updateNotification($notification, false, false); $this->_updateNotification($notification, false, false);
$this->handleNotificationError($notification, $e->getMessage());
$this->_adyenLogger->addAdyenNotificationCronjob( $this->_adyenLogger->addAdyenNotificationCronjob(
sprintf("Notification %s had an error: %s \n %s", $notification->getEntityId(), $e->getMessage(), sprintf("Notification %s had an error: %s \n %s", $notification->getEntityId(), $e->getMessage(),
$e->getTraceAsString()) $e->getTraceAsString())
...@@ -1886,11 +1895,63 @@ class Cron ...@@ -1886,11 +1895,63 @@ class Cron
* *
* @return void * @return void
*/ */
protected function addRefundFailedNotice(){ protected function addRefundFailedNotice()
{
$this->notifierPool->addNotice( $this->notifierPool->addNotice(
__("Adyen: Refund for order #%1 has failed", $this->_merchantReference), __("Adyen: Refund for order #%1 has failed", $this->_merchantReference),
__("Reason: %1 | PSPReference: %2 | You can go to Adyen Customer Area and trigger this refund manually or contact our support.", $this->_reason, $this->_pspReference), __("Reason: %1 | PSPReference: %2 | You can go to Adyen Customer Area and trigger this refund manually or contact our support.",
sprintf("https://ca-%s.adyen.com/ca/ca/accounts/showTx.shtml?pspReference=%s", $this->_live === 'true' ? 'live' : 'test', $this->_pspReference) $this->_reason, $this->_pspReference),
$this->_adyenHelper->getPspReferenceSearchUrl($this->_pspReference, $this->_live)
);
}
/**
* Add/update info on notification processing errors
*
* @param \Adyen\Payment\Model\Notification $notification
* @param string $errorMessage
* @return void
*/
private function handleNotificationError($notification, $errorMessage)
{
$this->setNotificationError($notification, $errorMessage);
$this->addNotificationErrorComment($errorMessage);
}
/**
* Increases error count and appends error message to notification
*
* @param \Adyen\Payment\Model\Notification $notification
* @param string $errorMessage
* @return void
*/
private function setNotificationError($notification, $errorMessage)
{
$notification->setErrorCount($notification->getErrorCount() + 1);
$oldMessage = $notification->getErrorMessage();
$newMessage = sprintf(
"[%s]: %s",
$this->timezone->formatDateTime($notification->getUpdatedAt()),
$errorMessage
); );
if (empty($oldMessage)) {
$notification->setErrorMessage($newMessage);
} else {
$notification->setErrorMessage($oldMessage . "\n" . $newMessage);
}
$notification->save();
}
/**
* Adds a comment to the order history with the notification processing error
*
* @param string $errorMessage
* @return void
*/
private function addNotificationErrorComment($errorMessage)
{
$comment = __('The order failed to update: %1', $errorMessage);
$this->_order->addStatusHistoryComment($comment);
$this->_order->save();
} }
} }
...@@ -49,6 +49,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not ...@@ -49,6 +49,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
const REPORT_AVAILABLE = "REPORT_AVAILABLE"; const REPORT_AVAILABLE = "REPORT_AVAILABLE";
const ORDER_CLOSED = "ORDER_CLOSED"; const ORDER_CLOSED = "ORDER_CLOSED";
const OFFER_CLOSED = "OFFER_CLOSED"; const OFFER_CLOSED = "OFFER_CLOSED";
const MAX_ERROR_COUNT = 5;
/** /**
* Notification constructor. * Notification constructor.
...@@ -94,7 +95,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not ...@@ -94,7 +95,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
$result = $this->getResource()->getNotification($pspReference, $eventCode, $success, $originalReference, $done); $result = $this->getResource()->getNotification($pspReference, $eventCode, $success, $originalReference, $done);
return (empty($result)) ? false : true; return (empty($result)) ? false : true;
} }
/** /**
* @return mixed * @return mixed
*/ */
...@@ -359,6 +360,69 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not ...@@ -359,6 +360,69 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
return $this->setData(self::DONE, $done); return $this->setData(self::DONE, $done);
} }
/**
* Gets the Processing flag for the notification.
*
* @return bool Processing.
*/
public function getProcessing()
{
return $this->getData(self::PROCESSING);
}
/**
* Sets Processing flag.
*
* @param bool $processing
* @return $this
*/
public function setProcessing($processing)
{
return $this->setData(self::PROCESSING, $processing);
}
/**
* Gets the Error Count for the notification.
*
* @return bool|null ErrorCount.
*/
public function getErrorCount()
{
return $this->getData(self::ERROR_COUNT);
}
/**
* Sets Error Count.
*
* @param bool $errorCount
* @return $this
*/
public function setErrorCount($errorCount)
{
return $this->setData(self::ERROR_COUNT, $errorCount);
}
/**
* Gets the Error Message for the notification.
*
* @return string|null ErrorMessage
*/
public function getErrorMessage()
{
return $this->getData(self::ERROR_MESSAGE);
}
/**
* Sets Error Message.
*
* @param string $errorMessage
* @return $this
*/
public function setErrorMessage($errorMessage)
{
return $this->setData(self::ERROR_MESSAGE, $errorMessage);
}
/** /**
* Gets the created-at timestamp for the notification. * Gets the created-at timestamp for the notification.
* *
......
...@@ -34,6 +34,8 @@ class AdyenGooglePayConfigProvider implements ConfigProviderInterface ...@@ -34,6 +34,8 @@ class AdyenGooglePayConfigProvider implements ConfigProviderInterface
const GOOGLE_PAY_VAULT_CODE = 'adyen_google_pay_vault'; const GOOGLE_PAY_VAULT_CODE = 'adyen_google_pay_vault';
const PRODUCTION = 'production';
/** /**
* @var PaymentHelper * @var PaymentHelper
*/ */
...@@ -106,9 +108,10 @@ class AdyenGooglePayConfigProvider implements ConfigProviderInterface ...@@ -106,9 +108,10 @@ class AdyenGooglePayConfigProvider implements ConfigProviderInterface
]; ];
$config['payment']['adyenGooglePay']['active'] = (bool)$this->adyenHelper->isAdyenGooglePayEnabled($this->storeManager->getStore()->getId()); $config['payment']['adyenGooglePay']['active'] = (bool)$this->adyenHelper->isAdyenGooglePayEnabled($this->storeManager->getStore()->getId());
$config['payment']['adyenGooglePay']['checkoutEnvironment'] = $this->adyenHelper->getCheckoutEnvironment($this->storeManager->getStore()->getId()); $config['payment']['adyenGooglePay']['checkoutEnvironment'] = $this->getGooglePayEnvironment($this->storeManager->getStore()->getId());
$config['payment']['adyenGooglePay']['locale'] = $this->adyenHelper->getStoreLocale($this->storeManager->getStore()->getId()); $config['payment']['adyenGooglePay']['locale'] = $this->adyenHelper->getStoreLocale($this->storeManager->getStore()->getId());
$config['payment']['adyenGooglePay']['merchantAccount'] = $this->adyenHelper->getAdyenMerchantAccount("adyen_google_pay", $this->storeManager->getStore()->getId()); $config['payment']['adyenGooglePay']['merchantAccount'] = $this->adyenHelper->getAdyenMerchantAccount("adyen_google_pay",
$this->storeManager->getStore()->getId());
$quote = $this->checkoutSession->getQuote(); $quote = $this->checkoutSession->getQuote();
$currency = $quote->getCurrency(); $currency = $quote->getCurrency();
...@@ -128,4 +131,17 @@ class AdyenGooglePayConfigProvider implements ConfigProviderInterface ...@@ -128,4 +131,17 @@ class AdyenGooglePayConfigProvider implements ConfigProviderInterface
{ {
return $this->_request; return $this->_request;
} }
/**
* @param null $storeId
* @return mixed
*/
private function getGooglePayEnvironment($storeId = null)
{
if ($this->adyenHelper->isDemoMode($storeId)) {
return \Adyen\Payment\Helper\Data::TEST;
}
return self::PRODUCTION;
}
} }
...@@ -68,6 +68,10 @@ class UpgradeSchema implements UpgradeSchemaInterface ...@@ -68,6 +68,10 @@ class UpgradeSchema implements UpgradeSchemaInterface
$this->updateSchemaVersion221($setup); $this->updateSchemaVersion221($setup);
} }
if (version_compare($context->getVersion(), '5.4.0', '<')) {
$this->updateSchemaVersion540($setup);
}
$setup->endSetup(); $setup->endSetup();
} }
...@@ -359,4 +363,46 @@ class UpgradeSchema implements UpgradeSchemaInterface ...@@ -359,4 +363,46 @@ class UpgradeSchema implements UpgradeSchemaInterface
$setup->getConnection()->createTable($table); $setup->getConnection()->createTable($table);
} }
/**
* Upgrade to 5.4.0
*
* @param SchemaSetupInterface $setup
* @return void
*/
public function updateSchemaVersion540(SchemaSetupInterface $setup)
{
$connection = $setup->getConnection();
$tableName = $setup->getTable('adyen_notification');
$adyenNotificationErrorCountColumn = [
'type' => Table::TYPE_INTEGER,
'length' => 1,
'nullable' => true,
'default' => 0,
'comment' => 'Adyen Notification Process Error Count',
'after' => \Adyen\Payment\Model\Notification::PROCESSING
];
$adyenNotificationErrorMessageColumn = [
'type' => Table::TYPE_TEXT,
'length' => null,
'nullable' => true,
'default' => null,
'comment' => 'Adyen Notification Process Error Message',
'after' => \Adyen\Payment\Model\Notification::ERROR_COUNT
];
$connection->addColumn(
$tableName,
\Adyen\Payment\Model\Notification::ERROR_COUNT,
$adyenNotificationErrorCountColumn
);
$connection->addColumn(
$tableName,
\Adyen\Payment\Model\Notification::ERROR_MESSAGE,
$adyenNotificationErrorMessageColumn
);
}
} }
...@@ -105,4 +105,33 @@ class DataTest extends \PHPUnit\Framework\TestCase ...@@ -105,4 +105,33 @@ class DataTest extends \PHPUnit\Framework\TestCase
$this->assertEquals(false, $this->dataHelper->isPaymentMethodOpenInvoiceMethod('ideal')); $this->assertEquals(false, $this->dataHelper->isPaymentMethodOpenInvoiceMethod('ideal'));
$this->assertEquals(true, $this->dataHelper->isPaymentMethodOpenInvoiceMethod('test_klarna')); $this->assertEquals(true, $this->dataHelper->isPaymentMethodOpenInvoiceMethod('test_klarna'));
} }
/**
* @param string $expectedResult
* @param string $pspReference
* @param string $checkoutEnvironment
* @dataProvider checkoutEnvironmentsProvider
*
*/
public function testGetPspReferenceSearchUrl($expectedResult, $pspReference, $checkoutEnvironment)
{
$pspSearchUrl = $this->dataHelper->getPspReferenceSearchUrl($pspReference, $checkoutEnvironment);
$this->assertEquals($expectedResult, $pspSearchUrl);
}
public static function checkoutEnvironmentsProvider()
{
return array(
array(
'https://ca-test.adyen.com/ca/ca/accounts/showTx.shtml?pspReference=7914073381342284',
'7914073381342284',
'false'
),
array(
'https://ca-live.adyen.com/ca/ca/accounts/showTx.shtml?pspReference=883580976999434D',
'883580976999434D',
'true'
)
);
}
} }
<?php
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2020 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/
namespace Adyen\Payment\Ui\Component\Listing\Column;
class NotificationColumn extends \Magento\Ui\Component\Listing\Columns\Column
{
/**
* @var \Magento\Sales\Api\Data\OrderInterface
*/
protected $orderInterface;
/**
* @var \Magento\Backend\Helper\Data
*/
protected $backendHelper;
/**
* @var \Adyen\Payment\Helper\Data
*/
protected $adyenHelper;
public function __construct(
\Magento\Sales\Api\Data\OrderInterface $orderInterface,
\Magento\Backend\Helper\Data $backendHelper,
\Adyen\Payment\Helper\Data $adyenHelper,
\Magento\Framework\View\Element\UiComponent\ContextInterface $context,
\Magento\Framework\View\Element\UiComponentFactory $uiComponentFactory,
array $components = [],
array $data = []
) {
$this->orderInterface = $orderInterface;
$this->backendHelper = $backendHelper;
$this->adyenHelper = $adyenHelper;
parent::__construct($context, $uiComponentFactory, $components, $data);
}
/**
* Style and format Adyen notification columns
*
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource)
{
if (empty($dataSource['data']['items'])) {
return $dataSource;
}
foreach ($dataSource['data']['items'] as & $item) {
$class = "grid-severity-critical";
if ($item["success"] == "true") {
$class = "grid-severity-notice";
}
$item["success"] = sprintf('<span class="%s">%s</span>', $class, $item["success"]);
//Setting Status "fake" column value based on processing and done values
if ($item["processing"] == 0) {
if ($item["done"] == 0) {
$item["status"] = __("Queued");
} else {
$item["status"] = __("Processed");
}
} else {
$item["status"] = __("In progress");
}
//Adding anchor link to order number and PSP reference if order number exists
$this->orderInterface->unsetData();
$order = $this->orderInterface->loadByIncrementId($item["merchant_reference"]);
if ($order->getId()) {
$orderUrl = $this->backendHelper->getUrl("sales/order/view", ["order_id" => $order->getId()]);
$item["merchant_reference"] = sprintf(
'<a href="%s">%s</a>',
$orderUrl,
$item["merchant_reference"]
);
$item["pspreference"] = sprintf(
'<a href="%s" target="_blank">%s</a>',
$this->adyenHelper->getPspReferenceSearchUrl(
$item["pspreference"],
$item["live"]
),
$item["pspreference"]
);
}
}
return $dataSource;
}
}
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name": "adyen/module-payment", "name": "adyen/module-payment",
"description": "Official Magento2 Plugin to connect to Payment Service Provider Adyen.", "description": "Official Magento2 Plugin to connect to Payment Service Provider Adyen.",
"type": "magento2-module", "type": "magento2-module",
"version": "5.3.0", "version": "5.4.0",
"license": [ "license": [
"OSL-3.0", "OSL-3.0",
"AFL-3.0" "AFL-3.0"
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
"adyen/php-api-library": "~4.1", "adyen/php-api-library": "~4.1",
"magento/framework": ">=101.0.8 <102 || >=102.0.1", "magento/framework": ">=101.0.8 <102 || >=102.0.1",
"magento/module-vault": "101.*", "magento/module-vault": "101.*",
"magento/module-paypal": "*" "magento/module-paypal": "100.3.*"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "~6.5.0", "phpunit/phpunit": "~6.5.0",
......
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Backend::admin">
<resource id="Magento_Backend::system">
<resource id="Adyen_Payment::adyen" title="Adyen" translate="title" sortOrder="10">
<resource id="Adyen_Payment::notifications_overview" title="Notifications Overview" translate="title" sortOrder="10"/>
</resource>
</resource>
</resource>
</resources>
</acl>
</config>
\ No newline at end of file
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Magento/Backend/etc/menu.xsd">
<menu>
<add id="Adyen_Payment::adyen" title="Adyen" module="Adyen_Payment" sortOrder="100" parent="Magento_Backend::system" resource="Adyen_Payment::adyen"/>
<add id="Adyen_Payment::notifications_overview" title="Notifications Overview" module="Adyen_Payment" sortOrder="10" parent="Adyen_Payment::adyen" action="adyen/notifications/overview" resource="Adyen_Payment::notifications_overview"/>
</menu>
</config>
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="admin">
<route id="adyen" frontName="adyen">
<module name="Adyen_Payment"/>
</route>
</router>
</config>
...@@ -1035,4 +1035,20 @@ ...@@ -1035,4 +1035,20 @@
<type name="Magento\Checkout\Api\GuestPaymentInformationManagementInterface"> <type name="Magento\Checkout\Api\GuestPaymentInformationManagementInterface">
<plugin name="AdyenGuestPaymentInformationManagementAddPaymentInfo" type="Adyen\Payment\Plugin\GuestPaymentInformationManagement" sortOrder="10"/> <plugin name="AdyenGuestPaymentInformationManagementAddPaymentInfo" type="Adyen\Payment\Plugin\GuestPaymentInformationManagement" sortOrder="10"/>
</type> </type>
<!--Notifications overview-->
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="adyen_notifications_overview_data_source" xsi:type="string">Adyen\Payment\Model\ResourceModel\Notification\UiComponentCollection</item>
</argument>
</arguments>
</type>
<virtualType name="Adyen\Payment\Model\ResourceModel\Notification\UiComponentCollection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">adyen_notification</argument>
<argument name="resourceModel" xsi:type="string">Adyen\Payment\Model\ResourceModel\Notification</argument>
</arguments>
</virtualType>
</config> </config>
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
--> -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Adyen_Payment" setup_version="4.5.4"> <module name="Adyen_Payment" setup_version="5.4.0">
<sequence> <sequence>
<module name="Magento_Sales"/> <module name="Magento_Sales"/>
<module name="Magento_Quote"/> <module name="Magento_Quote"/>
......
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<css src="Adyen_Payment::css/notifications_overview_styles.css"/>
<title>
Adyen Notifications Overview
</title>
</head>
<body>
<referenceContainer name="content">
<uiComponent name="adyen_notifications_overview"/>
</referenceContainer>
</body>
</page>
\ No newline at end of file
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="provider" xsi:type="string">adyen_notifications_overview.adyen_notifications_overview_data_source</item>
<item name="deps" xsi:type="string">adyen_notifications_overview.adyen_notifications_overview_data_source</item>
</item>
<item name="spinner" xsi:type="string">spinner_columns</item>
</argument>
<listingToolbar name="listing_top">
<columnsControls name="columns_controls"/>
<paging name="listing_paging"/>
<filters name="listing_filters" />
</listingToolbar>
<dataSource name="nameOfDataSource">
<argument name="dataProvider" xsi:type="configurableObject">
<argument name="class" xsi:type="string">Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider</argument>
<argument name="name" xsi:type="string">adyen_notifications_overview_data_source</argument>
<argument name="primaryFieldName" xsi:type="string">entity_id</argument>
<argument name="requestFieldName" xsi:type="string">id</argument>
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
<item name="update_url" xsi:type="url" path="mui/index/render"/>
<item name="storageConfig" xsi:type="array">
<item name="indexField" xsi:type="string">entity_id</item>
</item>
</item>
</argument>
</argument>
</dataSource>
<columns name="spinner_columns">
<column name="entity_id">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">textRange</item>
<item name="sorting" xsi:type="string">desc</item>
<item name="label" xsi:type="string" translate="true">ID</item>
</item>
</argument>
</column>
<column name="processing">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
<item name="filter" xsi:type="string">select</item>
<item name="dataType" xsi:type="string">select</item>
<item name="editor" xsi:type="string">select</item>
<item name="label" xsi:type="string" translate="true">Processing</item>
</item>
</argument>
</column>
<column name="done">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
<item name="filter" xsi:type="string">select</item>
<item name="dataType" xsi:type="string">select</item>
<item name="editor" xsi:type="string">select</item>
<item name="label" xsi:type="string" translate="true">Done</item>
</item>
</argument>
</column>
<column name="status" class="Adyen\Payment\Ui\Component\Listing\Column\NotificationColumn">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Status</item>
<item name="sortable" xsi:type="boolean">false</item>
</item>
</argument>
</column>
<column name="success">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">true</item>
<item name="label" xsi:type="string" translate="true">Success</item>
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
</item>
</argument>
</column>
<column name="pspreference">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">PSP Reference</item>
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
</item>
</argument>
</column>
<column name="event_code">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Event Code</item>
</item>
</argument>
</column>
<column name="merchant_reference">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Order</item>
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
</item>
</argument>
</column>
<column name="error_count">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Error Count</item>
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
</item>
</argument>
</column>
<column name="error_message">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Error Message</item>
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="fieldClass" xsi:type="string">adyen-notification-error-messages</item>
</item>
</argument>
</column>
<column name="created_at" class="Magento\Ui\Component\Listing\Columns\Date">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">dateRange</item>
<item name="label" xsi:type="string" translate="true">Creation Date</item>
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
<item name="dataType" xsi:type="string">date</item>
</item>
</argument>
</column>
</columns>
</listing>
\ No newline at end of file
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2020 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/
.adyen-notification-error-messages div {
white-space: pre-wrap;
}
...@@ -43,7 +43,7 @@ define( ...@@ -43,7 +43,7 @@ define(
var paymentMethod = ko.observable(null); var paymentMethod = ko.observable(null);
var messageComponents; var messageComponents;
var shippingAddressCountryCode = quote.shippingAddress().countryId; var shippingAddressCountryCode = quote.shippingAddress().countryId;
var unsupportedPaymentMethods = ['scheme', 'boleto', 'bcmc_mobile_QR', 'wechatpay', /^bcmc$/ ]; var unsupportedPaymentMethods = ['scheme', 'boleto', 'bcmc_mobile_QR', 'wechatpay', /^bcmc$/, "applepay", "paywithgoogle"];
/** /**
* Shareble adyen checkout component * Shareble adyen checkout component
* @type {AdyenCheckout} * @type {AdyenCheckout}
......
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