From 9bb82a1d0d30c144b6dd17d4f33c91fc61f0c758 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@ebay.com> Date: Wed, 1 Jul 2015 18:12:59 +0300 Subject: [PATCH] MAGETWO-39446: "Place Order" button should be disabled until billing address is set --- .../view/frontend/web/js/view/billing-address.js | 14 +++++++++++++- .../view/frontend/web/js/view/payment/default.js | 6 ++++++ .../web/template/payment/banktransfer.html | 7 ++++++- .../web/template/payment/cashondelivery.html | 7 ++++++- .../frontend/web/template/payment/checkmo.html | 7 ++++++- .../web/template/payment/purchaseorder-form.html | 7 ++++++- .../view/frontend/web/template/payment/free.html | 6 +++++- .../view/frontend/web/template/payment/iframe.html | 4 +++- 8 files changed, 51 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js index 2ca86001d72..5f6dbfed0b8 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js @@ -18,7 +18,8 @@ define( function (ko, Component, customer, addressList, quote, createBillingAddress, selectBillingAddress, $t) { "use strict"; - var newAddressOption = { + var lastSelectedBillingAddress = null, + newAddressOption = { getAddressInline: function() { return $t('New Address'); }, @@ -71,6 +72,8 @@ define( selectBillingAddress(quote.shippingAddress()); this.isAddressDetailsVisible(true); } else { + lastSelectedBillingAddress = quote.billingAddress(); + quote.billingAddress(null); this.isAddressDetailsVisible(false); } return true; @@ -97,10 +100,13 @@ define( }, editAddress: function () { + lastSelectedBillingAddress = quote.billingAddress(); + quote.billingAddress(null); this.isAddressDetailsVisible(false); }, cancelAddressEdit: function () { + this.restoreBillingAddress(); if (quote.billingAddress()) { // restore 'Same As Shipping' checkbox state this.isAddressSameAsShipping( @@ -110,6 +116,12 @@ define( } }, + restoreBillingAddress: function() { + if (lastSelectedBillingAddress != null) { + selectBillingAddress(lastSelectedBillingAddress); + } + }, + onAddressChange: function (address) { this.isAddressFormVisible(address == newAddressOption); } diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js index 7fa9e10b69a..1734a79d09f 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js @@ -17,6 +17,7 @@ define( 'use strict'; return Component.extend({ redirectAfterPlaceOrder: true, + isPlaceOrderActionAllowed: ko.observable(true), /** * Initialize view. * @@ -24,6 +25,11 @@ define( */ initialize: function () { this._super().initChildren(); + + quote.billingAddress.subscribe(function(address) { + this.isPlaceOrderActionAllowed((address !== null)); + }, this); + return this; }, diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html index dfcbf313197..66cf873c311 100644 --- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html +++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html @@ -29,7 +29,12 @@ <div class="primary"> <button class="action primary checkout" type="submit" - data-bind="click: placeOrder, attr: {'title': $t('Place Order')}, enable: (getCode() == isChecked())" + data-bind=" + click: placeOrder, + attr: {'title': $t('Place Order')}, + enable: (getCode() == isChecked()), + css: {disabled: !isPlaceOrderActionAllowed()} + " disabled> <span data-bind="text: $t('Place Order')"></span> </button> diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html index 569d5b0a48e..10287d8090d 100644 --- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html +++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html @@ -29,7 +29,12 @@ <div class="primary"> <button class="action primary checkout" type="submit" - data-bind="click: placeOrder, attr: {title: $t('Place Order')}, enable: (getCode() == isChecked())" + data-bind=" + click: placeOrder, + attr: {title: $t('Place Order')}, + enable: (getCode() == isChecked()), + css: {disabled: !isPlaceOrderActionAllowed()} + " disabled> <span data-bind="text: $t('Place Order')"></span> </button> diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html index 58f85845434..ba6c374417b 100644 --- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html +++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html @@ -41,7 +41,12 @@ <div class="primary"> <button class="action primary checkout" type="submit" - data-bind="click: placeOrder, attr: {title: $t('Place Order')}, enable: (getCode() == isChecked())" + data-bind=" + click: placeOrder, + attr: {title: $t('Place Order')}, + css: {disabled: !isPlaceOrderActionAllowed()}, + enable: (getCode() == isChecked()) + " disabled> <span data-bind="text: $t('Place Order')"></span> </button> diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html index 585d61feae7..ab531080cdf 100644 --- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html +++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html @@ -49,7 +49,12 @@ <div class="primary"> <button class="action primary checkout" type="submit" - data-bind="click: placeOrder, attr: {title: $t('Place Order')}, enable: (getCode() == isChecked())" + data-bind=" + click: placeOrder, + attr: {title: $t('Place Order')}, + enable: (getCode() == isChecked()), + css: {disabled: !isPlaceOrderActionAllowed()} + " data-role="review-save"> <span data-bind="text: $t('Place Order')"></span> </button> diff --git a/app/code/Magento/Payment/view/frontend/web/template/payment/free.html b/app/code/Magento/Payment/view/frontend/web/template/payment/free.html index fb33eafd3cf..483920bbe98 100644 --- a/app/code/Magento/Payment/view/frontend/web/template/payment/free.html +++ b/app/code/Magento/Payment/view/frontend/web/template/payment/free.html @@ -27,7 +27,11 @@ <div class="primary"> <button class="action primary checkout" type="submit" - data-bind="click: placeOrder, attr: {title: $t('Place Order')}"> + data-bind=" + click: placeOrder, + attr: {title: $t('Place Order')}, + css: {disabled: !isPlaceOrderActionAllowed()} + "> <span data-bind="text: $t('Place Order')"></span> </button> </div> diff --git a/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html b/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html index 2fec488a491..9e4d53bda73 100644 --- a/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html +++ b/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html @@ -30,7 +30,9 @@ <div class="primary"> <button data-role="review-save" type="submit" data-bind="attr: {title: $t('Place order')}" - class="button action primary checkout"><span data-bind="text: $t('Place order')"></span></button> + class="button action primary checkout"> + <span data-bind="text: $t('Place order')"></span> + </button> <button type="submit" id="originalPlaceOrder" class="hidden" data-bind="click: originalPlaceOrder($parents[1])"></button> </div> -- GitLab