BF [ 2667470 ] MCostElement.getMaterialCostElement should check only material

https://sourceforge.net/tracker/?func=detail&atid=879332&aid=2667470&group_id=176962
This commit is contained in:
teo_sarca 2009-04-14 07:31:29 +00:00
parent 64126af564
commit 7d5f9d8c71
1 changed files with 16 additions and 82 deletions

View File

@ -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. * * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it * * 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 * * 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 * Cost Element Model
* @author Jorg Janke * @author Jorg Janke
* @version $Id: MCostElement.java,v 1.2 2006/07/30 00:58:04 jjanke Exp $ * @version $Id: MCostElement.java,v 1.2 2006/07/30 00:58:04 jjanke Exp $
*
* @author Teo Sarca, www.arhipac.ro
* <li>BF [ 2664529 ] More then one Labor/Burden//Overhead is not allowed
* <li>BF [ 2667470 ] MCostElement.getMaterialCostElement should check only material
*/ */
public class MCostElement extends X_M_CostElement public class MCostElement extends X_M_CostElement
{ {
@ -57,84 +61,14 @@ public class MCostElement extends X_M_CostElement
return null; return null;
} }
// //
MCostElement retValue = null; final String whereClause = "AD_Client_ID=? AND CostingMethod=? AND CostElementType=?";
String sql = "SELECT * FROM M_CostElement WHERE AD_Client_ID=? AND CostingMethod=? ORDER BY AD_Org_ID"; MCostElement retValue = new Query(po.getCtx(), Table_Name, whereClause, po.get_TrxName())
PreparedStatement pstmt = null; .setParameters(new Object[]{po.getAD_Client_ID(), CostingMethod, COSTELEMENTTYPE_Material})
try .setOrderBy("AD_Org_ID")
{ .firstOnly();
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;
}
if (retValue != null) if (retValue != null)
return retValue; 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 // Create New
retValue = new MCostElement (po.getCtx(), 0, po.get_TrxName()); retValue = new MCostElement (po.getCtx(), 0, po.get_TrxName());
retValue.setClientOrg(po.getAD_Client_ID(), 0); retValue.setClientOrg(po.getAD_Client_ID(), 0);
@ -144,7 +78,7 @@ public class MCostElement extends X_M_CostElement
retValue.setName(name); retValue.setName(name);
retValue.setCostElementType(COSTELEMENTTYPE_Material); retValue.setCostElementType(COSTELEMENTTYPE_Material);
retValue.setCostingMethod(CostingMethod); retValue.setCostingMethod(CostingMethod);
retValue.save(); retValue.saveEx();
// //
return retValue; return retValue;
@ -394,12 +328,12 @@ public class MCostElement extends X_M_CostElement
// Check Unique Costing Method // Check Unique Costing Method
if ( if (
( COSTELEMENTTYPE_Material.equals(getCostElementType()) ( COSTELEMENTTYPE_Material.equals(getCostElementType())
|| COSTELEMENTTYPE_Resource.equals(getCostElementType()) // || COSTELEMENTTYPE_Resource.equals(getCostElementType())
|| COSTELEMENTTYPE_BurdenMOverhead.equals(getCostElementType()) // || COSTELEMENTTYPE_BurdenMOverhead.equals(getCostElementType())
|| COSTELEMENTTYPE_Overhead.equals(getCostElementType()) // || COSTELEMENTTYPE_Overhead.equals(getCostElementType())
|| COSTELEMENTTYPE_OutsideProcessing.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 " String sql = "SELECT COALESCE(MAX(M_CostElement_ID),0) FROM M_CostElement "
+ "WHERE AD_Client_ID=? AND CostingMethod=? AND CostElementType=?"; + "WHERE AD_Client_ID=? AND CostingMethod=? AND CostElementType=?";