# HG changeset patch
# User Ranjith S R <ranjith@qualiantech.com>
# Date 1451372048 -19800
# Node ID 363f7b95b170d9cff9307710dba6114ef90f797e
# Parent  f3bbe3cfee462d018951ff4d1665c5c92c9ab16d
Realted to issue 31757 : Create Cash Mgmt Transaction based on WEBPOS Date

diff --git a/src/org/openbravo/retail/posterminal/ProcessCashMgmt.java b/src/org/openbravo/retail/posterminal/ProcessCashMgmt.java
--- a/src/org/openbravo/retail/posterminal/ProcessCashMgmt.java
+++ b/src/org/openbravo/retail/posterminal/ProcessCashMgmt.java
@@ -9,8 +9,10 @@
 package org.openbravo.retail.posterminal;
 
 import java.math.BigDecimal;
+import java.util.Calendar;
 import java.util.Date;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.codehaus.jettison.json.JSONObject;
 import org.openbravo.advpaymentmngt.dao.TransactionsDao;
@@ -19,6 +21,7 @@
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.mobile.core.process.DataSynchronizationImportProcess;
 import org.openbravo.mobile.core.process.DataSynchronizationProcess.DataSynchronization;
+import org.openbravo.mobile.core.utils.OBMOBCUtils;
 import org.openbravo.model.financialmgmt.gl.GLItem;
 import org.openbravo.model.financialmgmt.payment.FIN_FinaccTransaction;
 import org.openbravo.model.financialmgmt.payment.FIN_FinancialAccount;
@@ -64,6 +67,32 @@
     if (jsonsent.has("glItem")) {
       glItemMain = OBDal.getInstance().get(GLItem.class, jsonsent.getString("glItem"));
     }
+
+    // get and prepare the cashMgmtTrxDate
+    Date cashMgmtTrxDate = new Date();
+    if (jsonsent.has("creationDate") && jsonsent.get("creationDate") != null
+        && StringUtils.isNotEmpty(jsonsent.getString("creationDate"))) {
+      final String strCashUpDate = jsonsent.getString("creationDate");
+      if (!strCashUpDate.substring(strCashUpDate.length() - 1).equals("Z")) {
+        log.error(String.format(
+            "The cashup date must be provided in ISO 8601 format and be an UTC date (value: '%s')",
+            strCashUpDate));
+      }
+      // get the timezoneOffset
+      final long timezoneOffset;
+      if (jsonsent.has("timezoneOffset") && jsonsent.get("timezoneOffset") != null
+          && StringUtils.isNotEmpty(jsonsent.getString("timezoneOffset"))) {
+        timezoneOffset = Long.parseLong(jsonsent.getString("timezoneOffset"));
+      } else {
+        timezoneOffset = -((Calendar.getInstance().get(Calendar.ZONE_OFFSET) + Calendar
+            .getInstance().get(Calendar.DST_OFFSET)) / (60 * 1000));
+        log.error("Error processing cash close (1): error retrieving the timezoneOffset. Using the current timezoneOffset");
+      }
+      cashMgmtTrxDate = OBMOBCUtils.calculateClientDatetime(strCashUpDate, timezoneOffset);
+    } else {
+      log.debug("Error processing cash close (2): error retrieving cashUp date. Using current server date");
+    }
+
     FIN_FinancialAccount account = paymentMethod.getFinancialAccount();
 
     FIN_FinaccTransaction transaction = OBProvider.getInstance().get(FIN_FinaccTransaction.class);
@@ -84,8 +113,8 @@
     transaction.setProcessed(true);
     transaction.setTransactionType("BPW");
     transaction.setDescription(description);
-    transaction.setDateAcct(new Date());
-    transaction.setTransactionDate(new Date());
+    transaction.setDateAcct(cashMgmtTrxDate);
+    transaction.setTransactionDate(cashMgmtTrxDate);
     transaction.setStatus("RDNC");
 
     OBDal.getInstance().save(transaction);
@@ -116,8 +145,8 @@
       secondTransaction.setProcessed(true);
       secondTransaction.setTransactionType("BPW");
       secondTransaction.setDescription(description);
-      secondTransaction.setDateAcct(new Date());
-      secondTransaction.setTransactionDate(new Date());
+      secondTransaction.setDateAcct(cashMgmtTrxDate);
+      secondTransaction.setTransactionDate(cashMgmtTrxDate);
       secondTransaction.setStatus("RDNC");
       OBDal.getInstance().save(secondTransaction);
     }
diff --git a/web/org.openbravo.retail.posterminal/js/cashmgmt/model/cashmgmt-model.js b/web/org.openbravo.retail.posterminal/js/cashmgmt/model/cashmgmt-model.js
--- a/web/org.openbravo.retail.posterminal/js/cashmgmt/model/cashmgmt-model.js
+++ b/web/org.openbravo.retail.posterminal/js/cashmgmt/model/cashmgmt-model.js
@@ -48,7 +48,8 @@
       OB.Dal.find(OB.Model.CashUp, {
         'isprocessed': 'N'
       }, function (cashUp) {
-        var addedCashMgmt = new OB.Model.CashManagement({
+        var now = new Date();
+        var cashMgmt = {
           id: OB.UTIL.get_UUID(),
           description: p.identifier + ' - ' + model.get('name'),
           amount: p.amount,
@@ -63,7 +64,12 @@
           glItem: p.glItem,
           cashup_id: cashUp.at(0).get('id'),
           isbeingprocessed: 'N'
-        });
+        };
+        var objToSend = JSON.parse(JSON.stringify(cashMgmt));
+        objToSend.creationDate = OB.I18N.normalizeDate(now);
+        objToSend.timezoneOffset = now.getTimezoneOffset();
+        cashMgmt.objToSend = JSON.stringify(objToSend);
+        var addedCashMgmt = new OB.Model.CashManagement(cashMgmt);
         me.depsdropstosave.add(addedCashMgmt);
 
         var selectedPayment = me.payments.filter(function (payment) {
diff --git a/web/org.openbravo.retail.posterminal/js/model/cashmanagement.js b/web/org.openbravo.retail.posterminal/js/model/cashmanagement.js
--- a/web/org.openbravo.retail.posterminal/js/model/cashmanagement.js
+++ b/web/org.openbravo.retail.posterminal/js/model/cashmanagement.js
@@ -77,6 +77,10 @@
     name: 'isbeingprocessed',
     column: 'isbeingprocessed',
     type: 'TEXT'
+  }, {
+    name: 'objToSend',
+    column: 'objToSend',
+    type: 'TEXT'
   }]);
 
   CashManagement.addIndex([{
