# HG changeset patch
# User Ranjith S R <ranjith@qualiantech.com>
# Date 1563448045 -19800
#      Thu Jul 18 16:37:25 2019 +0530
# Node ID 4a9a4e49f67867fa3b62eb515bffc5dd3cb7719d
# Parent  cc851a790e6811ed7ed76f93a2ddff87a7230a73
Related to issue 41393 : Reciept Customer should be reset when receipt line deletion fails

* If MultiPricelist and Delete Line approval is enabled, when changing receipt customer,
  if line deletion approval fails, old customer and pricelist should be restored to receipt

diff -r cc851a790e68 -r 4a9a4e49f678 web/org.openbravo.retail.posterminal/js/model/order.js
--- a/web/org.openbravo.retail.posterminal/js/model/order.js	Tue Jul 16 23:31:59 2019 -0400
+++ b/web/org.openbravo.retail.posterminal/js/model/order.js	Thu Jul 18 16:37:25 2019 +0530
@@ -2092,7 +2092,7 @@
             },
             function(args) {
               if (callback) {
-                callback();
+                callback(true);
               }
             }
           );
@@ -2282,6 +2282,11 @@
                   line.set('deleteApproved', true);
                 });
                 preDeleteLine();
+              } else {
+                if (callback) {
+                  callback(false);
+                }
+                return;
               }
             }
           );
@@ -2339,7 +2344,7 @@
       //If there are no lines to delete, continue
       if (!selectedModels || !selectedModels.length) {
         if (callback) {
-          callback();
+          callback(true);
         }
         return;
       }
@@ -2364,7 +2369,7 @@
             OB.I18N.getLabel('OBPOS_CancelReplaceDeleteLine')
           );
           if (callback) {
-            callback();
+            callback(false);
           }
           return;
         }
@@ -5172,11 +5177,34 @@
 
     setBPandBPLoc: function(businessPartner, showNotif, saveChange, callback) {
       var me = this,
-        undef;
-      var i,
-        oldbp = this.get('bp');
-
-      var finishSaveData = function(callback) {
+        undef,
+        i,
+        oldbp = this.get('bp'),
+        setAndSaveBP,
+        setPriceList,
+        finishSaveData;
+
+      setAndSaveBP = function(bp, saveBPCallback) {
+        me.set('bp', bp);
+        me.save(function() {
+          OB.MobileApp.model.orderList.saveCurrent();
+          if (saveBPCallback) {
+            saveBPCallback();
+          }
+        });
+      };
+
+      setPriceList = function(bp) {
+        var priceIncludesTax = bp.get('priceIncludesTax');
+        if (OB.UTIL.isNullOrUndefined(priceIncludesTax)) {
+          priceIncludesTax = OB.MobileApp.model.get('pricelist')
+            .priceIncludesTax;
+        }
+        me.set('priceList', bp.get('priceList'));
+        me.set('priceIncludesTax', priceIncludesTax);
+      };
+
+      finishSaveData = function(callback) {
         // set the undo action
         if (showNotif === undef || showNotif === true) {
           this.setUndo('SetBPartner', {
@@ -5195,14 +5223,30 @@
         }
         if (OB.MobileApp.model.hasPermission('EnableMultiPriceList', true)) {
           if (oldbp.get('priceList') !== businessPartner.get('priceList')) {
-            me.set('priceList', businessPartner.get('priceList'));
-            var priceIncludesTax = businessPartner.get('priceIncludesTax');
-            if (OB.UTIL.isNullOrUndefined(priceIncludesTax)) {
-              priceIncludesTax = OB.MobileApp.model.get('pricelist')
-                .priceIncludesTax;
-            }
-            me.set('priceIncludesTax', priceIncludesTax);
-            me.removeAndInsertLines(function() {
+            setPriceList(businessPartner);
+            me.removeAndInsertLines(function(deleted) {
+              if (OB.UTIL.isNullOrUndefined(deleted) || deleted === true) {
+                setAndSaveBP(businessPartner, function() {
+                  me.calculateReceipt(function() {
+                    if (saveChange) {
+                      me.save();
+                    }
+                    if (callback) {
+                      callback();
+                    }
+                  });
+                });
+              } else {
+                setPriceList(oldbp);
+                setAndSaveBP(oldbp, function() {
+                  if (callback) {
+                    callback();
+                  }
+                });
+              }
+            });
+          } else {
+            setAndSaveBP(businessPartner, function() {
               me.calculateReceipt(function() {
                 if (saveChange) {
                   me.save();
@@ -5212,23 +5256,13 @@
                 }
               });
             });
-          } else {
-            me.calculateReceipt(function() {
-              if (saveChange) {
-                me.save();
-              }
-              if (callback) {
-                callback();
-              }
-            });
           }
         } else {
-          if (saveChange) {
-            me.save();
-          }
-          if (callback) {
-            callback();
-          }
+          setAndSaveBP(businessPartner, function() {
+            if (callback) {
+              callback();
+            }
+          });
         }
       };
 
@@ -5348,23 +5382,11 @@
                     shipping.get('countryId')
                   );
                 }
-                OB.info('[saveBP] 1 - set BP for order with id ' + me.id);
-                me.set('bp', businessPartner);
-                OB.info('[saveBP] 2 - set BP for order with id ' + me.id);
-                me.save(function() {
-                  OB.info('[saveBP] 3 - order with id ' + me.id + ' saved');
-                  // copy the modelOrder again, as saveOrUpdate is possibly async
-                  OB.MobileApp.model.orderList.saveCurrent();
-                  finishSaveData(callback);
-                });
+                finishSaveData(callback);
               },
               businessPartner.get('id')
             );
           } else {
-            me.set('bp', businessPartner);
-            me.save();
-            // copy the modelOrder again, as saveOrUpdate is possibly async
-            OB.MobileApp.model.orderList.saveCurrent();
             finishSaveData(callback);
           }
         };
@@ -5444,15 +5466,11 @@
                 businessPartner.set('shipRegionId', shipping.get('regionId'));
                 businessPartner.set('shipCountryId', shipping.get('countryId'));
               }
-              me.set('bp', businessPartner);
-              me.save();
               finishSaveData(callback);
             },
             businessPartner.get('id')
           );
         } else {
-          me.set('bp', businessPartner);
-          me.save();
           finishSaveData(callback);
         }
       }
@@ -5577,7 +5595,7 @@
         if (index === lines.length) {
           me.set('skipCalculateReceipt', false);
           if (callback) {
-            callback();
+            callback(true);
           }
           return;
         }
@@ -5608,8 +5626,12 @@
         orderlines.push(line);
         promotionlines.push(line.get('promotions'));
       });
-      this.deleteLinesFromOrder(orderlines, function() {
-        addProductsOfLines(me, orderlines, 0, callback, promotionlines);
+      this.deleteLinesFromOrder(orderlines, function(deleted) {
+        if (deleted) {
+          addProductsOfLines(me, orderlines, 0, callback, promotionlines);
+        } else {
+          callback(false);
+        }
       });
     },
 
