From aea1502701f82f02fabe97c7601523f2c8756b52 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 29 Mar 2019 16:37:21 -0300 Subject: [PATCH] IDEMPIERE-3854 Conversion rate must validate period overlapping --- .../src/org/compiere/model/MConversionRate.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MConversionRate.java b/org.adempiere.base/src/org/compiere/model/MConversionRate.java index f16016bc98..a88d5f107f 100644 --- a/org.adempiere.base/src/org/compiere/model/MConversionRate.java +++ b/org.adempiere.base/src/org/compiere/model/MConversionRate.java @@ -465,9 +465,10 @@ public class MConversionRate extends X_C_Conversion_Rate return true; } // beforeSave + private volatile static boolean recursiveCall = false; @Override protected boolean afterSave(boolean newRecord, boolean success) { - if (success) { + if (success && !recursiveCall) { String whereClause = "ValidFrom=? AND ValidTo=? " + "AND C_Currency_ID=? AND C_Currency_ID_To=? " + "AND C_ConversionType_ID=? " @@ -490,9 +491,15 @@ public class MConversionRate extends X_C_Conversion_Rate reciprocal.setC_Currency_ID(getC_Currency_ID_To()); reciprocal.setC_Currency_ID_To(getC_Currency_ID()); } - reciprocal.setDivideRate(getMultiplyRate()); - reciprocal.setMultiplyRate(getDivideRate()); - reciprocal.saveEx(); + // avoid recalculation + reciprocal.set_Value(COLUMNNAME_DivideRate, getMultiplyRate()); + reciprocal.set_Value(COLUMNNAME_MultiplyRate, getDivideRate()); + recursiveCall = true; + try { + reciprocal.saveEx(); + } finally { + recursiveCall = false; + } } return success; }