From 84f75cef53f944ded0b2ea8209adcf699ccf7fe6 Mon Sep 17 00:00:00 2001 From: vpj-cd Date: Thu, 8 Jan 2009 00:55:22 +0000 Subject: [PATCH] Refactor Cost Element to get back compatibility http://sourceforge.net/tracker2/?func=detail&aid=2493022&group_id=176962&atid=879335 --- .../eevolution/process/CreateCostElement.java | 151 ++++++++++-------- 1 file changed, 84 insertions(+), 67 deletions(-) diff --git a/base/src/org/eevolution/process/CreateCostElement.java b/base/src/org/eevolution/process/CreateCostElement.java index 02f96f0a82..6a11045b0d 100644 --- a/base/src/org/eevolution/process/CreateCostElement.java +++ b/base/src/org/eevolution/process/CreateCostElement.java @@ -17,20 +17,18 @@ package org.eevolution.process; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.logging.Level; -import org.adempiere.exceptions.DBException; import org.compiere.model.MAcctSchema; import org.compiere.model.MCost; import org.compiere.model.MCostElement; +import org.compiere.model.MOrg; import org.compiere.model.MProduct; +import org.compiere.model.Query; import org.compiere.process.ProcessInfoParameter; import org.compiere.process.SvrProcess; -import org.compiere.util.DB; @@ -44,12 +42,14 @@ import org.compiere.util.DB; */ 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_M_CostType_ID = 0; private int p_M_CostElement_ID = 0; private int p_M_Product_Category_ID = 0; private int p_M_Product_ID = 0; + private int p_M_AttributeSetInstance_ID= 0; + /** * Prepare - e.g., get Parameters. @@ -88,6 +88,10 @@ public class CreateCostElement extends SvrProcess { p_M_Product_ID = para[i].getParameterAsInt(); } + else if (name.equals(MCost.COLUMNNAME_M_AttributeSetInstance_ID)) + { + p_M_AttributeSetInstance_ID = para[i].getParameterAsInt(); + } else log.log(Level.SEVERE,"prepare - Unknown Parameter: " + name); } @@ -96,84 +100,97 @@ public class CreateCostElement extends SvrProcess protected String doIt() throws Exception { MAcctSchema as = MAcctSchema.get(getCtx(), p_C_AcctSchema_ID); - int count_costs = 0; - ArrayList params = new ArrayList(); - String sql = "SELECT org.AD_Org_ID, p.M_Product_ID, ce.M_CostElement_ID" - +" FROM AD_Org org, M_Product p, M_CostElement ce" - +" WHERE "; + String whereClauseElements= ""; + ArrayList paramsElements = new ArrayList(); - sql += "org.AD_Client_ID=? AND p.AD_Client_ID=org.AD_Client_ID AND ce.AD_Client_ID=p.AD_Client_ID"; - params.add(getAD_Client_ID()); - - if (p_AD_Org_ID > 0) + if (p_M_CostElement_ID > 0) { - sql += " AND org.AD_Org_ID=?"; - params.add(p_AD_Org_ID); + whereClauseElements = MCostElement.COLUMNNAME_M_CostElement_ID+"=?"; + paramsElements.add(p_M_CostElement_ID); } + + + Collection elements = new Query(getCtx(), MCostElement.Table_Name, whereClauseElements, get_TrxName()) + .setParameters(paramsElements) + .list(); + + String whereClauseProducts= ""; + ArrayList paramsProducts= new ArrayList(); + if (p_M_Product_Category_ID > 0) { - sql += " AND p."+MProduct.COLUMNNAME_M_Product_Category_ID+"=?"; - params.add(p_M_Product_Category_ID); + whereClauseProducts = MProduct.COLUMNNAME_M_Product_Category_ID+"=?"; + paramsProducts.add(p_M_Product_Category_ID); } if (p_M_Product_ID > 0) { - sql += " AND p."+MProduct.COLUMNNAME_M_Product_ID+"=?"; - params.add(p_M_Product_ID); + if(p_M_Product_Category_ID > 0) + 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+"=?"; - 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()) + for(int product_id: product_ids) { - int AD_Org_ID = rs.getInt("AD_Org_ID"); - 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; - MProduct product = MProduct.get(getCtx(), M_Product_ID); - // - MCost cost = new MCost(product, M_ASI_ID, as, AD_Org_ID, M_CostElement_ID); - cost.setM_CostType_ID(p_M_CostType_ID); - cost.saveEx(get_TrxName()); - count_costs++; + for(MCostElement element : elements) + { + + MCost cost = MCost.get (getCtx(), getAD_Client_ID(), org_id, product_id, + p_M_CostType_ID, as.getC_AcctSchema_ID(), element.get_ID(), + p_M_AttributeSetInstance_ID); + if(cost == null) + { + cost = new MCost (MProduct.get(getCtx(), product_id), p_M_AttributeSetInstance_ID,as, org_id, element.get_ID()); + 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; } + + /** + * 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 paramsOrg = new ArrayList(); + //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