From fc909a2a2e2ae47cc219407e94d405c3154322d6 Mon Sep 17 00:00:00 2001
From: Rafael Queralta <rafaelcuba81@gmail.com>
Date: Wed, 21 Apr 2021 11:17:15 -0400
Subject: [PATCH] Issue 46180-19Q3-POS

---
 .../js/model/order.js                         | 204 +++++++++---------
 .../js/utils/ticketCloseUtils.js              |  36 ++++
 2 files changed, 134 insertions(+), 106 deletions(-)

diff --git a/web/org.openbravo.retail.posterminal/js/model/order.js b/web/org.openbravo.retail.posterminal/js/model/order.js
index 57296a663..ff64ba22b 100644
--- a/web/org.openbravo.retail.posterminal/js/model/order.js
+++ b/web/org.openbravo.retail.posterminal/js/model/order.js
@@ -8806,9 +8806,102 @@
       });
       return index;
     },
+    markOrderAsDeleted: function(model, orderList, callback) {
+      var creationDate, i;
+      if (model.get('creationDate')) {
+        creationDate = new Date(model.get('creationDate'));
+      } else {
+        creationDate = new Date();
+      }
+      model.setIsCalculateGrossLockState(true);
+      model.set('creationDate', creationDate);
+      model.set('timezoneOffset', creationDate.getTimezoneOffset());
+      model.set('created', creationDate.getTime());
+      model.set('obposCreatedabsolute', OB.I18N.formatDateISO(creationDate));
+      model.set('obposIsDeleted', true);
+      OB.info(
+        'markOrderAsDeleted has set order with documentNo ' +
+          model.get('documentNo') +
+          ' and id ' +
+          model.get('id') +
+          ' as obposIsDeleted to true'
+      );
+      model.set('obposAppCashup', OB.MobileApp.model.get('terminal').cashUpId);
+      for (i = 0; i < model.get('lines').length; i++) {
+        model
+          .get('lines')
+          .at(i)
+          .set('obposIsDeleted', true);
+        model
+          .get('lines')
+          .at(i)
+          .set('listPrice', 0);
+        model
+          .get('lines')
+          .at(i)
+          .set('standardPrice', 0);
+        model
+          .get('lines')
+          .at(i)
+          .set('grossUnitPrice', 0);
+        model
+          .get('lines')
+          .at(i)
+          .set('lineGrossAmount', 0);
+      }
+      model.get('approvals').forEach(function(approval) {
+        if (typeof approval.approvalType === 'object') {
+          approval.approvalMessage = OB.I18N.getLabel(
+            approval.approvalType.message,
+            approval.approvalType.params
+          );
+          approval.approvalType = approval.approvalType.approval;
+        }
+      });
+      OB.Dal.transaction(function(tx) {
+        OB.UTIL.HookManager.executeHooks(
+          'OBPOS_PreSyncReceipt',
+          {
+            receipt: model,
+            model: model,
+            tx: tx
+          },
+          function(args) {
+            model.set('json', JSON.stringify(model.serializeToSaveJSON()));
+            model.set('hasbeenpaid', 'Y');
+            OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(
+              model.get('documentnoSuffix'),
+              model.get('quotationnoSuffix'),
+              model.get('returnnoSuffix'),
+              function() {
+                OB.Dal.saveInTransaction(tx, model, function() {
+                  if (
+                    orderList &&
+                    model.get('session') === OB.MobileApp.model.get('session')
+                  ) {
+                    var orderListModel = _.find(orderList.models, function(m) {
+                      return m.get('id') === model.get('id');
+                    });
+                    if (orderListModel) {
+                      orderList.saveCurrent();
+                      orderList.load(orderListModel);
+                    }
+                    orderList.deleteCurrent();
+                    orderList.synchronizeCurrentOrder();
+                  }
+                  model.setIsCalculateGrossLockState(false);
+                  if (callback && callback instanceof Function) {
+                    callback();
+                  }
+                });
+              },
+              tx
+            );
+          }
+        );
+      });
+    },
     deleteOrder: function(context, callback) {
-      var i;
-
       function removePayments(receipt, callback) {
         var payments = receipt.get('payments');
         if (receipt.get('isEditable') && payments && payments.length > 0) {
@@ -8862,107 +8955,6 @@
         }
       }
 
-      function markOrderAsDeleted(model, orderList, callback) {
-        var creationDate;
-        if (model.get('creationDate')) {
-          creationDate = new Date(model.get('creationDate'));
-        } else {
-          creationDate = new Date();
-        }
-        model.setIsCalculateGrossLockState(true);
-        model.set('creationDate', creationDate);
-        model.set('timezoneOffset', creationDate.getTimezoneOffset());
-        model.set('created', creationDate.getTime());
-        model.set('obposCreatedabsolute', OB.I18N.formatDateISO(creationDate));
-        model.set('obposIsDeleted', true);
-        OB.info(
-          'markOrderAsDeleted has set order with documentNo ' +
-            model.get('documentNo') +
-            ' and id ' +
-            model.get('id') +
-            ' as obposIsDeleted to true'
-        );
-        model.set(
-          'obposAppCashup',
-          OB.MobileApp.model.get('terminal').cashUpId
-        );
-        for (i = 0; i < model.get('lines').length; i++) {
-          model
-            .get('lines')
-            .at(i)
-            .set('obposIsDeleted', true);
-          model
-            .get('lines')
-            .at(i)
-            .set('listPrice', 0);
-          model
-            .get('lines')
-            .at(i)
-            .set('standardPrice', 0);
-          model
-            .get('lines')
-            .at(i)
-            .set('grossUnitPrice', 0);
-          model
-            .get('lines')
-            .at(i)
-            .set('lineGrossAmount', 0);
-        }
-        model.get('approvals').forEach(function(approval) {
-          if (typeof approval.approvalType === 'object') {
-            approval.approvalMessage = OB.I18N.getLabel(
-              approval.approvalType.message,
-              approval.approvalType.params
-            );
-            approval.approvalType = approval.approvalType.approval;
-          }
-        });
-        OB.Dal.transaction(function(tx) {
-          OB.UTIL.HookManager.executeHooks(
-            'OBPOS_PreSyncReceipt',
-            {
-              receipt: model,
-              model: model,
-              tx: tx
-            },
-            function(args) {
-              model.set('json', JSON.stringify(model.serializeToSaveJSON()));
-              model.set('hasbeenpaid', 'Y');
-              OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(
-                model.get('documentnoSuffix'),
-                model.get('quotationnoSuffix'),
-                model.get('returnnoSuffix'),
-                function() {
-                  OB.Dal.saveInTransaction(tx, model, function() {
-                    if (
-                      orderList &&
-                      model.get('session') === OB.MobileApp.model.get('session')
-                    ) {
-                      var orderListModel = _.find(orderList.models, function(
-                        m
-                      ) {
-                        return m.get('id') === model.get('id');
-                      });
-                      if (orderListModel) {
-                        orderList.saveCurrent();
-                        orderList.load(orderListModel);
-                      }
-                      orderList.deleteCurrent();
-                      orderList.synchronizeCurrentOrder();
-                    }
-                    model.setIsCalculateGrossLockState(false);
-                    if (callback && callback instanceof Function) {
-                      callback();
-                    }
-                  });
-                },
-                tx
-              );
-            }
-          );
-        });
-      }
-
       function removeOrder(receipt, callback) {
         var orderList = OB.MobileApp.model.orderList;
         var isPaidQuotation =
@@ -9003,7 +8995,7 @@
                 receipt.setIsCalculateReceiptLockState(false);
                 receipt.setIsCalculateGrossLockState(false);
                 receipt.calculateReceipt(function() {
-                  markOrderAsDeleted(receipt, orderList, callback);
+                  receipt.markOrderAsDeleted(receipt, orderList, callback);
                 });
               });
             } else {
@@ -9020,7 +9012,7 @@
               // isCalculateReceiptLockState and isCalculateGrossLockState properties must be initialized
               receipt.setIsCalculateReceiptLockState(false);
               receipt.setIsCalculateGrossLockState(false);
-              markOrderAsDeleted(receipt, orderList, callback);
+              this.markOrderAsDeleted(receipt, orderList, callback);
             } else {
               removeReceiptFromDatabase(receipt, callback);
             }
@@ -9038,7 +9030,7 @@
             ) {
               receipt.setIsCalculateReceiptLockState(true);
               receipt.setIsCalculateGrossLockState(true);
-              markOrderAsDeleted(receipt, orderList, callback);
+              this.markOrderAsDeleted(receipt, orderList, callback);
             } else {
               removeReceiptFromDatabase(receipt, callback);
             }
diff --git a/web/org.openbravo.retail.posterminal/js/utils/ticketCloseUtils.js b/web/org.openbravo.retail.posterminal/js/utils/ticketCloseUtils.js
index 7315cf3bb..42c58fb93 100644
--- a/web/org.openbravo.retail.posterminal/js/utils/ticketCloseUtils.js
+++ b/web/org.openbravo.retail.posterminal/js/utils/ticketCloseUtils.js
@@ -327,6 +327,42 @@
     });
   };
 
+  OB.UTIL.TicketCloseUtils.removeOrder = function(
+    receipt,
+    orderList,
+    triggerClosedCallback
+  ) {
+    var execution = OB.UTIL.ProcessController.start('deleteCurrentOrder');
+    receipt.prepareToSend(function() {
+      receipt.set('skipApplyPromotions', true);
+      receipt.set('skipCalculateReceipt', true);
+      receipt.set('preventServicesUpdate', true);
+      _.each(receipt.get('lines').models, function(line) {
+        line.set('obposQtyDeleted', line.get('qty'));
+        line.set('obposIsDeleted', true);
+        line.set('qty', 0, {
+          silent: true
+        });
+      });
+      if (receipt.get('hasServices')) {
+        receipt.unset('hasServices');
+      }
+      receipt.unset('preventServicesUpdate');
+      receipt.set('skipCalculateReceipt', false);
+      receipt.setIsCalculateReceiptLockState(false);
+      receipt.setIsCalculateGrossLockState(false);
+      receipt.calculateReceipt(function() {
+        receipt.markOrderAsDeleted(receipt, orderList, function() {
+          OB.UTIL.ProcessController.finish('deleteCurrentOrder', execution);
+          OB.MobileApp.model.runSyncProcess();
+          if (triggerClosedCallback instanceof Function) {
+            triggerClosedCallback();
+          }
+        });
+      });
+    });
+  };
+
   OB.UTIL.TicketCloseUtils.paymentDone = function(
     receipt,
     callbackPaymentAccepted,
-- 
2.28.0

