From bfe5aff83aac5680691a5e7f2fbe4c947fe2f038 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Fri, 3 Jul 2015 16:57:09 +0300 Subject: [PATCH 01/10] MAGETWO-39418: [TD] Decrease NPath and Cyclomatic complexities of the new code --- .../Model/ShippingInformationManagement.php | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Checkout/Model/ShippingInformationManagement.php b/app/code/Magento/Checkout/Model/ShippingInformationManagement.php index 4cf21372af894..87e3cb28ec78d 100644 --- a/app/code/Magento/Checkout/Model/ShippingInformationManagement.php +++ b/app/code/Magento/Checkout/Model/ShippingInformationManagement.php @@ -94,7 +94,6 @@ public function __construct( /** * {@inheritDoc} - * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function saveAddressInformation( @@ -107,15 +106,7 @@ public function saveAddressInformation( /** @var \Magento\Quote\Model\Quote $quote */ $quote = $this->quoteRepository->getActive($cartId); - if ($quote->isVirtual()) { - throw new NoSuchEntityException( - __('Cart contains virtual product(s) only. Shipping address is not applicable.') - ); - } - - if (0 == $quote->getItemsCount()) { - throw new InputException(__('Shipping method is not applicable for empty cart')); - } + $this->validateQuote($quote); $saveInAddressBook = $address->getSaveInAddressBook() ? 1 : 0; $sameAsBilling = $address->getSameAsBilling() ? 1 : 0; @@ -139,6 +130,7 @@ public function saveAddressInformation( $address->setShippingMethod($carrierCode . '_' . $methodCode); try { + /** TODO: refactor this code. Eliminate save operation */ $address->save(); $address->collectTotals(); } catch (\Exception $e) { @@ -175,4 +167,22 @@ public function saveAddressInformation( $paymentDetails->setTotals($this->cartTotalsRepository->get($cartId)); return $paymentDetails; } + + /** + * @param \Magento\Quote\Model\Quote $quote + * @throws InputException + * @throws NoSuchEntityException + */ + protected function validateQuote(\Magento\Quote\Model\Quote $quote) + { + if ($quote->isVirtual()) { + throw new NoSuchEntityException( + __('Cart contains virtual product(s) only. Shipping address is not applicable.') + ); + } + + if (0 == $quote->getItemsCount()) { + throw new InputException(__('Shipping method is not applicable for empty cart')); + } + } } From eab5d1306ea177730fc6397e3eb68d654818a842 Mon Sep 17 00:00:00 2001 From: Alex Akimov Date: Fri, 3 Jul 2015 16:31:17 +0300 Subject: [PATCH 02/10] MAGETWO-39505: Update iframe Payment Method Flow --- .../Checkout/view/frontend/web/js/view/payment/default.js | 2 ++ 1 file changed, 2 insertions(+) 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 a7a54ec052556..29c2254957116 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 @@ -61,7 +61,9 @@ define( $.when(placeOrder).fail(function(){ self.isPlaceOrderActionAllowed(true); }); + return true; } + return false; }, selectPaymentMethod: function() { From c37a099a2de67cfce421aa5a5d865bcbea8bd026 Mon Sep 17 00:00:00 2001 From: Iryna Lagno Date: Fri, 3 Jul 2015 19:24:27 +0300 Subject: [PATCH 03/10] MAGETWO-39711: There is ability to place order with empty required field "Purchase Order Number" --- .../web/js/view/payment/method-renderer/purchaseorder-method.js | 2 +- .../view/frontend/web/template/payment/purchaseorder-form.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js b/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js index a5d09084f5cb8..0f75469f87f16 100644 --- a/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js +++ b/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js @@ -36,7 +36,7 @@ define( }, validate: function () { - var form = '#purchaseorder'; + var form = 'form[data-role=purchaseorder-form]'; return $(form).validation() && $(form).validation('isValid'); } }); 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 ab531080cdfde..87858cef568ca 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 @@ -5,7 +5,7 @@ */ -->
-
+
Date: Mon, 6 Jul 2015 11:24:15 +0300 Subject: [PATCH 04/10] MAGETWO-39761: Credit card type is undefined in iframe request (Transparent payment methods) --- .../Payment/view/frontend/web/template/payment/cc-form.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html b/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html index eb7865ddf83c8..cf70014447ae4 100644 --- a/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html +++ b/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html @@ -31,10 +31,12 @@ + data-bind="attr: {id: getCode() + '_cc_type', 'data-container': getCode() + '-cc-type'}, + value: creditCardType + ">
From 11771c7815dd6bd3eaa90ce70a7949a63f4d3294 Mon Sep 17 00:00:00 2001 From: Olexii Korshenko Date: Mon, 6 Jul 2015 13:18:18 +0300 Subject: [PATCH 05/10] MAGETWO-39758: Add Loader for Mini Shopping Cart --- .../Catalog/view/frontend/web/js/catalog-add-to-cart.js | 1 + .../Checkout/view/frontend/templates/cart/minicart.phtml | 4 ++-- .../Magento/Checkout/view/frontend/web/js/view/minicart.js | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js index 0f51c233b4946..1141f9e1c5471 100644 --- a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js +++ b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js @@ -49,6 +49,7 @@ define([ ajaxSubmit: function(form) { var self = this; + $(self.options.minicartSelector).trigger('contentLoading'); $.ajax({ url: form.attr('action'), data: form.serialize(), diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml index 6d08bcb4bbf50..6f05b3b6a4cb5 100644 --- a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml +++ b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml @@ -9,12 +9,12 @@ /** @var $block \Magento\Checkout\Block\Cart\Sidebar */ ?> -
+
+ data-bind="css: { empty: cart().summary_count == 0 }, blockLoader: isLoading"> diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js index 51e59d8ff6bb3..5e35ebba7438c 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js @@ -57,12 +57,18 @@ define([ return Component.extend({ shoppingCartUrl: window.checkout.shoppingCartUrl, initialize: function () { + var self = this; this._super(); this.cart = customerData.get('cart'); this.cart.subscribe(function () { + this.isLoading(false); sidebarInitialized = false; + }, this); + $('[data-block="minicart"]').on('contentLoading', function(event) { + self.isLoading(true); }); }, + isLoading: ko.observable(false), initSidebar: ko.observable(initSidebar), closeSidebar: function(element) { var minicart = $('[data-block="minicart"]'); From 689e99ed07680c56506207a1d24894eff98cc8e8 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Mon, 6 Jul 2015 13:41:20 +0300 Subject: [PATCH 06/10] MAGETWO-37087: [Folks] AJAX Add to Cart --- .../frontend/web/js/catalog-add-to-cart.js | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js index 1141f9e1c5471..02898a8e87fff 100644 --- a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js +++ b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js @@ -4,8 +4,9 @@ */ define([ 'jquery', + 'mage/translate', 'jquery/ui' -], function($) { +], function($, $t) { "use strict"; $.widget('mage.catalogAddToCart', { @@ -16,7 +17,13 @@ define([ bindSubmit: true, minicartSelector: '[data-block="minicart"]', messagesSelector: '[data-placeholder="messages"]', - productStatusSelector: '.stock.available' + productStatusSelector: '.stock.available', + addToCartButtonSelector: '.action.tocart', + addToCartButtonDisabledClass: 'disabled', + addToCartButtonTextWhileAdding: $t('Adding...'), + addToCartButtonTextAdded: $t('Added'), + addToCartButtonTextDefault: $t('Add to Cart') + }, _create: function() { @@ -50,6 +57,8 @@ define([ ajaxSubmit: function(form) { var self = this; $(self.options.minicartSelector).trigger('contentLoading'); + self.disableAddToCartButton(form); + $.ajax({ url: form.attr('action'), data: form.serialize(), @@ -83,8 +92,30 @@ define([ .find('span') .html(res.product.statusText); } + self.enableAddToCartButton(form); } }); + }, + + disableAddToCartButton: function(form) { + var addToCartButton = $(form).find(this.options.addToCartButtonSelector); + addToCartButton.addClass(this.options.addToCartButtonDisabledClass); + addToCartButton.attr('title', this.options.addToCartButtonTextWhileAdding); + addToCartButton.find('span').text(this.options.addToCartButtonTextWhileAdding); + }, + + enableAddToCartButton: function(form) { + var self = this, + addToCartButton = $(form).find(this.options.addToCartButtonSelector); + + addToCartButton.find('span').text(this.options.addToCartButtonTextAdded); + addToCartButton.attr('title', this.options.addToCartButtonTextAdded); + + setTimeout(function() { + addToCartButton.removeClass(self.options.addToCartButtonDisabledClass); + addToCartButton.find('span').text(self.options.addToCartButtonTextDefault); + addToCartButton.attr('title', self.options.addToCartButtonTextDefault); + }, 1000); } }); From d37d0fdf30ae1570a38ce43cd163bdf0ca01f221 Mon Sep 17 00:00:00 2001 From: Olexii Korshenko Date: Mon, 6 Jul 2015 13:51:18 +0300 Subject: [PATCH 07/10] MAGETWO-39758: Add Loader for Mini Shopping Cart --- .../Magento/Checkout/view/frontend/web/js/view/minicart.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js index 5e35ebba7438c..9442c3a9f5ce1 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js @@ -12,6 +12,7 @@ define([ 'use strict'; var sidebarInitialized = false; + var addToCartCalls = 0; url.setBaseUrl(window.checkout.baseUrl); function initSidebar() { @@ -61,10 +62,12 @@ define([ this._super(); this.cart = customerData.get('cart'); this.cart.subscribe(function () { - this.isLoading(false); + addToCartCalls--; + this.isLoading(addToCartCalls > 0); sidebarInitialized = false; }, this); $('[data-block="minicart"]').on('contentLoading', function(event) { + addToCartCalls++; self.isLoading(true); }); }, From 01e21c15f88630dcee0d955895e2085caeb968e2 Mon Sep 17 00:00:00 2001 From: Olexii Korshenko Date: Mon, 6 Jul 2015 15:50:43 +0300 Subject: [PATCH 08/10] MAGETWO-39505: Update iframe payment method flow --- .../js/view/payment/method-renderer/iframe-methods.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/iframe-methods.js b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/iframe-methods.js index 1a76848002e7d..a3c7eaa215389 100644 --- a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/iframe-methods.js +++ b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/iframe-methods.js @@ -28,8 +28,14 @@ define( * Places order in pending payment status. */ placePendingPaymentOrder: function () { - this.placeOrder(false); - this.isInAction(true); + if (this.placeOrder()) { + this.isInAction(true); + // capture all click events + document.addEventListener('click', function(event) { + event.stopImmediatePropagation(); + event.preventDefault(); + }, true); + } } }); } From 433513aa8fcdac73e89287eccef03a51865e7c83 Mon Sep 17 00:00:00 2001 From: Olexii Korshenko Date: Mon, 6 Jul 2015 16:14:16 +0300 Subject: [PATCH 09/10] MAGETWO-39418: [TD] Decrease NPath and Cyclomatic complexities of the new code --- .../Magento/Checkout/Model/ShippingInformationManagement.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/Checkout/Model/ShippingInformationManagement.php b/app/code/Magento/Checkout/Model/ShippingInformationManagement.php index 87e3cb28ec78d..554caf8aa1c71 100644 --- a/app/code/Magento/Checkout/Model/ShippingInformationManagement.php +++ b/app/code/Magento/Checkout/Model/ShippingInformationManagement.php @@ -169,9 +169,12 @@ public function saveAddressInformation( } /** + * Validate quote + * * @param \Magento\Quote\Model\Quote $quote * @throws InputException * @throws NoSuchEntityException + * @return void */ protected function validateQuote(\Magento\Quote\Model\Quote $quote) { From 9e7af02039eda455ad3d725275f9a59d51205f29 Mon Sep 17 00:00:00 2001 From: Alex Akimov Date: Tue, 7 Jul 2015 10:17:33 +0300 Subject: [PATCH 10/10] MAGETWO-39505: Update iframe payment method flow --- .../Checkout/view/frontend/web/js/view/payment/default.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 29c2254957116..aa7647e033b77 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 @@ -45,7 +45,10 @@ define( /** * Place order. */ - placeOrder: function () { + placeOrder: function (data, event) { + if (event) { + event.preventDefault(); + } var self = this, placeOrder, emailValidationResult = customer.isLoggedIn(),