diff --git a/base/src/org/adempiere/exceptions/WarehouseLocatorConflictException.java b/base/src/org/adempiere/exceptions/WarehouseLocatorConflictException.java new file mode 100644 index 0000000000..4d092a9c39 --- /dev/null +++ b/base/src/org/adempiere/exceptions/WarehouseLocatorConflictException.java @@ -0,0 +1,43 @@ +/****************************************************************************** + * Product: Adempiere ERP & CRM Smart Business Solution * + * Copyright (C) 2009 SC ARHIPAC SERVICE SRL. All Rights Reserved. * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program is distributed in the hope * + * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * See the GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ +package org.adempiere.exceptions; + +import org.compiere.model.I_M_Locator; +import org.compiere.model.I_M_Warehouse; + +/** + * Throwed when a document warehouse does not match with document or document line locator. + * @author Teo Sarca, www.arhipac.ro + */ +public class WarehouseLocatorConflictException extends AdempiereException +{ + /** + * + */ + private static final long serialVersionUID = 4812283712626432829L; + + /** + * @param wh warehouse + * @param locator locator + * @param lineNo Document Line# + */ + public WarehouseLocatorConflictException(I_M_Warehouse wh, I_M_Locator locator, int lineNo) + { + super ("@WarehouseLocatorConflict@" + +" @M_Warehouse_ID@: "+(wh != null ? wh.getName() : "?") + +" @M_Locator_ID@: "+(locator != null ? locator.getValue() : "?") + +" @Line@: "+lineNo + ); + } +} diff --git a/base/src/org/compiere/model/MInOutLine.java b/base/src/org/compiere/model/MInOutLine.java index b3b719ce22..891198f37c 100644 --- a/base/src/org/compiere/model/MInOutLine.java +++ b/base/src/org/compiere/model/MInOutLine.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Properties; import org.adempiere.exceptions.FillMandatoryException; +import org.adempiere.exceptions.WarehouseLocatorConflictException; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -32,6 +33,10 @@ import org.compiere.util.Util; * * @author Jorg Janke * @version $Id: MInOutLine.java,v 1.5 2006/07/30 00:51:03 jjanke Exp $ + * + * @author Teo Sarca, www.arhipac.ro + *
  • BF [ 2784194 ] Check Warehouse-Locator conflict + * https://sourceforge.net/tracker/?func=detail&aid=2784194&group_id=176962&atid=879332 */ public class MInOutLine extends X_M_InOutLine { @@ -254,12 +259,13 @@ public class MInOutLine extends X_M_InOutLine * Set M_Locator_ID * @param M_Locator_ID id */ + @Override public void setM_Locator_ID (int M_Locator_ID) { if (M_Locator_ID < 0) throw new IllegalArgumentException ("M_Locator_ID is mandatory."); // set to 0 explicitly to reset - set_Value ("M_Locator_ID", new Integer(M_Locator_ID)); + set_Value (COLUMNNAME_M_Locator_ID, new Integer(M_Locator_ID)); } // setM_Locator_ID /** @@ -275,7 +281,7 @@ public class MInOutLine extends X_M_InOutLine // No Product if (getM_Product_ID() == 0) { - set_ValueNoCheck("M_Locator_ID", null); + set_ValueNoCheck(COLUMNNAME_M_Locator_ID, null); return; } @@ -492,7 +498,7 @@ public class MInOutLine extends X_M_InOutLine if (getLine() == 0) { String sql = "SELECT COALESCE(MAX(Line),0)+10 FROM M_InOutLine WHERE M_InOut_ID=?"; - int ii = DB.getSQLValue (get_TrxName(), sql, getM_InOut_ID()); + int ii = DB.getSQLValueEx (get_TrxName(), sql, getM_InOut_ID()); setLine (ii); } // UOM @@ -520,6 +526,19 @@ public class MInOutLine extends X_M_InOutLine } } + // Validate Locator/Warehouse - teo_sarca, BF [ 2784194 ] + if (getM_Locator_ID() > 0) + { + MLocator locator = MLocator.get(getCtx(), getM_Locator_ID()); + if (getM_Warehouse_ID() != locator.getM_Warehouse_ID()) + { + throw new WarehouseLocatorConflictException( + MWarehouse.get(getCtx(), getM_Warehouse_ID()), + locator, + getLine()); + } + } + // if (getC_Charge_ID() == 0 && getM_Product_ID() == 0) // ;