From bbea212264c9930cbeef1908b4100f682b7f9b79 Mon Sep 17 00:00:00 2001 From: vpj-cd Date: Thu, 8 Jan 2009 01:00:12 +0000 Subject: [PATCH] some little refactors --- .../eevolution/model/MPPCostCollector.java | 99 ++++++++++++++++--- .../org/eevolution/model/MPPOrderNode.java | 55 ++++++++++- 2 files changed, 139 insertions(+), 15 deletions(-) diff --git a/base/src/org/eevolution/model/MPPCostCollector.java b/base/src/org/eevolution/model/MPPCostCollector.java index 1fcb2b4bc1..c0305a33df 100644 --- a/base/src/org/eevolution/model/MPPCostCollector.java +++ b/base/src/org/eevolution/model/MPPCostCollector.java @@ -18,14 +18,20 @@ package org.eevolution.model; import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.Timestamp; import java.util.Collection; import java.util.List; import java.util.Properties; +import java.util.logging.Level; import org.adempiere.exceptions.AdempiereException; +import org.compiere.Adempiere; +import org.compiere.acct.Doc; +import org.compiere.model.MAcctSchema; import org.compiere.model.MAttributeSetInstance; import org.compiere.model.MBPartner; import org.compiere.model.MClient; @@ -44,8 +50,10 @@ import org.compiere.print.ReportEngine; import org.compiere.process.DocAction; import org.compiere.process.DocumentEngine; import org.compiere.util.CCache; +import org.compiere.util.CLogMgt; import org.compiere.util.DB; import org.compiere.util.Env; +import org.compiere.util.Ini; import org.compiere.util.Msg; import org.compiere.util.TimeUtil; @@ -168,7 +176,7 @@ public class MPPCostCollector extends X_PP_Cost_Collector implements DocAction // // Operation Activity - if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControlReport)) + if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControl)) { MPPOrderNode activity = getPPOrderNode(); if(activity.getDocStatus().equals(MPPOrderNode.DOCACTION_Complete)) @@ -279,7 +287,7 @@ public class MPPCostCollector extends X_PP_Cost_Collector implements DocAction // // Update Order Line - if(!isCostCollectorType(COSTCOLLECTORTYPE_ActivityControlReport)) + if(!isCostCollectorType(COSTCOLLECTORTYPE_ActivityControl)) { // Stock Movement MProduct product = MProduct.get(getCtx(), getM_Product_ID()); @@ -387,7 +395,7 @@ public class MPPCostCollector extends X_PP_Cost_Collector implements DocAction log.fine("Order -> Delivered=" + order.getQtyDelivered()); } } - else if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControlReport)) + else if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControl)) { MPPOrderNode activity = getPPOrderNode(); if(activity.getDocStatus().equals(MPPOrderNode.DOCSTATUS_Completed)) @@ -582,12 +590,7 @@ public class MPPCostCollector extends X_PP_Cost_Collector implements DocAction MDocType dt = MDocType.get(getCtx(), getC_DocType_ID()); return dt.getName() + " " + getDocumentNo(); } // getDocumentInfo - - public String getDocumentNo() - { - return "" + get_ID(); - } - + private void createNewNode(MPPOrderNode node) { String whereClause = COLUMNNAME_PP_Order_ID+"=? AND "+COLUMNNAME_PP_Order_Node_ID+"=?"; @@ -637,7 +640,7 @@ public class MPPCostCollector extends X_PP_Cost_Collector implements DocAction private void closeNew(int PP_Order_ID, int PP_Order_Node_ID) { - if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControlReport)) + if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControl)) { String whereClause = COLUMNNAME_PP_Order_ID+"=?"; List list = new Query(getCtx(), Table_Name, whereClause, get_TrxName()) @@ -655,7 +658,7 @@ public class MPPCostCollector extends X_PP_Cost_Collector implements DocAction protected void completeNew(int PP_Order_ID) { - if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControlReport)) + if(isCostCollectorType(COSTCOLLECTORTYPE_ActivityControl)) { String whereClause = COLUMNNAME_PP_Order_ID+"=?" +" AND "+COLUMNNAME_DocStatus+"<>'"+DOCSTATUS_Completed+"'" @@ -933,4 +936,78 @@ public class MPPCostCollector extends X_PP_Cost_Collector implements DocAction } return false; } + + /** + * Test + * @param args ignored + * @throws IOException + * @throws FileNotFoundException + */ + public static void main (String[] args) throws FileNotFoundException, IOException + { + + // Test: General + //Properties testProperties = null; + + // Test Context + Properties m_Ctx = null; + + // IsClient + String isClient_Key = "isClient"; + String isClient_DefaultValue = "Y"; + boolean isClient_Value = true; + + // AD_User + final String AD_User_ID_Key = "AD_User_ID"; + String AD_User_ID_DefaultValue = "100"; //SuperUser + int AD_User_ID_Value = 0; + + // AD_Client + final String AD_Client_ID_Key = "AD_Client_ID"; + String AD_Client_ID_DefaultValue = "11"; //GardenWorld + int AD_Client_ID_Value = 11; + + // LogLevel: + final String LogLevel_Key = "LogLevel"; + String LogLevel_DefaultValue = Level.FINEST.toString(); + Level LogLevel_Value = Level.FINEST; + + // Trx name + String trxName = "test"; + + + Ini.setClient (isClient_Value); + Adempiere.startup(isClient_Value); + + m_Ctx = Env.getCtx(); + m_Ctx.setProperty("#AD_User_ID", new Integer(AD_User_ID_Value).toString()); + m_Ctx.setProperty("#AD_Client_ID", new Integer(AD_Client_ID_Value).toString()); + + /*if (fileName_Value.length() < 1) { + throw new AdempiereException("Please specify path to Adempiere.properties file!"); + } + + System.setProperty("PropertyFile", fileName_Value); + */ + + + //CLogMgt.setLevel(LogLevel_Value); + CLogMgt.setLevel(Level.ALL); + List ccs =new Query(m_Ctx, MPPCostCollector.Table_Name, "", null ).list(); + for (MPPCostCollector cc : ccs) + { + System.out.println("Cost Collector" + cc.getDocumentNo()); + MAcctSchema[] m_ass = MAcctSchema.getClientAcctSchema(Env.getCtx(), 11); + Doc doc = Doc.get (m_ass, MPPCostCollector.Table_ID, cc.get_ID(), null); + if (doc == null) + { + throw new AdempiereException("Documento no creado"); + } + else + { + String error = doc.post(true, true); // post no force/repost + } + } + + } } // MPPCostCollector diff --git a/base/src/org/eevolution/model/MPPOrderNode.java b/base/src/org/eevolution/model/MPPOrderNode.java index 986a2bcbd6..7a33fec847 100644 --- a/base/src/org/eevolution/model/MPPOrderNode.java +++ b/base/src/org/eevolution/model/MPPOrderNode.java @@ -18,17 +18,24 @@ package org.eevolution.model; import java.awt.Point; import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import java.util.Properties; +import org.adempiere.exceptions.AdempiereException; import org.compiere.model.MColumn; +import org.compiere.model.MResource; +import org.compiere.model.MUOM; import org.compiere.model.Query; import org.compiere.util.CCache; +import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; import org.compiere.wf.MWFNode; +import org.compiere.wf.MWorkflow; +import org.jfree.util.Log; /** * PP Order Workflow Node Model @@ -386,7 +393,7 @@ public class MPPOrderNode extends X_PP_Order_Node if (duration == 0) return 0; if (m_durationBaseMS == -1) - m_durationBaseMS = getWorkflow().getDurationBaseSec() * 1000; + m_durationBaseMS = getPPOrderWorkflow().getDurationBaseSec() * 1000; return duration * m_durationBaseMS; } // getDurationMS @@ -400,7 +407,7 @@ public class MPPOrderNode extends X_PP_Order_Node if (limit == 0) return 0; if (m_durationBaseMS == -1) - m_durationBaseMS = getWorkflow().getDurationBaseSec() * 1000; + m_durationBaseMS = getPPOrderWorkflow().getDurationBaseSec() * 1000; return limit * m_durationBaseMS; } // getLimitMS @@ -410,14 +417,14 @@ public class MPPOrderNode extends X_PP_Order_Node */ public int getDurationCalendarField() { - return getWorkflow().getDurationCalendarField(); + return getPPOrderWorkflow().getDurationCalendarField(); } // getDurationCalendarField /** * Get Workflow * @return workflow */ - public MPPOrderWorkflow getWorkflow() + public MPPOrderWorkflow getPPOrderWorkflow() { return MPPOrderWorkflow.get(getCtx(), getPP_Order_Workflow_ID()); } // getWorkflow @@ -550,4 +557,44 @@ public class MPPOrderNode extends X_PP_Order_Node .setParameters(new Object[]{PP_Order_Node_ID}) .match(); } + + /** + * Calculate the cost for this Activity using the Cost Element Type + * @param CostElementType Cost Element Type (Labor or Burden) + * @param C_AcctSchema_ID AcctSchema + * @param M_CostType_ID Cost Type + * @param AD_Org_ID Organization + * @param setuptime Setup Time + * @param duration Duration + * @return cost for this Cost Element Type (Labor or Burden) + * @throws Exception when the UOM do not is Hours + */ + public BigDecimal getCostForCostElementType(String CostElementType, int C_AcctSchema_ID,int M_CostType_ID,int AD_Org_ID,int setuptime, int duration) + { + MResource resource = (MResource) getS_Resource(); + //get the rate for this cost type element (Rsource, Burden) + MPPOrderWorkflow workflow = getPPOrderWorkflow(); + double rate = resource.getResouceRate(C_AcctSchema_ID, M_CostType_ID,CostElementType, AD_Org_ID); + BigDecimal cost = Env.ZERO; + if (rate == 0) + { + return Env.ZERO; + } + + int C_UOM_ID = DB.getSQLValue(get_TrxName(),"SELECT C_UOM_ID FROM M_Product WHERE S_Resource_ID = ? " , getS_Resource_ID()); + MUOM uom = MUOM.get(getCtx(), C_UOM_ID); + if (uom.isHour()) + { + double hours = (setuptime / workflow.getQtyBatchSize().doubleValue() + duration) + * workflow.getDurationBaseSec() / 3600; + double nodeCost = rate * hours; + cost = cost.add(new BigDecimal(nodeCost)); + log.info("Activity: " + getName() + " Resouce: " + resource.getName() +" CostElementType: " + CostElementType + " Time Base: "+workflow.getDurationUnit() +" Duration (H): " + hours + " Rate: " + rate + " Activity Cost: " + nodeCost +" =>Cost: "+cost); + } + else + { + throw new AdempiereException("@NotSupported@ @C_UOM_ID@="+uom.getName()); + } + return cost; + } } // M_WFNext