BF [2989137] - Critical failure when adding physical inventory lines

http://sourceforge.net/tracker/?func=detail&atid=879332&aid=2989137&group_id=176962
This commit is contained in:
trifonnt 2010-04-19 09:17:19 +00:00
parent f14bf2fbec
commit b0ac11d60a
1 changed files with 72 additions and 21 deletions

View File

@ -50,9 +50,35 @@ public class CalloutInventory extends CalloutEngine
if (isCalloutActive())
return "";
Integer InventoryLine = (Integer)mTab.getValue("M_InventoryLine_ID");
if (InventoryLine != null && InventoryLine.intValue() != 0)
return "";
BigDecimal bd = null;
if (InventoryLine != null && InventoryLine.intValue() != 0) {
MInventoryLine _ILine = new MInventoryLine(ctx, InventoryLine, null);
Integer M_Product_ID = (Integer)mTab.getValue("M_Product_ID");
Integer M_Locator_ID = (Integer)mTab.getValue("M_Locator_ID");
Integer M_AttributeSetInstance_ID = 0;
// if product or locator has changed recalculate Book Qty
if ((M_Product_ID != null && M_Product_ID != _ILine.getM_Product_ID()) ||
(M_Locator_ID !=null && M_Locator_ID != _ILine.getM_Locator_ID())) {
// Check ASI - if product has been changed remove old ASI
if (M_Product_ID == _ILine.getM_Product_ID()) {
M_AttributeSetInstance_ID = (Integer)mTab.getValue("M_AttributeSetInstance_ID");
if( M_AttributeSetInstance_ID == null )
M_AttributeSetInstance_ID = 0;
} else {
mTab.setValue("M_AttributeSetInstance_ID", null);
}
try {
bd = setQtyBook(M_AttributeSetInstance_ID, M_Product_ID, M_Locator_ID);
mTab.setValue("QtyBook", bd);
} catch (Exception e) {
return mTab.setValue("QtyBook", bd);
}
}
return "";
}
// New Line - Get Book Value
int M_Product_ID = 0;
Integer Product = (Integer)mTab.getValue("M_Product_ID");
@ -89,6 +115,36 @@ public class CalloutInventory extends CalloutEngine
mTab.setValue(MInventoryLine.COLUMNNAME_M_AttributeSetInstance_ID, null);
}
// Set QtyBook from first storage location
// kviiksaar: Call's now the extracted function
try {
bd = setQtyBook(M_AttributeSetInstance_ID, M_Product_ID, M_Locator_ID);
mTab.setValue("QtyBook", bd);
} catch (Exception e) {
return mTab.setValue("QtyBook", bd);
}
//
log.info("M_Product_ID=" + M_Product_ID
+ ", M_Locator_ID=" + M_Locator_ID
+ ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID
+ " - QtyBook=" + bd);
return "";
} // product
/**
* kviiksaar
*
* Returns the current Book Qty for given parameters or 0
*
* @param M_AttributeSetInstance_ID
* @param M_Product_ID
* @param M_Locator_ID
* @return
* @throws Exception
*/
private BigDecimal setQtyBook (int M_AttributeSetInstance_ID, int M_Product_ID, int M_Locator_ID) throws Exception {
// Set QtyBook from first storage location
BigDecimal bd = null;
String sql = "SELECT QtyOnHand FROM M_Storage "
@ -99,40 +155,35 @@ public class CalloutInventory extends CalloutEngine
sql = "SELECT SUM(QtyOnHand) FROM M_Storage "
+ "WHERE M_Product_ID=?" // 1
+ " AND M_Locator_ID=?"; // 2
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement(sql, null);
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, M_Product_ID);
pstmt.setInt(2, M_Locator_ID);
if (M_AttributeSetInstance_ID != 0)
pstmt.setInt(3, M_AttributeSetInstance_ID);
rs = pstmt.executeQuery();
mTab.setValue("QtyBook", Env.ZERO);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
bd = rs.getBigDecimal(1);
if (bd != null)
mTab.setValue("QtyBook", bd);
return bd;
} else {
// gwu: 1719401: clear Booked Quantity to zero first in case the query returns no rows,
// for example when the locator has never stored a particular product.
return new BigDecimal(0);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
return e.getLocalizedMessage();
throw new Exception(e.getLocalizedMessage());
}
finally
{
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
//
log.info("M_Product_ID=" + M_Product_ID
+ ", M_Locator_ID=" + M_Locator_ID
+ ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID
+ " - QtyBook=" + bd);
return "";
} // product
return new BigDecimal(0);
}
} // CalloutInventory