FR 2797880 - new method MConversionRate.setRate
https://sourceforge.net/tracker/?func=detail&aid=2797880&group_id=176962&atid=879335
This commit is contained in:
parent
1ed99703b4
commit
509489323a
|
@ -21,6 +21,8 @@ import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
@ -30,6 +32,7 @@ import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.TimeUtil;
|
import org.compiere.util.TimeUtil;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currency Conversion Rate Model
|
* Currency Conversion Rate Model
|
||||||
|
@ -46,7 +49,6 @@ public class MConversionRate extends X_C_Conversion_Rate
|
||||||
/** Logger */
|
/** Logger */
|
||||||
private static CLogger s_log = CLogger.getCLogger (MConversionRate.class);
|
private static CLogger s_log = CLogger.getCLogger (MConversionRate.class);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert an amount to base Currency
|
* Convert an amount to base Currency
|
||||||
* @param ctx context
|
* @param ctx context
|
||||||
|
@ -122,6 +124,72 @@ public class MConversionRate extends X_C_Conversion_Rate
|
||||||
return retValue;
|
return retValue;
|
||||||
} // convert
|
} // convert
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets system spot conversion rate for a single day.
|
||||||
|
* Checks for overlaps of spot rate is made. If an overlap is found, the overlapping
|
||||||
|
* rate is removed.
|
||||||
|
*
|
||||||
|
* @param CurFrom_ISO Currency from ISO code
|
||||||
|
* @param CurTo_ISO Currency to ISO code
|
||||||
|
* @param spotDate If null, today's date is used.
|
||||||
|
* @param multiplyRate CurFrom_ISO * MultiplyRate = amount in CurTo_ISO
|
||||||
|
*/
|
||||||
|
public static void setRate(String CurFrom_ISO, String CurTo_ISO, java.util.Date spotDate,
|
||||||
|
BigDecimal MultiplyRate) throws Exception {
|
||||||
|
|
||||||
|
String trxName = Trx.createTrxName();
|
||||||
|
Trx trx = Trx.get(trxName, true);
|
||||||
|
Properties ctx = Env.getCtx();
|
||||||
|
MCurrency curFrom = MCurrency.get(ctx, CurFrom_ISO);
|
||||||
|
if (curFrom==null) throw new Exception("Invalid currency " + CurFrom_ISO);
|
||||||
|
MCurrency curTo = MCurrency.get(ctx, CurTo_ISO);
|
||||||
|
if (curTo==null) throw new Exception("Invalid currency " + CurTo_ISO);
|
||||||
|
|
||||||
|
java.sql.Timestamp startTs;
|
||||||
|
if (spotDate==null) {
|
||||||
|
spotDate = Calendar.getInstance().getTime();
|
||||||
|
}
|
||||||
|
Calendar spotCal = Calendar.getInstance();
|
||||||
|
spotCal.setTime(spotDate);
|
||||||
|
spotCal.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
spotCal.set(Calendar.MINUTE, 0);
|
||||||
|
spotCal.set(Calendar.SECOND, 0);
|
||||||
|
spotCal.set(Calendar.MILLISECOND, 0);
|
||||||
|
startTs = new java.sql.Timestamp(spotCal.getTimeInMillis());
|
||||||
|
|
||||||
|
MConversionRate rate, updateRate = null;
|
||||||
|
java.util.List<MConversionRate> rates = new Query(ctx, MConversionRate.Table_Name,
|
||||||
|
"C_Currency_ID=? and C_Currency_ID_To=? and ValidFrom>=? and ValidTo<=? and C_ConversionType_ID=?",
|
||||||
|
trxName)
|
||||||
|
.setParameters(new Object[]{curFrom.get_ID(), curTo.get_ID(), startTs, startTs, MConversionType.TYPE_SPOT})
|
||||||
|
.list();
|
||||||
|
|
||||||
|
if (rates.size()>0) {
|
||||||
|
for (Iterator<MConversionRate> it = rates.iterator(); it.hasNext();) {
|
||||||
|
rate = it.next();
|
||||||
|
if (!rate.getValidFrom().equals(rate.getValidTo())) {
|
||||||
|
// Remove this since it's for more than one day
|
||||||
|
rate.deleteEx(true, trxName);
|
||||||
|
} else {
|
||||||
|
updateRate = rate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (updateRate==null) {
|
||||||
|
updateRate = new MConversionRate(ctx, 0, trxName);
|
||||||
|
updateRate.setAD_Client_ID(0);
|
||||||
|
updateRate.setAD_Org_ID(0);
|
||||||
|
updateRate.setC_Currency_ID(curFrom.get_ID());
|
||||||
|
updateRate.setC_Currency_ID_To(curTo.get_ID());
|
||||||
|
updateRate.setValidFrom(startTs);
|
||||||
|
updateRate.setValidTo(startTs);
|
||||||
|
updateRate.setC_ConversionType_ID(MConversionType.TYPE_SPOT);
|
||||||
|
}
|
||||||
|
updateRate.setMultiplyRate(MultiplyRate);
|
||||||
|
updateRate.saveEx(trxName);
|
||||||
|
trx.commit(true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Currency Conversion Rate
|
* Get Currency Conversion Rate
|
||||||
* @param CurFrom_ID The C_Currency_ID FROM
|
* @param CurFrom_ID The C_Currency_ID FROM
|
||||||
|
|
|
@ -35,6 +35,15 @@ public class MConversionType extends X_C_ConversionType
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 7198388106444590667L;
|
private static final long serialVersionUID = 7198388106444590667L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These static variables won't have to change unless we change the AD.
|
||||||
|
* I've added them here for convenience. Daniel Tamm [usrdno] 090528
|
||||||
|
*/
|
||||||
|
public static final int TYPE_SPOT = 114;
|
||||||
|
public static final int TYPE_PERIOD_END = 115;
|
||||||
|
public static final int TYPE_AVERAGE = 200;
|
||||||
|
public static final int TYPE_COMPANY = 201;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Default Conversion Rate for Client/Org
|
* Get Default Conversion Rate for Client/Org
|
||||||
* @param AD_Client_ID client
|
* @param AD_Client_ID client
|
||||||
|
|
Loading…
Reference in New Issue