diff --git a/org.adempiere.base/src/org/compiere/model/MProduct.java b/org.adempiere.base/src/org/compiere/model/MProduct.java index 3a72148ace..99c4f55024 100644 --- a/org.adempiere.base/src/org/compiere/model/MProduct.java +++ b/org.adempiere.base/src/org/compiere/model/MProduct.java @@ -571,16 +571,26 @@ public class MProduct extends X_M_Product || (is_ValueChanged("ProductType") // from Item && PRODUCTTYPE_Item.equals(get_ValueOld("ProductType"))))) { - MStorageOnHand[] storages = MStorageOnHand.getOfProduct(getCtx(), get_ID(), get_TrxName()); + // large modified related to storages by zuhri + MStorageOnHand[] onHandStorages = MStorageOnHand.getOfProduct(getCtx(), get_ID(), get_TrxName()); + MStorageReservation[] reservationStorages = MStorageReservation.getOfProduct(getCtx(), get_ID(), get_TrxName()); BigDecimal OnHand = Env.ZERO; BigDecimal Ordered = Env.ZERO; BigDecimal Reserved = Env.ZERO; - for (int i = 0; i < storages.length; i++) + for (int i = 0; i < onHandStorages.length; i++) { - OnHand = OnHand.add(storages[i].getQtyOnHand()); - Ordered = Ordered.add(storages[i].getQtyOrdered()); - Reserved = Reserved.add(storages[i].getQtyReserved()); + OnHand = OnHand.add(onHandStorages[i].getQtyOnHand()); + //Ordered = Ordered.add(storages[i].getQtyOrdered()); + //Reserved = Reserved.add(storages[i].getQtyReserved()); } + for (int i = 0; i < reservationStorages.length; i++) + { + if(reservationStorages[i].isSOTrx()) + Reserved = Reserved.add(reservationStorages[i].getQty()); + else + Ordered = Ordered.add(reservationStorages[i].getQty()); + } + // end large modified related to storages by zuhri String errMsg = ""; if (OnHand.signum() != 0) errMsg = "@QtyOnHand@ = " + OnHand; @@ -717,8 +727,8 @@ public class MProduct extends X_M_Product for (int i = 0; i < storages.length; i++) { OnHand = OnHand.add(storages[i].getQtyOnHand()); - Ordered = OnHand.add(storages[i].getQtyOrdered()); - Reserved = OnHand.add(storages[i].getQtyReserved()); + //Ordered = OnHand.add(storages[i].getQtyOrdered()); + //Reserved = OnHand.add(storages[i].getQtyReserved()); } String errMsg = ""; if (OnHand.signum() != 0) diff --git a/org.adempiere.base/src/org/compiere/model/MStorageReservation.java b/org.adempiere.base/src/org/compiere/model/MStorageReservation.java index 0f711d99a0..fbd07fe5fc 100644 --- a/org.adempiere.base/src/org/compiere/model/MStorageReservation.java +++ b/org.adempiere.base/src/org/compiere/model/MStorageReservation.java @@ -3,6 +3,7 @@ package org.compiere.model; import java.math.BigDecimal; import java.sql.ResultSet; import java.util.ArrayList; +import java.util.List; import java.util.Properties; import org.compiere.util.CLogMgt; @@ -29,6 +30,49 @@ public class MStorageReservation extends X_M_StorageReservation { // TODO Auto-generated constructor stub } + /** + * Get Storage Info for Product on specified Warehouse + * @param ctx + * @param m_Warehouse_ID + * @param m_Product_ID + * @param i + * @param get_TrxName + * @return + */ + public static MStorageReservation[] get(Properties ctx, int m_Warehouse_ID, + int m_Product_ID, int i, String trxName) { + String sqlWhere = "M_Product_ID=? AND M_Warehouse_ID=?"; + + List list = new Query(ctx, MStorageReservation.Table_Name, sqlWhere, trxName) + .setParameters(m_Product_ID, m_Warehouse_ID) + .list(); + + MStorageReservation[] retValue = new MStorageReservation[list.size()]; + list.toArray(retValue); + return retValue; + } + + /** + * Get Storage Info for Product across warehouses + * @param ctx context + * @param M_Product_ID product + * @param trxName transaction + * @return existing or null + */ + public static MStorageReservation[] getOfProduct (Properties ctx, int M_Product_ID, String trxName) + { + String sqlWhere = "M_Product_ID=?"; + + List list = new Query(ctx, MStorageReservation.Table_Name, sqlWhere, trxName) + .setParameters(M_Product_ID) + .list(); + + MStorageReservation[] retValue = new MStorageReservation[list.size()]; + list.toArray(retValue); + return retValue; + + } // getOfProduct + /** * Get Available Qty. * The call is accurate only if there is a storage record @@ -90,5 +134,4 @@ public class MStorageReservation extends X_M_StorageReservation { + ",M_Product_ID=" + M_Product_ID + " = " + retValue); return retValue; } // getQtyAvailable - }