# HG changeset patch
# User Silambarasan Sekar <silambarasan@qualiantech.com>
# Date 1449568877 -19800
# Node ID b6e3a1173ed85f61d37cbc6fe43a7326d59493cd
# Parent  91c5d64f5a26beb795e71f29da98221e494ca716
[Cross Store Payment] Implementation of cross store payment, Checkbox in Pay open tickets and Layaway selectors.

diff --git a/src/org/openbravo/retail/posterminal/CashCloseProcessor.java b/src/org/openbravo/retail/posterminal/CashCloseProcessor.java
--- a/src/org/openbravo/retail/posterminal/CashCloseProcessor.java
+++ b/src/org/openbravo/retail/posterminal/CashCloseProcessor.java
@@ -122,7 +122,8 @@
           OBDal.getInstance().save(depositTransaction);
         }
       }
-      associateTransactions(paymentType, reconciliation, cashUpId, cashMgmtIds, slaveCashupIds);
+      associateTransactions(posTerminal, paymentType, reconciliation, cashUpId, cashMgmtIds,
+          slaveCashupIds);
     }
 
     for (FIN_Reconciliation reconciliation : arrayReconciliations) {
@@ -175,7 +176,7 @@
     return next;
   }
 
-  protected void associateTransactions(OBPOSAppPayment paymentType,
+  protected void associateTransactions(OBPOSApplications posTerminal, OBPOSAppPayment paymentType,
       FIN_Reconciliation reconciliation, String cashUpId, JSONArray cashMgmtIds,
       List<String> slaveCashupIds) {
     if (slaveCashupIds == null) {
@@ -187,13 +188,14 @@
         "where obposAppCashup.id in :slaveCashupIds and account.id=:account");
     transactionsQuery.setNamedParameter("slaveCashupIds", slaveCashupIds);
     transactionsQuery.setNamedParameter("account", paymentType.getFinancialAccount().getId());
-    associateTransactionsFromQuery(transactionsQuery, reconciliation);
+    associateTransactionsFromQuery(posTerminal, transactionsQuery, reconciliation);
   }
 
-  protected void associateTransactionsFromQuery(OBQuery<FIN_FinaccTransaction> transactionQuery,
-      FIN_Reconciliation reconciliation) {
+  protected void associateTransactionsFromQuery(OBPOSApplications posTerminal,
+      OBQuery<FIN_FinaccTransaction> transactionQuery, FIN_Reconciliation reconciliation) {
     ScrollableResults transactions = transactionQuery.scroll(ScrollMode.FORWARD_ONLY);
     try {
+      boolean crossStoreflag = false;
       while (transactions.next()) {
         FIN_FinaccTransaction transaction = (FIN_FinaccTransaction) transactions.get(0);
         transaction.setStatus("RPPC");
@@ -204,6 +206,17 @@
         if (transaction.getFinPayment() != null) {
           transaction.getFinPayment().setStatus("RPPC");
         }
+        if (crossStoreflag == false) {
+          if (transaction.getOrganization().getId()
+              .equals(posTerminal.getOrganization().getObposCrossStore().getId())) {
+            crossStoreflag = true;
+          }
+        }
+      }
+
+      if (crossStoreflag == true) {
+        reconciliation.setOrganization(posTerminal.getOrganization().getObposCrossStore());
+        OBDal.getInstance().save(reconciliation);
       }
     } finally {
       transactions.close();
diff --git a/src/org/openbravo/retail/posterminal/OrderLoader.java b/src/org/openbravo/retail/posterminal/OrderLoader.java
--- a/src/org/openbravo/retail/posterminal/OrderLoader.java
+++ b/src/org/openbravo/retail/posterminal/OrderLoader.java
@@ -1789,12 +1789,25 @@
       Date calculatedDate = (payment.has("date") && !payment.isNull("date")) ? OBMOBCUtils
           .calculateServerDate((String) payment.get("date"), jsonorder.getLong("timezoneOffset"))
           : OBMOBCUtils.stripTime(new Date());
-
+      // Cross store - Check if Order org is equal to terminal Org.
+      String posTerminalId = jsonorder.getString("posTerminal");
+      OBPOSApplications posTerminal = OBDal.getInstance().get(OBPOSApplications.class,
+          posTerminalId);
+      Organization paymentOrg = null;
+      if (!order.getOrganization().getId().equals(posTerminal.getOrganization().getId())) {
+        if (posTerminal.getOrganization().getObposCrossStore() != null) {
+          paymentOrg = posTerminal.getOrganization().getObposCrossStore();
+        } else {
+          return;
+        }
+      } else {
+        paymentOrg = order.getOrganization();
+      }
       // insert the payment
       FIN_Payment finPayment = FIN_AddPayment.savePayment(null, true, paymentDocType, paymentDocNo,
           order.getBusinessPartner(), paymentType.getPaymentMethod().getPaymentMethod(), account,
-          amount.toString(), calculatedDate, order.getOrganization(), null, detail, paymentAmount,
-          false, false, order.getCurrency(), mulrate, origAmount);
+          amount.toString(), calculatedDate, paymentOrg, null, detail, paymentAmount, false, false,
+          order.getCurrency(), mulrate, origAmount);
 
       if (writeoffAmt.signum() == 1) {
         if (totalIsNegative) {
diff --git a/src/org/openbravo/retail/posterminal/PaidReceiptsHeader.java b/src/org/openbravo/retail/posterminal/PaidReceiptsHeader.java
--- a/src/org/openbravo/retail/posterminal/PaidReceiptsHeader.java
+++ b/src/org/openbravo/retail/posterminal/PaidReceiptsHeader.java
@@ -12,6 +12,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.enterprise.inject.Any;
 import javax.enterprise.inject.Instance;
@@ -22,6 +23,9 @@
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.openbravo.base.exception.OBException;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.model.common.enterprise.Organization;
 
 public class PaidReceiptsHeader extends ProcessHQLQuery {
   public static final Logger log = Logger.getLogger(PaidReceiptsHeader.class);
@@ -61,10 +65,24 @@
         + strIsLayaway
         + "' as isLayaway from Order as ord "
         + "where ord.client='"
-        + json.getString("client")
-        + "' and ord.organization='"
-        + json.getString("organization")
-        + "' and ord.obposIsDeleted = false ";
+        + json.getString("client") + "' and ord.obposIsDeleted = false ";
+
+    // Checking CrossStore
+    if (!json.isNull("crossStore") && json.getBoolean("isLayaway")) {
+      Set<String> orgTree = OBContext.getOBContext().getOrganizationStructureProvider()
+          .getNaturalTree(json.getString("crossStore"));
+      String orgList = "";
+      for (String orgId : orgTree) {
+        if (orgId != "0") {
+          Organization Org = OBDal.getInstance().get(Organization.class, orgId);
+          orgList += ",'" + Org.getId() + "'";
+        }
+      }
+      orgList = orgList.replaceFirst(",", "");
+      hqlPaidReceipts += " and ord.organization.id in (" + orgList + ") ";
+    } else {
+      hqlPaidReceipts += " and ord.organization.id='" + json.getString("organization") + "'";
+    }
 
     if (!json.getString("filterText").isEmpty()) {
       String hqlFilter = "ord.documentNo like :filterT1 or REPLACE(ord.documentNo, '/', '') like :filterT1 or upper(ord.businessPartner.name) like upper(:filterT1)";
@@ -78,16 +96,18 @@
       }
       hqlPaidReceipts += " and (" + hqlFilter + ") ";
     }
-    if (!json.isNull("documentType")) {
-      JSONArray docTypes = json.getJSONArray("documentType");
-      hqlPaidReceipts += " and ( ";
-      for (int docType_i = 0; docType_i < docTypes.length(); docType_i++) {
-        hqlPaidReceipts += "ord.documentType.id='" + docTypes.getString(docType_i) + "'";
-        if (docType_i != docTypes.length() - 1) {
-          hqlPaidReceipts += " or ";
+    if (json.isNull("crossStore") && !json.getBoolean("isLayaway")) {
+      if (!json.isNull("documentType")) {
+        JSONArray docTypes = json.getJSONArray("documentType");
+        hqlPaidReceipts += " and ( ";
+        for (int docType_i = 0; docType_i < docTypes.length(); docType_i++) {
+          hqlPaidReceipts += "ord.documentType.id='" + docTypes.getString(docType_i) + "'";
+          if (docType_i != docTypes.length() - 1) {
+            hqlPaidReceipts += " or ";
+          }
         }
+        hqlPaidReceipts += " )";
       }
-      hqlPaidReceipts += " )";
     }
     if (!json.getString("docstatus").isEmpty() && !json.getString("docstatus").equals("null")) {
       hqlPaidReceipts += " and ord.documentStatus='" + json.getString("docstatus") + "'";
diff --git a/src/org/openbravo/retail/posterminal/term/TerminalProperties.java b/src/org/openbravo/retail/posterminal/term/TerminalProperties.java
--- a/src/org/openbravo/retail/posterminal/term/TerminalProperties.java
+++ b/src/org/openbravo/retail/posterminal/term/TerminalProperties.java
@@ -75,6 +75,7 @@
     list.add(new HQLProperty("pos.ismaster", "ismaster"));
     list.add(new HQLProperty(
         "CASE WHEN pos.masterterminal.id is not null THEN true ELSE false END", "isslave"));
+    list.add(new HQLProperty("pos.organization.obposCrossStore.id", "crossStore"));
 
     addTemplateProperty(Organization.PROPERTY_OBPOSCASHUPTEMPLATE, "printCashUpTemplate", list);
     addTemplateProperty(Organization.PROPERTY_OBPOSTICKETTEMPLATE, "printTicketTemplate", list);
diff --git a/web/org.openbravo.retail.posterminal/js/components/modalmultiorders.js b/web/org.openbravo.retail.posterminal/js/components/modalmultiorders.js
--- a/web/org.openbravo.retail.posterminal/js/components/modalmultiorders.js
+++ b/web/org.openbravo.retail.posterminal/js/components/modalmultiorders.js
@@ -68,8 +68,9 @@
           initComponents: function () {
             this.setContent(OB.I18N.getLabel('OBPOS_LblEndDate'));
           },
-          style: 'width 200px; margin: 0px 0px 2px 65px;'
+          style: 'width: 200px; margin: 0px 0px 2px 35px;'
         }]
+
       }]
     }, {
       style: 'display: table;',
@@ -97,7 +98,7 @@
         name: 'endDate',
         size: '10',
         type: 'text',
-        style: 'width: 100px;  margin: 0px 0px 8px 50px;',
+        style: 'width: 100px;  margin: 0px 0px 8px 25px;',
         onchange: 'searchAction'
       }, {
         style: 'display: table-cell;',
@@ -123,7 +124,8 @@
       endDate: this.$.endDate.getValue(),
       pos: OB.MobileApp.model.get('terminal').id,
       client: OB.MobileApp.model.get('terminal').client,
-      organization: OB.MobileApp.model.get('terminal').organization
+      organization: OB.MobileApp.model.get('terminal').organization,
+      crossStore: OB.MobileApp.model.get('terminal').crossStore
     };
 
     if (!this.getDateFilters()) {
diff --git a/web/org.openbravo.retail.posterminal/js/components/modalpaidreceipts.js b/web/org.openbravo.retail.posterminal/js/components/modalpaidreceipts.js
--- a/web/org.openbravo.retail.posterminal/js/components/modalpaidreceipts.js
+++ b/web/org.openbravo.retail.posterminal/js/components/modalpaidreceipts.js
@@ -194,7 +194,8 @@
       filterText: this.$.filterText.getValue(),
       pos: OB.MobileApp.model.get('terminal').id,
       client: OB.MobileApp.model.get('terminal').client,
-      organization: OB.MobileApp.model.get('terminal').organization
+      organization: OB.MobileApp.model.get('terminal').organization,
+      crossStore: OB.MobileApp.model.get('terminal').crossStore
     };
 
     if (!this.getDateFilters()) {
