diff -r 4d0f648f3236 web/org.openbravo.retail.posterminal/js/data/dataordersave.js
--- a/web/org.openbravo.retail.posterminal/js/data/dataordersave.js	Mon Feb 15 16:21:51 2016 +0100
+++ b/web/org.openbravo.retail.posterminal/js/data/dataordersave.js	Mon Feb 15 19:54:15 2016 +0100
@@ -64,16 +64,13 @@
     // finished receipt verifications
     this.receipt.on('closed', function (eventParams) {
       this.receipt = model.get('order');
-      
+      OB.info('Ticket closed: ', this.receipt.getOrderDescription() + ' with localstorageid: ' + window.localStorage.idCacheDevice);
       var me = this,
           docno = this.receipt.get('documentNo'),
           isLayaway = (this.receipt.get('orderType') === 2 || this.receipt.get('isLayaway')),
           json = this.receipt.serializeToJSON(),
           receiptId = this.receipt.get('id');
 
-      	  OB.info('Ticket closed' +  docno + ' with localstorageid: '+window.localStorage.idCacheDevice);
-
-      
       if (this.receipt.get('isbeingprocessed') === 'Y') {
         //The receipt has already been sent, it should not be sent again
         return;
@@ -88,8 +85,8 @@
       } catch (e) {
         OB.error("Ticket closed: the 'creationDate' was not a valid date ('" + this.receipt.get('creationDate') + "')");
       }
-      OB.info("Ticket closed: 'creationDate' set to '" + creationDate.toISOString() + "' (was '" + this.receipt.get('creationDate') + "')");
 
+      this.receipt.set('hasbeenpaid', 'Y');
 
       OB.trace('Executing pre order save hook.');
 
@@ -105,6 +102,7 @@
           return true;
         }
         var receipt = args.context.receipt,
+            auxReceipt = new OB.Model.Order(),
             currentDocNo = receipt.get('documentNo') || docno;
 
         OB.trace('Execution of pre order save hook OK.');
@@ -127,7 +125,17 @@
           }
         });
 
-        receipt.set('obposAppCashup', OB.MobileApp.model.get('terminal').cashUpId);
+        if (OB.MobileApp.model.get('terminal').cashUpId) {
+          receipt.set('obposAppCashup', OB.MobileApp.model.get('terminal').cashUpId);
+        } else {
+          args.context.receipt.set('isbeingprocessed', 'N');
+          args.context.receipt.set('hasbeenpaid', 'N');
+          args.context.receipt.trigger('paymentCancel');
+          OB.UTIL.showConfirmation.display("CashupID not found", "Please reload the application after complete the ticket");
+          return true;
+        }
+
+
         // convert returns
         if (receipt.getGross() < 0) {
           _.forEach(receipt.get('payments').models, function (item) {
@@ -136,35 +144,27 @@
             item.set('paid', -item.get('paid'));
           });
         }
-        
-        receipt.set('hasbeenpaid', 'Y');
-
         receipt.set('json', JSON.stringify(receipt.serializeToJSON()));
 
         OB.trace('Calculationg cashup information.');
-        
-        var auxReceipt = new OB.Model.Order();
+
         auxReceipt.clearWith(receipt);
-        var auxReceipt2 = new OB.Model.Order();
-        auxReceipt2.clearWith(receipt);
-        var auxReceipt3 = new OB.Model.Order();
-        auxReceipt3.clearWith(receipt);
-
         OB.Dal.transaction(function (tx) {
           OB.UTIL.cashUpReport(auxReceipt, function () {
             OB.UTIL.calculateCurrentCash(null, tx);
-            OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(auxReceipt2.get('documentnoSuffix'), auxReceipt2.get('quotationnoSuffix'), function () {
-              var docno = auxReceipt2.get('documentNo');
-              var creationDate = auxReceipt2.get('creationDate');
-              var tzo = auxReceipt2.get('timezoneOffset');
+            OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(receipt.get('documentnoSuffix'), receipt.get('quotationnoSuffix'), function () {
+              var docno = receipt.get('documentNo');
+              var creationDate = receipt.get('creationDate');
+              var tzo = receipt.get('timezoneOffset');
               var message = "[transaction.saveorder] receipt '" + docno + "'; creationDate '" + creationDate + "'; timezoneOffset: '" + tzo + "'";
-              OB.Dal.saveInTransaction(tx, auxReceipt2, function () {
+              OB.Dal.saveInTransaction(tx, receipt, function () {
+                OB.info(message);
               });
             }, tx);
           }, tx);
-        }, function () {
-        }, function () {
+        }, null, function () {
           // success transaction...
+          OB.trace('Executing of post order save hook.');
 
           var successCallback = function (model) {
               OB.trace('Sync process success.');
@@ -172,8 +172,10 @@
               //In case the processed document is a quotation, we remove its id so it can be reactivated
               if (model && !_.isNull(model)) {
                 if (model.get('order') && model.get('order').get('isQuotation')) {
-                  model.get('order').set('oldId', model.get('order').get('id'));
-                  model.get('order').set('id', null);
+                  if (!(model.get('order').get('oldId') && model.get('order').get('oldId').length > 0)) {
+                    model.get('order').set('oldId', model.get('order').get('id'));
+                    model.get('order').set('id', null);
+                  }
                   model.get('order').set('isbeingprocessed', 'N');
                   OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_QuotationSaved', [currentDocNo]));
                 } else {
@@ -195,7 +197,7 @@
 
             OB.MobileApp.model.runSyncProcess(function () {
               OB.UTIL.HookManager.executeHooks('OBPOS_PostSyncReceipt', {
-                receipt: auxReceipt3
+                receipt: auxReceipt
               }, function (args) {
                 successCallback();
                 if (eventParams && eventParams.callback) {
@@ -204,7 +206,7 @@
               });
             }, function () {
               OB.UTIL.HookManager.executeHooks('OBPOS_PostSyncReceipt', {
-                receipt: auxReceipt3
+                receipt: auxReceipt
               }, function (args) {
                 if (eventParams && eventParams.callback) {
                   eventParams.callback();
@@ -216,13 +218,12 @@
             OB.trace('Execution Sync process.');
 
             //If there are no elements in the hook, we can execute the callback asynchronusly with the synchronization process
-            successCallback(model);
+            OB.MobileApp.model.runSyncProcess(function () {
+              successCallback(model);
+            });
             if (eventParams && eventParams.callback) {
               eventParams.callback();
             }
-            OB.MobileApp.model.runSyncProcess(function () {
-              OB.debug("Ticket closed: runSyncProcess executed");
-            });
           }
         });
       });
@@ -272,23 +273,21 @@
         receipt: this.receipt
       }, function (args) {
 
-        var receipt = args.context.receipt,
-        trxName;
-
         OB.trace('Execution of pre order save hook OK.');
         if (args && args.cancellation && args.cancellation === true) {
-          receipt.set('isbeingprocessed', 'N');
+          args.context.receipt.set('isbeingprocessed', 'N');
           return true;
         }
 
-        OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(receipt.get('documentnoSuffix'), receipt.get('quotationnoSuffix'), function () {
-          OB.trace('Saving receipt.');
-          trxName = 'closeTicketTrx' + receipt.get('id');
-          OB.Dal.saveInTransaction(trxName, me.receipt, function () {
+        OB.trace('Saving receipt.');
+
+        OB.Dal.save(me.receipt, function () {
+          OB.Dal.get(OB.Model.Order, receiptId, function (receipt) {
             var successCallback, errorCallback;
             successCallback = function () {
 
               OB.trace('Sync process success.');
+              OB.UTIL.showLoading(false);
               if (me.hasInvLayaways) {
                 OB.UTIL.showWarning(OB.I18N.getLabel('OBPOS_noInvoiceIfLayaway'));
                 me.hasInvLayaways = false;
@@ -315,12 +314,12 @@
               me.ordersToSend = OB.DEC.Zero;
             }
 
-          }, function () {
-            //We do nothing: we don't need to alert the user, as the order is still present in the database, so it will be resent as soon as the user logs in again
-          });
-        }, trxName);
+          }, null);
+        }, function () {
+          //We do nothing: we don't need to alert the user, as the order is still present in the database, so it will be resent as soon as the user logs in again
+        });
       });
 
     }, this);
   };
-}());
+}());
\ No newline at end of file
