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 46c6758b authored by Rik ter Beek's avatar Rik ter Beek

#61 add gender,dob and telephone number iput fields for openinvoice

parent 1d9aaa5d
...@@ -27,6 +27,10 @@ use Symfony\Component\Config\Definition\Exception\Exception; ...@@ -27,6 +27,10 @@ use Symfony\Component\Config\Definition\Exception\Exception;
class Pos extends \Magento\Payment\Block\Form class Pos extends \Magento\Payment\Block\Form
{ {
/**
* quest prefix
*/
const GUEST_ID = 'customer_';
protected $_orderFactory; protected $_orderFactory;
/** /**
......
...@@ -28,6 +28,11 @@ use Symfony\Component\Config\Definition\Exception\Exception; ...@@ -28,6 +28,11 @@ use Symfony\Component\Config\Definition\Exception\Exception;
class Redirect extends \Magento\Payment\Block\Form class Redirect extends \Magento\Payment\Block\Form
{ {
/**
* quest prefix
*/
const GUEST_ID = 'customer_';
/** /**
* @var \Magento\Sales\Model\OrderFactory * @var \Magento\Sales\Model\OrderFactory
*/ */
...@@ -118,7 +123,9 @@ class Redirect extends \Magento\Payment\Block\Form ...@@ -118,7 +123,9 @@ class Redirect extends \Magento\Payment\Block\Form
if ($this->getPaymentMethodSelectionOnAdyen()) { if ($this->getPaymentMethodSelectionOnAdyen()) {
$url = 'https://test.adyen.com/hpp/select.shtml'; $url = 'https://test.adyen.com/hpp/select.shtml';
} else { } else {
if ($this->_order->getPayment()->getAdditionalInformation('brand_code') == 'klarna') { if ($this->_adyenHelper->isPaymentMethodOpenInvoiceMethod(
$this->_order->getPayment()->getAdditionalInformation('brand_code')
)) {
$url = "https://test.adyen.com/hpp/skipDetails.shtml"; $url = "https://test.adyen.com/hpp/skipDetails.shtml";
} else { } else {
$url = "https://test.adyen.com/hpp/details.shtml"; $url = "https://test.adyen.com/hpp/details.shtml";
...@@ -133,7 +140,9 @@ class Redirect extends \Magento\Payment\Block\Form ...@@ -133,7 +140,9 @@ class Redirect extends \Magento\Payment\Block\Form
if ($this->getPaymentMethodSelectionOnAdyen()) { if ($this->getPaymentMethodSelectionOnAdyen()) {
$url = 'https://live.adyen.com/hpp/select.shtml'; $url = 'https://live.adyen.com/hpp/select.shtml';
} else { } else {
if ($this->_order->getPayment()->getAdditionalInformation('brand_code') == 'klarna') { if ($this->_adyenHelper->isPaymentMethodOpenInvoiceMethod(
$this->_order->getPayment()->getAdditionalInformation('brand_code')
)) {
$url = "https://live.adyen.com/hpp/skipDetails.shtml"; $url = "https://live.adyen.com/hpp/skipDetails.shtml";
} else { } else {
$url = "https://live.adyen.com/hpp/details.shtml"; $url = "https://live.adyen.com/hpp/details.shtml";
...@@ -194,6 +203,7 @@ class Redirect extends \Magento\Payment\Block\Form ...@@ -194,6 +203,7 @@ class Redirect extends \Magento\Payment\Block\Form
} }
$formFields = []; $formFields = [];
$formFields['merchantAccount'] = $merchantAccount; $formFields['merchantAccount'] = $merchantAccount;
$formFields['merchantReference'] = $realOrderId; $formFields['merchantReference'] = $realOrderId;
$formFields['paymentAmount'] = (int)$amount; $formFields['paymentAmount'] = (int)$amount;
...@@ -261,6 +271,10 @@ class Redirect extends \Magento\Payment\Block\Form ...@@ -261,6 +271,10 @@ class Redirect extends \Magento\Payment\Block\Form
if ($this->_order->getPayment()->getAdditionalInformation( if ($this->_order->getPayment()->getAdditionalInformation(
\Adyen\Payment\Observer\AdyenHppDataAssignObserver::BRAND_CODE) == "klarna" \Adyen\Payment\Observer\AdyenHppDataAssignObserver::BRAND_CODE) == "klarna"
) { ) {
// // needed for DE and AT
$formFields['klarna.acceptPrivacyPolicy'] = 'true';
// don't allow editable shipping/delivery address // don't allow editable shipping/delivery address
$formFields['billingAddressType'] = "1"; $formFields['billingAddressType'] = "1";
$formFields['deliveryAddressType'] = "1"; $formFields['deliveryAddressType'] = "1";
......
...@@ -54,7 +54,24 @@ class HppCommand implements CommandInterface ...@@ -54,7 +54,24 @@ class HppCommand implements CommandInterface
// do not send email // do not send email
$payment = $payment->getPayment(); $payment = $payment->getPayment();
$payment->getOrder()->setCanSendNewEmailFlag(false); $order = $payment->getOrder();
$order->setCanSendNewEmailFlag(false);
// update customer based on additionalFields
if ($payment->getAdditionalInformation("gender")) {
$order->setCustomerGender(\Adyen\Payment\Model\Gender::getMagentoGenderFromAdyenGender(
$payment->getAdditionalInformation("gender"))
);
}
if ($payment->getAdditionalInformation("dob")) {
$order->setCustomerDob($payment->getAdditionalInformation("dob"));
}
if ($payment->getAdditionalInformation("telephone")) {
$order->getBillingAddress()->setTelephone($payment->getAdditionalInformation("telephone"));
}
// update status and state // update status and state
$stateObject->setState(\Magento\Sales\Model\Order::STATE_NEW); $stateObject->setState(\Magento\Sales\Model\Order::STATE_NEW);
......
...@@ -29,6 +29,11 @@ use Magento\Payment\Gateway\CommandInterface; ...@@ -29,6 +29,11 @@ use Magento\Payment\Gateway\CommandInterface;
class PayByMailCommand implements CommandInterface class PayByMailCommand implements CommandInterface
{ {
/**
* quest prefix
*/
const GUEST_ID = 'customer_';
/** /**
* @var \Adyen\Payment\Helper\Data * @var \Adyen\Payment\Helper\Data
*/ */
......
...@@ -768,6 +768,22 @@ class Data extends AbstractHelper ...@@ -768,6 +768,22 @@ class Data extends AbstractHelper
return $billingAgreements; return $billingAgreements;
} }
/**
* @param $paymentMethod
* @return bool
*/
public function isPaymentMethodOpenInvoiceMethod($paymentMethod)
{
if (strlen($paymentMethod) >= 9 && substr($paymentMethod, 0, 9) == 'afterpay_') {
return true;
} else if($paymentMethod == 'klarna') {
return true;
} else {
return false;
}
}
/** /**
* @return bool * @return bool
*/ */
......
...@@ -201,6 +201,11 @@ class PaymentMethods extends AbstractHelper ...@@ -201,6 +201,11 @@ class PaymentMethods extends AbstractHelper
$paymentMethodCode = $paymentMethod['brandCode']; $paymentMethodCode = $paymentMethod['brandCode'];
$paymentMethod = $this->_fieldMapPaymentMethod($paymentMethod); $paymentMethod = $this->_fieldMapPaymentMethod($paymentMethod);
// check if payment method is an openinvoice method
$paymentMethod['isPaymentMethodOpenInvoiceMethod'] =
$this->_adyenHelper->isPaymentMethodOpenInvoiceMethod($paymentMethodCode);
// add icon location in result // add icon location in result
if ($this->_adyenHelper->showLogos()) { if ($this->_adyenHelper->showLogos()) {
......
...@@ -1074,10 +1074,8 @@ class Cron ...@@ -1074,10 +1074,8 @@ class Cron
// if auto capture mode for openinvoice is turned on then use auto capture // if auto capture mode for openinvoice is turned on then use auto capture
if ($captureModeOpenInvoice == true && if ($captureModeOpenInvoice == true &&
(strcmp($this->_paymentMethod, 'openinvoice') === 0 || $this->_adyenHelper->isPaymentMethodOpenInvoiceMethod($this->_paymentMethod)
strcmp($this->_paymentMethod, 'afterpay_default') === 0 || ) {
strcmp($this->_paymentMethod, 'klarna') === 0)) {
$this->_adyenLogger->addAdyenNotificationCronjob( $this->_adyenLogger->addAdyenNotificationCronjob(
'This payment method is configured to be working as auto capture ' 'This payment method is configured to be working as auto capture '
); );
...@@ -1106,10 +1104,7 @@ class Cron ...@@ -1106,10 +1104,7 @@ class Cron
* online capture after delivery, use Magento backend to online invoice * online capture after delivery, use Magento backend to online invoice
* (if the option auto capture mode for openinvoice is not set) * (if the option auto capture mode for openinvoice is not set)
*/ */
if (strcmp($this->_paymentMethod, 'openinvoice') === 0 || if ($this->_adyenHelper->isPaymentMethodOpenInvoiceMethod($this->_paymentMethod)) {
strcmp($this->_paymentMethod, 'afterpay_default') === 0 ||
strcmp($this->_paymentMethod, 'klarna') === 0) {
$this->_adyenLogger->addAdyenNotificationCronjob('Capture mode for klarna is by default set to manual'); $this->_adyenLogger->addAdyenNotificationCronjob('Capture mode for klarna is by default set to manual');
return false; return false;
} }
......
<?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\Model;
class Gender
{
const MALE = '1';
const FEMALE = '2';
const MALE_VALUE = 'MALE';
const FEMALE_VALUE = 'FEMALE';
/**
* @return array
*/
public static function getGenderTypes()
{
return [
self::MALE_VALUE => __('Male'),
self::FEMALE_VALUE => __('Female')
];
}
/**
* Get Magento Gender Value from Adyen Gender Value
*
* @param string $genderValue
* @return null|string
*/
public static function getMagentoGenderFromAdyenGender($genderValue)
{
$gender = null;
if ($genderValue == self::MALE_VALUE) {
$gender = self::MALE;
} elseif ($genderValue == self::FEMALE_VALUE) {
$gender = self::FEMALE;
}
return $gender;
}
/**
* @param string $genderValue
* @return null|string
*/
public static function getAdyenGenderFromMagentoGender($genderValue)
{
$gender = null;
if ($genderValue == self::MALE) {
$gender = self::MALE_VALUE;
} elseif ($genderValue == self::FEMALE) {
$gender = self::FEMALE_VALUE;
}
return $gender;
}
}
\ No newline at end of file
...@@ -54,22 +54,33 @@ class AdyenHppConfigProvider implements ConfigProviderInterface ...@@ -54,22 +54,33 @@ class AdyenHppConfigProvider implements ConfigProviderInterface
*/ */
protected $_urlBuilder; protected $_urlBuilder;
/**
* @var \Magento\Customer\Model\Session
*/
protected $_customerSession;
/** /**
* AdyenHppConfigProvider constructor. * AdyenHppConfigProvider constructor.
* *
* @param PaymentHelper $paymentHelper * @param PaymentHelper $paymentHelper
* @param \Adyen\Payment\Helper\Data $adyenHelper * @param \Adyen\Payment\Helper\Data $adyenHelper
* @param \Magento\Framework\App\RequestInterface $request
* @param \Magento\Framework\UrlInterface $urlBuilder
* @param \Magento\Customer\Model\Session $customerSession
*/ */
public function __construct( public function __construct(
PaymentHelper $paymentHelper, PaymentHelper $paymentHelper,
\Adyen\Payment\Helper\Data $adyenHelper, \Adyen\Payment\Helper\Data $adyenHelper,
\Magento\Framework\App\RequestInterface $request, \Magento\Framework\App\RequestInterface $request,
\Magento\Framework\UrlInterface $urlBuilder \Magento\Framework\UrlInterface $urlBuilder,
\Magento\Customer\Model\Session $customerSession
) { ) {
$this->_paymentHelper = $paymentHelper; $this->_paymentHelper = $paymentHelper;
$this->_adyenHelper = $adyenHelper; $this->_adyenHelper = $adyenHelper;
$this->_request = $request; $this->_request = $request;
$this->_urlBuilder = $urlBuilder; $this->_urlBuilder = $urlBuilder;
$this->_customerSession = $customerSession;
} }
/** /**
...@@ -90,9 +101,40 @@ class AdyenHppConfigProvider implements ConfigProviderInterface ...@@ -90,9 +101,40 @@ class AdyenHppConfigProvider implements ConfigProviderInterface
] ]
]; ];
// get customer
if ($this->_customerSession->isLoggedIn()) {
$gender = \Adyen\Payment\Model\Gender::getAdyenGenderFromMagentoGender(
$this->_customerSession->getCustomerData()->getGender()
);
// format to calendar date
$dob = $this->_customerSession->getCustomerData()->getDob();
$dob = strtotime($dob);
$dob = date('m/d/Y', $dob);
} else {
$gender = "";
$dob = "";
}
// add to config
$config['payment'] ['adyenHpp']['gender'] = $gender;
$config['payment'] ['adyenHpp']['dob'] = $dob;
// gender types
$config['payment'] ['adyenHpp']['genderTypes'] = \Adyen\Payment\Model\Gender::getGenderTypes();
$paymentMethodSelectionOnAdyen = $paymentMethodSelectionOnAdyen =
$this->_adyenHelper->getAdyenHppConfigDataFlag('payment_selection_on_adyen'); $this->_adyenHelper->getAdyenHppConfigDataFlag('payment_selection_on_adyen');
$config['payment'] ['adyenHpp']['isPaymentMethodSelectionOnAdyen'] = $paymentMethodSelectionOnAdyen; $config['payment'] ['adyenHpp']['isPaymentMethodSelectionOnAdyen'] = $paymentMethodSelectionOnAdyen;
$config['payment'] ['adyenHpp']['showGender'] = $this->_adyenHelper->getAdyenHppConfigDataFlag('show_gender');
$config['payment'] ['adyenHpp']['showDob'] = $this->_adyenHelper->getAdyenHppConfigDataFlag('show_dob');
$config['payment'] ['adyenHpp']['showTelephone'] = $this->_adyenHelper->getAdyenHppConfigDataFlag(
'show_telephone'
);
return $config; return $config;
} }
......
...@@ -33,13 +33,20 @@ class AdyenHppDataAssignObserver extends AbstractDataAssignObserver ...@@ -33,13 +33,20 @@ class AdyenHppDataAssignObserver extends AbstractDataAssignObserver
{ {
const BRAND_CODE = 'brand_code'; const BRAND_CODE = 'brand_code';
const ISSUER_ID = 'issuer_id'; const ISSUER_ID = 'issuer_id';
const GENDER = 'gender';
const DOB = 'dob';
const TELEPHONE = 'telephone';
/** /**
* @var array * @var array
*/ */
protected $additionalInformationList = [ protected $additionalInformationList = [
self::BRAND_CODE, self::BRAND_CODE,
self::ISSUER_ID self::ISSUER_ID,
self::GENDER,
self::DOB,
self::TELEPHONE
]; ];
/** /**
......
...@@ -55,6 +55,31 @@ ...@@ -55,6 +55,31 @@
<backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model> <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model>
<config_path>payment/adyen_hpp/hmac_live</config_path> <config_path>payment/adyen_hpp/hmac_live</config_path>
</field> </field>
<group id="adyen_hpp_openinvoice_settings" translate="label" showInDefault="1" showInWebsite="1" sortOrder="100">
<label>Klarna\Afterpay Settings</label>
<frontend_model>Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
<field id="show_gender" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Show Gender</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
<config_path>payment/adyen_hpp/show_gender</config_path>
</field>
<field id="show_dob" translate="label" type="select" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Show Date of Birth</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
<config_path>payment/adyen_hpp/show_dob</config_path>
</field>
<field id="show_telephone" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Show Telephone</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
<config_path>payment/adyen_hpp/show_telephone</config_path>
</field>
<field id="ignore_second_address_field" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Ignore the second address line field</label>
<tooltip>If you do not want to send the second line address field to Klarna set this setting to 'Yes'</tooltip>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
<config_path>payment/adyen_hpp/ignore_second_address_field</config_path>
</field>
</group>
<group id="adyen_hpp_advanced_settings" translate="label" showInDefault="1" showInWebsite="1" sortOrder="200"> <group id="adyen_hpp_advanced_settings" translate="label" showInDefault="1" showInWebsite="1" sortOrder="200">
<label>Advanced Settings</label> <label>Advanced Settings</label>
<frontend_model>Magento\Config\Block\System\Config\Form\Fieldset</frontend_model> <frontend_model>Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
......
...@@ -61,6 +61,11 @@ ...@@ -61,6 +61,11 @@
background-position: 0 -272px; background-position: 0 -272px;
} }
.checkout-payment-method .input-text._has-datepicker {
width:20%;
margin-right:10px;
}
...@@ -52,7 +52,10 @@ define( ...@@ -52,7 +52,10 @@ define(
this._super() this._super()
.observe([ .observe([
'brandCode', 'brandCode',
'issuerId' 'issuerId',
'gender',
'dob',
'telephone'
]); ]);
return this; return this;
}, },
...@@ -100,36 +103,42 @@ define( ...@@ -100,36 +103,42 @@ define(
var paymentList = _.map(paymentMethods, function(value) { var paymentList = _.map(paymentMethods, function(value) {
if(value.brandCode == "ideal") { var result = {};
return { result.value = value.brandCode;
'value': value.brandCode, result.name = value;
'name': value, result.method = self.item.method;
'method': self.item.method, result.getCode = function() {
'issuerIds': value.issuers,
'issuerId': ko.observable(null),
getCode: function() {
return self.item.method; return self.item.method;
}, };
validate: function () { result.validate = function () {
return self.validate(); return self.validate();
} }
}
} else {
return { if(value.brandCode == "ideal") {
'value': value.brandCode, result.issuerIds = value.issuers;
'name': value, result.issuerId = ko.observable(null);
'method': self.item.method, } else if(value.isPaymentMethodOpenInvoiceMethod) {
getCode: function() { result.telephone = ko.observable(quote.shippingAddress().telephone);
return self.item.method; result.gender = ko.observable(window.checkoutConfig.payment.adyenHpp.gender);
result.dob = ko.observable(window.checkoutConfig.payment.adyenHpp.dob);
result.datepickerValue = ko.observable(); // needed ??
}
result.isPaymentMethodOpenInvoiceMethod = function() {
return value.isPaymentMethodOpenInvoiceMethod;
}
return result;
});
return paymentList;
}, },
validate: function () { getGenderTypes: function() {
return self.validate(); // return window.checkoutConfig.payment.adyenHpp.genderTypes;
} return _.map(window.checkoutConfig.payment.adyenHpp.genderTypes, function(value, key) {
} return {
} 'key': key,
'value': value
} }
); });
return paymentList;
}, },
/** Redirect to adyen */ /** Redirect to adyen */
continueToAdyen: function () { continueToAdyen: function () {
...@@ -146,26 +155,24 @@ define( ...@@ -146,26 +155,24 @@ define(
if (this.validate() && additionalValidators.validate()) { if (this.validate() && additionalValidators.validate()) {
// for ideal add brand_code in request
var data = {};
data.method = self.method;
data.po_number = null;
var additionalData = {};
additionalData.brand_code = self.value;
if(brandCode() == "ideal") { if(brandCode() == "ideal") {
var data = { additionalData.issuer_id = this.issuerId();
"method": self.method, } else if(brandCode() == "klarna") {
"po_number": null, additionalData.gender = this.gender();
"additional_data": { additionalData.dob = this.dob();
issuer_id: this.issuerId(), additionalData.telephone = this.telephone();
brand_code: self.value
}
};
} else {
var data = {
"method": self.method,
"po_number": null,
"additional_data": {
brand_code: self.value
}
};
} }
data.additional_data = additionalData;
selectPaymentMethodAction(data); selectPaymentMethodAction(data);
setPaymentMethodAction(); setPaymentMethodAction();
} }
...@@ -212,6 +219,15 @@ define( ...@@ -212,6 +219,15 @@ define(
isIconEnabled: function() { isIconEnabled: function() {
return window.checkoutConfig.payment.adyen.showLogo; return window.checkoutConfig.payment.adyen.showLogo;
}, },
showGender: function() {
return window.checkoutConfig.payment.adyenHpp.showGender;
},
showDob: function() {
return window.checkoutConfig.payment.adyenHpp.showDob;
},
showTelephone: function() {
return window.checkoutConfig.payment.adyenHpp.showTelephone;
},
validate: function () { validate: function () {
return true; return true;
} }
......
...@@ -53,10 +53,8 @@ ...@@ -53,10 +53,8 @@
</div> </div>
<fieldset class="fieldset" data-bind='attr: {id: "payment_form_" + $parent.getCode() + "_" + value}'> <fieldset class="fieldset" data-bind='attr: {id: "payment_form_" + $parent.getCode() + "_" + value}'>
<div class="payment-method-note">
<!-- ko if: value == 'ideal' --> <!-- ko if: value == 'ideal' -->
<label data-bind="attr: {'for': 'issuerId'}" class="label"> <label data-bind="attr: {'for': 'issuerId'}" class="label">
<span><!-- ko text: $t('Select Your Bank') --><!-- /ko --></span> <span><!-- ko text: $t('Select Your Bank') --><!-- /ko --></span>
</label> </label>
...@@ -68,11 +66,72 @@ ...@@ -68,11 +66,72 @@
value: issuerId, value: issuerId,
optionsCaption: $t('Choose Your Bank')"> optionsCaption: $t('Choose Your Bank')">
</select> </select>
<!--/ko-->
<!-- ko if: isPaymentMethodOpenInvoiceMethod() -->
<!-- ko if: $parent.showGender() -->
<div class="field gender_type type required">
<label data-bind="attr: {for: getCode() + '_gender_type'}" class="label">
<span><!-- ko text: $t('Gender')--><!-- /ko --></span>
</label>
<div class="control">
<select class="select select-gender-type"
name="payment[gender]"
data-bind="attr: {id: getCode() + '_gender_type', 'data-container': getCode() + '-gender-type', 'data-validate': JSON.stringify({required:true})},
options: $parent.getGenderTypes(),
optionsValue: 'key',
optionsText: 'value',
optionsCaption: $t('-Please select-'),
value: gender"
data-validate="{required:true}">
</select>
</div>
</div>
<!--/ko--> <!--/ko-->
<!-- ko if: $parent.showDob() -->
<div class="field required">
<label data-bind="attr: {for: getCode() + '_dob'}" class="label">
<span><!-- ko text: $t('Date of Birth')--><!-- /ko --></span>
</label>
<div class="control">
<input type="text" class="input-text"
name="payment[dob]"
data-bind="
datepicker: { storage: datepickerValue, options: { showOn: 'both' } },
attr: {
title: $t('Date of Birth'),
'data-container': getCode() + '-dob',
'data-validate': JSON.stringify({'required':true })
},
value: dob"
/>
</div>
</div>
<!--/ko-->
<!-- ko if: $parent.showTelephone() -->
<div class="field required">
<label data-bind="attr: {for: getCode() + '_telephone'}" class="label">
<span><!-- ko text: $t('Telephone')--><!-- /ko --></span>
</label>
<div class="control">
<input type="number" class="input-text"
name="payment[telephone]"
data-bind="
attr: {
id: getCode() + '_telephone',
title: $t('Telephone'),
'data-container': getCode() + '-telephone',
'data-validate': JSON.stringify({'required-number':true })
},
value: telephone"
/>
</div>
</div> </div>
<!--/ko-->
<!--/ko-->
</fieldset> </fieldset>
<div class="checkout-agreements-block"> <div class="checkout-agreements-block">
<!-- ko foreach: $parents[1].getRegion('before-place-order') --> <!-- ko foreach: $parents[1].getRegion('before-place-order') -->
......
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