diff --git a/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js b/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js
--- a/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js
+++ b/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js
@@ -39,6 +39,25 @@
     });
   },
 
+  removePromotionsLowerPriority: function (receipt, discountRule) {
+    // Do nothing if current discountRule to apply has no priority config
+    if (!OB.UTIL.isNullOrUndefined(discountRule.get('priority'))) {
+      var receiptLines = receipt.get('lines');
+      _.each(receiptLines.models, function (line) {
+        var promotions = line.get('promotions');
+        if (promotions && promotions.length > 0) {
+          var newPromotions = [];
+          newPromotions = _.filter(promotions, function (promotion) {
+            return !(promotion.ruleId === discountRule.get('id') || (promotion.discountType === discountRule.get('discountType') && (OB.UTIL.isNullOrUndefined(promotion.priority) || promotion.priority > discountRule.get('priority'))));
+          });
+          line.set('promotions', newPromotions, {
+            silent: true
+          });
+        }
+      });
+    }
+  },
+
   doProcess: function () {
     // when working in Best Deal Case mode, by total discounts should only be applied
     // in the BDC process
diff --git a/web/org.openbravo.retail.discounts.bytotal/js/promotion-discounttotal.js b/web/org.openbravo.retail.discounts.bytotal/js/promotion-discounttotal.js
--- a/web/org.openbravo.retail.discounts.bytotal/js/promotion-discounttotal.js
+++ b/web/org.openbravo.retail.discounts.bytotal/js/promotion-discounttotal.js
@@ -14,6 +14,16 @@
   byTotalDiscount: true,
   async: false,
   implementation: function (discountRule, receipt, line) {
+    var originalLines = [],
+        i;
+    _.each(receipt.get('lines').models, function (l) {
+      var newLine = new OB.Model.OrderLine()
+      OB.UTIL.clone(l, newLine);
+      originalLines.push(newLine);
+    });
+    // Remove Discount per total amount promotions with less priority than current one from the ticket
+    OB.Model.Discounts.DISCT.removePromotionsLowerPriority(receipt, discountRule);
+    // Start discount by total preprocess
     OB.Model.Discounts.DISCT.preprocess(discountRule, receipt, line, null, function (preprocess) {
       if (preprocess.total >= discountRule.get('disctTotalreceipt')) {
         // Add promotion in all lines 
@@ -34,6 +44,15 @@
             amt: discount
           });
         });
+      } else {
+        // Restore original promotions
+        for (i = 0; i < receipt.get('lines').length; i++) {
+          var origLine = originalLines[i];
+          var currentLine = receipt.get('lines').at(i);
+          currentLine.set('promotions', origLine.get('promotions'), {
+            silent: true
+          });
+        }
       }
     }, false);
   }
