IDEMPIERE-2629 M_StorageOnHand Qty and Total M_Transaction Qty did not match / remove some unneeded agressive locking to minimize deadlocks

This commit is contained in:
Carlos Ruiz 2015-05-26 18:30:22 -05:00
parent e27bff24d5
commit e423b11f73
3 changed files with 6 additions and 5 deletions

View File

@ -1853,7 +1853,7 @@ public class MInOut extends X_M_InOut implements DocAction
String MMPolicy = product.getMMPolicy();
Timestamp minGuaranteeDate = getMovementDate();
MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
minGuaranteeDate, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), true);
minGuaranteeDate, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), false);
BigDecimal qtyToDeliver = qty;
for (MStorageOnHand storage: storages)
{
@ -1897,7 +1897,7 @@ public class MInOut extends X_M_InOut implements DocAction
private BigDecimal autoBalanceNegative(MInOutLine line, MProduct product,BigDecimal qtyToReceive) {
MStorageOnHand[] storages = MStorageOnHand.getWarehouseNegative(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), true);
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), false);
Timestamp dateMPolicy = null;

View File

@ -625,7 +625,7 @@ public class MInventory extends X_M_Inventory implements DocAction
{
//auto balance negative on hand
MStorageOnHand[] storages = MStorageOnHand.getWarehouseNegative(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), true);
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), false);
for (MStorageOnHand storage : storages)
{
if (storage.getQtyOnHand().signum() < 0)
@ -656,7 +656,7 @@ public class MInventory extends X_M_Inventory implements DocAction
{
String MMPolicy = product.getMMPolicy();
MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
null, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), true);
null, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), false);
BigDecimal qtyToDeliver = qtyDiff.negate();
for (MStorageOnHand storage: storages)

View File

@ -132,7 +132,7 @@ public class MProductionLine extends X_M_ProductionLine {
// create transactions and update stock used in production
MStorageOnHand[] storages = MStorageOnHand.getAll( getCtx(), getM_Product_ID(),
getM_Locator_ID(), get_TrxName(), true, 120);
getM_Locator_ID(), get_TrxName(), false, 0);
MProductionLineMA lineMA = null;
MTransaction matTrx = null;
@ -181,6 +181,7 @@ public class MProductionLine extends X_M_ProductionLine {
} else {
if (log.isLoggable(Level.FINE))log.log(Level.FINE, "Saved transaction for " + toString());
}
DB.getDatabase().forUpdate(storages[sl], 120);
storages[sl].changeQtyOnHand(lineQty, false);
if ( !storages[sl].save(get_TrxName()) ) {
log.log(Level.SEVERE, "Could not update storage for " + toString());