Apply bindings and subscribe on change of discount amount totals.totals() in Magento 2How Does Magento 2 Apply KnockoutJS BindingsMagento2 override admin js fileOneStepCheckout - display subtotals of tax classMagento 2: Initialize calendar widget inside payment uiComponentCan't get Customer Data on frontend in Magento 2Magento 2 - Change maximum order amountMagento 2.3 Can't view module's front end page output?How to create custom form in Magento 2.2.3How to send data from cart page(phtml) to checkout page(html) for each item in knockout Magento 2How to apply bindings and subscribe on change of discount amount totals.totals().items in Magento 2
Short story where a flexible reality hardens to an unchanging one
Can 々 stand for a duplicated kanji with a different reading?
What the purpose of the fuel shutoff valve?
In a script how can I signal who's winning the argument?
How can I make sure my players' decisions have consequences?
Found more old paper shares from broken up companies
what to say when a company asks you why someone (a friend) who was fired left?
How can Kazakhstan perform MITM attacks on all HTTPS traffic?
Are glider winch launches rarer in the USA than in the rest of the world? Why?
The seven story archetypes. Are they truly all of them?
Using "Kollege" as "university friend"?
ExactlyOne extension method
Impact of throwing away fruit waste on a peak > 3200 m above a glacier
Considerations when providing money to one child now, and the other later?
Sextortion with actual password not found in leaks
If a check is written for bill, but account number is not mentioned on memo line, is it still processed?
Why did NASA use Imperial units?
Grid/table with lots of buttons
Why are there not any MRI machines available in Interstellar?
What's the explanation for this joke about a three-legged dog that walks into a bar?
Is the apartment I want to rent a scam?
Using paddles to support a bug net
dos2unix is unable to convert typescript file to unix format
What's the 1 inch size square knob sticking out of wall?
Apply bindings and subscribe on change of discount amount totals.totals() in Magento 2
How Does Magento 2 Apply KnockoutJS BindingsMagento2 override admin js fileOneStepCheckout - display subtotals of tax classMagento 2: Initialize calendar widget inside payment uiComponentCan't get Customer Data on frontend in Magento 2Magento 2 - Change maximum order amountMagento 2.3 Can't view module's front end page output?How to create custom form in Magento 2.2.3How to send data from cart page(phtml) to checkout page(html) for each item in knockout Magento 2How to apply bindings and subscribe on change of discount amount totals.totals().items in Magento 2
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
in my checkout page when promo code
is applied, I am updating a text using some calculation using knockoutjs
In my checkout page, on applying and removing promo code
, it changes the discount
key in totals.totals().items
.
How to apply bindings
and subscribe
in knockoutjs,
so that I can call my function which I am calling from my HTML.
Magento_Checkout/web/template/summary/item/details.html
<span class="tag-text">
<!-- ko if: getFinalSale($parent)-->
<u class="product-tag underline-bold-text checkout-final-sale" data-bind="text: getFinalSale($parent)"></u>
<!-- /ko -->
</span>
I have written above code in details.html
and my js is
Magento_Checkout/web/js/view/summary/item/details.js
knockout js
define([
'uiComponent',
'ko',
'Magento_Checkout/js/model/totals'
], function (Component, ko, totals) {
'use strict';
var finalSaleData = window.checkoutConfig.items;
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
/**
* @param Object quoteItem
* @return String
*/
getItems: function(item_id)
var itemElement = null;
_.each(this.finalSaleData, function(element, index)
if (element.item_id == item_id)
itemElement = element;
);
return itemElement;
,
getFinalSale : function (quoteItem)
var item = this.getItems(quoteItem.item_id);
var temp_item = this.getTempItems(quoteItem.item_id);
var tagText = '';
if((((temp_item.price*temp_item.qty) - temp_item.discount_amount)/(item.base_old_price*temp_item.qty)) < 0.5)
var tagText = 'Final Sale';
else
if(item.base_old_price && temp_item.price)
// && item.price < item.price && item.base_old_price / item.price <= 0.5)
if(((item.base_old_price - temp_item.price)/item.base_old_price)>0.5)
var tagText = 'Final Sale';
return tagText;
,
);
);
I am using var finalSaleData = window.checkoutConfig.items
in my function getFinalSale
.
How to make getFinalSale
function run every time when window.checkoutConfig.items
data is changed without refreshing the page.
1) How can i call getFinalSale on the change of totals.totals().items
2) The issue I am passing the $parent
from my HTML and when the totals.totals().items
the discount amount is changed for each item after applying promo code
then how will I pass this $parent
(quoteItem) from the very same js.
How to solve that.
The problem is, this runs only when the page reloads.
How to make getFinalSale
function run every time the user applies promo code
without refreshing the page so that my HTML gets updated too.
Basically Final Sale
text needs to be shown on the basis of that logic in js code in getFinalSale
function.
And also, data-bind="text: getFinalSale($parent)
i am calling this from HTML and I am using subscribe also but then how i will pass $parent
parameter from subscribing so that getFinalSale
runs when this.totals
changes everytime after applying coupon.
initialize: function()
this._super();
this.totals.subscribe(function (data)
this.getFinalSale(data)
, this);
,
The data
parameter is not same as $parent
which i passed it from html.
and it breaks the js.
magento2 checkout cart knockoutjs coupon-codes
add a comment |
in my checkout page when promo code
is applied, I am updating a text using some calculation using knockoutjs
In my checkout page, on applying and removing promo code
, it changes the discount
key in totals.totals().items
.
How to apply bindings
and subscribe
in knockoutjs,
so that I can call my function which I am calling from my HTML.
Magento_Checkout/web/template/summary/item/details.html
<span class="tag-text">
<!-- ko if: getFinalSale($parent)-->
<u class="product-tag underline-bold-text checkout-final-sale" data-bind="text: getFinalSale($parent)"></u>
<!-- /ko -->
</span>
I have written above code in details.html
and my js is
Magento_Checkout/web/js/view/summary/item/details.js
knockout js
define([
'uiComponent',
'ko',
'Magento_Checkout/js/model/totals'
], function (Component, ko, totals) {
'use strict';
var finalSaleData = window.checkoutConfig.items;
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
/**
* @param Object quoteItem
* @return String
*/
getItems: function(item_id)
var itemElement = null;
_.each(this.finalSaleData, function(element, index)
if (element.item_id == item_id)
itemElement = element;
);
return itemElement;
,
getFinalSale : function (quoteItem)
var item = this.getItems(quoteItem.item_id);
var temp_item = this.getTempItems(quoteItem.item_id);
var tagText = '';
if((((temp_item.price*temp_item.qty) - temp_item.discount_amount)/(item.base_old_price*temp_item.qty)) < 0.5)
var tagText = 'Final Sale';
else
if(item.base_old_price && temp_item.price)
// && item.price < item.price && item.base_old_price / item.price <= 0.5)
if(((item.base_old_price - temp_item.price)/item.base_old_price)>0.5)
var tagText = 'Final Sale';
return tagText;
,
);
);
I am using var finalSaleData = window.checkoutConfig.items
in my function getFinalSale
.
How to make getFinalSale
function run every time when window.checkoutConfig.items
data is changed without refreshing the page.
1) How can i call getFinalSale on the change of totals.totals().items
2) The issue I am passing the $parent
from my HTML and when the totals.totals().items
the discount amount is changed for each item after applying promo code
then how will I pass this $parent
(quoteItem) from the very same js.
How to solve that.
The problem is, this runs only when the page reloads.
How to make getFinalSale
function run every time the user applies promo code
without refreshing the page so that my HTML gets updated too.
Basically Final Sale
text needs to be shown on the basis of that logic in js code in getFinalSale
function.
And also, data-bind="text: getFinalSale($parent)
i am calling this from HTML and I am using subscribe also but then how i will pass $parent
parameter from subscribing so that getFinalSale
runs when this.totals
changes everytime after applying coupon.
initialize: function()
this._super();
this.totals.subscribe(function (data)
this.getFinalSale(data)
, this);
,
The data
parameter is not same as $parent
which i passed it from html.
and it breaks the js.
magento2 checkout cart knockoutjs coupon-codes
Did you override this js?
– Rohan Hapani
Jul 15 at 6:00
yes vendor/magento/module-checkout/view/frontend/web/js/view/summary/item/details.js this was the vender file
– summu
Jul 15 at 6:09
add a comment |
in my checkout page when promo code
is applied, I am updating a text using some calculation using knockoutjs
In my checkout page, on applying and removing promo code
, it changes the discount
key in totals.totals().items
.
How to apply bindings
and subscribe
in knockoutjs,
so that I can call my function which I am calling from my HTML.
Magento_Checkout/web/template/summary/item/details.html
<span class="tag-text">
<!-- ko if: getFinalSale($parent)-->
<u class="product-tag underline-bold-text checkout-final-sale" data-bind="text: getFinalSale($parent)"></u>
<!-- /ko -->
</span>
I have written above code in details.html
and my js is
Magento_Checkout/web/js/view/summary/item/details.js
knockout js
define([
'uiComponent',
'ko',
'Magento_Checkout/js/model/totals'
], function (Component, ko, totals) {
'use strict';
var finalSaleData = window.checkoutConfig.items;
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
/**
* @param Object quoteItem
* @return String
*/
getItems: function(item_id)
var itemElement = null;
_.each(this.finalSaleData, function(element, index)
if (element.item_id == item_id)
itemElement = element;
);
return itemElement;
,
getFinalSale : function (quoteItem)
var item = this.getItems(quoteItem.item_id);
var temp_item = this.getTempItems(quoteItem.item_id);
var tagText = '';
if((((temp_item.price*temp_item.qty) - temp_item.discount_amount)/(item.base_old_price*temp_item.qty)) < 0.5)
var tagText = 'Final Sale';
else
if(item.base_old_price && temp_item.price)
// && item.price < item.price && item.base_old_price / item.price <= 0.5)
if(((item.base_old_price - temp_item.price)/item.base_old_price)>0.5)
var tagText = 'Final Sale';
return tagText;
,
);
);
I am using var finalSaleData = window.checkoutConfig.items
in my function getFinalSale
.
How to make getFinalSale
function run every time when window.checkoutConfig.items
data is changed without refreshing the page.
1) How can i call getFinalSale on the change of totals.totals().items
2) The issue I am passing the $parent
from my HTML and when the totals.totals().items
the discount amount is changed for each item after applying promo code
then how will I pass this $parent
(quoteItem) from the very same js.
How to solve that.
The problem is, this runs only when the page reloads.
How to make getFinalSale
function run every time the user applies promo code
without refreshing the page so that my HTML gets updated too.
Basically Final Sale
text needs to be shown on the basis of that logic in js code in getFinalSale
function.
And also, data-bind="text: getFinalSale($parent)
i am calling this from HTML and I am using subscribe also but then how i will pass $parent
parameter from subscribing so that getFinalSale
runs when this.totals
changes everytime after applying coupon.
initialize: function()
this._super();
this.totals.subscribe(function (data)
this.getFinalSale(data)
, this);
,
The data
parameter is not same as $parent
which i passed it from html.
and it breaks the js.
magento2 checkout cart knockoutjs coupon-codes
in my checkout page when promo code
is applied, I am updating a text using some calculation using knockoutjs
In my checkout page, on applying and removing promo code
, it changes the discount
key in totals.totals().items
.
How to apply bindings
and subscribe
in knockoutjs,
so that I can call my function which I am calling from my HTML.
Magento_Checkout/web/template/summary/item/details.html
<span class="tag-text">
<!-- ko if: getFinalSale($parent)-->
<u class="product-tag underline-bold-text checkout-final-sale" data-bind="text: getFinalSale($parent)"></u>
<!-- /ko -->
</span>
I have written above code in details.html
and my js is
Magento_Checkout/web/js/view/summary/item/details.js
knockout js
define([
'uiComponent',
'ko',
'Magento_Checkout/js/model/totals'
], function (Component, ko, totals) {
'use strict';
var finalSaleData = window.checkoutConfig.items;
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
/**
* @param Object quoteItem
* @return String
*/
getItems: function(item_id)
var itemElement = null;
_.each(this.finalSaleData, function(element, index)
if (element.item_id == item_id)
itemElement = element;
);
return itemElement;
,
getFinalSale : function (quoteItem)
var item = this.getItems(quoteItem.item_id);
var temp_item = this.getTempItems(quoteItem.item_id);
var tagText = '';
if((((temp_item.price*temp_item.qty) - temp_item.discount_amount)/(item.base_old_price*temp_item.qty)) < 0.5)
var tagText = 'Final Sale';
else
if(item.base_old_price && temp_item.price)
// && item.price < item.price && item.base_old_price / item.price <= 0.5)
if(((item.base_old_price - temp_item.price)/item.base_old_price)>0.5)
var tagText = 'Final Sale';
return tagText;
,
);
);
I am using var finalSaleData = window.checkoutConfig.items
in my function getFinalSale
.
How to make getFinalSale
function run every time when window.checkoutConfig.items
data is changed without refreshing the page.
1) How can i call getFinalSale on the change of totals.totals().items
2) The issue I am passing the $parent
from my HTML and when the totals.totals().items
the discount amount is changed for each item after applying promo code
then how will I pass this $parent
(quoteItem) from the very same js.
How to solve that.
The problem is, this runs only when the page reloads.
How to make getFinalSale
function run every time the user applies promo code
without refreshing the page so that my HTML gets updated too.
Basically Final Sale
text needs to be shown on the basis of that logic in js code in getFinalSale
function.
And also, data-bind="text: getFinalSale($parent)
i am calling this from HTML and I am using subscribe also but then how i will pass $parent
parameter from subscribing so that getFinalSale
runs when this.totals
changes everytime after applying coupon.
initialize: function()
this._super();
this.totals.subscribe(function (data)
this.getFinalSale(data)
, this);
,
The data
parameter is not same as $parent
which i passed it from html.
and it breaks the js.
magento2 checkout cart knockoutjs coupon-codes
magento2 checkout cart knockoutjs coupon-codes
edited Jul 15 at 6:30
summu
asked Jul 11 at 10:21
summusummu
1841 silver badge11 bronze badges
1841 silver badge11 bronze badges
Did you override this js?
– Rohan Hapani
Jul 15 at 6:00
yes vendor/magento/module-checkout/view/frontend/web/js/view/summary/item/details.js this was the vender file
– summu
Jul 15 at 6:09
add a comment |
Did you override this js?
– Rohan Hapani
Jul 15 at 6:00
yes vendor/magento/module-checkout/view/frontend/web/js/view/summary/item/details.js this was the vender file
– summu
Jul 15 at 6:09
Did you override this js?
– Rohan Hapani
Jul 15 at 6:00
Did you override this js?
– Rohan Hapani
Jul 15 at 6:00
yes vendor/magento/module-checkout/view/frontend/web/js/view/summary/item/details.js this was the vender file
– summu
Jul 15 at 6:09
yes vendor/magento/module-checkout/view/frontend/web/js/view/summary/item/details.js this was the vender file
– summu
Jul 15 at 6:09
add a comment |
2 Answers
2
active
oldest
votes
Please check with below url. Its demo for windows.checkoutConfig.items
https://www.webnexs.com/blog/kb/include-variable-window-checkout-config-magento-checkout/
https://webkul.com/blog/update-cart-totals-by-js-on-checkout-page-magento2/
I hope its helpful to you.
Updated the question
– summu
Jul 15 at 6:13
have you checked in inspect element, when you update data than details.js execute every-time/
– Anas Mansuri
Jul 15 at 6:19
when I apply or remove coupon , totals.totals() still gives me old value and i get discount 0 when i apply for coupon, that means my function getFinalSale runs before the apply coupon thats why it gets the old values from totals.totals() and my logic doesnt work, and when i inspecttotals.totals()
after the apply coupon has finished, it then shows the latest discounted values
– summu
Jul 15 at 6:25
Updated the question as well
– summu
Jul 15 at 6:30
apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();
– Anas Mansuri
Jul 15 at 6:35
|
show 5 more comments
So the solution was simple,
To make getFinalSale
function run every time data of price
/discount
changes
Use totals: quote.getTotals()
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
saleData: saleData,
totals: quote.getTotals(),
/**
* @param Object quoteItem
* @return String
*/
getFinalSale : function (quoteItem)
var tagText = '';
var price = 0;
if(this.totals())
var item = null;
_.each(this.finalSaleData , function(element, index)
if (element.item_id == quoteItem.item_id)
item = element;
);
var temp_item = null;
_.each(this.totals().items, function(element, index)
if (element.item_id == quoteItem.item_id)
temp_item = element;
);
var discount = this.getDiscountPureValue(quoteItem.item_id);
if ((((temp_item.price * temp_item.qty) - discount) / (item.base_old_price * temp_item.qty)) < 0.5)
price = totals.getSegment('grand_total').value;
else
if (item.base_old_price && temp_item.price)
if (((item.base_old_price - temp_item.price) / item.base_old_price) > 0.5)
price = totals.getSegment('grand_total').value
return price;
,
);
and also to get the updated discount value always
Use this.totals()
instead of this.totals
which was the mistake, I was doing.
getDiscountPureValue: function (id)
var price = 0;
var item = null;
if (this.totals() && this.totals().items)
_.each(this.totals().items , function(element, index)
if (element.item_id == id)
item = element;
);
price = item.discount_amount;
return price;
,
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "479"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f281711%2fapply-bindings-and-subscribe-on-change-of-discount-amount-totals-totals-in-mag%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Please check with below url. Its demo for windows.checkoutConfig.items
https://www.webnexs.com/blog/kb/include-variable-window-checkout-config-magento-checkout/
https://webkul.com/blog/update-cart-totals-by-js-on-checkout-page-magento2/
I hope its helpful to you.
Updated the question
– summu
Jul 15 at 6:13
have you checked in inspect element, when you update data than details.js execute every-time/
– Anas Mansuri
Jul 15 at 6:19
when I apply or remove coupon , totals.totals() still gives me old value and i get discount 0 when i apply for coupon, that means my function getFinalSale runs before the apply coupon thats why it gets the old values from totals.totals() and my logic doesnt work, and when i inspecttotals.totals()
after the apply coupon has finished, it then shows the latest discounted values
– summu
Jul 15 at 6:25
Updated the question as well
– summu
Jul 15 at 6:30
apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();
– Anas Mansuri
Jul 15 at 6:35
|
show 5 more comments
Please check with below url. Its demo for windows.checkoutConfig.items
https://www.webnexs.com/blog/kb/include-variable-window-checkout-config-magento-checkout/
https://webkul.com/blog/update-cart-totals-by-js-on-checkout-page-magento2/
I hope its helpful to you.
Updated the question
– summu
Jul 15 at 6:13
have you checked in inspect element, when you update data than details.js execute every-time/
– Anas Mansuri
Jul 15 at 6:19
when I apply or remove coupon , totals.totals() still gives me old value and i get discount 0 when i apply for coupon, that means my function getFinalSale runs before the apply coupon thats why it gets the old values from totals.totals() and my logic doesnt work, and when i inspecttotals.totals()
after the apply coupon has finished, it then shows the latest discounted values
– summu
Jul 15 at 6:25
Updated the question as well
– summu
Jul 15 at 6:30
apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();
– Anas Mansuri
Jul 15 at 6:35
|
show 5 more comments
Please check with below url. Its demo for windows.checkoutConfig.items
https://www.webnexs.com/blog/kb/include-variable-window-checkout-config-magento-checkout/
https://webkul.com/blog/update-cart-totals-by-js-on-checkout-page-magento2/
I hope its helpful to you.
Please check with below url. Its demo for windows.checkoutConfig.items
https://www.webnexs.com/blog/kb/include-variable-window-checkout-config-magento-checkout/
https://webkul.com/blog/update-cart-totals-by-js-on-checkout-page-magento2/
I hope its helpful to you.
answered Jul 15 at 5:47
Anas MansuriAnas Mansuri
1,0041 silver badge16 bronze badges
1,0041 silver badge16 bronze badges
Updated the question
– summu
Jul 15 at 6:13
have you checked in inspect element, when you update data than details.js execute every-time/
– Anas Mansuri
Jul 15 at 6:19
when I apply or remove coupon , totals.totals() still gives me old value and i get discount 0 when i apply for coupon, that means my function getFinalSale runs before the apply coupon thats why it gets the old values from totals.totals() and my logic doesnt work, and when i inspecttotals.totals()
after the apply coupon has finished, it then shows the latest discounted values
– summu
Jul 15 at 6:25
Updated the question as well
– summu
Jul 15 at 6:30
apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();
– Anas Mansuri
Jul 15 at 6:35
|
show 5 more comments
Updated the question
– summu
Jul 15 at 6:13
have you checked in inspect element, when you update data than details.js execute every-time/
– Anas Mansuri
Jul 15 at 6:19
when I apply or remove coupon , totals.totals() still gives me old value and i get discount 0 when i apply for coupon, that means my function getFinalSale runs before the apply coupon thats why it gets the old values from totals.totals() and my logic doesnt work, and when i inspecttotals.totals()
after the apply coupon has finished, it then shows the latest discounted values
– summu
Jul 15 at 6:25
Updated the question as well
– summu
Jul 15 at 6:30
apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();
– Anas Mansuri
Jul 15 at 6:35
Updated the question
– summu
Jul 15 at 6:13
Updated the question
– summu
Jul 15 at 6:13
have you checked in inspect element, when you update data than details.js execute every-time/
– Anas Mansuri
Jul 15 at 6:19
have you checked in inspect element, when you update data than details.js execute every-time/
– Anas Mansuri
Jul 15 at 6:19
when I apply or remove coupon , totals.totals() still gives me old value and i get discount 0 when i apply for coupon, that means my function getFinalSale runs before the apply coupon thats why it gets the old values from totals.totals() and my logic doesnt work, and when i inspect
totals.totals()
after the apply coupon has finished, it then shows the latest discounted values– summu
Jul 15 at 6:25
when I apply or remove coupon , totals.totals() still gives me old value and i get discount 0 when i apply for coupon, that means my function getFinalSale runs before the apply coupon thats why it gets the old values from totals.totals() and my logic doesnt work, and when i inspect
totals.totals()
after the apply coupon has finished, it then shows the latest discounted values– summu
Jul 15 at 6:25
Updated the question as well
– summu
Jul 15 at 6:30
Updated the question as well
– summu
Jul 15 at 6:30
apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();
– Anas Mansuri
Jul 15 at 6:35
apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();
– Anas Mansuri
Jul 15 at 6:35
|
show 5 more comments
So the solution was simple,
To make getFinalSale
function run every time data of price
/discount
changes
Use totals: quote.getTotals()
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
saleData: saleData,
totals: quote.getTotals(),
/**
* @param Object quoteItem
* @return String
*/
getFinalSale : function (quoteItem)
var tagText = '';
var price = 0;
if(this.totals())
var item = null;
_.each(this.finalSaleData , function(element, index)
if (element.item_id == quoteItem.item_id)
item = element;
);
var temp_item = null;
_.each(this.totals().items, function(element, index)
if (element.item_id == quoteItem.item_id)
temp_item = element;
);
var discount = this.getDiscountPureValue(quoteItem.item_id);
if ((((temp_item.price * temp_item.qty) - discount) / (item.base_old_price * temp_item.qty)) < 0.5)
price = totals.getSegment('grand_total').value;
else
if (item.base_old_price && temp_item.price)
if (((item.base_old_price - temp_item.price) / item.base_old_price) > 0.5)
price = totals.getSegment('grand_total').value
return price;
,
);
and also to get the updated discount value always
Use this.totals()
instead of this.totals
which was the mistake, I was doing.
getDiscountPureValue: function (id)
var price = 0;
var item = null;
if (this.totals() && this.totals().items)
_.each(this.totals().items , function(element, index)
if (element.item_id == id)
item = element;
);
price = item.discount_amount;
return price;
,
add a comment |
So the solution was simple,
To make getFinalSale
function run every time data of price
/discount
changes
Use totals: quote.getTotals()
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
saleData: saleData,
totals: quote.getTotals(),
/**
* @param Object quoteItem
* @return String
*/
getFinalSale : function (quoteItem)
var tagText = '';
var price = 0;
if(this.totals())
var item = null;
_.each(this.finalSaleData , function(element, index)
if (element.item_id == quoteItem.item_id)
item = element;
);
var temp_item = null;
_.each(this.totals().items, function(element, index)
if (element.item_id == quoteItem.item_id)
temp_item = element;
);
var discount = this.getDiscountPureValue(quoteItem.item_id);
if ((((temp_item.price * temp_item.qty) - discount) / (item.base_old_price * temp_item.qty)) < 0.5)
price = totals.getSegment('grand_total').value;
else
if (item.base_old_price && temp_item.price)
if (((item.base_old_price - temp_item.price) / item.base_old_price) > 0.5)
price = totals.getSegment('grand_total').value
return price;
,
);
and also to get the updated discount value always
Use this.totals()
instead of this.totals
which was the mistake, I was doing.
getDiscountPureValue: function (id)
var price = 0;
var item = null;
if (this.totals() && this.totals().items)
_.each(this.totals().items , function(element, index)
if (element.item_id == id)
item = element;
);
price = item.discount_amount;
return price;
,
add a comment |
So the solution was simple,
To make getFinalSale
function run every time data of price
/discount
changes
Use totals: quote.getTotals()
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
saleData: saleData,
totals: quote.getTotals(),
/**
* @param Object quoteItem
* @return String
*/
getFinalSale : function (quoteItem)
var tagText = '';
var price = 0;
if(this.totals())
var item = null;
_.each(this.finalSaleData , function(element, index)
if (element.item_id == quoteItem.item_id)
item = element;
);
var temp_item = null;
_.each(this.totals().items, function(element, index)
if (element.item_id == quoteItem.item_id)
temp_item = element;
);
var discount = this.getDiscountPureValue(quoteItem.item_id);
if ((((temp_item.price * temp_item.qty) - discount) / (item.base_old_price * temp_item.qty)) < 0.5)
price = totals.getSegment('grand_total').value;
else
if (item.base_old_price && temp_item.price)
if (((item.base_old_price - temp_item.price) / item.base_old_price) > 0.5)
price = totals.getSegment('grand_total').value
return price;
,
);
and also to get the updated discount value always
Use this.totals()
instead of this.totals
which was the mistake, I was doing.
getDiscountPureValue: function (id)
var price = 0;
var item = null;
if (this.totals() && this.totals().items)
_.each(this.totals().items , function(element, index)
if (element.item_id == id)
item = element;
);
price = item.discount_amount;
return price;
,
So the solution was simple,
To make getFinalSale
function run every time data of price
/discount
changes
Use totals: quote.getTotals()
return Component.extend(
defaults:
template: 'Magento_Checkout/summary/item/details'
,
quoteItemData: quoteItemData,
finalSaleData: finalSaleData,
saleData: saleData,
totals: quote.getTotals(),
/**
* @param Object quoteItem
* @return String
*/
getFinalSale : function (quoteItem)
var tagText = '';
var price = 0;
if(this.totals())
var item = null;
_.each(this.finalSaleData , function(element, index)
if (element.item_id == quoteItem.item_id)
item = element;
);
var temp_item = null;
_.each(this.totals().items, function(element, index)
if (element.item_id == quoteItem.item_id)
temp_item = element;
);
var discount = this.getDiscountPureValue(quoteItem.item_id);
if ((((temp_item.price * temp_item.qty) - discount) / (item.base_old_price * temp_item.qty)) < 0.5)
price = totals.getSegment('grand_total').value;
else
if (item.base_old_price && temp_item.price)
if (((item.base_old_price - temp_item.price) / item.base_old_price) > 0.5)
price = totals.getSegment('grand_total').value
return price;
,
);
and also to get the updated discount value always
Use this.totals()
instead of this.totals
which was the mistake, I was doing.
getDiscountPureValue: function (id)
var price = 0;
var item = null;
if (this.totals() && this.totals().items)
_.each(this.totals().items , function(element, index)
if (element.item_id == id)
item = element;
);
price = item.discount_amount;
return price;
,
answered Jul 18 at 7:35
summusummu
1841 silver badge11 bronze badges
1841 silver badge11 bronze badges
add a comment |
add a comment |
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f281711%2fapply-bindings-and-subscribe-on-change-of-discount-amount-totals-totals-in-mag%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Did you override this js?
– Rohan Hapani
Jul 15 at 6:00
yes vendor/magento/module-checkout/view/frontend/web/js/view/summary/item/details.js this was the vender file
– summu
Jul 15 at 6:09