fixed Distribution Orders

This commit is contained in:
vpj-cd 2008-11-21 22:31:57 +00:00
parent 23f4b5e5ae
commit c6012ade72
3 changed files with 56 additions and 37 deletions

View File

@ -780,7 +780,7 @@ public class DistributionRun extends SvrProcess
if(p_M_Warehouse_ID>0) if(p_M_Warehouse_ID>0)
line.setDescription(Msg.translate(getCtx(), "PlannedQty")); line.setDescription(Msg.translate(getCtx(), "PlannedQty"));
else else
line.setDescription(m_run.getDescription()); line.setDescription(m_run.getName());
line.save(); line.save();
break; break;
//addLog(0,null, detail.getActualAllocation(), order.getDocumentNo() //addLog(0,null, detail.getActualAllocation(), order.getDocumentNo()

View File

@ -275,16 +275,17 @@ public class MRP extends SvrProcess
String sql = "DELETE FROM PP_MRP WHERE OrderType = 'MOP' 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 ; String sql = "DELETE FROM PP_MRP WHERE OrderType = 'MOP' 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 ;
DB.executeUpdateEx(sql, get_TrxName()); DB.executeUpdateEx(sql, get_TrxName());
commit(); commit();
//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=?";
deletePO(MPPOrder.Table_Name, whereClause, new Object[]{AD_Client_ID, AD_Org_ID, M_Warehouse_ID, S_Resource_ID});
// 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 IN ('CL','DR') AND AD_Client_ID = " + AD_Client_ID + " AND AD_Org_ID=" + AD_Org_ID+ " AND M_Warehouse_ID="+M_Warehouse_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 //Delete Requisition with Draft Status
String whereClause = "DocStatus IN ('CL','DR') AND AD_Client_ID=? AND AD_Org_ID=? AND M_Warehouse_ID=?"; 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}); 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=?";
@ -300,10 +301,6 @@ public class MRP extends SvrProcess
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
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});
} }
@ -346,6 +343,7 @@ public class MRP extends SvrProcess
+" WHERE mrp.TypeMRP=? AND mrp.AD_Client_ID = ? AND mrp.AD_Org_ID=? " +" WHERE mrp.TypeMRP=? AND mrp.AD_Client_ID = ? AND mrp.AD_Org_ID=? "
+ " AND M_Warehouse_ID=? " + " AND M_Warehouse_ID=? "
+ " AND mrp.DatePromised <= ?" + " AND mrp.DatePromised <= ?"
//+ " AND mrp.M_Product_ID=1004253 "
+ " AND COALESCE(p.LowLevel,0) = ? " + " AND COALESCE(p.LowLevel,0) = ? "
+" ORDER BY mrp.M_Product_ID , mrp.DatePromised "; +" ORDER BY mrp.M_Product_ID , mrp.DatePromised ";
pstmt = DB.prepareStatement (sql, get_TrxName()); pstmt = DB.prepareStatement (sql, get_TrxName());
@ -362,9 +360,6 @@ 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)
@ -377,15 +372,24 @@ public class MRP extends SvrProcess
// New Product // New Product
if (product == null || product.get_ID() != rs.getInt("M_Product_ID")) if (product == null || product.get_ID() != rs.getInt("M_Product_ID"))
{ {
product = MProduct.get(getCtx(), rs.getInt("M_Product_ID"));
log.info("Calculte Plan to this Product:" + product.getName());
//if exist QtyGrossReq of last Demand verify plan //if exist QtyGrossReq of last Demand verify plan
if (QtyGrossReqs.signum() != 0) if (QtyGrossReqs.signum() != 0)
{ {
if (MPPProductPlanning.ORDER_POLICY_PeriodOrderQuantity.equals(m_product_planning.getOrder_Policy()) && POQDateStartSchedule.compareTo(Planning_Horizon) < 0)
{
BeforeDateStartSchedule = POQDateStartSchedule;
calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule); calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule);
}
else if (MPPProductPlanning.ORDER_POLICY_LoteForLote.equals(m_product_planning.getOrder_Policy()) && BeforeDateStartSchedule.compareTo(Planning_Horizon) <= 0 )
{
calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule );
}
QtyGrossReqs = Env.ZERO; QtyGrossReqs = Env.ZERO;
} }
product = MProduct.get(getCtx(), rs.getInt("M_Product_ID"));
log.info("Calculte Plan to this Product:" + product.getName());
// Define m_product_planning // Define m_product_planning
setProduct(AD_Client_ID,AD_Org_ID ,S_Resource_ID , M_Warehouse_ID, product); setProduct(AD_Client_ID,AD_Org_ID ,S_Resource_ID , M_Warehouse_ID, product);
@ -400,7 +404,8 @@ public class MRP extends SvrProcess
DatePromisedFrom = DatePromised; DatePromisedFrom = DatePromised;
DatePromisedTo = TimeUtil.addDays(DatePromised , m_product_planning.getOrder_Period().intValue()); DatePromisedTo = TimeUtil.addDays(DatePromised , m_product_planning.getOrder_Period().intValue());
//set the POQDateStartSchedule && POQDateStartSchedule to first period //set the POQDateStartSchedule && POQDateStartSchedule to first period
POQDateStartSchedule = (level == 0 ? DatePromised : DateStartSchedule); //POQDateStartSchedule = (level == 0 ? DatePromised : DateStartSchedule);
POQDateStartSchedule = DatePromised;
} }
} // new product } // new product
@ -442,7 +447,7 @@ 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);
BeforeDateStartSchedule = rs.getTimestamp(MPPMRP.COLUMNNAME_DateStartSchedule); BeforeDateStartSchedule = rs.getTimestamp(MPPMRP.COLUMNNAME_DatePromised);
calculatePlan(AD_Org_ID,rs.getInt(MPPMRP.COLUMNNAME_PP_MRP_ID),product,QtyGrossReqs,BeforeDateStartSchedule); calculatePlan(AD_Org_ID,rs.getInt(MPPMRP.COLUMNNAME_PP_MRP_ID),product,QtyGrossReqs,BeforeDateStartSchedule);
continue; continue;
} }
@ -451,12 +456,12 @@ 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)
{ {
if (MPPProductPlanning.ORDER_POLICY_PeriodOrderQuantity.equals(m_product_planning.getOrder_Policy())) if (MPPProductPlanning.ORDER_POLICY_PeriodOrderQuantity.equals(m_product_planning.getOrder_Policy()) && POQDateStartSchedule.compareTo(Planning_Horizon) < 0)
{ {
BeforeDateStartSchedule = POQDateStartSchedule; BeforeDateStartSchedule = POQDateStartSchedule;
calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule); calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule);
} }
else if (MPPProductPlanning.ORDER_POLICY_LoteForLote.equals(m_product_planning.getOrder_Policy())) else if (MPPProductPlanning.ORDER_POLICY_LoteForLote.equals(m_product_planning.getOrder_Policy()) && BeforeDateStartSchedule.compareTo(Planning_Horizon) <= 0 )
{ {
calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule ); calculatePlan(AD_Org_ID,BeforePP_MRP_ID , product, QtyGrossReqs ,BeforeDateStartSchedule );
} }
@ -759,7 +764,7 @@ public class MRP extends SvrProcess
MBPartner bp = getBPartner(C_BPartner_ID); MBPartner bp = getBPartner(C_BPartner_ID);
// Try found some order with Shipper , Business Partner and Doc Status = Draft // Try found some order with Shipper , Business Partner and Doc Status = Draft
// Consolidate the demand in a single order for each Shipper , Business Partner , DemandDateStartSchedule // Consolidate the demand in a single order for each Shipper , Business Partner , DemandDateStartSchedule
DD_Order_ID = getDDOrder_ID(network_line.getM_Shipper_ID(), bp.getC_BPartner_ID(),DemandDateStartSchedule); DD_Order_ID = getDDOrder_ID(AD_Org_ID,wsts[0].get_ID(),network_line.getM_Shipper_ID(), bp.getC_BPartner_ID(),DemandDateStartSchedule);
if (DD_Order_ID < 0) if (DD_Order_ID < 0)
{ {
order = new MDDOrder(getCtx() , 0 , get_TrxName()); order = new MDDOrder(getCtx() , 0 , get_TrxName());
@ -809,7 +814,7 @@ public class MRP extends SvrProcess
.list(); .list();
for (MPPMRP mrp : mrpList) { for (MPPMRP mrp : mrpList) {
mrp.setDateOrdered(Today); mrp.setDateOrdered(Today);
mrp.setS_Resource_ID(p_S_Resource_ID); mrp.setS_Resource_ID(m_product_planning.getS_Resource_ID());
mrp.setDatePromised(TimeUtil.addDays(DemandDateStartSchedule , (m_product_planning.getDeliveryTime_Promised().add(transfertTime)).negate().intValue())); mrp.setDatePromised(TimeUtil.addDays(DemandDateStartSchedule , (m_product_planning.getDeliveryTime_Promised().add(transfertTime)).negate().intValue()));
mrp.setDateFinishSchedule(DemandDateStartSchedule); mrp.setDateFinishSchedule(DemandDateStartSchedule);
mrp.saveEx(); mrp.saveEx();
@ -859,6 +864,7 @@ public class MRP extends SvrProcess
.list(); .list();
for (MPPMRP mrp : mrpList) { for (MPPMRP mrp : mrpList) {
mrp.setDateOrdered(Today); mrp.setDateOrdered(Today);
mrp.setS_Resource_ID(m_product_planning.getS_Resource_ID());
mrp.setDatePromised(req.getDateRequired()); mrp.setDatePromised(req.getDateRequired());
mrp.setDateStartSchedule(req.getDateRequired()); mrp.setDateStartSchedule(req.getDateRequired());
mrp.setDateFinishSchedule(DemandDateStartSchedule); mrp.setDateFinishSchedule(DemandDateStartSchedule);
@ -958,13 +964,19 @@ public class MRP extends SvrProcess
count_Msg += 1; count_Msg += 1;
} }
private int getDDOrder_ID(int M_Shipper_ID,int C_BPartner_ID, Timestamp DatePromised) private int getDDOrder_ID(int AD_Org_ID,int M_Warehouse_ID, int M_Shipper_ID,int C_BPartner_ID, Timestamp DatePromised)
{ {
String key = M_Shipper_ID+"#"+C_BPartner_ID+"#"+DatePromised+"DR"; String key = AD_Org_ID+"#"+M_Warehouse_ID+"#"+M_Shipper_ID+"#"+C_BPartner_ID+"#"+DatePromised+"DR";
Integer order_id = dd_order_id_cache.get(key.toString()); Integer order_id = dd_order_id_cache.get(key.toString());
if ( order_id == null) if ( order_id == null)
{ {
order_id = DB.getSQLValue(get_TrxName(), "SELECT DD_Order_ID FROM DD_Order WHERE M_Shipper_ID = ? AND C_BPartner_ID=? AND DatePromised=? AND DocStatus=?", new Object[]{M_Shipper_ID,C_BPartner_ID,DatePromised,"DR"}); order_id = DB.getSQLValue(get_TrxName(), "SELECT DD_Order_ID FROM DD_Order WHERE AD_Org_ID=? AND M_Warehouse_ID=? AND M_Shipper_ID = ? AND C_BPartner_ID=? AND DatePromised=? AND DocStatus=?",
new Object[]{ AD_Org_ID,
M_Warehouse_ID,
M_Shipper_ID,
C_BPartner_ID,
DatePromised,
"DR"});
if(order_id > 0) if(order_id > 0)
dd_order_id_cache.put(key,order_id); dd_order_id_cache.put(key,order_id);
} }

View File

@ -813,12 +813,19 @@ public class VMRPDetailed
try try
{ {
StringBuffer sql = new StringBuffer("SELECT ") StringBuffer sql = new StringBuffer("SELECT ")
.append("bomqtyonhandasi("+M_Product_ID+","+M_AttributeSetInstance_ID+","+M_Warehouse_ID+",0) as qtyonhand, ") .append("BOMQtyOnHandASI(M_Product_ID,?,?,?) as qtyonhand, ")
.append("bomqtyreservedasi("+M_Product_ID+","+M_AttributeSetInstance_ID+","+M_Warehouse_ID+",0) as qtyreserved, ") .append("BOMQtyReservedASI(M_Product_ID,?,?,?) as qtyreserved, ")
.append("bomqtyavailableasi("+M_Product_ID+","+M_AttributeSetInstance_ID+","+M_Warehouse_ID+",0) as qtyavailable, ") .append("BOMQtyAvailableASI(M_Product_ID,?,?,?) as qtyavailable, ")
.append("bomqtyorderedasi("+M_Product_ID+","+M_AttributeSetInstance_ID+","+M_Warehouse_ID+",0) as qtyordered") .append("BOMQtyOrderedASI(M_Product_ID,?,?,?) as qtyordered")
.append(" FROM M_Product WHERE M_Product_ID="+M_Product_ID); .append(" FROM M_Product WHERE M_Product_ID=?");
pstmt = DB.prepareStatement(sql.toString(),null); pstmt = DB.prepareStatement(sql.toString(),null);
DB.setParameters(pstmt, new Object[]{
getM_AttributeSetInstance_ID(),getM_Warehouse_ID(),0,
getM_AttributeSetInstance_ID(),getM_Warehouse_ID(),0,
getM_AttributeSetInstance_ID(),getM_Warehouse_ID(),0,
getM_AttributeSetInstance_ID(),getM_Warehouse_ID(),0,
getM_Product_ID()
});
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
while (rs.next()) while (rs.next())
{ {