# HG changeset patch
# User Rafael Queralta <rafaelcuba81@gmail.com>
# Date 1553702741 14400
#      Wed Mar 27 12:05:41 2019 -0400
# Node ID 88bda7ca4e57a2d8ea531a29a892a97f6407803f
# Parent  e177d56da527e1cfd50a3866a9d684ef8194067b
Fixed issue 40232: Sales quotation is not saved in Back Office

- Button 'Delete' is disabled until the processing of the order ends. A new
process controller registered to this button was added to do it.

diff --git a/src-db/database/sourcedata/OBMOBC_PROCESS_DEFINITION.xml b/src-db/database/sourcedata/OBMOBC_PROCESS_DEFINITION.xml
--- a/src-db/database/sourcedata/OBMOBC_PROCESS_DEFINITION.xml
+++ b/src-db/database/sourcedata/OBMOBC_PROCESS_DEFINITION.xml
@@ -40,6 +40,19 @@
 <!--322DE31F63154C5CAC595733487E8C0B-->  <PROCESS_SCRIM_MAINMESSAGE><![CDATA[DEE249EB0E2A47C39F6568BB30D2A115]]></PROCESS_SCRIM_MAINMESSAGE>
 <!--322DE31F63154C5CAC595733487E8C0B--></OBMOBC_PROCESS_DEFINITION>
 
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8--><OBMOBC_PROCESS_DEFINITION>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <OBMOBC_PROCESS_DEFINITION_ID><![CDATA[3AD6094E833544C7B64C2D7A8EC7A2D8]]></OBMOBC_PROCESS_DEFINITION_ID>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <SEARCHKEY><![CDATA[tapTotalButton]]></SEARCHKEY>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <NAME><![CDATA[Tap total Button]]></NAME>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <DESCRIPTION><![CDATA[Process executed when Total to Pay button is pressed]]></DESCRIPTION>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <TERMINALLOG><![CDATA[Y]]></TERMINALLOG>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8-->  <PROCESS_SCRIM><![CDATA[opaqueScrim]]></PROCESS_SCRIM>
+<!--3AD6094E833544C7B64C2D7A8EC7A2D8--></OBMOBC_PROCESS_DEFINITION>
+
 <!--3B510F6359FE40DCA106B68DBB2B7F21--><OBMOBC_PROCESS_DEFINITION>
 <!--3B510F6359FE40DCA106B68DBB2B7F21-->  <OBMOBC_PROCESS_DEFINITION_ID><![CDATA[3B510F6359FE40DCA106B68DBB2B7F21]]></OBMOBC_PROCESS_DEFINITION_ID>
 <!--3B510F6359FE40DCA106B68DBB2B7F21-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/web/org.openbravo.retail.posterminal/js/data/dataordersave.js b/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
--- a/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
+++ b/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
@@ -135,7 +135,9 @@
         var normalizedCreationDate = OB.I18N.normalizeDate(context.receipt.get('creationDate'));
         var creationDate;
         var frozenReceipt = new OB.Model.Order(),
-            diffReceipt = new OB.Model.Order();
+            diffReceipt = new OB.Model.Order(),
+            execution;
+        execution = OB.UTIL.ProcessController.start('tapTotalButton');
         if (normalizedCreationDate === null) {
           creationDate = new Date();
           normalizedCreationDate = OB.I18N.normalizeDate(creationDate);
@@ -164,6 +166,7 @@
             }
             args.context.receipt.setIsCalculateReceiptLockState(false);
             args.context.receipt.setIsCalculateGrossLockState(false);
+            OB.UTIL.ProcessController.finish('tapTotalButton', execution);
             return true;
           }
           OB.UTIL.clone(receipt, frozenReceipt);
@@ -256,6 +259,7 @@
                       OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_MsgReceiptSaved', [currentDocNo]));
                     }
                   }
+                  OB.UTIL.ProcessController.finish('tapTotalButton', execution);
                   OB.trace('Order successfully removed.');
                 };
 
@@ -295,6 +299,7 @@
                   } else {
                     restoreReceiptCallback();
                   }
+                  OB.UTIL.ProcessController.finish('tapTotalButton', execution);
                 };
 
                 if (!OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-left.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-left.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-left.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/toolbar-left.js
@@ -128,7 +128,7 @@
   handlers: {
     onLeftToolbarDisabled: 'disabledButton'
   },
-  processesToListen: ['calculateReceipt', 'addProduct'],
+  processesToListen: ['calculateReceipt', 'addProduct', 'tapTotalButton'],
   disableButton: function () {
     this.isEnabled = false;
     this.setDisabled(true);
@@ -140,6 +140,9 @@
     }
   },
   disabledButton: function (inSender, inEvent) {
+    if (this.model.get('order').get('isBeingProcessedQuotation')) {
+      return;
+    }
     this.isEnabled = !inEvent.status;
     this.setDisabled(inEvent.status);
     if (!this.isEnabled) {
@@ -148,6 +151,26 @@
       this.addClass('btn-icon-delete');
     }
   },
+  processStarted: function (process, execution, processesInExec) {
+    if (OB.UTIL.ProcessController.isFirstExecution(this, process)) {
+      if (this.disableButton) {
+        this.disableButton();
+      }
+      if (this.model.get('order').get('isQuotation')) {
+        this.model.get('order').set('isBeingProcessedQuotation', true);
+      }
+    }
+  },
+  processFinished: function (process, execution, processesInExec) {
+    if (processesInExec.models.length === 0) {
+      if (this.enableButton) {
+        this.enableButton();
+      }
+      if (this.model.get('order').get('isQuotation')) {
+        this.model.get('order').set('isBeingProcessedQuotation', false);
+      }
+    }
+  },
   updateDisabled: function (isDisabled) {
     this.isEnabled = !isDisabled;
     this.setDisabled(isDisabled);
