# HG changeset patch
# User Aaron Calero <aaron.calero@openbravo.com>
# Date 1457361505 -3600
#      Mon Mar 07 15:38:25 2016 +0100
# Node ID 1171f9c78ba0a7d2f9822dd128730b2eb02f7287
# Parent  264a5de1e4600f302bf3b33e238cc9f8c695e806
Fixed issue 32415: [Services] Asynchronous processes can corrupt receipt data

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
@@ -1391,6 +1391,7 @@
           if (callback) {
             callback(true);
           }
+          var synchId = OB.UTIL.SynchronizationHelper.busyUntilFinishes('HasServices');
           var subs = new subscribeToCalculateGross(me, function () {
             if (args.newLine && me.get('lines').contains(line)) {
               // Display related services after calculate gross, if it is new line and if the line has not been deleted.
@@ -1409,7 +1410,10 @@
                     args.receipt.trigger('showProductList', args.orderline, 'mandatory');
                   }
                 }
+                OB.UTIL.SynchronizationHelper.finished(synchId, 'HasServices');
               }, args.orderline);
+            } else {
+              OB.UTIL.SynchronizationHelper.finished(synchId, 'HasServices');
             }
           });
           subs.doSubscription();
@@ -1436,13 +1440,11 @@
               i, prod, synchId;
           params.terminalTime = date;
           params.terminalTimeOffset = date.getTimezoneOffset();
-          synchId = OB.UTIL.SynchronizationHelper.busyUntilFinishes('HasServices');
           process.exec({
             product: productId,
             productCategory: productCategory,
             parameters: params
           }, function (data, message) {
-            OB.UTIL.SynchronizationHelper.finished(synchId, 'HasServices');
             if (data && data.exception) {
               //ERROR or no connection
               OB.error(OB.I18N.getLabel('OBPOS_ErrorGettingRelatedServices'));
@@ -1453,7 +1455,6 @@
               callback(null);
             }
           }, function (error) {
-            OB.UTIL.SynchronizationHelper.finished(synchId, 'HasServices');
             OB.error(OB.I18N.getLabel('OBPOS_ErrorGettingRelatedServices'));
             callback(null);
           });
@@ -1492,6 +1493,7 @@
             }
           }, function (trx, error) {
             OB.error(OB.I18N.getLabel('OBPOS_ErrorGettingRelatedServices'));
+            callback(null);
           });
         }
       } else {
