📄 mcost.java
字号:
+ "FROM M_Cost c "
+ "WHERE AD_Client_ID=? AND AD_Org_ID=?"
+ " AND M_Product_ID=?"
+ " AND M_AttributeSetInstance_ID=?"
+ " AND M_CostType_ID=? AND C_AcctSchema_ID=?"
+ " AND M_CostElement_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, product.get_TrxName());
pstmt.setInt (1, product.getAD_Client_ID());
pstmt.setInt (2, AD_Org_ID);
pstmt.setInt (3, product.getM_Product_ID());
pstmt.setInt (4, M_AttributeSetInstance_ID);
pstmt.setInt (5, as.getM_CostType_ID());
pstmt.setInt (6, as.getC_AcctSchema_ID());
pstmt.setInt (7, M_CostElement_ID);
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
cost = new MCost (product.getCtx(), rs, product.get_TrxName());
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;
}
// New
if (cost == null)
cost = new MCost (product, M_AttributeSetInstance_ID,
as, AD_Org_ID, M_CostElement_ID);
return cost;
} // get
/**
* Get Costs
* @param AD_Client_ID client
* @param AD_Org_ID org
* @param M_Product_ID product
* @param M_CostType_ID cost type
* @param C_AcctSchema_ID as
* @param M_CostElement_ID cost element
* @param M_AttributeSetInstance_ID asi
* @return cost or null
*/
public static MCost get (Properties ctx, int AD_Client_ID, int AD_Org_ID, int M_Product_ID,
int M_CostType_ID, int C_AcctSchema_ID, int M_CostElement_ID,
int M_AttributeSetInstance_ID)
{
MCost retValue = null;
String sql = "SELECT * FROM M_Cost "
+ "WHERE AD_Client_ID=? AND AD_Org_ID=? AND M_Product_ID=?"
+ " AND M_CostType_ID=? AND C_AcctSchema_ID=? AND M_CostElement_ID=?"
+ " AND M_AttributeSetInstance_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, AD_Client_ID);
pstmt.setInt (2, AD_Org_ID);
pstmt.setInt (3, M_Product_ID);
pstmt.setInt (4, M_CostType_ID);
pstmt.setInt (5, C_AcctSchema_ID);
pstmt.setInt (6, M_CostElement_ID);
pstmt.setInt (7, M_AttributeSetInstance_ID);
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
{
retValue = new MCost (ctx, rs, null);
}
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;
}
return retValue;
} // get
/** Logger */
private static CLogger s_log = CLogger.getCLogger (MCost.class);
/**************************************************************************
* Standard Constructor
* @param ctx context
* @param ignored multi-key
* @param trxName trx
*/
public MCost (Properties ctx, int ignored, String trxName)
{
super (ctx, ignored, trxName);
if (ignored == 0)
{
// setC_AcctSchema_ID (0);
// setM_CostElement_ID (0);
// setM_CostType_ID (0);
// setM_Product_ID (0);
setM_AttributeSetInstance_ID(0);
//
setCurrentCostPrice (Env.ZERO);
setFutureCostPrice (Env.ZERO);
setCurrentQty (Env.ZERO);
setCumulatedAmt (Env.ZERO);
setCumulatedQty (Env.ZERO);
}
else
throw new IllegalArgumentException("Multi-Key");
} // MCost
/**
* Load Constructor
* @param ctx context
* @param rs result set
* @param trxName trx
*/
public MCost (Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
m_manual = false;
} // MCost
/**
* Parent Constructor
* @param product Product
* @param M_AttributeSetInstance_ID asi
* @param as Acct Schema
* @param AD_Org_ID org
* @param M_CostElement_ID cost element
*/
public MCost (MProduct product, int M_AttributeSetInstance_ID,
MAcctSchema as, int AD_Org_ID, int M_CostElement_ID)
{
this (product.getCtx(), 0, product.get_TrxName());
setClientOrg(product.getAD_Client_ID(), AD_Org_ID);
setC_AcctSchema_ID(as.getC_AcctSchema_ID());
setM_CostType_ID(as.getM_CostType_ID());
setM_Product_ID(product.getM_Product_ID());
setM_AttributeSetInstance_ID(M_AttributeSetInstance_ID);
setM_CostElement_ID(M_CostElement_ID);
//
m_manual = false;
} // MCost
/** Data is entered Manually */
private boolean m_manual = true;
/**
* Add Cumulative Amt/Qty and Current Qty
* @param amt amt
* @param qty qty
*/
public void add (BigDecimal amt, BigDecimal qty)
{
setCumulatedAmt(getCumulatedAmt().add(amt));
setCumulatedQty(getCumulatedQty().add(qty));
setCurrentQty(getCurrentQty().add(qty));
} // add
/**
* Add Amt/Qty and calculate weighted average.
* ((OldAvg*OldQty)+(Price*Qty)) / (OldQty+Qty)
* @param amt total amt (price * qty)
* @param qty qty
*/
public void setWeightedAverage (BigDecimal amt, BigDecimal qty)
{
BigDecimal oldSum = getCurrentCostPrice().multiply(getCurrentQty());
BigDecimal newSum = amt; // is total already
BigDecimal sumAmt = oldSum.add(newSum);
BigDecimal sumQty = getCurrentQty().add(qty);
if (sumQty.signum() != 0)
{
BigDecimal cost = sumAmt.divide(sumQty, getPrecision(), BigDecimal.ROUND_HALF_UP);
setCurrentCostPrice(cost);
}
//
setCumulatedAmt(getCumulatedAmt().add(amt));
setCumulatedQty(getCumulatedQty().add(qty));
setCurrentQty(getCurrentQty().add(qty));
} // setWeightedAverage
/**
* Get Costing Precision
* @return precision (6)
*/
private int getPrecision()
{
MAcctSchema as = MAcctSchema.get(getCtx(), getC_AcctSchema_ID());
if (as != null)
return as.getCostingPrecision();
return 6;
} // gerPrecision
/**
* Set Current Cost Price
* @param currentCostPrice if null set to 0
*/
public void setCurrentCostPrice (BigDecimal currentCostPrice)
{
if (currentCostPrice != null)
super.setCurrentCostPrice (currentCostPrice);
else
super.setCurrentCostPrice (Env.ZERO);
} // setCurrentCostPrice
/**
* Get History Average (Amt/Qty)
* @return average if amt/aty <> 0 otherwise null
*/
public BigDecimal getHistoryAverage()
{
BigDecimal retValue = null;
if (getCumulatedQty().signum() != 0
&& getCumulatedAmt().signum() != 0)
retValue = getCumulatedAmt()
.divide(getCumulatedQty(), getPrecision(), BigDecimal.ROUND_HALF_UP);
return retValue;
} // getHistoryAverage
/**
* String Representation
* @return info
*/
public String toString ()
{
StringBuffer sb = new StringBuffer ("MCost[");
sb.append ("AD_Client_ID=").append (getAD_Client_ID());
if (getAD_Org_ID() != 0)
sb.append (",AD_Org_ID=").append (getAD_Org_ID());
sb.append (",M_Product_ID=").append (getM_Product_ID());
if (getM_AttributeSetInstance_ID() != 0)
sb.append (",AD_ASI_ID=").append (getM_AttributeSetInstance_ID());
// sb.append (",C_AcctSchema_ID=").append (getC_AcctSchema_ID());
// sb.append (",M_CostType_ID=").append (getM_CostType_ID());
sb.append (",M_CostElement_ID=").append (getM_CostElement_ID());
//
sb.append (", CurrentCost=").append (getCurrentCostPrice())
.append (", C.Amt=").append (getCumulatedAmt())
.append (",C.Qty=").append (getCumulatedQty())
.append ("]");
return sb.toString ();
} // toString
/**
* Get Cost Element
* @return cost element
*/
public MCostElement getCostElement()
{
int M_CostElement_ID = getM_CostElement_ID();
if (M_CostElement_ID == 0)
return null;
return MCostElement.get(getCtx(), M_CostElement_ID);
} // getCostElement
/**
* Before Save
* @param newRecord new
* @return true if can be saved
*/
protected boolean beforeSave (boolean newRecord)
{
MCostElement ce = getCostElement();
// Check if data entry makes sense
if (m_manual)
{
MAcctSchema as = new MAcctSchema (getCtx(), getC_AcctSchema_ID(), null);
String CostingLevel = as.getCostingLevel();
MProduct product = MProduct.get(getCtx(), getM_Product_ID());
MProductCategoryAcct pca = MProductCategoryAcct.get (getCtx(),
product.getM_Product_Category_ID(), as.getC_AcctSchema_ID(), null);
if (pca.getCostingLevel() != null)
CostingLevel = pca.getCostingLevel();
if (MAcctSchema.COSTINGLEVEL_Client.equals(CostingLevel))
{
if (getAD_Org_ID() != 0 || getM_AttributeSetInstance_ID() != 0)
{
log.saveError("CostingLevelClient", "");
return false;
}
}
else if (MAcctSchema.COSTINGLEVEL_BatchLot.equals(CostingLevel))
{
if (getM_AttributeSetInstance_ID() == 0
&& ce.isCostingMethod())
{
log.saveError("FillMandatory", Msg.getElement(getCtx(), "M_AttributeSetInstance_ID"));
return false;
}
if (getAD_Org_ID() != 0)
setAD_Org_ID(0);
}
}
// Cannot enter calculated
if (m_manual && ce != null && ce.isCalculated())
{
log.saveError("Error", Msg.getElement(getCtx(), "IsCalculated"));
return false;
}
// Percentage
if (ce != null)
{
if (ce.isCalculated()
|| MCostElement.COSTELEMENTTYPE_Material.equals(ce.getCostElementType())
&& getPercent() != 0)
setPercent(0);
}
if (getPercent() != 0)
{
if (getCurrentCostPrice().signum() != 0)
setCurrentCostPrice(Env.ZERO);
if (getFutureCostPrice().signum() != 0)
setFutureCostPrice(Env.ZERO);
if (getCumulatedAmt().signum() != 0)
setCumulatedAmt(Env.ZERO);
if (getCumulatedQty().signum() != 0)
setCumulatedQty(Env.ZERO);
}
return true;
} // beforeSave
/**
* Before Delete
* @return true
*/
protected boolean beforeDelete ()
{
return true;
} // beforeDelete
/**
* Test
* @param args ignored
*/
public static void main (String[] args)
{
/**
DELETE M_Cost c
WHERE EXISTS (SELECT * FROM M_CostElement ce
WHERE c.M_CostElement_ID=ce.M_CostElement_ID AND ce.IsCalculated='Y')
/
UPDATE M_Cost
SET CumulatedAmt=0, CumulatedQty=0
/
UPDATE M_CostDetail
SET Processed='N'
WHERE Processed='Y'
/
COMMIT
/
**/
Compiere.startup(true);
MClient client = MClient.get(Env.getCtx(), 11); // GardenWorld
create(client);
} // main
} // MCost
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -