diff --git a/base/src/org/compiere/model/PO.java b/base/src/org/compiere/model/PO.java
index b4dcbca24a..ac8240d183 100644
--- a/base/src/org/compiere/model/PO.java
+++ b/base/src/org/compiere/model/PO.java
@@ -76,6 +76,8 @@ import org.w3c.dom.Element;
* https://sourceforge.net/tracker/?func=detail&aid=2818369&group_id=176962&atid=879335
*
BF [ 2849122 ] PO.AfterSave is not rollback on error
* https://sourceforge.net/tracker/?func=detail&aid=2849122&group_id=176962&atid=879332
+ * BF [ 2859125 ] Can't set AD_OrgBP_ID
+ * https://sourceforge.net/tracker/index.php?func=detail&aid=2859125&group_id=176962&atid=879332
* @author Victor Perez, e-Evolution SC
* [ 2195894 ] Improve performance in PO engine
* http://sourceforge.net/tracker/index.php?func=detail&aid=2195894&group_id=176962&atid=879335
@@ -667,8 +669,13 @@ public abstract class PO
}
if (ColumnName.endsWith("_ID") && value instanceof String )
{
- log.severe("Invalid Data Type for " + ColumnName + "=" + value);
- value = Integer.parseInt((String)value);
+ // Convert to Integer only if info class is Integer - teo_sarca [ 2859125 ]
+ Class> clazz = p_info.getColumnClass(p_info.getColumnIndex(ColumnName));
+ if (Integer.class == clazz)
+ {
+ log.severe("Invalid Data Type for " + ColumnName + "=" + value);
+ value = Integer.parseInt((String)value);
+ }
}
return set_Value (index, value);
diff --git a/extend/src/test/functional/POTest.java b/extend/src/test/functional/POTest.java
index aa24e4ce02..da57809df3 100644
--- a/extend/src/test/functional/POTest.java
+++ b/extend/src/test/functional/POTest.java
@@ -2,6 +2,7 @@ package test.functional;
import java.util.Properties;
+import org.compiere.model.MBPartner;
import org.compiere.model.MTest;
import org.compiere.model.POInfo;
import org.compiere.util.DB;
@@ -173,4 +174,32 @@ public class POTest extends AdempiereTestCase
assertEquals("Object should not be modified(2) -- id="+test2, test.getName(), name);
}
}
+
+ /**
+ * BF [ 2859125 ] Can't set AD_OrgBP_ID
+ * https://sourceforge.net/tracker/index.php?func=detail&aid=2859125&group_id=176962&atid=879332#
+ */
+ public void testAD_OrgBP_ID_Issue() throws Exception
+ {
+ MBPartner bp = new MBPartner(getCtx(), 50004, getTrxName()); // Store Central
+ //
+ // Try to change AD_OrgBP_ID field value to a new value
+ final int old_org_id = bp.getAD_OrgBP_ID_Int();
+ int new_org_id = 50005; // Store East Org
+ if (old_org_id == new_org_id)
+ {
+ new_org_id = 12; // Store Central
+ }
+ bp.setAD_OrgBP_ID(new_org_id);
+ //
+ // Following line throws:
+ // java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
+ // at org.compiere.model.X_C_BPartner.getAD_OrgBP_ID(X_C_BPartner.java:165)
+ // at org.compiere.model.MBPartner.getAD_OrgBP_ID_Int(MBPartner.java:602)
+ // at test.functional.POTest.testAD_OrgBP_ID_Issue(POTest.java:192)
+ bp.getAD_OrgBP_ID_Int();
+ //
+ // Test save:
+ bp.saveEx();
+ }
}