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 7477915c authored by attilak's avatar attilak

Rename HppAuthorizationDataBuilder to CheckoutDataBuilder

Add sepa direct debit component
Fix place order button - enabled when the input is valid
refactor in adyen-hpp-methods.js
remove dedicated sepa direct debit payment method
parent da3f874f
...@@ -25,55 +25,56 @@ namespace Adyen\Payment\Gateway\Request; ...@@ -25,55 +25,56 @@ namespace Adyen\Payment\Gateway\Request;
use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Payment\Gateway\Request\BuilderInterface;
use Adyen\Payment\Observer\AdyenHppDataAssignObserver; use Adyen\Payment\Observer\AdyenHppDataAssignObserver;
use Adyen\Payment\Observer\AdyenBoletoDataAssignObserver;
class CheckoutDataBuilder implements BuilderInterface class CheckoutDataBuilder implements BuilderInterface
{ {
/** /**
* @var \Adyen\Payment\Helper\Data * @var \Adyen\Payment\Helper\Data
*/ */
private $adyenHelper; private $adyenHelper;
/** /**
* @var \Magento\Store\Model\StoreManagerInterface * @var \Magento\Store\Model\StoreManagerInterface
*/ */
private $storeManager; private $storeManager;
/** /**
* @var \Magento\Checkout\Model\Session * @var \Magento\Checkout\Model\Session
*/ */
private $checkoutSession; private $checkoutSession;
/** /**
* @var \Magento\Quote\Model\Quote * @var \Magento\Quote\Model\Quote
*/ */
private $quote; private $quote;
/** /**
* @var \Magento\Tax\Model\Config * @var \Magento\Tax\Model\Config
*/ */
protected $taxConfig; protected $taxConfig;
/**
* CheckoutDataBuilder constructor. /**
* @param \Adyen\Payment\Helper\Data $adyenHelper * CheckoutDataBuilder constructor.
* @param \Magento\Store\Model\StoreManagerInterface $storeManager *
* @param \Magento\Checkout\Model\Session $checkoutSession * @param \Adyen\Payment\Helper\Data $adyenHelper
* @param \Magento\Tax\Model\Config $taxConfig * @param \Magento\Store\Model\StoreManagerInterface $storeManager
*/ * @param \Magento\Checkout\Model\Session $checkoutSession
* @param \Magento\Tax\Model\Config $taxConfig
*/
public function __construct( public function __construct(
\Adyen\Payment\Helper\Data $adyenHelper, \Adyen\Payment\Helper\Data $adyenHelper,
\Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Checkout\Model\Session $checkoutSession, \Magento\Checkout\Model\Session $checkoutSession,
\Magento\Tax\Model\Config $taxConfig \Magento\Tax\Model\Config $taxConfig
) )
{ {
$this->adyenHelper = $adyenHelper; $this->adyenHelper = $adyenHelper;
$this->storeManager = $storeManager; $this->storeManager = $storeManager;
$this->checkoutSession = $checkoutSession; $this->checkoutSession = $checkoutSession;
$this->quote = $checkoutSession->getQuote(); $this->quote = $checkoutSession->getQuote();
$this->taxConfig = $taxConfig; $this->taxConfig = $taxConfig;
} }
/** /**
* @param array $buildSubject * @param array $buildSubject
...@@ -85,203 +86,127 @@ class CheckoutDataBuilder implements BuilderInterface ...@@ -85,203 +86,127 @@ class CheckoutDataBuilder implements BuilderInterface
$paymentDataObject =\Magento\Payment\Gateway\Helper\SubjectReader::readPayment($buildSubject); $paymentDataObject =\Magento\Payment\Gateway\Helper\SubjectReader::readPayment($buildSubject);
$payment = $paymentDataObject->getPayment(); $payment = $paymentDataObject->getPayment();
$order = $payment->getOrder(); $order = $payment->getOrder();
$storeId = $order->getStoreId();
$request = []; $request = [];
// do not send email // do not send email
$order->setCanSendNewEmailFlag(false); $order->setCanSendNewEmailFlag(false);
$request['paymentMethod']['type'] = $payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE);
// Additional data for payment methods with issuer list
if ($payment->getAdditionalInformation(AdyenHppDataAssignObserver::ISSUER_ID)) {
$request['paymentMethod']['issuer'] = $payment->getAdditionalInformation(AdyenHppDataAssignObserver::ISSUER_ID);
}
$request['returnUrl'] = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK) . 'adyen/process/result'; $request['paymentMethod']['type'] = $payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE);
// Additional data for ACH // Additional data for payment methods with issuer list
if ($payment->getAdditionalInformation("bankAccountNumber")) { if ($payment->getAdditionalInformation(AdyenHppDataAssignObserver::ISSUER_ID)) {
$request['bankAccount']['bankAccountNumber'] = $payment->getAdditionalInformation("bankAccountNumber"); $request['paymentMethod']['issuer'] = $payment->getAdditionalInformation(AdyenHppDataAssignObserver::ISSUER_ID);
} }
if ($payment->getAdditionalInformation("bankLocationId")) {
$request['bankAccount']['bankLocationId'] = $payment->getAdditionalInformation("bankLocationId");
}
if ($payment->getAdditionalInformation("bankAccountOwnerName")) { $request['returnUrl'] = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK) . 'adyen/process/result';
$request['bankAccount']['ownerName'] = $payment->getAdditionalInformation("bankAccountOwnerName");
}
// Additional data for open invoice payment // Additional data for open invoice payment
if ($payment->getAdditionalInformation("gender")) { if ($payment->getAdditionalInformation("gender")) {
$order->setCustomerGender(\Adyen\Payment\Model\Gender::getMagentoGenderFromAdyenGender( $order->setCustomerGender(\Adyen\Payment\Model\Gender::getMagentoGenderFromAdyenGender(
$payment->getAdditionalInformation("gender")) $payment->getAdditionalInformation("gender"))
); );
$request['paymentMethod']['personalDetails']['gender'] = $payment->getAdditionalInformation("gender"); $request['shopperName']['gender'] = $payment->getAdditionalInformation("gender");
} }
if ($payment->getAdditionalInformation("dob")) { if ($payment->getAdditionalInformation("dob")) {
$order->setCustomerDob($payment->getAdditionalInformation("dob")); $order->setCustomerDob($payment->getAdditionalInformation("dob"));
$request['paymentMethod']['personalDetails']['dateOfBirth']= $this->adyenHelper->formatDate($payment->getAdditionalInformation("dob"), 'Y-m-d') ; $request['dateOfBirth']= $this->adyenHelper->formatDate($payment->getAdditionalInformation("dob"), 'Y-m-d') ;
} }
if ($payment->getAdditionalInformation("telephone")) { if ($payment->getAdditionalInformation("telephone")) {
$order->getBillingAddress()->setTelephone($payment->getAdditionalInformation("telephone")); $order->getBillingAddress()->setTelephone($payment->getAdditionalInformation("telephone"));
$request['paymentMethod']['personalDetails']['telephoneNumber']= $payment->getAdditionalInformation("telephone"); $request['telephoneNumber']= $payment->getAdditionalInformation("telephone");
} }
if ($payment->getAdditionalInformation("ssn")) { // Additional data for sepa direct debit
$request['paymentMethod']['personalDetails']['socialSecurityNumber']= $payment->getAdditionalInformation("ssn"); if ($payment->getAdditionalInformation("ownerName")) {
} $request['paymentMethod']['sepa.ownerName']= $payment->getAdditionalInformation("ownerName");
}
// Additional data for sepa direct debit
if ($payment->getAdditionalInformation("ownerName")) {
$request['paymentMethod']['sepa.ownerName'] = $payment->getAdditionalInformation("ownerName");
}
if ($payment->getAdditionalInformation("ibanNumber")) { if ($payment->getAdditionalInformation("ibanNumber")) {
$request['paymentMethod']['sepa.ibanNumber'] = $payment->getAdditionalInformation("ibanNumber"); $request['paymentMethod']['sepa.ibanNumber']= $payment->getAdditionalInformation("ibanNumber");
} }
if ($this->adyenHelper->isPaymentMethodOpenInvoiceMethod( if ($this->adyenHelper->isPaymentMethodOpenInvoiceMethod(
$payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE) $payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE)
) || $this->adyenHelper->isPaymentMethodAfterpayTouchMethod( )) {
$payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE)
) || $this->adyenHelper->isPaymentMethodOneyMethod(
$payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE)
)
) {
$openInvoiceFields = $this->getOpenInvoiceData($order); $openInvoiceFields = $this->getOpenInvoiceData($order);
$request = array_merge($request, $openInvoiceFields); $request = array_merge($request, $openInvoiceFields);
} }
//Boleto data return $request;
if ($payment->getAdditionalInformation("social_security_number")) { }
$request['socialSecurityNumber'] = $payment->getAdditionalInformation("social_security_number");
} /**
* @param $formFields
if ($payment->getAdditionalInformation("firstname")) { * @return mixed
$request['shopperName']['firstName'] = $payment->getAdditionalInformation("firstname"); */
} protected function getOpenInvoiceData($order)
{
if ($payment->getAdditionalInformation("lastName")) { $formFields = [
$request['shopperName']['lastName'] = $payment->getAdditionalInformation("lastName"); 'lineItems' => []
} ];
if ($payment->getMethod() == \Adyen\Payment\Model\Ui\AdyenBoletoConfigProvider::CODE) { $currency = $this->quote->getCurrency();
$boletoTypes = $this->adyenHelper->getAdyenBoletoConfigData('boletotypes');
$boletoTypes = explode(',', $boletoTypes); $discountAmount = 0;
if (count($boletoTypes) == 1) { foreach ($this->quote->getAllVisibleItems() as $item) {
$request['selectedBrand'] = $boletoTypes[0];
$request['paymentMethod']['type'] = $boletoTypes[0]; $numberOfItems = (int)$item->getQtyOrdered();
} else {
$request['selectedBrand'] = $payment->getAdditionalInformation("boleto_type"); // Summarize the discount amount item by item
$request['paymentMethod']['type'] = $payment->getAdditionalInformation("boleto_type"); $discountAmount += $item->getDiscountAmount();
}
$priceExcludingTax = $item->getPriceInclTax() - $item->getTaxAmount();
$deliveryDays = (int)$this->adyenHelper->getAdyenBoletoConfigData("delivery_days", $storeId);
$deliveryDays = (!empty($deliveryDays)) ? $deliveryDays : 5; $formFields['lineItems'][] = [
$deliveryDate = date( 'amountExcludingTax' => $priceExcludingTax,
"Y-m-d\TH:i:s ", 'taxAmount' => $item->getTaxAmount(),
mktime( 'description' => $item->getName(),
date("H"), 'id' => $item->getId(),
date("i"), 'quantity' => $item->getQty(),
date("s"), 'taxCategory' => $item->getProduct()->getAttributeText('tax_class_id'),
date("m"), 'taxPercentage' => $item->getTaxPercent()
date("j") + $deliveryDays, ];
date("Y") }
)
); // Discount cost
if ($discountAmount != 0) {
$request['deliveryDate'] = $deliveryDate;
$description = __('Total Discount');
$order->setCanSendNewEmailFlag(true); $itemAmount = $this->adyenHelper->formatAmount($discountAmount, $currency);
} $itemVatAmount = "0";
return $request; $itemVatPercentage = "0";
} $numberOfItems = 1;
/** $formFields['lineItems'][] = [
* @param $formFields 'amountExcludingTax' => $itemAmount,
* @return mixed 'taxAmount' => $itemVatAmount,
*/ 'description' => $description,
protected function getOpenInvoiceData($order) 'quantity' => $numberOfItems,
{ 'taxCategory' => 'None',
$formFields = [ 'taxPercentage' => $itemVatPercentage
'lineItems' => [] ];
]; }
$currency = $this->quote->getCurrency(); // Shipping cost
if ($this->quote->getShippingAddress()->getShippingAmount() > 0 || $this->quote->getShippingAddress()->getShippingTaxAmount() > 0) {
$discountAmount = 0;
$priceExcludingTax = $this->quote->getShippingAddress()->getShippingAmount() - $this->quote->getShippingAddress()->getShippingTaxAmount();
foreach ($this->quote->getAllVisibleItems() as $item) {
$taxClassId = $this->taxConfig->getShippingTaxClass($this->storeManager->getStore()->getId());
$numberOfItems = (int)$item->getQtyOrdered();
$formFields['lineItems'][] = [
// Summarize the discount amount item by item 'amountExcludingTax' => $priceExcludingTax,
$discountAmount += $item->getDiscountAmount(); 'taxAmount' => $this->quote->getShippingAddress()->getShippingTaxAmount(),
'description' => $order->getShippingDescription(),
$priceExcludingTax = $item->getPriceInclTax() - $item->getTaxAmount(); 'quantity' => 1,
$formattedPriceExcludingTax = $this->adyenHelper->formatAmount($priceExcludingTax, $currency); 'taxPercentage' => $this->quote->getShippingAddress()->getShippingTaxAmount()
];
$formattedTaxAmount = $this->adyenHelper->formatAmount($item->getTaxAmount(), $currency); }
$formFields['lineItems'][] = [ return $formFields;
'id' => $item->getId(), }
'itemId' => $item->getId(),
'amountExcludingTax' => $formattedPriceExcludingTax,
'taxAmount' => $formattedTaxAmount,
'description' => $item->getName(),
'quantity' => $item->getQty(),
'taxCategory' => $item->getProduct()->getAttributeText('tax_class_id'),
'taxPercentage' => $item->getTaxPercent()
];
}
// Discount cost
if ($discountAmount != 0) {
$description = __('Total Discount');
$itemAmount = $this->adyenHelper->formatAmount($discountAmount, $currency);
$itemVatAmount = "0";
$itemVatPercentage = "0";
$numberOfItems = 1;
$formFields['lineItems'][] = [
'itemId' => 'totalDiscount',
'amountExcludingTax' => $itemAmount,
'taxAmount' => $itemVatAmount,
'description' => $description,
'quantity' => $numberOfItems,
'taxCategory' => 'None',
'taxPercentage' => $itemVatPercentage
];
}
// Shipping cost
if ($this->quote->getShippingAddress()->getShippingAmount() > 0 || $this->quote->getShippingAddress()->getShippingTaxAmount() > 0) {
$priceExcludingTax = $this->quote->getShippingAddress()->getShippingAmount() - $this->quote->getShippingAddress()->getShippingTaxAmount();
$formattedTaxAmount = $this->adyenHelper->formatAmount($this->quote->getShippingAddress()->getShippingTaxAmount(), $currency);
$formattedPriceExcludingTax = $this->adyenHelper->formatAmount($priceExcludingTax, $currency);
$taxClassId = $this->taxConfig->getShippingTaxClass($this->storeManager->getStore()->getId());
$formFields['lineItems'][] = [
'itemId' => 'shippingCost',
'amountExcludingTax' => $formattedPriceExcludingTax,
'taxAmount' => $formattedTaxAmount,
'description' => $order->getShippingDescription(),
'quantity' => 1,
'taxPercentage' => $this->quote->getShippingAddress()->getShippingTaxAmount()
];
}
return $formFields;
}
} }
<?php
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2015 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/
namespace Adyen\Payment\Gateway\Request;
use Magento\Payment\Gateway\Request\BuilderInterface;
use Adyen\Payment\Observer\AdyenHppDataAssignObserver;
class HppAuthorizationDataBuilder implements BuilderInterface
{
/**
* @var \Adyen\Payment\Helper\Data
*/
private $adyenHelper;
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
private $storeManager;
/**
* @var \Magento\Checkout\Model\Session
*/
private $checkoutSession;
/**
* @var \Magento\Quote\Model\Quote
*/
private $quote;
/**
* @var \Magento\Tax\Model\Config
*/
protected $taxConfig;
/**
* HppAuthorizationDataBuilder constructor.
*
* @param \Adyen\Payment\Helper\Data $adyenHelper
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Magento\Checkout\Model\Session $checkoutSession
* @param \Magento\Tax\Model\Config $taxConfig
*/
public function __construct(
\Adyen\Payment\Helper\Data $adyenHelper,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Tax\Model\Config $taxConfig
)
{
$this->adyenHelper = $adyenHelper;
$this->storeManager = $storeManager;
$this->checkoutSession = $checkoutSession;
$this->quote = $checkoutSession->getQuote();
$this->taxConfig = $taxConfig;
}
/**
* @param array $buildSubject
* @return mixed
*/
public function build(array $buildSubject)
{
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject =\Magento\Payment\Gateway\Helper\SubjectReader::readPayment($buildSubject);
$payment = $paymentDataObject->getPayment();
$order = $payment->getOrder();
$request = [];
// do not send email
$order->setCanSendNewEmailFlag(false);
$request['paymentMethod']['type'] = $payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE);
// Pass issuer id TODO in PW-875
$request['paymentMethod']['issuer'] = "";
$request['returnUrl'] = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK) . 'adyen/process/result';
// update customer based on additionalFields
if ($payment->getAdditionalInformation("gender")) {
$order->setCustomerGender(\Adyen\Payment\Model\Gender::getMagentoGenderFromAdyenGender(
$payment->getAdditionalInformation("gender"))
);
$request['shopperName']['gender'] = $payment->getAdditionalInformation("gender");
}
if ($payment->getAdditionalInformation("dob")) {
$order->setCustomerDob($payment->getAdditionalInformation("dob"));
$request['dateOfBirth']= $this->adyenHelper->formatDate($payment->getAdditionalInformation("dob"), 'Y-m-d') ;
}
if ($payment->getAdditionalInformation("telephone")) {
$order->getBillingAddress()->setTelephone($payment->getAdditionalInformation("telephone"));
$request['telephoneNumber']= $payment->getAdditionalInformation("telephone");
}
if ($this->adyenHelper->isPaymentMethodOpenInvoiceMethod(
$payment->getAdditionalInformation(AdyenHppDataAssignObserver::BRAND_CODE)
)) {
$openInvoiceFields = $this->getOpenInvoiceData($order);
$request = array_merge($request, $openInvoiceFields);
}
return $request;
}
/**
* @param $formFields
* @return mixed
*/
protected function getOpenInvoiceData($order)
{
$formFields = [
'lineItems' => []
];
$currency = $this->quote->getCurrency();
$discountAmount = 0;
foreach ($this->quote->getAllVisibleItems() as $item) {
$numberOfItems = (int)$item->getQtyOrdered();
// Summarize the discount amount item by item
$discountAmount += $item->getDiscountAmount();
$priceExcludingTax = $item->getPriceInclTax() - $item->getTaxAmount();
$formFields['lineItems'][] = [
'amountExcludingTax' => $priceExcludingTax,
'taxAmount' => $item->getTaxAmount(),
'description' => $item->getName(),
'id' => $item->getId(),
'quantity' => $item->getQty(),
'taxCategory' => $item->getProduct()->getAttributeText('tax_class_id'),
'taxPercentage' => $item->getTaxPercent()
];
}
// Discount cost
if ($discountAmount != 0) {
$description = __('Total Discount');
$itemAmount = $this->adyenHelper->formatAmount($discountAmount, $currency);
$itemVatAmount = "0";
$itemVatPercentage = "0";
$numberOfItems = 1;
$formFields['lineItems'][] = [
'amountExcludingTax' => $itemAmount,
'taxAmount' => $itemVatAmount,
'description' => $description,
'quantity' => $numberOfItems,
'taxCategory' => 'None',
'taxPercentage' => $itemVatPercentage
];
}
// Shipping cost
if ($this->quote->getShippingAddress()->getShippingAmount() > 0 || $this->quote->getShippingAddress()->getShippingTaxAmount() > 0) {
$priceExcludingTax = $this->quote->getShippingAddress()->getShippingAmount() - $this->quote->getShippingAddress()->getShippingTaxAmount();
$taxClassId = $this->taxConfig->getShippingTaxClass($this->storeManager->getStore()->getId());
$formFields['lineItems'][] = [
'amountExcludingTax' => $priceExcludingTax,
'taxAmount' => $this->quote->getShippingAddress()->getShippingTaxAmount(),
'description' => $order->getShippingDescription(),
'quantity' => 1,
'taxPercentage' => $this->quote->getShippingAddress()->getShippingTaxAmount()
];
}
return $formFields;
}
}
...@@ -50,10 +50,10 @@ class PaymentMethods extends AbstractHelper ...@@ -50,10 +50,10 @@ class PaymentMethods extends AbstractHelper
*/ */
protected $session; protected $session;
/** /**
* @var \Magento\Framework\Locale\ResolverInterface * @var \Magento\Framework\Locale\ResolverInterface
*/ */
protected $localeResolver; protected $localeResolver;
/** /**
* @var \Adyen\Payment\Logger\AdyenLogger * @var \Adyen\Payment\Logger\AdyenLogger
...@@ -92,7 +92,7 @@ class PaymentMethods extends AbstractHelper ...@@ -92,7 +92,7 @@ class PaymentMethods extends AbstractHelper
* @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
* @param Data $adyenHelper * @param Data $adyenHelper
* @param \Magento\Checkout\Model\Session $session * @param \Magento\Checkout\Model\Session $session
* @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
* @param \Adyen\Payment\Logger\AdyenLogger $adyenLogger * @param \Adyen\Payment\Logger\AdyenLogger $adyenLogger
* @param \Magento\Framework\View\Asset\Repository $assetRepo * @param \Magento\Framework\View\Asset\Repository $assetRepo
* @param \Magento\Framework\App\RequestInterface $request * @param \Magento\Framework\App\RequestInterface $request
...@@ -105,7 +105,7 @@ class PaymentMethods extends AbstractHelper ...@@ -105,7 +105,7 @@ class PaymentMethods extends AbstractHelper
\Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ScopeConfigInterface $config,
\Adyen\Payment\Helper\Data $adyenHelper, \Adyen\Payment\Helper\Data $adyenHelper,
\Magento\Checkout\Model\Session $session, \Magento\Checkout\Model\Session $session,
\Magento\Framework\Locale\ResolverInterface $localeResolver, \Magento\Framework\Locale\ResolverInterface $localeResolver,
\Adyen\Payment\Logger\AdyenLogger $adyenLogger, \Adyen\Payment\Logger\AdyenLogger $adyenLogger,
\Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\View\Asset\Repository $assetRepo,
\Magento\Framework\App\RequestInterface $request, \Magento\Framework\App\RequestInterface $request,
......
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