diff --git a/base/src/org/eevolution/process/MRPUpdate.java b/base/src/org/eevolution/process/MRPUpdate.java index 31266deac1..002d39ac11 100644 --- a/base/src/org/eevolution/process/MRPUpdate.java +++ b/base/src/org/eevolution/process/MRPUpdate.java @@ -24,10 +24,12 @@ import java.util.logging.Level; import org.compiere.model.MNote; import org.compiere.model.MOrderLine; +import org.compiere.model.MOrg; import org.compiere.model.MRequisition; import org.compiere.model.MRequisitionLine; import org.compiere.model.MResource; import org.compiere.model.MTable; +import org.compiere.model.MWarehouse; import org.compiere.model.PO; import org.compiere.model.POResultSet; import org.compiere.model.Query; @@ -36,6 +38,7 @@ import org.compiere.process.SvrProcess; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; +import org.eevolution.model.MDDOrder; import org.eevolution.model.MForecastLine; import org.eevolution.model.MPPMRP; import org.eevolution.model.MPPOrder; @@ -95,49 +98,120 @@ public class MRPUpdate extends SvrProcess */ protected String doIt() throws Exception { - deleteRecords(); - createRecords(); - return Msg.getMsg(getCtx(), "ProcessOK"); + + String result = null; + ArrayList parameters = new ArrayList(); + StringBuffer whereClause = new StringBuffer(MResource.COLUMNNAME_ManufacturingResourceType+"=? AND AD_Client_ID=?"); + parameters.add(MResource.MANUFACTURINGRESOURCETYPE_Plant); + parameters.add(m_AD_Client_ID); + + if (p_S_Resource_ID > 0) + { + whereClause.append(" AND S_Resource_ID=?"); + parameters.add(p_S_Resource_ID); + } + + List plants = new Query(getCtx(), MResource.Table_Name, whereClause.toString(), get_TrxName()) + .setParameters(parameters) + .list(); + + for(MResource plant : plants) + { + log.info("Run MRP to Plant: " + plant.getName()); + parameters = new ArrayList(); + whereClause = new StringBuffer("AD_Client_ID=?"); + parameters.add(m_AD_Client_ID); + + if (p_AD_Org_ID > 0) + { + whereClause.append(" AND AD_Org_ID=?"); + parameters.add(p_AD_Org_ID); + } + + + List organizations = new Query(getCtx(),MOrg.Table_Name, whereClause.toString(), get_TrxName()) + .setParameters(parameters) + .list(); + + for (MOrg organization : organizations) + { + log.info("Run MRP to Organization: " + organization.getName()); + if(p_M_Warehouse_ID==0) + { + MWarehouse[] ws = MWarehouse.getForOrg(getCtx(), organization.getAD_Org_ID()); + for(MWarehouse w : ws) + { + log.info("Run MRP to Wharehouse: " + w.getName()); + deleteRecords(m_AD_Client_ID,organization.getAD_Org_ID(),plant.getS_Resource_ID(),w.getM_Warehouse_ID()); + createRecords(m_AD_Client_ID,organization.getAD_Org_ID(),plant.getS_Resource_ID(),w.getM_Warehouse_ID()); + + result = result + "
finish MRP to Warehouse " +w.getName(); + } + } + else + { + log.info("Run MRP to Wharehouse: " + p_M_Warehouse_ID); + deleteRecords(m_AD_Client_ID,organization.getAD_Org_ID(),plant.getS_Resource_ID(),p_M_Warehouse_ID); + createRecords(m_AD_Client_ID,organization.getAD_Org_ID(),plant.getS_Resource_ID(),p_M_Warehouse_ID); + } + result = result + "
finish MRP to Organization " +organization.getName(); + } + result = result + "
finish MRP to Plant " +plant.getName(); + } + + return result + Msg.getMsg(getCtx(), "ProcessOK"); } /** * Delete MRP records */ - private void deleteRecords() + private void deleteRecords(int AD_Client_ID, int AD_Org_ID,int S_Resource_ID, int M_Warehouse_ID) { - // Delete MRP records (Orders, Forecasts, Material Requisitions): + // Delete MRP records (Orders (SO,PO), Forecasts, Material Requisitions): { List params = new ArrayList(); - String whereClause = "OrderType IN ('MOP','FCT','POR', 'SOO', 'POO') AND "+getWhereClause(params, MPPMRP.Table_Name, null); + params.add(AD_Client_ID); + params.add(AD_Org_ID); + params.add(M_Warehouse_ID); + String whereClause = "OrderType IN ('FCT','POR', 'SOO', 'POO') AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=?"; executeUpdate("DELETE FROM PP_MRP WHERE "+whereClause, params); + + //Delete Material Requisitions Document + whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=?"; + deletePO(MRequisition.Table_Name, whereClause, params); + // Delete Distribution Orders: + deletePO(MDDOrder.Table_Name, whereClause, params); + + } + + { + List params = new ArrayList(); + params.add(AD_Client_ID); + params.add(AD_Org_ID); + params.add(S_Resource_ID); + params.add(M_Warehouse_ID); + String whereClause = "OrderType IN ('MOP','DOO') AND AD_Client_ID=? AND AD_Org_ID=? AND S_Resource_ID= ? AND M_Warehouse_ID=?"; + executeUpdate("DELETE FROM PP_MRP WHERE "+whereClause, params); + + // Delete Mfg. Orders: + whereClause = "DocStatus='DR' AND AD_Client_ID=? AND AD_Org_ID=? AND S_Resource_ID= ? AND M_Warehouse_ID=?"; + deletePO(MPPOrder.Table_Name, whereClause, params); } // Delete notes: { List params = new ArrayList(); - String whereClause = "AD_Table_ID="+MPPMRP.Table_ID+" AND "+getWhereClause(params, MNote.Table_Name, null); + params.add(AD_Client_ID); + params.add(AD_Org_ID); + String whereClause = "AD_Table_ID="+MPPMRP.Table_ID+" AND AD_Client_ID=? AND AD_Org_ID=?"; executeUpdate("DELETE FROM AD_Note WHERE "+whereClause, params); } - - // Delete Mfg. Orders: - { - List params = new ArrayList(); - String whereClause = "DocStatus='DR' AND "+getWhereClause(params, MPPOrder.Table_Name, null); - deletePO(MPPOrder.Table_Name, whereClause, params); - } - - // Delete Material Requisitions: - { - List params = new ArrayList(); - String whereClause = "DocStatus='DR' AND "+getWhereClause(params, MRequisition.Table_Name, null); - deletePO(MRequisition.Table_Name, whereClause, params); - } } /** * Create MRP records */ - private void createRecords () + private void createRecords (int AD_Client_ID, int AD_Org_ID,int S_Resource_ID, int M_Warehouse_ID) { final String sql = "INSERT INTO PP_MRP (" +"ad_org_id, created, createdby , dateordered," @@ -155,6 +229,11 @@ public class MRPUpdate extends SvrProcess // //Insert from M_ForecastLine List params = new ArrayList(); + + params.add(AD_Client_ID); + params.add(AD_Org_ID); + params.add(M_Warehouse_ID); + String sql_insert = " SELECT t.ad_org_id," +"t.created, t.createdby , t.datepromised," +"t.datepromised, t.datepromised, t.datepromised, f.Name," @@ -163,59 +242,17 @@ public class MRPUpdate extends SvrProcess + "null, null," + "null, null," + "null, null," - +"t.m_product_id, t.m_warehouse_id," - +"nextidfunc(53040,'N') , null," + +"t.m_product_id, t.m_warehouse_id," + + "nextidfunc(53040,'Y'), null ," +"t.qty, 'D', 'FCT', t.updated, t.updatedby, f.Name," +"t.ad_client_id , null as S_Resource_ID, null as C_BPartner_ID " +" FROM M_ForecastLine t " +" INNER JOIN M_Forecast f ON (f.M_Forecast_ID=t.M_Forecast_ID) " - +" WHERE t.Qty > 0 AND "+getWhereClause(params, MForecastLine.Table_Name, "t"); - executeUpdate(sql + sql_insert, params); - - // - //Insert from PP_Order - params = new ArrayList(); - sql_insert = " SELECT t.ad_org_id," - +"t.created, t.createdby , t.datepromised," - +"t.datepromised, t.datepromised, t.datepromised, t.DocumentNo," - +"t.DocStatus, t.isactive , " - +" null, null, " - +"t.pp_order_id, null," - +" null, null, " - +" null, null, " - +"t.m_product_id, t.m_warehouse_id," - +"nextidfunc(53040,'N') , null," - +"t.QtyOrdered-t.QtyDelivered, 'S', 'MOP', t.updated, t.updatedby, t.DocumentNo," - +"t.ad_client_id, t.S_Resource_ID, null as C_BPartner_ID " - +" FROM PP_Order t " - +" WHERE (t.QtyOrdered - t.QtyDelivered) <> 0 AND t.DocStatus IN ('IP','CO')" - +" AND "+getWhereClause(params, MPPOrder.Table_Name, "t"); - executeUpdate(sql + sql_insert, params); - - // - //Insert from PP_Order_BOMLine - params = new ArrayList(); - sql_insert = " SELECT t.ad_org_id," - +"t.created, t.createdby , o.datepromised," - +"o.datepromised, o.datepromised, o.datepromised, o.DocumentNo," - +"o.DocStatus, o.isactive , " - +" null, null, " - +"t.pp_order_id, t.pp_order_bomline_id," - +" null, null, " - +" null, null, " - +"t.m_product_id, t.m_warehouse_id," - +"nextidfunc(53040,'N') , null," - +"t.QtyRequiered-t.QtyDelivered, 'D', 'MOP', t.updated, t.updatedby, o.DocumentNo," - +"t.ad_client_id, o.S_Resource_ID, null as C_BPartner_ID " - +" FROM PP_Order_BOMLine t " - +" INNER JOIN PP_Order o ON (o.pp_order_id=t.pp_order_id)" - +" WHERE (t.QtyRequiered-t.QtyDelivered) <> 0 AND o.DocStatus IN ('DR','IP','CO')" - +" AND "+getWhereClause(params, MPPOrderBOMLine.Table_Name, "t"); - executeUpdate(sql + sql_insert , params); - - // + +" WHERE t.Qty > 0 AND " + +"t.AD_Client_ID=? AND t.AD_Org_ID=? AND t.M_Warehouse_ID= ?"; + executeUpdate(sql + sql_insert, params); + // Insert from C_OrderLine - params = new ArrayList(); sql_insert = " SELECT t.ad_org_id," +"t.created, t.createdby , t.datepromised," +"t.datepromised, t.datepromised, t.datepromised, o.DocumentNo," @@ -225,18 +262,17 @@ public class MRPUpdate extends SvrProcess +" t.c_order_id, t.c_orderline_id, " +" null, null, " +"t.m_product_id, t.m_warehouse_id," - +"nextidfunc(53040,'N') , null," + + "nextidfunc(53040,'Y'), null ," +"t.QtyOrdered-t.QtyDelivered, 'D', (case when o.IsSOTrx='Y' then 'SOO' else 'POO' end), t.updated, t.updatedby, o.DocumentNo," +"t.ad_client_id , null as S_Resource_ID, o.C_BPartner_ID" +" FROM C_OrderLine t" +" INNER JOIN C_Order o ON (o.c_order_id=t.c_order_id)" - +" WHERE (t.QtyOrdered - t.QtyDelivered) <> 0 AND o.DocStatus IN ('IP','CO')" - +" AND "+getWhereClause(params, MOrderLine.Table_Name, "t"); - executeUpdate(sql + sql_insert, params); - - // + +" WHERE (t.QtyOrdered - t.QtyDelivered) <> 0 AND o.DocStatus IN ('IP','CO') AND " + +"t.AD_Client_ID=? AND t.AD_Org_ID=? AND t.M_Warehouse_ID= ?"; + executeUpdate(sql + sql_insert, params); + + // Insert from M_RequisitionLine - params = new ArrayList(); sql_insert = " SELECT rl.ad_org_id," +"rl.created, rl.createdby , t.daterequired," +" t.daterequired, t.daterequired, t.daterequired, t.DocumentNo," @@ -246,58 +282,59 @@ public class MRPUpdate extends SvrProcess +" null, null, " +"rl.m_requisition_id, rl.m_requisitionline_id, " +"rl.m_product_id, t.m_warehouse_id," - +"nextidfunc(53040, 'N') , null," + + "nextidfunc(53040,'Y'), null ," +"rl.Qty, 'S', 'POR', rl.updated, rl.updatedby, t.DocumentNo," +"rl.ad_client_id , null as S_Resource_ID, null as C_BPartner_ID " +" FROM M_RequisitionLine rl" +" INNER JOIN M_Requisition t ON (rl.m_requisition_id=t.m_requisition_id)" - +" WHERE rl.Qty > 0 AND t.DocStatus IN ('CL')" - +" AND "+getWhereClause(params, MRequisitionLine.Table_Name, "rl"); - executeUpdate(sql + sql_insert, params); + +" WHERE rl.Qty > 0 AND t.DocStatus IN ('DR','IN') AND " + +"t.AD_Client_ID=? AND t.AD_Org_ID=? AND t.M_Warehouse_ID= ?"; + executeUpdate(sql + sql_insert, params); + + //Insert from PP_Order + params = new ArrayList(); + params.add(AD_Client_ID); + params.add(AD_Org_ID); + params.add(S_Resource_ID); + params.add(M_Warehouse_ID); + sql_insert = " SELECT t.ad_org_id," + +"t.created, t.createdby , t.datepromised," + +"t.datepromised, t.datepromised, t.datepromised, t.DocumentNo," + +"t.DocStatus, t.isactive , " + +" null, null, " + +"t.pp_order_id, null," + +" null, null, " + +" null, null, " + +"t.m_product_id, t.m_warehouse_id," + + "nextidfunc(53040,'Y'), null ," + +"t.QtyOrdered-t.QtyDelivered, 'S', 'MOP', t.updated, t.updatedby, t.DocumentNo," + +"t.ad_client_id, t.S_Resource_ID, null as C_BPartner_ID " + +" FROM PP_Order t " + +" WHERE (t.QtyOrdered - t.QtyDelivered) <> 0 AND t.DocStatus IN ('IP','CO') AND " + +"t.AD_Client_ID=? AND t.AD_Org_ID=? AND t.S_Resource_ID=? AND t.M_Warehouse_ID= ?"; + executeUpdate(sql + sql_insert, params); + + // + //Insert from PP_Order_BOMLine + sql_insert = " SELECT t.ad_org_id," + +"t.created, t.createdby , o.datepromised," + +"o.datepromised, o.datepromised, o.datepromised, o.DocumentNo," + +"o.DocStatus, o.isactive , " + +" null, null, " + +"t.pp_order_id, t.pp_order_bomline_id," + +" null, null, " + +" null, null, " + +"t.m_product_id, t.m_warehouse_id," + + "nextidfunc(53040,'Y'), null ," + +"t.QtyRequiered-t.QtyDelivered, 'D', 'MOP', t.updated, t.updatedby, o.DocumentNo," + +"t.ad_client_id, o.S_Resource_ID, null as C_BPartner_ID " + +" FROM PP_Order_BOMLine t " + +" INNER JOIN PP_Order o ON (o.pp_order_id=t.pp_order_id)" + +" WHERE (t.QtyRequiered-t.QtyDelivered) <> 0 AND o.DocStatus IN ('DR','IP','CO') AND " + +"t.AD_Client_ID=? AND t.AD_Org_ID=? AND o.S_Resource_ID=? AND t.M_Warehouse_ID= ?"; + executeUpdate(sql + sql_insert , params); } - private String getWhereClause(List params, String tableName, String tableAlias) - { - boolean filterWarehouse = MTable.get(getCtx(), tableName).getColumn("M_Warehouse_ID") != null; - boolean filterResource = MTable.get(getCtx(), tableName).getColumn("S_Resource_ID") != null; - String alias = (tableAlias != null ? tableAlias : tableName) + "."; - StringBuffer sb = new StringBuffer(); - // - // AD_Client - sb.append(alias).append("AD_Client_ID=?"); - params.add(m_AD_Client_ID); - // - // AD_Org - if (p_AD_Org_ID > 0) { - sb.append(" AND ").append(alias).append("AD_Org_ID=? "); - params.add(p_AD_Org_ID); - } - // - // M_Warehouse - if (filterWarehouse) { - if (p_M_Warehouse_ID > 0) { - sb.append(" AND ").append(alias).append("M_Warehouse_ID=?"); - params.add(p_M_Warehouse_ID); - } - } - // - // Resource - if (filterResource) { - if (p_S_Resource_ID > 0) { - sb.append(" AND ").append(alias).append("S_Resource_ID=? "); - params.add(p_S_Resource_ID); - } - else { - sb.append(" AND EXISTS (SELECT 1 FROM S_Resource zz WHERE ") - .append("zz."+MResource.COLUMNNAME_ManufacturingResourceType+"=?") - .append(" AND zz.AD_Client_ID="+alias+"AD_Client_ID") - .append(") "); - params.add(MResource.MANUFACTURINGRESOURCETYPE_Plant); - } - } - // - return sb.toString(); - } private void executeUpdate(String sql, List params) { @@ -309,11 +346,12 @@ public class MRPUpdate extends SvrProcess else { pa = new Object[]{}; - } - + } + int no = DB.executeUpdateEx(sql, pa, get_TrxName()); commit(); log.fine("#"+no+" -- "+sql); + }