📄 replenishreport.java
字号:
// Source from other warehouse
if (wh.getM_WarehouseSource_ID() != 0)
{
sql = "UPDATE T_Replenish"
+ " SET M_WarehouseSource_ID=" + wh.getM_WarehouseSource_ID()
+ " WHERE AD_PInstance_ID=" + getAD_PInstance_ID();
no = DB.executeUpdate(sql, get_TrxName());
if (no != 0)
log.fine("Set Source Warehouse=" + no);
}
// Check Source Warehouse
sql = "UPDATE T_Replenish"
+ " SET M_WarehouseSource_ID = NULL "
+ "WHERE M_Warehouse_ID=M_WarehouseSource_ID"
+ " AND AD_PInstance_ID=" + getAD_PInstance_ID();
no = DB.executeUpdate(sql, get_TrxName());
if (no != 0)
log.fine("Set same Source Warehouse=" + no);
// Custom Replenishment
String className = wh.getReplenishmentClass();
if (className == null || className.length() == 0)
return;
// Get Replenishment Class
ReplenishInterface custom = null;
try
{
Class clazz = Class.forName(className);
custom = (ReplenishInterface)clazz.newInstance();
}
catch (Exception e)
{
throw new CompiereUserError("No custom Replenishment class "
+ className + " - " + e.toString());
}
X_T_Replenish[] replenishs = getReplenish("ReplenishType='9'");
for (int i = 0; i < replenishs.length; i++)
{
X_T_Replenish replenish = replenishs[i];
if (replenish.getReplenishType().equals(X_T_Replenish.REPLENISHTYPE_Custom))
{
BigDecimal qto = null;
try
{
qto = custom.getQtyToOrder(wh, replenish);
}
catch (Exception e)
{
log.log(Level.SEVERE, custom.toString(), e);
}
if (qto == null)
qto = Env.ZERO;
replenish.setQtyToOrder(qto);
replenish.save();
}
}
} // fillTable
/**
* Create PO's
*/
private void createPO()
{
int noOrders = 0;
String info = "";
//
MOrder order = null;
MWarehouse wh = null;
X_T_Replenish[] replenishs = getReplenish("M_WarehouseSource_ID IS NULL");
for (int i = 0; i < replenishs.length; i++)
{
X_T_Replenish replenish = replenishs[i];
if (wh == null || wh.getM_Warehouse_ID() != replenish.getM_Warehouse_ID())
wh = MWarehouse.get(getCtx(), replenish.getM_Warehouse_ID());
//
if (order == null
|| order.getC_BPartner_ID() != replenish.getC_BPartner_ID()
|| order.getM_Warehouse_ID() != replenish.getM_Warehouse_ID())
{
order = new MOrder(getCtx(), 0, get_TrxName());
order.setIsSOTrx(false);
order.setC_DocTypeTarget_ID(p_C_DocType_ID);
MBPartner bp = new MBPartner(getCtx(), replenish.getC_BPartner_ID(), get_TrxName());
order.setBPartner(bp);
order.setSalesRep_ID(getAD_User_ID());
order.setDescription(Msg.getMsg(getCtx(), "Replenishment"));
// Set Org/WH
order.setAD_Org_ID(wh.getAD_Org_ID());
order.setM_Warehouse_ID(wh.getM_Warehouse_ID());
if (!order.save())
return;
log.fine(order.toString());
noOrders++;
info += " - " + order.getDocumentNo();
}
MOrderLine line = new MOrderLine (order);
line.setM_Product_ID(replenish.getM_Product_ID());
line.setQty(replenish.getQtyToOrder());
line.setPrice();
line.save();
}
m_info = "#" + noOrders + info;
log.info(m_info);
} // createPO
/**
* Create Requisition
*/
private void createRequisition()
{
int noReqs = 0;
String info = "";
//
MRequisition requisition = null;
MWarehouse wh = null;
X_T_Replenish[] replenishs = getReplenish("M_WarehouseSource_ID IS NULL");
for (int i = 0; i < replenishs.length; i++)
{
X_T_Replenish replenish = replenishs[i];
if (wh == null || wh.getM_Warehouse_ID() != replenish.getM_Warehouse_ID())
wh = MWarehouse.get(getCtx(), replenish.getM_Warehouse_ID());
//
if (requisition == null
|| requisition.getM_Warehouse_ID() != replenish.getM_Warehouse_ID())
{
requisition = new MRequisition (getCtx(), 0, get_TrxName());
requisition.setAD_User_ID (getAD_User_ID());
requisition.setC_DocType_ID(p_C_DocType_ID);
requisition.setDescription(Msg.getMsg(getCtx(), "Replenishment"));
// Set Org/WH
requisition.setAD_Org_ID(wh.getAD_Org_ID());
requisition.setM_Warehouse_ID(wh.getM_Warehouse_ID());
if (!requisition.save())
return;
log.fine(requisition.toString());
noReqs++;
info += " - " + requisition.getDocumentNo();
}
//
MRequisitionLine line = new MRequisitionLine(requisition);
line.setM_Product_ID(replenish.getM_Product_ID());
line.setC_BPartner_ID(replenish.getC_BPartner_ID());
line.setQty(replenish.getQtyToOrder());
line.setPrice();
line.save();
}
m_info = "#" + noReqs + info;
log.info(m_info);
} // createRequisition
/**
* Create Inventory Movements
*/
private void createMovements()
{
int noMoves = 0;
String info = "";
//
MClient client = null;
MMovement move = null;
int M_Warehouse_ID = 0;
int M_WarehouseSource_ID = 0;
MWarehouse whSource = null;
MWarehouse wh = null;
X_T_Replenish[] replenishs = getReplenish("M_WarehouseSource_ID IS NOT NULL");
for (int i = 0; i < replenishs.length; i++)
{
X_T_Replenish replenish = replenishs[i];
if (whSource == null || whSource.getM_WarehouseSource_ID() != replenish.getM_WarehouseSource_ID())
whSource = MWarehouse.get(getCtx(), replenish.getM_WarehouseSource_ID());
if (wh == null || wh.getM_Warehouse_ID() != replenish.getM_Warehouse_ID())
wh = MWarehouse.get(getCtx(), replenish.getM_Warehouse_ID());
if (client == null || client.getAD_Client_ID() != whSource.getAD_Client_ID())
client = MClient.get(getCtx(), whSource.getAD_Client_ID());
//
if (move == null
|| M_WarehouseSource_ID != replenish.getM_WarehouseSource_ID()
|| M_Warehouse_ID != replenish.getM_Warehouse_ID())
{
M_WarehouseSource_ID = replenish.getM_WarehouseSource_ID();
M_Warehouse_ID = replenish.getM_Warehouse_ID();
move = new MMovement (getCtx(), 0, get_TrxName());
move.setC_DocType_ID(p_C_DocType_ID);
move.setDescription(Msg.getMsg(getCtx(), "Replenishment")
+ ": " + whSource.getName() + "->" + wh.getName());
// Set Org
move.setAD_Org_ID(whSource.getAD_Org_ID());
if (!move.save())
return;
log.fine(move.toString());
noMoves++;
info += " - " + move.getDocumentNo();
}
// To
int M_LocatorTo_ID = wh.getDefaultLocator().getM_Locator_ID();
// From: Look-up Storage
MProduct product = MProduct.get(getCtx(), replenish.getM_Product_ID());
MProductCategory pc = MProductCategory.get(getCtx(), product.getM_Product_Category_ID());
String MMPolicy = pc.getMMPolicy();
if (MMPolicy == null || MMPolicy.length() == 0)
MMPolicy = client.getMMPolicy();
//
MStorage[] storages = MStorage.getWarehouse(getCtx(),
whSource.getM_Warehouse_ID(), replenish.getM_Product_ID(), 0, 0,
true, null,
MClient.MMPOLICY_FiFo.equals(MMPolicy), get_TrxName());
//
BigDecimal target = replenish.getQtyToOrder();
for (int j = 0; j < storages.length; j++)
{
MStorage storage = storages[j];
if (storage.getQtyOnHand().signum() <= 0)
continue;
BigDecimal moveQty = target;
if (storage.getQtyOnHand().compareTo(moveQty) < 0)
moveQty = storage.getQtyOnHand();
//
MMovementLine line = new MMovementLine(move);
line.setM_Product_ID(replenish.getM_Product_ID());
line.setMovementQty(moveQty);
if (replenish.getQtyToOrder().compareTo(moveQty) != 0)
line.setDescription("Total: " + replenish.getQtyToOrder());
line.setM_Locator_ID(storage.getM_Locator_ID()); // from
line.setM_AttributeSetInstance_ID(storage.getM_AttributeSetInstance_ID());
line.setM_LocatorTo_ID(M_LocatorTo_ID); // to
line.setM_AttributeSetInstanceTo_ID(storage.getM_AttributeSetInstance_ID());
line.save();
//
target = target.subtract(moveQty);
if (target.signum() == 0)
break;
}
}
if (replenishs.length == 0)
{
m_info = "No Source Warehouse";
log.warning(m_info);
}
else
{
m_info = "#" + noMoves + info;
log.info(m_info);
}
} // createRequisition
/**
* Get Replenish Records
* @return replenish
*/
private X_T_Replenish[] getReplenish (String where)
{
String sql = "SELECT * FROM T_Replenish "
+ "WHERE AD_PInstance_ID=? AND C_BPartner_ID > 0 ";
if (where != null && where.length() > 0)
sql += " AND " + where;
sql += " ORDER BY M_Warehouse_ID, M_WarehouseSource_ID, C_BPartner_ID";
ArrayList<X_T_Replenish> list = new ArrayList<X_T_Replenish>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getAD_PInstance_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new X_T_Replenish (getCtx(), rs, get_TrxName()));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
X_T_Replenish[] retValue = new X_T_Replenish[list.size ()];
list.toArray (retValue);
return retValue;
} // getReplenish
} // Replenish
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -