Fix [ adempiere-Bugs-2722847 ] M_Production_Run not backward compatible

https://sourceforge.net/tracker/?func=detail&aid=2722847&group_id=176962&atid=879332
This commit is contained in:
Carlos Ruiz 2009-03-31 04:31:51 +00:00
parent 7a5db01b5b
commit 1027cd66cd
1 changed files with 19 additions and 15 deletions

View File

@ -39,14 +39,19 @@ import org.eevolution.model.MPPProductBOM;
import org.eevolution.model.MPPProductBOMLine; import org.eevolution.model.MPPProductBOMLine;
/** /**
* Production of BOMs
* 1) Creating ProductionLines when IsCreated = 'N'
* 2) Posting the Lines (optionally only when fully stocked)
*
* @author victor.perez@e-evolution.com * @author victor.perez@e-evolution.com
* @contributor: Carlos Ruiz (globalqss) - review backward compatibility - implement mustBeStocked properly
*/ */
public class M_Production_Run extends SvrProcess { public class M_Production_Run extends SvrProcess {
/** The Record */ /** The Record */
private int p_Record_ID = 0; private int p_Record_ID = 0;
private String mustBeStocked; private boolean mustBeStocked = false;
private int m_level = 0; private int m_level = 0;
@ -60,7 +65,7 @@ public class M_Production_Run extends SvrProcess {
if (para[i].getParameter() == null) if (para[i].getParameter() == null)
; ;
else if (name.equals("MustBeStocked")) else if (name.equals("MustBeStocked"))
mustBeStocked = (String) para[i].getParameter(); mustBeStocked = ((String) para[i].getParameter()).equals("Y");
else else
log.log(Level.SEVERE, "Unknown Parameter: " + name); log.log(Level.SEVERE, "Unknown Parameter: " + name);
} }
@ -92,6 +97,7 @@ public class M_Production_Run extends SvrProcess {
String whereClause = "M_Production_ID=? "; String whereClause = "M_Production_ID=? ";
List<X_M_ProductionPlan> lines = new Query(getCtx(), X_M_ProductionPlan.Table_Name , whereClause, get_TrxName()) List<X_M_ProductionPlan> lines = new Query(getCtx(), X_M_ProductionPlan.Table_Name , whereClause, get_TrxName())
.setParameters(new Object[]{p_Record_ID }) .setParameters(new Object[]{p_Record_ID })
.setOrderBy("Line, M_Product_ID")
.list(); .list();
for (X_M_ProductionPlan pp :lines) for (X_M_ProductionPlan pp :lines)
{ {
@ -99,29 +105,29 @@ public class M_Production_Run extends SvrProcess {
if (!production.isCreated()) if (!production.isCreated())
{ {
int line = 100; int line = 100;
int no = DB.executeUpdateEx("DELETE M_ProductionLine WHERE M_ProductionPlan_ID = ?", new Object[]{pp.get_ID()},get_TrxName()); int no = DB.executeUpdateEx("DELETE M_ProductionLine WHERE M_ProductionPlan_ID = ?", new Object[]{pp.getM_ProductionPlan_ID()},get_TrxName());
if (no == -1) raiseError("ERROR", "DELETE M_ProductionLine WHERE M_ProductionPlan_ID = "+ pp.get_ID()); if (no == -1) raiseError("ERROR", "DELETE M_ProductionLine WHERE M_ProductionPlan_ID = "+ pp.getM_ProductionPlan_ID());
MProduct product = MProduct.get(getCtx(), pp.getM_Product_ID()); MProduct product = MProduct.get(getCtx(), pp.getM_Product_ID());
X_M_ProductionLine pl = new X_M_ProductionLine(getCtx(), 0 , get_TrxName()); X_M_ProductionLine pl = new X_M_ProductionLine(getCtx(), 0 , get_TrxName());
pl.setLine(line); pl.setLine(line);
pl.setDescription(pp.getDescription()); pl.setDescription(pp.getDescription());
pl.setIsActive(true);
pl.setM_Product_ID(pp.getM_Product_ID()); pl.setM_Product_ID(pp.getM_Product_ID());
pl.setM_Locator_ID(pp.getM_Locator_ID()); pl.setM_Locator_ID(pp.getM_Locator_ID());
pl.setM_ProductionPlan_ID(pp.get_ID()); pl.setM_ProductionPlan_ID(pp.getM_ProductionPlan_ID());
pl.setMovementQty(pp.getProductionQty()); pl.setMovementQty(pp.getProductionQty());
pl.saveEx(); pl.saveEx();
if (explosion(pp, product, pp.getProductionQty() , line) == 0 ) if (explosion(pp, product, pp.getProductionQty() , line) == 0 )
raiseError("Do not exist componets", ""); raiseError("No BOM Lines", "");
} }
else else
{ {
whereClause = "M_ProductionPlan_ID= ? "; whereClause = "M_ProductionPlan_ID= ? ";
List<X_M_ProductionLine> production_lines = new Query(getCtx(), X_M_ProductionLine.Table_Name , whereClause, get_TrxName()) List<X_M_ProductionLine> production_lines = new Query(getCtx(), X_M_ProductionLine.Table_Name , whereClause, get_TrxName())
.setParameters(new Object[]{pp.get_ID()}) .setParameters(new Object[]{pp.getM_ProductionPlan_ID()})
.setOrderBy("Line")
.list(); .list();
for (X_M_ProductionLine pline : production_lines) for (X_M_ProductionLine pline : production_lines)
@ -140,9 +146,9 @@ public class M_Production_Run extends SvrProcess {
pline.getM_AttributeSetInstance_ID(), pline.getM_AttributeSetInstance_ID(),
get_TrxName()); get_TrxName());
if(QtyAvailable.add(MovementQty).signum() < 0) if(mustBeStocked && QtyAvailable.add(MovementQty).signum() < 0)
{ {
raiseError(Msg.getMsg(getCtx(),"NoQtyAvailable"), ""); raiseError("@NotEnoughStocked@: " + pline.getM_Product().getName(), "");
} }
MovementType = MTransaction.MOVEMENTTYPE_Production_; MovementType = MTransaction.MOVEMENTTYPE_Production_;
@ -165,7 +171,7 @@ public class M_Production_Run extends SvrProcess {
MovementType, locator.getM_Locator_ID(), MovementType, locator.getM_Locator_ID(),
pline.getM_Product_ID(), pline.getM_AttributeSetInstance_ID(), pline.getM_Product_ID(), pline.getM_AttributeSetInstance_ID(),
MovementQty, production.getMovementDate(), get_TrxName()); MovementQty, production.getMovementDate(), get_TrxName());
mtrx.setM_ProductionLine_ID(pline.get_ID()); mtrx.setM_ProductionLine_ID(pline.getM_ProductionLine_ID());
mtrx.saveEx(); mtrx.saveEx();
pline.setProcessed(true); pline.setProcessed(true);
@ -222,16 +228,15 @@ public class M_Production_Run extends SvrProcess {
{ {
explosion(pp, component, bomline.getQtyBOM() , line); explosion(pp, component, bomline.getQtyBOM() , line);
} }
else if(!component.isBOM() && component.isStocked() || MPPProductBOMLine.COMPONENTTYPE_Phantom.equals(bomline.getComponentType())) else
{ {
line += 1; line += 1;
X_M_ProductionLine pl = new X_M_ProductionLine(getCtx(), 0 , get_TrxName()); X_M_ProductionLine pl = new X_M_ProductionLine(getCtx(), 0 , get_TrxName());
pl.setLine(line); pl.setLine(line);
pl.setDescription(bomline.getDescription()); pl.setDescription(bomline.getDescription());
pl.setIsActive(true);
pl.setM_Product_ID(bomline.getM_Product_ID()); pl.setM_Product_ID(bomline.getM_Product_ID());
pl.setM_Locator_ID(pp.getM_Locator_ID()); pl.setM_Locator_ID(pp.getM_Locator_ID());
pl.setM_ProductionPlan_ID(pp.get_ID()); pl.setM_ProductionPlan_ID(pp.getM_ProductionPlan_ID());
pl.setMovementQty(bomline.getQtyBOM().multiply(qty).negate()); pl.setMovementQty(bomline.getQtyBOM().multiply(qty).negate());
pl.saveEx(); pl.saveEx();
components += 1; components += 1;
@ -243,7 +248,6 @@ public class M_Production_Run extends SvrProcess {
} }
private void raiseError(String string, String sql) throws Exception { private void raiseError(String string, String sql) throws Exception {
DB.rollback(false, get_TrxName());
String msg = string; String msg = string;
ValueNamePair pp = CLogger.retrieveError(); ValueNamePair pp = CLogger.retrieveError();
if (pp != null) if (pp != null)