diff --git a/base/src/org/compiere/model/MInventoryLine.java b/base/src/org/compiere/model/MInventoryLine.java
index 9ee54c59bd..c3b356d20b 100644
--- a/base/src/org/compiere/model/MInventoryLine.java
+++ b/base/src/org/compiere/model/MInventoryLine.java
@@ -17,12 +17,9 @@
package org.compiere.model;
import java.math.BigDecimal;
-import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
-import java.util.logging.Level;
-import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Msg;
@@ -35,6 +32,7 @@ import org.compiere.util.Msg;
*
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
*
BF [ 1817757 ] Error on saving MInventoryLine in a custom environment
+ * BF [ 1722982 ] Error with inventory when you enter count qty in negative
*/
public class MInventoryLine extends X_M_InventoryLine
{
@@ -55,48 +53,13 @@ public class MInventoryLine extends X_M_InventoryLine
public static MInventoryLine get (MInventory inventory,
int M_Locator_ID, int M_Product_ID, int M_AttributeSetInstance_ID)
{
- MInventoryLine retValue = null;
- String sql = "SELECT * FROM M_InventoryLine "
- + "WHERE M_Inventory_ID=? AND M_Locator_ID=?"
- + " AND M_Product_ID=? AND M_AttributeSetInstance_ID=?";
- PreparedStatement pstmt = null;
- try
- {
- pstmt = DB.prepareStatement (sql, inventory.get_TrxName());
- pstmt.setInt (1, inventory.getM_Inventory_ID());
- pstmt.setInt(2, M_Locator_ID);
- pstmt.setInt(3, M_Product_ID);
- pstmt.setInt(4, M_AttributeSetInstance_ID);
- ResultSet rs = pstmt.executeQuery ();
- if (rs.next ())
- retValue = new MInventoryLine (inventory.getCtx(), rs, inventory.get_TrxName());
- rs.close ();
- pstmt.close ();
- pstmt = null;
- }
- catch (Exception e)
- {
- s_log.log (Level.SEVERE, sql, e);
- }
- try
- {
- if (pstmt != null)
- pstmt.close ();
- pstmt = null;
- }
- catch (Exception e)
- {
- pstmt = null;
- }
-
- return retValue;
+ final String whereClause = "M_Inventory_ID=? AND M_Locator_ID=?"
+ +" AND M_Product_ID=? AND M_AttributeSetInstance_ID=?";
+ return new Query(inventory.getCtx(), MInventoryLine.Table_Name, whereClause, inventory.get_TrxName())
+ .setParameters(new Object[]{inventory.get_ID(), M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID})
+ .firstOnly();
} // get
-
- /** Logger */
- private static CLogger s_log = CLogger.getCLogger (MInventoryLine.class);
-
-
/**************************************************************************
* Default Constructor
* @param ctx context
@@ -170,30 +133,6 @@ public class MInventoryLine extends X_M_InventoryLine
/** Product */
private MProduct m_product = null;
- /**
- * Get Qty Book
- * @return Qty Book
- */
- public BigDecimal getQtyBook ()
- {
- BigDecimal bd = super.getQtyBook ();
- if (bd == null)
- bd = Env.ZERO;
- return bd;
- } // getQtyBook
-
- /**
- * Get Qty Count
- * @return Qty Count
- */
- public BigDecimal getQtyCount ()
- {
- BigDecimal bd = super.getQtyCount();
- if (bd == null)
- bd = Env.ZERO;
- return bd;
- } // getQtyBook
-
/**
* Get Product
* @return product or null if not defined
@@ -214,6 +153,7 @@ public class MInventoryLine extends X_M_InventoryLine
* Set Count Qty - enforce UOM
* @param QtyCount qty
*/
+ @Override
public void setQtyCount (BigDecimal QtyCount)
{
if (QtyCount != null)
@@ -232,6 +172,7 @@ public class MInventoryLine extends X_M_InventoryLine
* Set Internal Use Qty - enforce UOM
* @param QtyInternalUse qty
*/
+ @Override
public void setQtyInternalUse (BigDecimal QtyInternalUse)
{
if (QtyInternalUse != null)
@@ -330,6 +271,12 @@ public class MInventoryLine extends X_M_InventoryLine
setLine (ii);
}
+ // Enforce QtyCount >= 0 - teo_sarca BF [ 1722982 ]
+ if (getQtyCount().signum() < 0)
+ {
+ log.saveError("Warning", Msg.getElement(getCtx(), COLUMNNAME_QtyCount)+" < 0");
+ return false;
+ }
// Enforce Qty UOM
if (newRecord || is_ValueChanged("QtyCount"))
setQtyCount(getQtyCount());