# HG changeset patch
# User Ranjith S R <ranjith@qualiantech.com>
# Date 1582780244 -19800
#      Thu Feb 27 10:40:44 2020 +0530
# Node ID 991ddc9b0378c36ceee9a58c07ec5a86e2864907
# Parent  f78b2cd47c9b6cb5d8825e2e03b5d7d0f3677a72
Related to ISSUE-43233 : Validating Org Warehouse when creating Shipment lines

* SingleBin should be used only when one Warehouse is defined in the Org

diff -r f78b2cd47c9b -r 991ddc9b0378 src/org/openbravo/retail/posterminal/utility/ShipmentUtils.java
--- a/src/org/openbravo/retail/posterminal/utility/ShipmentUtils.java	Mon Feb 24 09:07:25 2020 -0500
+++ b/src/org/openbravo/retail/posterminal/utility/ShipmentUtils.java	Thu Feb 27 10:40:44 2020 +0530
@@ -16,6 +16,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.enterprise.inject.Any;
 import javax.enterprise.inject.Instance;
@@ -47,6 +48,7 @@
 import org.openbravo.model.common.businesspartner.Location;
 import org.openbravo.model.common.enterprise.DocumentType;
 import org.openbravo.model.common.enterprise.Locator;
+import org.openbravo.model.common.enterprise.OrgWarehouse;
 import org.openbravo.model.common.enterprise.Warehouse;
 import org.openbravo.model.common.invoice.Invoice;
 import org.openbravo.model.common.invoice.InvoiceLine;
@@ -213,7 +215,12 @@
       List<Locator> lineLocatorList = warehouse.getId().equals(order.getWarehouse().getId())
           ? locatorList
           : getLocatorList(warehouse);
-      if (lineLocatorList.size() == 1) {
+      List<OrgWarehouse> activeOrgWarehouse = order.getOrganization()
+          .getOrganizationWarehouseList()
+          .stream()
+          .filter(s -> s.isActive())
+          .collect(Collectors.toList());
+      if (activeOrgWarehouse.size() == 1 && lineLocatorList.size() == 1) {
         foundSingleBin = lineLocatorList.get(0);
       }
 
@@ -317,6 +324,10 @@
               while (pendingQty.compareTo(BigDecimal.ZERO) > 0 && bins.next()) {
                 // TODO: Can we safely clear session here?
                 StockProposed stock = (StockProposed) bins.get(0);
+                if (!stock.getStorageDetail().getStorageBin().getWarehouse().isActive()) {
+                  continue;
+                }
+
                 BigDecimal qty;
                 OrderLoaderPreAddShipmentLineHook_Response standardSaleBinHookResponse = null;
 
@@ -364,6 +375,12 @@
 
                 usedBins.put(stock.getStorageDetail().getStorageBin().getId(), objShipmentLine);
 
+                if (lineNo == 10 && !stock.getStorageDetail()
+                    .getStorageBin()
+                    .getWarehouse()
+                    .equals(shipment.getWarehouse())) {
+                  shipment.setWarehouse(stock.getStorageDetail().getStorageBin().getWarehouse());
+                }
               }
             } finally {
               bins.close();
