Refactor Cost Element to get back compatibility
http://sourceforge.net/tracker2/?func=detail&aid=2493022&group_id=176962&atid=879335
This commit is contained in:
parent
a278c88d62
commit
84f75cef53
|
@ -17,20 +17,18 @@
|
||||||
|
|
||||||
package org.eevolution.process;
|
package org.eevolution.process;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.adempiere.exceptions.DBException;
|
|
||||||
import org.compiere.model.MAcctSchema;
|
import org.compiere.model.MAcctSchema;
|
||||||
import org.compiere.model.MCost;
|
import org.compiere.model.MCost;
|
||||||
import org.compiere.model.MCostElement;
|
import org.compiere.model.MCostElement;
|
||||||
|
import org.compiere.model.MOrg;
|
||||||
import org.compiere.model.MProduct;
|
import org.compiere.model.MProduct;
|
||||||
|
import org.compiere.model.Query;
|
||||||
import org.compiere.process.ProcessInfoParameter;
|
import org.compiere.process.ProcessInfoParameter;
|
||||||
import org.compiere.process.SvrProcess;
|
import org.compiere.process.SvrProcess;
|
||||||
import org.compiere.util.DB;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,12 +42,14 @@ import org.compiere.util.DB;
|
||||||
*/
|
*/
|
||||||
public class CreateCostElement extends SvrProcess
|
public class CreateCostElement extends SvrProcess
|
||||||
{
|
{
|
||||||
private int p_AD_Org_ID = 0;
|
private Integer p_AD_Org_ID = null;
|
||||||
private int p_C_AcctSchema_ID = 0;
|
private int p_C_AcctSchema_ID = 0;
|
||||||
private int p_M_CostType_ID = 0;
|
private int p_M_CostType_ID = 0;
|
||||||
private int p_M_CostElement_ID = 0;
|
private int p_M_CostElement_ID = 0;
|
||||||
private int p_M_Product_Category_ID = 0;
|
private int p_M_Product_Category_ID = 0;
|
||||||
private int p_M_Product_ID = 0;
|
private int p_M_Product_ID = 0;
|
||||||
|
private int p_M_AttributeSetInstance_ID= 0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare - e.g., get Parameters.
|
* Prepare - e.g., get Parameters.
|
||||||
|
@ -88,6 +88,10 @@ public class CreateCostElement extends SvrProcess
|
||||||
{
|
{
|
||||||
p_M_Product_ID = para[i].getParameterAsInt();
|
p_M_Product_ID = para[i].getParameterAsInt();
|
||||||
}
|
}
|
||||||
|
else if (name.equals(MCost.COLUMNNAME_M_AttributeSetInstance_ID))
|
||||||
|
{
|
||||||
|
p_M_AttributeSetInstance_ID = para[i].getParameterAsInt();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
log.log(Level.SEVERE,"prepare - Unknown Parameter: " + name);
|
log.log(Level.SEVERE,"prepare - Unknown Parameter: " + name);
|
||||||
}
|
}
|
||||||
|
@ -96,84 +100,97 @@ public class CreateCostElement extends SvrProcess
|
||||||
protected String doIt() throws Exception
|
protected String doIt() throws Exception
|
||||||
{
|
{
|
||||||
MAcctSchema as = MAcctSchema.get(getCtx(), p_C_AcctSchema_ID);
|
MAcctSchema as = MAcctSchema.get(getCtx(), p_C_AcctSchema_ID);
|
||||||
int count_costs = 0;
|
|
||||||
|
|
||||||
ArrayList<Object> params = new ArrayList<Object>();
|
String whereClauseElements= "";
|
||||||
String sql = "SELECT org.AD_Org_ID, p.M_Product_ID, ce.M_CostElement_ID"
|
ArrayList<Object> paramsElements = new ArrayList<Object>();
|
||||||
+" FROM AD_Org org, M_Product p, M_CostElement ce"
|
|
||||||
+" WHERE ";
|
|
||||||
|
|
||||||
sql += "org.AD_Client_ID=? AND p.AD_Client_ID=org.AD_Client_ID AND ce.AD_Client_ID=p.AD_Client_ID";
|
if (p_M_CostElement_ID > 0)
|
||||||
params.add(getAD_Client_ID());
|
|
||||||
|
|
||||||
if (p_AD_Org_ID > 0)
|
|
||||||
{
|
{
|
||||||
sql += " AND org.AD_Org_ID=?";
|
whereClauseElements = MCostElement.COLUMNNAME_M_CostElement_ID+"=?";
|
||||||
params.add(p_AD_Org_ID);
|
paramsElements.add(p_M_CostElement_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Collection<MCostElement> elements = new Query(getCtx(), MCostElement.Table_Name, whereClauseElements, get_TrxName())
|
||||||
|
.setParameters(paramsElements)
|
||||||
|
.list();
|
||||||
|
|
||||||
|
String whereClauseProducts= "";
|
||||||
|
ArrayList<Object> paramsProducts= new ArrayList<Object>();
|
||||||
|
|
||||||
if (p_M_Product_Category_ID > 0)
|
if (p_M_Product_Category_ID > 0)
|
||||||
{
|
{
|
||||||
sql += " AND p."+MProduct.COLUMNNAME_M_Product_Category_ID+"=?";
|
whereClauseProducts = MProduct.COLUMNNAME_M_Product_Category_ID+"=?";
|
||||||
params.add(p_M_Product_Category_ID);
|
paramsProducts.add(p_M_Product_Category_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_M_Product_ID > 0)
|
if (p_M_Product_ID > 0)
|
||||||
{
|
{
|
||||||
sql += " AND p."+MProduct.COLUMNNAME_M_Product_ID+"=?";
|
if(p_M_Product_Category_ID > 0)
|
||||||
params.add(p_M_Product_ID);
|
whereClauseProducts += " AND ";
|
||||||
|
|
||||||
|
whereClauseProducts += MProduct.COLUMNNAME_M_Product_ID+"=?";
|
||||||
|
paramsProducts.add(p_M_Product_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_M_CostElement_ID > 0)
|
int[] product_ids = new Query(getCtx(), MProduct.Table_Name, whereClauseProducts, get_TrxName())
|
||||||
|
.setParameters(paramsProducts)
|
||||||
|
.getIDs();
|
||||||
|
int count_costs = 0;
|
||||||
|
for(int org_id : getOrgs(as))
|
||||||
{
|
{
|
||||||
sql += " AND ce."+MCostElement.COLUMNNAME_M_CostElement_ID+"=?";
|
for(int product_id: product_ids)
|
||||||
params.add(p_M_CostElement_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
// M_Cost not already created:
|
|
||||||
sql += " AND NOT EXISTS (SELECT 1 FROM M_Cost c WHERE"
|
|
||||||
+" c.AD_Client_ID=ce.AD_Client_ID"
|
|
||||||
+" AND c.AD_Org_ID=org.AD_Org_ID"
|
|
||||||
+" AND c.M_Product_ID=p.M_Product_ID"
|
|
||||||
+" AND c.C_AcctSchema_ID=?"
|
|
||||||
+" AND c.M_CostType_ID=?"
|
|
||||||
+" AND c.M_CostElement_ID=ce.M_CostElement_ID)";
|
|
||||||
params.add(p_C_AcctSchema_ID);
|
|
||||||
params.add(p_M_CostType_ID);
|
|
||||||
|
|
||||||
// ORDER BY
|
|
||||||
sql += " ORDER BY p."+MProduct.COLUMNNAME_M_Product_ID;
|
|
||||||
|
|
||||||
PreparedStatement pstmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
pstmt = DB.prepareStatement (sql, get_TrxName());
|
|
||||||
DB.setParameters(pstmt, params);
|
|
||||||
rs = pstmt.executeQuery ();
|
|
||||||
while (rs.next())
|
|
||||||
{
|
{
|
||||||
int AD_Org_ID = rs.getInt("AD_Org_ID");
|
for(MCostElement element : elements)
|
||||||
int M_Product_ID = rs.getInt(MProduct.COLUMNNAME_M_Product_ID);
|
{
|
||||||
int M_CostElement_ID = rs.getInt(MCostElement.COLUMNNAME_M_CostElement_ID);
|
|
||||||
int M_ASI_ID = 0;
|
MCost cost = MCost.get (getCtx(), getAD_Client_ID(), org_id, product_id,
|
||||||
MProduct product = MProduct.get(getCtx(), M_Product_ID);
|
p_M_CostType_ID, as.getC_AcctSchema_ID(), element.get_ID(),
|
||||||
//
|
p_M_AttributeSetInstance_ID);
|
||||||
MCost cost = new MCost(product, M_ASI_ID, as, AD_Org_ID, M_CostElement_ID);
|
if(cost == null)
|
||||||
cost.setM_CostType_ID(p_M_CostType_ID);
|
{
|
||||||
cost.saveEx(get_TrxName());
|
cost = new MCost (MProduct.get(getCtx(), product_id), p_M_AttributeSetInstance_ID,as, org_id, element.get_ID());
|
||||||
count_costs++;
|
cost.setM_CostType_ID(p_M_CostType_ID);
|
||||||
|
cost.saveEx(get_TrxName());
|
||||||
|
count_costs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
throw new DBException(e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(rs, pstmt);
|
|
||||||
rs = null; pstmt = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return "@Created@ #"+count_costs;
|
return "@Created@ #"+count_costs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the IDs for Organization and Valid the Cost Level
|
||||||
|
* @param as Account Schema
|
||||||
|
* @return array of IDs
|
||||||
|
*/
|
||||||
|
private int [] getOrgs(MAcctSchema as)
|
||||||
|
{
|
||||||
|
int[] orgs_ids = new int[1];
|
||||||
|
orgs_ids[0] = 0;
|
||||||
|
String whereClauseOrg = "";
|
||||||
|
ArrayList<Object> paramsOrg = new ArrayList<Object>();
|
||||||
|
//Set the Costing Level
|
||||||
|
String CostingLevel = as.getCostingLevel();
|
||||||
|
if (p_AD_Org_ID != null)
|
||||||
|
{
|
||||||
|
if (MAcctSchema.COSTINGLEVEL_Client.equals(CostingLevel))
|
||||||
|
{
|
||||||
|
p_AD_Org_ID = 0;
|
||||||
|
p_M_AttributeSetInstance_ID = 0;
|
||||||
|
return orgs_ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
whereClauseOrg = "AD_Org_ID=?";
|
||||||
|
paramsOrg.add(p_AD_Org_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
orgs_ids = new Query(getCtx(), MOrg.Table_Name, whereClauseOrg, get_TrxName())
|
||||||
|
.setParameters(paramsOrg)
|
||||||
|
.getIDs();
|
||||||
|
return orgs_ids;
|
||||||
|
}
|
||||||
} // Create Cost Element
|
} // Create Cost Element
|
||||||
|
|
Loading…
Reference in New Issue