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;








3















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.










share|improve this question
























  • 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

















3















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.










share|improve this question
























  • 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













3












3








3


1






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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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

















  • 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










2 Answers
2






active

oldest

votes


















0














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.






share|improve this answer























  • 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 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











  • apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();

    – Anas Mansuri
    Jul 15 at 6:35



















0














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;
,





share|improve this answer

























    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
    );



    );













    draft saved

    draft discarded


















    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









    0














    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.






    share|improve this answer























    • 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 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











    • apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();

      – Anas Mansuri
      Jul 15 at 6:35
















    0














    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.






    share|improve this answer























    • 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 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











    • apply with this lines cartCache.set('totals',null); defaultTotal.estimateTotals();

      – Anas Mansuri
      Jul 15 at 6:35














    0












    0








    0







    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.






    share|improve this answer













    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.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    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 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











    • 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











    • 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











    • 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














    0














    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;
    ,





    share|improve this answer



























      0














      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;
      ,





      share|improve this answer

























        0












        0








        0







        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;
        ,





        share|improve this answer













        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;
        ,






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jul 18 at 7:35









        summusummu

        1841 silver badge11 bronze badges




        1841 silver badge11 bronze badges



























            draft saved

            draft discarded
















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            Get product attribute by attribute group code in magento 2get product attribute by product attribute group in magento 2Magento 2 Log Bundle Product Data in List Page?How to get all product attribute of a attribute group of Default attribute set?Magento 2.1 Create a filter in the product grid by new attributeMagento 2 : Get Product Attribute values By GroupMagento 2 How to get all existing values for one attributeMagento 2 get custom attribute of a single product inside a pluginMagento 2.3 How to get all the Multi Source Inventory (MSI) locations collection in custom module?Magento2: how to develop rest API to get new productsGet product attribute by attribute group code ( [attribute_group_code] ) in magento 2

            Category:9 (number) SubcategoriesMedia in category "9 (number)"Navigation menuUpload mediaGND ID: 4485639-8Library of Congress authority ID: sh85091979ReasonatorScholiaStatistics

            Magento 2.3: How do i solve this, Not registered handle, on custom form?How can i rewrite TierPrice Block in Magento2magento 2 captcha not rendering if I override layout xmlmain.CRITICAL: Plugin class doesn't existMagento 2 : Problem while adding custom button order view page?Magento 2.2.5: Overriding Admin Controller sales/orderMagento 2.2.5: Add, Update and Delete existing products Custom OptionsMagento 2.3 : File Upload issue in UI Component FormMagento2 Not registered handleHow to configured Form Builder Js in my custom magento 2.3.0 module?Magento 2.3. How to create image upload field in an admin form