diff --git a/base/src/org/compiere/model/MRequisitionLine.java b/base/src/org/compiere/model/MRequisitionLine.java
index ce945ec958..40ee48145b 100644
--- a/base/src/org/compiere/model/MRequisitionLine.java
+++ b/base/src/org/compiere/model/MRequisitionLine.java
@@ -18,6 +18,7 @@ package org.compiere.model;
import java.math.BigDecimal;
import java.sql.ResultSet;
+import java.sql.Timestamp;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
@@ -198,6 +199,15 @@ public class MRequisitionLine extends X_M_RequisitionLine
return m_parent;
} // getParent
+ /**
+ * @return Date when this product is required by planner
+ * @see MRequisition#getDateRequired()
+ */
+ public Timestamp getDateRequired()
+ {
+ return getParent().getDateRequired();
+ }
+
/**
* Set Price
*/
diff --git a/base/src/org/compiere/process/RequisitionPOCreate.java b/base/src/org/compiere/process/RequisitionPOCreate.java
index 3d6c910500..eebb109eff 100644
--- a/base/src/org/compiere/process/RequisitionPOCreate.java
+++ b/base/src/org/compiere/process/RequisitionPOCreate.java
@@ -16,11 +16,13 @@
*****************************************************************************/
package org.compiere.process;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.logging.Level;
+import org.adempiere.exceptions.NoVendorForProductException;
+import org.apache.commons.collections.keyvalue.MultiKey;
import org.compiere.model.MBPartner;
import org.compiere.model.MCharge;
import org.compiere.model.MOrder;
@@ -29,9 +31,9 @@ import org.compiere.model.MProduct;
import org.compiere.model.MProductPO;
import org.compiere.model.MRequisition;
import org.compiere.model.MRequisitionLine;
-import org.compiere.util.AdempiereSystemError;
+import org.compiere.model.POResultSet;
+import org.compiere.model.Query;
import org.compiere.util.AdempiereUserError;
-import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Msg;
@@ -41,6 +43,10 @@ import org.compiere.util.Msg;
*
* @author Jorg Janke
* @version $Id: RequisitionPOCreate.java,v 1.2 2006/07/30 00:51:01 jjanke Exp $
+ *
+ * @author Teo Sarca, www.arhipac.ro
+ *
BF [ 2609760 ] RequisitionPOCreate not using DateRequired
+ * BF [ 2605888 ] CreatePOfromRequisition creates more PO than needed
*/
public class RequisitionPOCreate extends SvrProcess
{
@@ -72,6 +78,8 @@ public class RequisitionPOCreate extends SvrProcess
private MOrder m_order = null;
/** Order Line */
private MOrderLine m_orderLine = null;
+ /** Orders Cache : (C_BPartner_ID, DateRequired, M_PriceList_ID) -> MOrder */
+ private HashMap m_cacheOrders = new HashMap();
/**
* Prepare - e.g., get Parameters.
@@ -126,12 +134,16 @@ public class RequisitionPOCreate extends SvrProcess
log.info("M_Requisition_ID=" + p_M_Requisition_ID);
MRequisition req = new MRequisition(getCtx(), p_M_Requisition_ID, get_TrxName());
if (!MRequisition.DOCSTATUS_Completed.equals(req.getDocStatus()))
+ {
throw new AdempiereUserError("@DocStatus@ = " + req.getDocStatus());
+ }
MRequisitionLine[] lines = req.getLines();
for (int i = 0; i < lines.length; i++)
{
if (lines[i].getC_OrderLine_ID() == 0)
+ {
process (lines[i]);
+ }
}
closeOrder();
return "";
@@ -147,97 +159,82 @@ public class RequisitionPOCreate extends SvrProcess
+ ", M_Product_ID=" + p_M_Product_ID
+ ", ConsolidateDocument" + p_ConsolidateDocument);
- StringBuffer sql = new StringBuffer("SELECT * FROM M_RequisitionLine rl ")
- .append("WHERE rl.C_OrderLine_ID IS NULL");
+ ArrayList