Fix MRP bugs with multi organization

This commit is contained in:
vpj-cd 2008-09-25 21:43:19 +00:00
parent 496aa7e25f
commit 15e1126852
6 changed files with 61 additions and 54 deletions

View File

@ -110,6 +110,7 @@ public class MPPMRP extends X_PP_MRP
if (mrp == null) if (mrp == null)
{ {
mrp = new MPPMRP(ctx, 0, trxName); mrp = new MPPMRP(ctx, 0, trxName);
mrp.setAD_Org_ID(fl.getAD_Org_ID());
mrp.setM_Forecast_ID(fl.getM_Forecast_ID()); mrp.setM_Forecast_ID(fl.getM_Forecast_ID());
mrp.setM_ForecastLine_ID(fl.getM_ForecastLine_ID()); mrp.setM_ForecastLine_ID(fl.getM_ForecastLine_ID());
mrp.setOrderType(MPPMRP.ORDERTYPE_Forecast); mrp.setOrderType(MPPMRP.ORDERTYPE_Forecast);
@ -189,6 +190,7 @@ public class MPPMRP extends X_PP_MRP
if(mrp == null) if(mrp == null)
{ {
mrp = new MPPMRP(ctx, 0,trxName); mrp = new MPPMRP(ctx, 0,trxName);
mrp.setAD_Org_ID(ol.getAD_Org_ID());
mrp.setC_Order_ID(ol.getC_Order_ID()); mrp.setC_Order_ID(ol.getC_Order_ID());
mrp.setC_OrderLine_ID(ol.getC_OrderLine_ID()); mrp.setC_OrderLine_ID(ol.getC_OrderLine_ID());
if (ol.getParent().isSOTrx()) if (ol.getParent().isSOTrx())
@ -304,6 +306,7 @@ public class MPPMRP extends X_PP_MRP
if(mrp == null) if(mrp == null)
{ {
mrp = new MPPMRP(m_ctx, 0, trxName); mrp = new MPPMRP(m_ctx, 0, trxName);
mrp.setAD_Org_ID(o.getAD_Org_ID());
mrp.setPP_Order_ID(o.getPP_Order_ID()); mrp.setPP_Order_ID(o.getPP_Order_ID());
mrp.setTypeMRP(MPPMRP.TYPEMRP_Supply); mrp.setTypeMRP(MPPMRP.TYPEMRP_Supply);
mrp.setOrderType(MPPMRP.ORDERTYPE_ManufacturingOrder); mrp.setOrderType(MPPMRP.ORDERTYPE_ManufacturingOrder);
@ -346,6 +349,7 @@ public class MPPMRP extends X_PP_MRP
if(mrp == null) if(mrp == null)
{ {
mrp = new MPPMRP(ctx, 0, trxName); mrp = new MPPMRP(ctx, 0, trxName);
mrp.setAD_Org_ID(obl.getAD_Org_ID());
mrp.setPP_Order_BOMLine_ID(obl.getPP_Order_BOMLine_ID()); mrp.setPP_Order_BOMLine_ID(obl.getPP_Order_BOMLine_ID());
mrp.setPP_Order_ID(o.getPP_Order_ID()); mrp.setPP_Order_ID(o.getPP_Order_ID());
mrp.setOrderType(MPPMRP.ORDERTYPE_ManufacturingOrder); mrp.setOrderType(MPPMRP.ORDERTYPE_ManufacturingOrder);
@ -496,6 +500,7 @@ public class MPPMRP extends X_PP_MRP
if (mrp == null) if (mrp == null)
{ {
mrp = new MPPMRP(ctx, 0, trxName); mrp = new MPPMRP(ctx, 0, trxName);
mrp.setAD_Org_ID(r.getAD_Org_ID());
mrp.setM_Requisition_ID(rl.getM_Requisition_ID()); mrp.setM_Requisition_ID(rl.getM_Requisition_ID());
mrp.setM_RequisitionLine_ID(rl.getM_RequisitionLine_ID()); mrp.setM_RequisitionLine_ID(rl.getM_RequisitionLine_ID());
mrp.setOrderType(MPPMRP.ORDERTYPE_MaterialRequisition); mrp.setOrderType(MPPMRP.ORDERTYPE_MaterialRequisition);

View File

@ -338,6 +338,7 @@ public class MPPOrder extends X_PP_Order implements DocAction
if (PP_Product_BOM.isValidFromTo(getDateStartSchedule())) if (PP_Product_BOM.isValidFromTo(getDateStartSchedule()))
{ {
MPPOrderBOM PP_Order_BOM = new MPPOrderBOM(PP_Product_BOM, getPP_Order_ID(), get_TrxName()); MPPOrderBOM PP_Order_BOM = new MPPOrderBOM(PP_Product_BOM, getPP_Order_ID(), get_TrxName());
PP_Order_BOM.setAD_Org_ID(getAD_Org_ID());
PP_Order_BOM.saveEx(); PP_Order_BOM.saveEx();
for (MPPProductBOMLine PP_Product_BOMline : PP_Product_BOM.getLines()) for (MPPProductBOMLine PP_Product_BOMline : PP_Product_BOM.getLines())
@ -348,6 +349,7 @@ public class MPPOrder extends X_PP_Order implements DocAction
getPP_Order_ID(), PP_Order_BOM.get_ID(), getPP_Order_ID(), PP_Order_BOM.get_ID(),
getM_Warehouse_ID(), getM_Warehouse_ID(),
get_TrxName()); get_TrxName());
PP_Order_BOMLine.setAD_Org_ID(getAD_Org_ID());
PP_Order_BOMLine.setQtyOrdered(getQtyOrdered()); PP_Order_BOMLine.setQtyOrdered(getQtyOrdered());
PP_Order_BOMLine.saveEx(); PP_Order_BOMLine.saveEx();
} // end if valid From / To } // end if valid From / To
@ -360,6 +362,7 @@ public class MPPOrder extends X_PP_Order implements DocAction
if (AD_Workflow.isValidFromTo(getDateStartSchedule())) if (AD_Workflow.isValidFromTo(getDateStartSchedule()))
{ {
MPPOrderWorkflow PP_Order_Workflow = new MPPOrderWorkflow(AD_Workflow, get_ID(), get_TrxName()); MPPOrderWorkflow PP_Order_Workflow = new MPPOrderWorkflow(AD_Workflow, get_ID(), get_TrxName());
PP_Order_Workflow.setAD_Org_ID(getAD_Org_ID());
PP_Order_Workflow.saveEx(); PP_Order_Workflow.saveEx();
for (MWFNode AD_WF_Node : AD_Workflow.getNodes(false, getAD_Client_ID())) for (MWFNode AD_WF_Node : AD_Workflow.getNodes(false, getAD_Client_ID()))
{ {
@ -368,11 +371,14 @@ public class MPPOrder extends X_PP_Order implements DocAction
MPPOrderNode PP_Order_Node = new MPPOrderNode(AD_WF_Node, PP_Order_Workflow, MPPOrderNode PP_Order_Node = new MPPOrderNode(AD_WF_Node, PP_Order_Workflow,
getQtyOrdered(), getQtyOrdered(),
get_TrxName()); get_TrxName());
PP_Order_Node.setAD_Org_ID(getAD_Org_ID());
PP_Order_Node.saveEx(); PP_Order_Node.saveEx();
for (MWFNodeNext AD_WF_NodeNext : AD_WF_Node.getTransitions(getAD_Client_ID())) for (MWFNodeNext AD_WF_NodeNext : AD_WF_Node.getTransitions(getAD_Client_ID()))
{ {
new MPPOrderNodeNext(AD_WF_NodeNext, PP_Order_Node, get_TrxName()).saveEx(); MPPOrderNodeNext nodenext = new MPPOrderNodeNext(AD_WF_NodeNext, PP_Order_Node, get_TrxName());
nodenext.setAD_Org_ID(getAD_Org_ID());
nodenext.saveEx();
}// for NodeNext }// for NodeNext
}// for node }// for node

View File

@ -158,6 +158,7 @@ public class MPPOrderBOMLine extends X_PP_Order_BOMLine
getPP_Order_ID(), getPP_Order_BOM_ID(), getPP_Order_ID(), getPP_Order_BOM_ID(),
getM_Warehouse_ID(), getM_Warehouse_ID(),
get_TrxName()); get_TrxName());
PP_Order_BOMLine.setAD_Org_ID(getAD_Org_ID());
PP_Order_BOMLine.setQtyOrdered(m_qtyToExplode); PP_Order_BOMLine.setQtyOrdered(m_qtyToExplode);
PP_Order_BOMLine.saveEx(); PP_Order_BOMLine.saveEx();
} }

View File

@ -139,8 +139,7 @@ public class DistributionRunOrders extends SvrProcess
m_run.save(); m_run.save();
StringBuffer sql = new StringBuffer("SELECT M_Product_ID , SUM (QtyOrdered-QtyDelivered) AS TotalQty, l.M_Warehouse_ID FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) "); StringBuffer sql = new StringBuffer("SELECT M_Product_ID , SUM (QtyOrdered-QtyDelivered) AS TotalQty, l.M_Warehouse_ID FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) ");
//sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised BETWEEN ? AND ? AND l.M_Warehouse_ID=? GROUP BY M_Product_ID, l.M_Warehouse_ID"); sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised <= ? AND l.M_Warehouse_ID=? GROUP BY M_Product_ID");
sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised <= ? AND l.M_Warehouse_ID=? GROUP BY M_Product_ID, l.M_Warehouse_ID");
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
@ -193,13 +192,12 @@ public class DistributionRunOrders extends SvrProcess
//Create Distribution Run Line //Create Distribution Run Line
public boolean generateDistributionDemand() public boolean generateDistributionDemand()
{ {
m_run = new MDistributionRun(this.getCtx(), 0 , this.get_TrxName()); m_run = new MDistributionRun(this.getCtx(), 0 , null);
m_run.setName("Generate from DRP " + p_DatePromised); m_run.setName("Generate from DRP " + p_DatePromised);
m_run.save(); m_run.save();
StringBuffer sql = new StringBuffer("SELECT M_Product_ID , SUM (TargetQty) AS MinQty, SUM (QtyOrdered-QtyDelivered) AS TotalQty, l.M_Warehouse_ID FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) "); StringBuffer sql = new StringBuffer("SELECT M_Product_ID , SUM (TargetQty) AS MinQty, SUM (QtyOrdered-QtyDelivered) AS TotalQty FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) ");
//sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised BETWEEN ? AND ? AND l.M_Warehouse_ID=? GROUP BY M_Product_ID, l.M_Warehouse_ID"); sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised <= ? AND l.M_Warehouse_ID=? GROUP BY M_Product_ID");
sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised <= ? AND l.M_Warehouse_ID=? GROUP BY M_Product_ID, l.M_Warehouse_ID");
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
try try
@ -215,7 +213,7 @@ public class DistributionRunOrders extends SvrProcess
{ {
int M_Product_ID = rs.getInt("M_Product_ID"); int M_Product_ID = rs.getInt("M_Product_ID");
BigDecimal QtyAvailable = MStorage.getQtyAvailable(p_M_Warehouse_ID,0 , M_Product_ID , 0, get_TrxName()); BigDecimal QtyAvailable = MStorage.getQtyAvailable(p_M_Warehouse_ID,0 , M_Product_ID , 0, get_TrxName());
if(QtyAvailable.signum()< 0) if(QtyAvailable.signum()<= 0)
continue; continue;
BigDecimal QtyToDistribute = rs.getBigDecimal("TotalQty"); BigDecimal QtyToDistribute = rs.getBigDecimal("TotalQty");
if(QtyAvailable.compareTo(QtyToDistribute) >= 0) if(QtyAvailable.compareTo(QtyToDistribute) >= 0)
@ -226,6 +224,9 @@ public class DistributionRunOrders extends SvrProcess
QtyToDistribute = QtyAvailable.subtract(QtyReserved); QtyToDistribute = QtyAvailable.subtract(QtyReserved);
} }
//if(QtyToDistribute.equals(Env.ZERO))
// continue;
MDistributionRunLine m_runLine = new MDistributionRunLine(getCtx(),0 ,get_TrxName()); MDistributionRunLine m_runLine = new MDistributionRunLine(getCtx(),0 ,get_TrxName());
m_runLine.setM_DistributionRun_ID(m_run.getM_DistributionRun_ID()); m_runLine.setM_DistributionRun_ID(m_run.getM_DistributionRun_ID());
m_runLine.setAD_Org_ID(p_AD_Org_ID); m_runLine.setAD_Org_ID(p_AD_Org_ID);
@ -263,26 +264,7 @@ public class DistributionRunOrders extends SvrProcess
private BigDecimal getTargetQty(int M_Product_ID) private BigDecimal getTargetQty(int M_Product_ID)
{ {
StringBuffer sql = new StringBuffer("SELECT SUM (TargetQty) FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) "); StringBuffer sql = new StringBuffer("SELECT SUM (TargetQty) FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) ");
//sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised BETWEEN ? AND ? AND l.M_Warehouse_ID=? AND ol.M_Product_ID=? GROUP BY M_Product_ID, l.M_Warehouse_ID"); sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised <= ? AND l.M_Warehouse_ID=? AND ol.M_Product_ID=? GROUP BY M_Product_ID");
sql.append(" WHERE o.DocStatus IN ('DR','IN') AND ol.DatePromised <= ? AND l.M_Warehouse_ID=? AND ol.M_Product_ID=? GROUP BY M_Product_ID, l.M_Warehouse_ID");
BigDecimal qty = DB.getSQLValueBD(get_TrxName(), sql.toString(), new Object[]{p_DatePromised, p_M_Warehouse_ID, M_Product_ID});
// SQL may return no rows or null
if (qty == null)
return Env.ZERO;
return qty;
}
/**
* Set Qty TargetQty for a Warehouse
* @param M_Product_ID
* @return
*/
private BigDecimal setTargetQty(int M_Product_ID)
{
StringBuffer sql = new StringBuffer("SELECT SUM(Qty) FROM PP_MRP mrp "
+"WHERE TypeMRP='D' AND OrderType='SOO' AND DocStatus IN ('IN','CO') AND mrp.DatePromised <=? "
+"AND mrp.M_Warehouse_ID =? AND M_Product_ID=? GROUP BY M_Product_ID, l.M_Warehouse_ID");
BigDecimal qty = DB.getSQLValueBD(get_TrxName(), sql.toString(), new Object[]{p_DatePromised, p_M_Warehouse_ID, M_Product_ID}); BigDecimal qty = DB.getSQLValueBD(get_TrxName(), sql.toString(), new Object[]{p_DatePromised, p_M_Warehouse_ID, M_Product_ID});
// SQL may return no rows or null // SQL may return no rows or null
if (qty == null) if (qty == null)
@ -385,6 +367,7 @@ public class DistributionRunOrders extends SvrProcess
String msg = "No Parameter added"; // not translated String msg = "No Parameter added"; // not translated
throw new Exception(msg,CLogger.retrieveException()); throw new Exception(msg,CLogger.retrieveException());
} }
// Execute Process // Execute Process
MProcess worker = new MProcess(getCtx(),AD_Process_ID,get_TrxName()); MProcess worker = new MProcess(getCtx(),AD_Process_ID,get_TrxName());
worker.processIt(pi, Trx.get(get_TrxName(), true)); worker.processIt(pi, Trx.get(get_TrxName(), true));

View File

@ -262,10 +262,17 @@ public class MRP extends SvrProcess
commit(); commit();
// Delete Requisition with Status Close from MRP Table // Delete Requisition with Status Close from MRP Table
sql = "DELETE FROM PP_MRP WHERE OrderType = 'POR' AND DocStatus='CL' AND AD_Client_ID = " + AD_Client_ID + " AND AD_Org_ID=" + AD_Org_ID+ " AND M_Warehouse_ID="+M_Warehouse_ID + " AND S_Resource_ID="+S_Resource_ID; sql = "DELETE FROM PP_MRP WHERE OrderType = 'POR' AND DocStatus IN ('CL','DR') AND AD_Client_ID = " + AD_Client_ID + " AND AD_Org_ID=" + AD_Org_ID+ " AND M_Warehouse_ID="+M_Warehouse_ID;
DB.executeUpdateEx(sql, get_TrxName()); DB.executeUpdateEx(sql, get_TrxName());
commit(); commit();
//Delete Requisition with Draft Status
String whereClause = "DocStatus IN ('CL','DR') AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=?";
deletePO(MRequisition.Table_Name, whereClause, new Object[]{AD_Client_ID, AD_Org_ID, M_Warehouse_ID});
commit();
// Delete Action Notice // Delete Action Notice
sql = "DELETE FROM AD_Note WHERE AD_Table_ID=? AND AD_Client_ID=? AND AD_Org_ID=?"; sql = "DELETE FROM AD_Note WHERE AD_Table_ID=? AND AD_Client_ID=? AND AD_Org_ID=?";
DB.executeUpdateEx(sql, new Object[]{MPPMRP.Table_ID, AD_Client_ID, AD_Org_ID}, get_TrxName()); DB.executeUpdateEx(sql, new Object[]{MPPMRP.Table_ID, AD_Client_ID, AD_Org_ID}, get_TrxName());
@ -274,19 +281,17 @@ public class MRP extends SvrProcess
if (p_IsRequiredDRP) if (p_IsRequiredDRP)
{ {
//Delete Distribution Order with Draft Status //Delete Distribution Order with Draft Status
String whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=?" whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=?"
+" AND EXISTS (SELECT 1 FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_LocatorTo_ID) " +" AND EXISTS (SELECT 1 FROM DD_OrderLine ol INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_LocatorTo_ID) "
+" WHERE ol.DD_Order_ID=DD_Order.DD_Order_ID AND l.M_Warehouse_ID=?)"; +" WHERE ol.DD_Order_ID=DD_Order.DD_Order_ID AND l.M_Warehouse_ID=?)";
deletePO(MDDOrder.Table_Name, whereClause, new Object[]{AD_Client_ID, AD_Org_ID, M_Warehouse_ID}); deletePO(MDDOrder.Table_Name, whereClause, new Object[]{AD_Client_ID, AD_Org_ID, M_Warehouse_ID});
} }
//Delete Manufacturing Order with Draft Status //Delete Manufacturing Order with Draft Status
String whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=? AND S_Resource_ID=?"; whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=? AND S_Resource_ID=?";
deletePO(MPPOrder.Table_Name, whereClause, new Object[]{AD_Client_ID, AD_Org_ID, M_Warehouse_ID, S_Resource_ID}); deletePO(MPPOrder.Table_Name, whereClause, new Object[]{AD_Client_ID, AD_Org_ID, M_Warehouse_ID, S_Resource_ID});
//Delete Requisition with Draft Status
whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=?";
deletePO(MRequisition.Table_Name, whereClause, new Object[]{AD_Client_ID, AD_Org_ID, M_Warehouse_ID});
} }
/************************************************************************** /**************************************************************************
@ -342,6 +347,9 @@ public class MRP extends SvrProcess
String OrderType = rs.getString(MPPMRP.COLUMNNAME_OrderType); String OrderType = rs.getString(MPPMRP.COLUMNNAME_OrderType);
Timestamp DatePromised = rs.getTimestamp(MPPMRP.COLUMNNAME_DatePromised); Timestamp DatePromised = rs.getTimestamp(MPPMRP.COLUMNNAME_DatePromised);
Timestamp DateStartSchedule = rs.getTimestamp(MPPMRP.COLUMNNAME_DateStartSchedule); Timestamp DateStartSchedule = rs.getTimestamp(MPPMRP.COLUMNNAME_DateStartSchedule);
if(DateStartSchedule != null)
BeforeDateStartSchedule = DateStartSchedule;
// if demand is a forecast and this is minor today then is ignore this QtyGrossReq // if demand is a forecast and this is minor today then is ignore this QtyGrossReq
if (MPPMRP.TYPEMRP_Demand.equals(TypeMRP) if (MPPMRP.TYPEMRP_Demand.equals(TypeMRP)
@ -357,7 +365,7 @@ public class MRP extends SvrProcess
//if exist QtyGrossReq of last Demand verify plan //if exist QtyGrossReq of last Demand verify plan
if (QtyGrossReqs.signum() != 0) if (QtyGrossReqs.signum() != 0)
{ {
calculatePlan(BeforePP_MRP_ID, product, QtyGrossReqs ,BeforeDateStartSchedule); calculatePlan(AD_Org_ID, BeforePP_MRP_ID, product, QtyGrossReqs ,BeforeDateStartSchedule);
QtyGrossReqs = Env.ZERO; QtyGrossReqs = Env.ZERO;
} }
@ -385,13 +393,12 @@ public class MRP extends SvrProcess
if (m_product_planning == null) if (m_product_planning == null)
continue; continue;
BeforeDateStartSchedule = DateStartSchedule; BeforePP_MRP_ID = rs.getInt(MPPMRP.COLUMNNAME_PP_MRP_ID);
BeforePP_MRP_ID = rs.getInt("PP_MRP_ID");
// Create Notice for Demand due // Create Notice for Demand due
if(DatePromised.compareTo(Today) < 0) if(DatePromised.compareTo(Today) < 0)
{ {
createMRPNote("MRP-040", rs.getInt("PP_MRP_ID"), product); createMRPNote("MRP-040", rs.getInt(MPPMRP.COLUMNNAME_PP_MRP_ID), product);
} }
if (MPPProductPlanning.ORDER_POLICY_PeriodOrderQuantity.equals(m_product_planning.getOrder_Policy())) if (MPPProductPlanning.ORDER_POLICY_PeriodOrderQuantity.equals(m_product_planning.getOrder_Policy()))
@ -405,7 +412,8 @@ public class MRP extends SvrProcess
} }
else else
{ // if not then create new range for next period { // if not then create new range for next period
calculatePlan(rs.getInt("PP_MRP_ID"),product, QtyGrossReqs ,POQDateStartSchedule); BeforeDateStartSchedule = POQDateStartSchedule;
calculatePlan(AD_Org_ID,rs.getInt(MPPMRP.COLUMNNAME_PP_MRP_ID),product, QtyGrossReqs ,BeforeDateStartSchedule);
QtyGrossReqs = rs.getBigDecimal(MPPMRP.COLUMNNAME_Qty); QtyGrossReqs = rs.getBigDecimal(MPPMRP.COLUMNNAME_Qty);
DatePromisedFrom = DatePromised; DatePromisedFrom = DatePromised;
DatePromisedTo = TimeUtil.addDays(DatePromised, m_product_planning.getOrder_Period().intValue()); DatePromisedTo = TimeUtil.addDays(DatePromised, m_product_planning.getOrder_Period().intValue());
@ -417,7 +425,8 @@ public class MRP extends SvrProcess
else if (MPPProductPlanning.ORDER_POLICY_LoteForLote.equals(m_product_planning.getOrder_Policy())) else if (MPPProductPlanning.ORDER_POLICY_LoteForLote.equals(m_product_planning.getOrder_Policy()))
{ {
QtyGrossReqs = rs.getBigDecimal(MPPMRP.COLUMNNAME_Qty); QtyGrossReqs = rs.getBigDecimal(MPPMRP.COLUMNNAME_Qty);
calculatePlan(rs.getInt("PP_MRP_ID"),product, QtyGrossReqs , rs.getTimestamp("DateStartSchedule")); BeforeDateStartSchedule = rs.getTimestamp(MPPMRP.COLUMNNAME_DateStartSchedule);
calculatePlan(AD_Org_ID,rs.getInt(MPPMRP.COLUMNNAME_PP_MRP_ID),product,QtyGrossReqs,BeforeDateStartSchedule);
continue; continue;
} }
} // end while } // end while
@ -425,7 +434,7 @@ public class MRP extends SvrProcess
//if exist QtyGrossReq of last Demand after finish while verify plan //if exist QtyGrossReq of last Demand after finish while verify plan
if (QtyGrossReqs.signum() != 0) if (QtyGrossReqs.signum() != 0)
{ {
calculatePlan(BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule); calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule);
} }
DB.close(rs, pstmt); DB.close(rs, pstmt);
@ -558,7 +567,7 @@ public class MRP extends SvrProcess
* @param Qty Qty * @param Qty Qty
* @param DemandDateStartSchedule Demand Date Start Schedule * @param DemandDateStartSchedule Demand Date Start Schedule
*/ */
private void calculatePlan(int PP_MPR_ID , MProduct product , BigDecimal Qty, Timestamp DemandDateStartSchedule) private void calculatePlan(int AD_Org_ID , int PP_MPR_ID , MProduct product , BigDecimal Qty, Timestamp DemandDateStartSchedule)
{ {
if (m_product_planning.isCreatePlan() == false) if (m_product_planning.isCreatePlan() == false)
return; return;
@ -644,17 +653,17 @@ public class MRP extends SvrProcess
// Distribution Order // Distribution Order
if(p_IsRequiredDRP && m_product_planning.getDD_NetworkDistribution_ID() > 0) if(p_IsRequiredDRP && m_product_planning.getDD_NetworkDistribution_ID() > 0)
{ {
createDDOrder(PP_MPR_ID, product, DemandDateStartSchedule); createDDOrder(AD_Org_ID,PP_MPR_ID, product, DemandDateStartSchedule);
} }
// Requisition // Requisition
else if (product.isPurchased()) // then create M_Requisition else if (product.isPurchased()) // then create M_Requisition
{ {
createRequisition(PP_MPR_ID, product, DemandDateStartSchedule); createRequisition(AD_Org_ID,PP_MPR_ID, product, DemandDateStartSchedule);
} }
// Manufacturing Order // Manufacturing Order
else if (product.isBOM()) else if (product.isBOM())
{ {
createPPOrder(PP_MPR_ID, product, DemandDateStartSchedule); createPPOrder(AD_Org_ID, PP_MPR_ID, product, DemandDateStartSchedule);
} }
} // end for oqf } // end for oqf
} }
@ -664,7 +673,7 @@ public class MRP extends SvrProcess
} }
} }
private void createDDOrder(int PP_MRP_ID, MProduct product, Timestamp DemandDateStartSchedule) private void createDDOrder(int AD_Org_ID, int PP_MRP_ID, MProduct product, Timestamp DemandDateStartSchedule)
{ {
MDDNetworkDistribution network = MDDNetworkDistribution.get(getCtx(),m_product_planning.getDD_NetworkDistribution_ID()); MDDNetworkDistribution network = MDDNetworkDistribution.get(getCtx(),m_product_planning.getDD_NetworkDistribution_ID());
@ -786,7 +795,7 @@ public class MRP extends SvrProcess
commit(); commit();
} }
private void createRequisition(int PP_MRP_ID, MProduct product, Timestamp DemandDateStartSchedule) private void createRequisition(int AD_Org_ID , int PP_MRP_ID, MProduct product, Timestamp DemandDateStartSchedule)
{ {
log.info("Create Requisition"); log.info("Create Requisition");
@ -795,6 +804,7 @@ public class MRP extends SvrProcess
+ m_product_planning.getTransfertTime().intValue(); + m_product_planning.getTransfertTime().intValue();
MRequisition req = new MRequisition(getCtx(),0, get_TrxName()); MRequisition req = new MRequisition(getCtx(),0, get_TrxName());
req.setAD_Org_ID(AD_Org_ID);
req.setAD_User_ID(m_product_planning.getPlanner_ID()); req.setAD_User_ID(m_product_planning.getPlanner_ID());
req.setDateRequired(TimeUtil.addDays(DemandDateStartSchedule, 0 - duration)); req.setDateRequired(TimeUtil.addDays(DemandDateStartSchedule, 0 - duration));
req.setDescription("Generate from MRP"); // TODO: add translation req.setDescription("Generate from MRP"); // TODO: add translation
@ -807,6 +817,7 @@ public class MRP extends SvrProcess
MRequisitionLine reqline = new MRequisitionLine(req); MRequisitionLine reqline = new MRequisitionLine(req);
reqline.setLine(10); reqline.setLine(10);
reqline.setAD_Org_ID(AD_Org_ID);
reqline.setM_Product_ID(m_product_planning.getM_Product_ID()); reqline.setM_Product_ID(m_product_planning.getM_Product_ID());
reqline.setPrice(); reqline.setPrice();
reqline.setPriceActual(Env.ZERO); reqline.setPriceActual(Env.ZERO);
@ -831,7 +842,7 @@ public class MRP extends SvrProcess
commit(); commit();
} }
private void createPPOrder(int PP_MRP_ID, MProduct product, Timestamp DemandDateStartSchedule) private void createPPOrder(int AD_Org_ID, int PP_MRP_ID, MProduct product, Timestamp DemandDateStartSchedule)
{ {
log.info("PP_Product_BOM_ID" + m_product_planning.getPP_Product_BOM_ID() + "AD_Workflow_ID" + m_product_planning.getAD_Workflow_ID()); log.info("PP_Product_BOM_ID" + m_product_planning.getPP_Product_BOM_ID() + "AD_Workflow_ID" + m_product_planning.getAD_Workflow_ID());
if (m_product_planning.getPP_Product_BOM_ID() == 0 || m_product_planning.getAD_Workflow_ID() == 0) if (m_product_planning.getPP_Product_BOM_ID() == 0 || m_product_planning.getAD_Workflow_ID() == 0)
@ -841,6 +852,7 @@ public class MRP extends SvrProcess
log.info("Manufacturing Order Create"); log.info("Manufacturing Order Create");
MPPOrder order = new MPPOrder(getCtx(), 0, get_TrxName()); MPPOrder order = new MPPOrder(getCtx(), 0, get_TrxName());
order.setAD_Org_ID(AD_Org_ID);
order.setLine(10); order.setLine(10);
order.setC_DocTypeTarget_ID(DocTypeMO); order.setC_DocTypeTarget_ID(DocTypeMO);
order.setC_DocType_ID(DocTypeMO); order.setC_DocType_ID(DocTypeMO);

View File

@ -177,7 +177,7 @@ public class MRPUpdate extends SvrProcess
executeUpdate("DELETE FROM PP_MRP WHERE "+whereClause, params); executeUpdate("DELETE FROM PP_MRP WHERE "+whereClause, params);
//Delete Material Requisitions Document //Delete Material Requisitions Document
whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=?"; whereClause = "DocStatus IN ('DR','CL') AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=?";
deletePO(MRequisition.Table_Name, whereClause, params); deletePO(MRequisition.Table_Name, whereClause, params);
// Delete Distribution Orders: // Delete Distribution Orders:
deletePO(MDDOrder.Table_Name, whereClause, params); deletePO(MDDOrder.Table_Name, whereClause, params);