Commit cb5c1e90 authored by Rik ter Beek's avatar Rik ter Beek

Fix recurring payments, added bcmc as type for card recognition and removed duplicate card list

parent 7f9add7a
...@@ -56,7 +56,7 @@ class CcType extends \Magento\Payment\Model\Source\Cctype ...@@ -56,7 +56,7 @@ class CcType extends \Magento\Payment\Model\Source\Cctype
*/ */
public function getAllowedTypes() public function getAllowedTypes()
{ {
return ['VI', 'MC', 'AE', 'DI', 'JCB', 'UN', 'MI', 'DN']; return ['VI', 'MC', 'AE', 'DI', 'JCB', 'UN', 'MI', 'DN', 'BCMC'];
} }
/** /**
......
...@@ -61,5 +61,9 @@ ...@@ -61,5 +61,9 @@
<label>UnionPay</label> <label>UnionPay</label>
<code_alt>cup</code_alt> <code_alt>cup</code_alt>
</type> </type>
<type id="BCMC" order="80">
<label>Bancontact</label>
<code_alt>bcmc</code_alt>
</type>
</adyen_credit_cards> </adyen_credit_cards>
</payment> </payment>
...@@ -68,7 +68,7 @@ define( ...@@ -68,7 +68,7 @@ define(
* sets up the callbacks for card components and * sets up the callbacks for card components and
* set up the installments * set up the installments
*/ */
renderSecureFields: function() { renderSecureFields: function () {
var self = this; var self = this;
self.placeOrderAllowed(false); self.placeOrderAllowed(false);
...@@ -91,8 +91,15 @@ define( ...@@ -91,8 +91,15 @@ define(
holderNameRequired: true, holderNameRequired: true,
groupTypes: self.getAvailableCardTypeAltCodes(), groupTypes: self.getAvailableCardTypeAltCodes(),
onChange: function(state) { onChange: function (state) {
// what card is this ??
// isValid is not present on start
if (typeof state.isValid !== 'undefined' && state.isValid === false) {
self.creditCardDetailsValid(false);
self.placeOrderAllowed(false);
}
// Define the card type
// translate adyen card type to magento card type // translate adyen card type to magento card type
var creditCardType = self.getCcCodeByAltCode(state.brand); var creditCardType = self.getCcCodeByAltCode(state.brand);
...@@ -132,12 +139,18 @@ define( ...@@ -132,12 +139,18 @@ define(
} }
// Color the image of the credit card // Color the image of the credit card
self.creditCardType(creditCardType); // for BCMC as this is not a core payment method inside magento use maestro as brand detection
}else{ if (creditCardType == "BCMC") {
self.creditCardType("MI");
} else {
self.creditCardType(creditCardType);
}
} else {
self.creditCardType("") self.creditCardType("")
} }
}, },
onValid: function(state) { onValid: function (state) {
self.variant(state.brand); self.variant(state.brand);
self.creditCardNumber(state.data.encryptedCardNumber); self.creditCardNumber(state.data.encryptedCardNumber);
self.expiryMonth(state.data.encryptedExpiryMonth); self.expiryMonth(state.data.encryptedExpiryMonth);
...@@ -147,7 +160,7 @@ define( ...@@ -147,7 +160,7 @@ define(
self.creditCardDetailsValid(true); self.creditCardDetailsValid(true);
self.placeOrderAllowed(true); self.placeOrderAllowed(true);
}, },
onError: function(state) { onError: function (state) {
self.creditCardDetailsValid(false); self.creditCardDetailsValid(false);
self.placeOrderAllowed(false); self.placeOrderAllowed(false);
} }
...@@ -179,9 +192,9 @@ define( ...@@ -179,9 +192,9 @@ define(
/** /**
* Returns state of place order button * Returns state of place order button
* @returns {boolean} * @returns {boolean}
*/ */
isButtonActive: function() { isButtonActive: function () {
return this.isActive() && this.getCode() == this.isChecked() && this.isPlaceOrderActionAllowed() && this.placeOrderAllowed(); return this.isActive() && this.getCode() == this.isChecked() && this.isPlaceOrderActionAllowed() && this.placeOrderAllowed();
}, },
/** /**
* Custom place order function * Custom place order function
...@@ -247,7 +260,7 @@ define( ...@@ -247,7 +260,7 @@ define(
* *
* @returns {boolean} * @returns {boolean}
*/ */
isCardOwnerValid: function() { isCardOwnerValid: function () {
if (this.creditCardOwner().length == 0) { if (this.creditCardOwner().length == 0) {
return false; return false;
} }
...@@ -260,7 +273,7 @@ define( ...@@ -260,7 +273,7 @@ define(
* *
* @returns {*} * @returns {*}
*/ */
isCreditCardDetailsValid: function() { isCreditCardDetailsValid: function () {
return this.creditCardDetailsValid(); return this.creditCardDetailsValid();
}, },
/** /**
...@@ -269,9 +282,9 @@ define( ...@@ -269,9 +282,9 @@ define(
* @param altCode * @param altCode
* @returns {*} * @returns {*}
*/ */
getCcCodeByAltCode: function(altCode) { getCcCodeByAltCode: function (altCode) {
var ccTypes = window.checkoutConfig.payment.ccform.availableTypesByAlt[this.getCode()]; var ccTypes = window.checkoutConfig.payment.ccform.availableTypesByAlt[this.getCode()];
if (ccTypes.hasOwnProperty(altCode)) { if (ccTypes.hasOwnProperty(altCode)) {
return ccTypes[altCode]; return ccTypes[altCode];
} }
...@@ -283,7 +296,7 @@ define( ...@@ -283,7 +296,7 @@ define(
* *
* @returns {string[]} * @returns {string[]}
*/ */
getAvailableCardTypeAltCodes: function() { getAvailableCardTypeAltCodes: function () {
var ccTypes = window.checkoutConfig.payment.ccform.availableTypesByAlt[this.getCode()]; var ccTypes = window.checkoutConfig.payment.ccform.availableTypesByAlt[this.getCode()];
return Object.keys(ccTypes); return Object.keys(ccTypes);
}, },
......
...@@ -130,6 +130,15 @@ define( ...@@ -130,6 +130,15 @@ define(
var messageContainer = self.messageComponents['messages-' + value.reference_id]; var messageContainer = self.messageComponents['messages-' + value.reference_id];
// for recurring enable the placeOrder button at all times
var placeOrderAllowed = true;
if (self.hasVerification()) {
placeOrderAllowed = false;
} else {
// for recurring cards there is no validation needed
isValid(true);
}
return { return {
'label': value.agreement_label, 'label': value.agreement_label,
'value': value.reference_id, 'value': value.reference_id,
...@@ -142,11 +151,11 @@ define( ...@@ -142,11 +151,11 @@ define(
'creditCardExpMonth': ko.observable(creditCardExpMonth), 'creditCardExpMonth': ko.observable(creditCardExpMonth),
'creditCardExpYear': ko.observable(creditCardExpYear), 'creditCardExpYear': ko.observable(creditCardExpYear),
'getInstallments': ko.observableArray(installments), 'getInstallments': ko.observableArray(installments),
'placeOrderAllowed': ko.observable(false), 'placeOrderAllowed': ko.observable(placeOrderAllowed),
isButtonActive: function() { isButtonActive: function () {
return self.isActive() && this.getCode() == self.isChecked() && self.isBillingAgreementChecked() && this.placeOrderAllowed(); return self.isActive() && this.getCode() == self.isChecked() && self.isBillingAgreementChecked() && this.placeOrderAllowed();
}, },
/** /**
* @override * @override
...@@ -208,7 +217,7 @@ define( ...@@ -208,7 +217,7 @@ define(
if (self.agreement_data.variant == "bcmc") { if (self.agreement_data.variant == "bcmc") {
hideCVC = true; hideCVC = true;
self.placeOrderAllowed(true); self.placeOrderAllowed(true);
} else if(self.agreement_data.variant == "maestro") { } else if (self.agreement_data.variant == "maestro") {
// for maestro cvc is optional // for maestro cvc is optional
self.placeOrderAllowed(true); self.placeOrderAllowed(true);
} }
...@@ -239,7 +248,11 @@ define( ...@@ -239,7 +248,11 @@ define(
onChange: function (state) { onChange: function (state) {
if (state.isValid) { if (state.isValid) {
self.encryptedCreditCardVerificationNumber = state.data.encryptedSecurityCode; if (typeof state.data !== 'undefined' &&
typeof state.data.encryptedSecurityCode !== 'undefined'
) {
self.encryptedCreditCardVerificationNumber = state.data.encryptedSecurityCode;
}
} else { } else {
self.encryptedCreditCardVerificationNumber = ''; self.encryptedCreditCardVerificationNumber = '';
} }
...@@ -253,7 +266,7 @@ define( ...@@ -253,7 +266,7 @@ define(
} }
return; return;
}, },
onError: function(data) { onError: function (data) {
self.placeOrderAllowed(false); self.placeOrderAllowed(false);
isValid(false); isValid(false);
return; return;
...@@ -314,7 +327,7 @@ define( ...@@ -314,7 +327,7 @@ define(
return window.checkoutConfig.payment.adyenOneclick.checkoutUrl; return window.checkoutConfig.payment.adyenOneclick.checkoutUrl;
}, },
hasVerification: function () { hasVerification: function () {
return window.checkoutConfig.payment.adyenOneclick.hasCustomerInteraction; return self.hasVerification()
}, },
getMessageName: function () { getMessageName: function () {
return 'messages-' + value.reference_id; return 'messages-' + value.reference_id;
...@@ -407,6 +420,9 @@ define( ...@@ -407,6 +420,9 @@ define(
}, },
isShowLegend: function () { isShowLegend: function () {
return true; return true;
},
hasVerification: function () {
return window.checkoutConfig.payment.adyenOneclick.hasCustomerInteraction;
} }
}); });
} }
......
...@@ -68,38 +68,6 @@ ...@@ -68,38 +68,6 @@
<br/> <br/>
<!-- /ko --> <!-- /ko -->
<div class="field type">
<label data-bind="attr: {for: getCode() + '_cc_type'}" class="label">
<span><!-- ko text: $t('Credit Card Type')--><!-- /ko --></span>
</label>
<div class="control">
<ul class="credit-card-types">
<!-- ko foreach: {data: getCcAvailableTypesValues(), as: 'item'} -->
<li class="item" data-bind="css: {_active: $parent.creditCardType() == item.value} ">
<!--ko if: $parent.getIcons(item.value) -->
<img data-bind="attr: {
'src': $parent.getIcons(item.value).url,
'alt': item.type,
'width': $parent.getIcons(item.value).width,
'height': $parent.getIcons(item.value).height
}">
<!--/ko-->
</li>
<!--/ko-->
</ul>
<p class="helper-text" data-bind="css: {hidden: creditCardType() !== ''} ">
<!-- ko text: $t('(Please provide a card with the type from the list above)')-->
<!-- /ko --></p>
<input type="hidden"
name="payment[cc_type]"
class="input-text"
value=""
data-bind="attr: {id: getCode() + '_cc_type', 'data-container': getCode() + '-cc-type'},
value: creditCardType
">
</div>
</div>
<div class="field number cardContainerField"> <div class="field number cardContainerField">
<div afterRender="renderSecureFields()" data-bind="attr: { id: 'cardContainer'}"></div> <div afterRender="renderSecureFields()" data-bind="attr: { id: 'cardContainer'}"></div>
</div> </div>
......
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