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
@@ -27,25 +27,13 @@
           isLayaway = (this.receipt.get('orderType') === 2 || this.receipt.get('isLayaway')),
           json = this.receipt.serializeToJSON(),
           receiptId = this.receipt.get('id'),
-          creationDate = new Date(),
-          creationDateTransformed = new Date(creationDate.getUTCFullYear(), creationDate.getUTCMonth(), creationDate.getUTCDate(), creationDate.getUTCHours(), creationDate.getUTCMinutes(), creationDate.getUTCSeconds());
-
+          creationDate = this.receipt.get('creationDate') || new Date();
+          
       if (this.receipt.get('isbeingprocessed') === 'Y') {
         //The receipt has already been sent, it should not be sent again
         return;
       }
       
-      if (this.receipt.get('isQuotation')) {
-        // The receipt is a quotation, verify the creationDate exist
-        if (this.receipt.get('creationDate')) {
-          creationDate = this.receipt.get('creationDate');
-          creationDateTransformed = new Date(creationDate.getUTCFullYear(), creationDate.getUTCMonth(), creationDate.getUTCDate(), creationDate.getUTCHours(), creationDate.getUTCMinutes(), creationDate.getUTCSeconds());
-        } else {
-          //Issue 28588: If the quotation is missing the creationDate attribute,
-          //the ticket header will show 'undefined' for the time/date of the quotation
-          this.receipt.set('creationDate', creationDate);
-        }
-      }
       this.receipt.set('hasbeenpaid', 'Y');
 
       OB.trace('Executing pre order save hook.');
@@ -69,6 +57,7 @@
         OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(receipt.get('documentnoSuffix'), receipt.get('quotationnoSuffix'));
 
         delete receipt.attributes.json;
+        receipt.set('creationDate', creationDate);
         receipt.set('timezoneOffset', creationDate.getTimezoneOffset());
         receipt.set('created', creationDate.getTime());
         receipt.set('obposCreatedabsolute', OB.I18N.formatDateISO(creationDate));
@@ -178,9 +167,9 @@
           isLayaway = (this.receipt.get('orderType') === 2 || this.receipt.get('isLayaway')),
           json = this.receipt.serializeToJSON(),
           receiptId = this.receipt.get('id'),
-          creationDate = new Date(),
-          creationDateTransformed = new Date(creationDate.getUTCFullYear(), creationDate.getUTCMonth(), creationDate.getUTCDate(), creationDate.getUTCHours(), creationDate.getUTCMinutes(), creationDate.getUTCSeconds());
+          creationDate = this.receipt.get('creationDate') || new Date();
 
+      this.receipt.set('creationDate', creationDate);
       this.receipt.set('hasbeenpaid', 'Y');
       this.context.get('multiOrders').trigger('integrityOk', this.receipt);
       OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(this.receipt.get('documentnoSuffix'), this.receipt.get('quotationnoSuffix'));
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
@@ -582,6 +582,7 @@
       this.set('posTerminal', null);
       this.set('posTerminal' + OB.Constants.FIELDSEPARATOR + OB.Constants.IDENTIFIER, null);
       this.set('orderDate', new Date());
+      this.set('creationDate', null);
       this.set('documentnoPrefix', -1);
       this.set('quotationnoPrefix', -1);
       this.set('documentnoSuffix', -1);
@@ -1440,6 +1441,7 @@
       this.set('isPaid', false);
       this.set('isEditable', true);
       this.set('orderDate', new Date());
+      this.set('creationDate', null);
       var nextDocumentno = OB.MobileApp.model.getNextDocumentno();
       this.set('documentnoPrefix', OB.MobileApp.model.get('terminal').docNoPrefix);
       this.set('documentnoSuffix', nextDocumentno.documentnoSuffix);
@@ -2168,6 +2170,7 @@
       order.set('posTerminal', OB.MobileApp.model.get('terminal').id);
       order.set('posTerminal' + OB.Constants.FIELDSEPARATOR + OB.Constants.IDENTIFIER, OB.MobileApp.model.get('terminal')._identifier);
       order.set('orderDate', new Date());
+      order.set('creationDate', null);
       order.set('isPaid', false);
       order.set('paidOnCredit', false);
       order.set('isLayaway', false);
@@ -2209,12 +2212,18 @@
       order.set('hasbeenpaid', 'Y');
       order.set('isEditable', false);
       order.set('checked', model.checked); //TODO: what is this for, where it comes from?
+      order.set('orderDate', moment(model.orderDate.toString(), "YYYY-MM-DD").toDate());
+      order.set('creationDate', moment(model.creationDate.toString(), "YYYY-MM-DD hh:m:ss.s").toDate());
       order.set('paidOnCredit', false);
       if (model.isQuotation) {
         order.set('isQuotation', true);
         order.set('oldId', model.orderid);
         order.set('id', null);
         order.set('documentType', OB.MobileApp.model.get('terminal').terminalType.documentTypeForQuotations);
+        // TODO: this commented lines are kept just in case this issue happens again
+        // Set creationDate milliseconds to 0, if the date is with milisecond, the date with miliseconds is rounded to seconds:
+        // so, the second can change, and the creationDate in quotation should not be changed when quotation is reactivated
+        // order.set('creationDate', moment(model.creationDate.toString(), "YYYY-MM-DD hh:m:ss").toDate());
       }
       if (model.isLayaway) {
         order.set('isLayaway', true);
@@ -2233,7 +2242,6 @@
           order.set('orderType', 1);
         }
       }
-
       bpLocId = model.bpLocId;
       bpId = model.bp;
       OB.Dal.get(OB.Model.BusinessPartner, bpId, function (bp) {
@@ -2283,13 +2291,6 @@
               }
             });
           });
-          order.set('orderDate', moment(model.orderDate.toString(), "YYYY-MM-DD").toDate());
-          order.set('creationDate', moment(model.creationDate.toString(), "YYYY-MM-DD hh:m:ss.s").toDate());
-          if (model.isQuotation) {
-            // isQuotation Set milliseconds to 0, if the date is with milisecond, the date with miliseconds is rounded to seconds:
-            // so, the second can change, and the creationDate in quotation should not be changed when quotation is reactivated
-            order.set('creationDate', moment(model.creationDate.toString(), "YYYY-MM-DD hh:m:ss").toDate());
-          }
           //order.set('payments', model.receiptPayments);
           payments = new PaymentLineList();
           _.each(model.receiptPayments, function (iter) {
