diff --git a/base/src/org/compiere/model/MCostElement.java b/base/src/org/compiere/model/MCostElement.java
index 02aa53a909..3a8a9349eb 100644
--- a/base/src/org/compiere/model/MCostElement.java
+++ b/base/src/org/compiere/model/MCostElement.java
@@ -1,5 +1,5 @@
/******************************************************************************
- * Product: Adempiere ERP & CRM Smart Business Solution *
+ * Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
@@ -34,6 +34,10 @@ import org.compiere.util.Msg;
* Cost Element Model
* @author Jorg Janke
* @version $Id: MCostElement.java,v 1.2 2006/07/30 00:58:04 jjanke Exp $
+ *
+ * @author Teo Sarca, www.arhipac.ro
+ *
BF [ 2664529 ] More then one Labor/Burden//Overhead is not allowed
+ * BF [ 2667470 ] MCostElement.getMaterialCostElement should check only material
*/
public class MCostElement extends X_M_CostElement
{
@@ -57,84 +61,14 @@ public class MCostElement extends X_M_CostElement
return null;
}
//
- MCostElement retValue = null;
- String sql = "SELECT * FROM M_CostElement WHERE AD_Client_ID=? AND CostingMethod=? ORDER BY AD_Org_ID";
- PreparedStatement pstmt = null;
- try
- {
- pstmt = DB.prepareStatement (sql, po.get_TrxName());
- pstmt.setInt (1, po.getAD_Client_ID());
- pstmt.setString(2, CostingMethod);
- ResultSet rs = pstmt.executeQuery ();
- boolean n = rs.next(); //jz to fix DB2 resultSet closed problem
- if (n)
- retValue = new MCostElement (po.getCtx(), rs, po.get_TrxName());
- if (n && rs.next())
- s_log.warning("More then one Material Cost Element for CostingMethod=" + CostingMethod);
- rs.close ();
- pstmt.close ();
- pstmt = null;
- }
- catch (Exception e)
- {
- s_log.log (Level.SEVERE, sql, e);
- }
- try
- {
- if (pstmt != null)
- pstmt.close ();
- pstmt = null;
- }
- catch (Exception e)
- {
- pstmt = null;
- }
+ final String whereClause = "AD_Client_ID=? AND CostingMethod=? AND CostElementType=?";
+ MCostElement retValue = new Query(po.getCtx(), Table_Name, whereClause, po.get_TrxName())
+ .setParameters(new Object[]{po.getAD_Client_ID(), CostingMethod, COSTELEMENTTYPE_Material})
+ .setOrderBy("AD_Org_ID")
+ .firstOnly();
if (retValue != null)
return retValue;
- if(CostingMethod.equals(MCostElement.COSTINGMETHOD_StandardCosting))
- {
- retValue = new MCostElement (po.getCtx(), 0, po.get_TrxName());
- retValue.setClientOrg(po.getAD_Client_ID(), 0);
- String name = MRefList.getListName(po.getCtx(), COSTELEMENTTYPE_AD_Reference_ID, COSTELEMENTTYPE_Resource);
- if (name == null || name.length() == 0)
- name = CostingMethod;
- retValue.setName(name);
- retValue.setCostElementType(COSTELEMENTTYPE_Resource);
- retValue.setCostingMethod(CostingMethod);
- retValue.save();
-
- retValue = new MCostElement (po.getCtx(), 0, po.get_TrxName());
- retValue.setClientOrg(po.getAD_Client_ID(), 0);
- name = MRefList.getListName(po.getCtx(), COSTELEMENTTYPE_AD_Reference_ID, COSTELEMENTTYPE_BurdenMOverhead);
- if (name == null || name.length() == 0)
- name = "BurdenMOverhead";
- retValue.setName(name);
- retValue.setCostElementType(COSTELEMENTTYPE_BurdenMOverhead);
- retValue.setCostingMethod(CostingMethod);
- retValue.save();
-
- retValue = new MCostElement (po.getCtx(), 0, po.get_TrxName());
- retValue.setClientOrg(po.getAD_Client_ID(), 0);
- name = MRefList.getListName(po.getCtx(), COSTELEMENTTYPE_AD_Reference_ID, COSTELEMENTTYPE_Overhead);
- if (name == null || name.length() == 0)
- name = "Overhead";
- retValue.setName(name);
- retValue.setCostElementType(COSTELEMENTTYPE_Overhead);
- retValue.setCostingMethod(CostingMethod);
- retValue.save();
-
- retValue = new MCostElement (po.getCtx(), 0, po.get_TrxName());
- retValue.setClientOrg(po.getAD_Client_ID(), 0);
- name = MRefList.getListName(po.getCtx(), COSTELEMENTTYPE_AD_Reference_ID, COSTELEMENTTYPE_OutsideProcessing);
- if (name == null || name.length() == 0)
- name = "OutsideProcessing";
- retValue.setName(name);
- retValue.setCostElementType(COSTELEMENTTYPE_OutsideProcessing);
- retValue.setCostingMethod(CostingMethod);
- retValue.save();
- }
-
// Create New
retValue = new MCostElement (po.getCtx(), 0, po.get_TrxName());
retValue.setClientOrg(po.getAD_Client_ID(), 0);
@@ -144,7 +78,7 @@ public class MCostElement extends X_M_CostElement
retValue.setName(name);
retValue.setCostElementType(COSTELEMENTTYPE_Material);
retValue.setCostingMethod(CostingMethod);
- retValue.save();
+ retValue.saveEx();
//
return retValue;
@@ -394,12 +328,12 @@ public class MCostElement extends X_M_CostElement
// Check Unique Costing Method
if (
( COSTELEMENTTYPE_Material.equals(getCostElementType())
- || COSTELEMENTTYPE_Resource.equals(getCostElementType())
- || COSTELEMENTTYPE_BurdenMOverhead.equals(getCostElementType())
- || COSTELEMENTTYPE_Overhead.equals(getCostElementType())
+// || COSTELEMENTTYPE_Resource.equals(getCostElementType())
+// || COSTELEMENTTYPE_BurdenMOverhead.equals(getCostElementType())
+// || COSTELEMENTTYPE_Overhead.equals(getCostElementType())
|| COSTELEMENTTYPE_OutsideProcessing.equals(getCostElementType())
- )
- && (newRecord || is_ValueChanged("CostingMethod")))
+ )
+ && (newRecord || is_ValueChanged(COLUMNNAME_CostingMethod)))
{
String sql = "SELECT COALESCE(MAX(M_CostElement_ID),0) FROM M_CostElement "
+ "WHERE AD_Client_ID=? AND CostingMethod=? AND CostElementType=?";