diff --git a/base/src/org/compiere/model/MOrder.java b/base/src/org/compiere/model/MOrder.java index 618d5d1cfc..3ce6bc0014 100644 --- a/base/src/org/compiere/model/MOrder.java +++ b/base/src/org/compiere/model/MOrder.java @@ -52,6 +52,9 @@ import org.eevolution.model.MPPProductBOMLine; *
  • FR [ 2520591 ] Support multiples calendar for Org * @see http://sourceforge.net/tracker2/?func=detail&atid=879335&aid=2520591&group_id=176962 * @version $Id: MOrder.java,v 1.5 2006/10/06 00:42:24 jjanke Exp $ + * + * @author Teo Sarca, www.arhipac.ro + *
  • BF [ 2419978 ] Voiding PO, requisition don't set on NULL */ public class MOrder extends X_C_Order implements DocAction { @@ -1972,6 +1975,9 @@ public class MOrder extends X_C_Order implements DocAction return false; } + // UnLink All Requisitions + MRequisitionLine.unlinkC_Order_ID(getCtx(), get_ID(), get_TrxName()); + if (!createReversals()) return false; diff --git a/base/src/org/compiere/model/MOrderLine.java b/base/src/org/compiere/model/MOrderLine.java index a0edb72cd1..26b76eeb6a 100644 --- a/base/src/org/compiere/model/MOrderLine.java +++ b/base/src/org/compiere/model/MOrderLine.java @@ -41,6 +41,10 @@ import org.compiere.util.Msg; * * @author Jorg Janke * @version $Id: MOrderLine.java,v 1.6 2006/10/02 05:18:39 jjanke Exp $ + * + * @author Teo Sarca, SC ARHIPAC SERVICE SRL + *
  • FR [ 1883362 ] Usability: force Product/Charge on Invoice Line as an option + * TODO: integrate to trunk */ public class MOrderLine extends X_C_OrderLine { @@ -855,6 +859,9 @@ public class MOrderLine extends X_C_OrderLine return false; } + // UnLink All Requisitions + MRequisitionLine.unlinkC_OrderLine_ID(getCtx(), get_ID(), get_TrxName()); + return true; } // beforeDelete diff --git a/base/src/org/compiere/model/MRequisitionLine.java b/base/src/org/compiere/model/MRequisitionLine.java index 63c27f4afb..0a78ad1d66 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.util.List; import java.util.Properties; import java.util.logging.Level; @@ -29,11 +30,80 @@ import org.compiere.util.Env; * * @author Jorg Janke * @version $Id: MRequisitionLine.java,v 1.2 2006/07/30 00:51:03 jjanke Exp $ + * + * @author Teo Sarca, www.arhipac.ro + *
  • BF [ 2419978 ] Voiding PO, requisition don't set on NULL */ public class MRequisitionLine extends X_M_RequisitionLine { private static final long serialVersionUID = 1L; + /** + * Get corresponding Requisition Line for given Order Line + * @param ctx + * @param C_OrderLine_ID order line + * @param trxName + * @return Requisition Line + */ + public static MRequisitionLine[] forC_Order_ID(Properties ctx, int C_Order_ID, String trxName) + { + final String whereClause = "EXISTS (SELECT 1 FROM C_OrderLine ol" + +" WHERE ol.C_OrderLine_ID=M_RequisitionLine.C_OrderLine_ID" + +" AND ol.C_Order_ID=?)"; + List list = new Query(ctx, MRequisitionLine.Table_Name, whereClause, trxName) + .setParameters(new Object[]{C_Order_ID}) + .list(); + return list.toArray(new MRequisitionLine[list.size()]); + } + + /** + * UnLink Requisition Lines for given Order + * @param ctx + * @param C_Order_ID + * @param trxName + */ + public static void unlinkC_Order_ID(Properties ctx, int C_Order_ID, String trxName) + { + for (MRequisitionLine line : MRequisitionLine.forC_Order_ID(ctx, C_Order_ID, trxName)) + { + line.setC_OrderLine_ID(0); + line.saveEx(); + } + } + + + /** + * Get corresponding Requisition Line for given Order Line + * @param ctx + * @param C_OrderLine_ID order line + * @param trxName + * @return Requisition Line + */ + public static MRequisitionLine forC_OrderLine_ID(Properties ctx, int C_OrderLine_ID, String trxName) + { + final String whereClause = COLUMNNAME_C_OrderLine_ID+"=?"; + return new Query(ctx, MRequisitionLine.Table_Name, whereClause, trxName) + .setParameters(new Object[]{C_OrderLine_ID}) + .firstOnly(); + } + + /** + * UnLink Requisition Lines for given Order Line + * @param ctx + * @param C_OrderLine_ID + * @param trxName + */ + public static void unlinkC_OrderLine_ID(Properties ctx, int C_OrderLine_ID, String trxName) + { + MRequisitionLine line = forC_OrderLine_ID(ctx, C_OrderLine_ID, trxName); + if (line != null) + { + line.setC_OrderLine_ID(0); + line.saveEx(); + } + } + + /** * Standard Constructor * @param ctx context @@ -184,7 +254,7 @@ public class MRequisitionLine extends X_M_RequisitionLine if (getLine() == 0) { String sql = "SELECT COALESCE(MAX(Line),0)+10 FROM M_RequisitionLine WHERE M_Requisition_ID=?"; - int ii = DB.getSQLValue (get_TrxName(), sql, getM_Requisition_ID()); + int ii = DB.getSQLValueEx (get_TrxName(), sql, getM_Requisition_ID()); setLine (ii); } // Product & ASI - Charge @@ -237,8 +307,8 @@ public class MRequisitionLine extends X_M_RequisitionLine + " SET TotalLines=" + "(SELECT COALESCE(SUM(LineNetAmt),0) FROM M_RequisitionLine rl " + "WHERE r.M_Requisition_ID=rl.M_Requisition_ID) " - + "WHERE M_Requisition_ID=" + getM_Requisition_ID(); - int no = DB.executeUpdateEx(sql, get_TrxName()); + + "WHERE M_Requisition_ID=?"; + int no = DB.executeUpdateEx(sql, new Object[]{getM_Requisition_ID()}, get_TrxName()); if (no != 1) log.log(Level.SEVERE, "Header update #" + no); m_parent = null;