diff --git a/web/org.openbravo.retail.posterminal/js/model/order.js b/web/org.openbravo.retail.posterminal/js/model/order.js
--- a/web/org.openbravo.retail.posterminal/js/model/order.js
+++ b/web/org.openbravo.retail.posterminal/js/model/order.js
@@ -1659,6 +1659,8 @@
         order.trigger('displayTotal');
         order.save();
       }); // call with callback, no args
+      // isCash check enough cash available.
+      order.trigger('checkaddpayment', order, payment);
     },
 
     overpaymentExists: function () {
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/payment.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/payment.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/payment.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/payment.js
@@ -528,6 +528,7 @@
       this.$.doneButton.setDisabled(true);
       this.$.exactButton.setDisabled(true);
     }
+    return hasEnoughCash;
   },
 
   initComponents: function () {
@@ -567,6 +568,28 @@
         return;
       }
     }, this);
+    this.model.get('order').on('checkaddpayment', function (order, paymentMeth) {
+      var paymentstatus, payment;
+      if (!_.isUndefined(order) && !_.isUndefined(paymentMeth)) {
+        // validate the payment isCash
+        if (paymentMeth.get('isCash')) {
+          paymentstatus = order.getPaymentStatus();
+          payment = OB.MobileApp.model.paymentnames[OB.MobileApp.model.get('paymentcash')];
+          if (!this.checkEnoughCashAvailable(paymentstatus, payment)) {
+            // delete the current payment.
+            payments = order.get('payments');
+            var i = 0;
+            for (i; i < payments.length; i++) {
+              var p = payments.at(i);
+              if (p.get('isCash')) {
+                order.removePayment(p)
+                return;
+              }
+            }
+          }
+        }
+      }
+    }, this);
     //    this.model.get('multiOrders').on('change:isMultiOrders', function () {
     //      if (!this.model.get('multiOrders').get('isMultiOrders')) {
     //        this.$.multiPayments.hide();
