From c3750a2984f1771d11d9899d6a996a8ae0df463f Mon Sep 17 00:00:00 2001 From: teo_sarca Date: Mon, 25 Aug 2008 18:02:56 +0000 Subject: [PATCH] MPriceList: BF [ 2073484 ] MPriceList.getDefault is not working correctly BF [ 1874419 ] JDBC Statement not close in a finally block * organized imports --- base/src/org/compiere/model/MPriceList.java | 117 +++++++------------- 1 file changed, 37 insertions(+), 80 deletions(-) diff --git a/base/src/org/compiere/model/MPriceList.java b/base/src/org/compiere/model/MPriceList.java index 6841796e3e..3592fa984c 100644 --- a/base/src/org/compiere/model/MPriceList.java +++ b/base/src/org/compiere/model/MPriceList.java @@ -16,20 +16,29 @@ *****************************************************************************/ package org.compiere.model; -import java.math.*; -import java.sql.*; -import java.util.*; -import java.util.logging.*; -import org.compiere.util.*; +import java.math.BigDecimal; +import java.sql.ResultSet; +import java.sql.Timestamp; +import java.util.Iterator; +import java.util.Properties; + +import org.compiere.util.CCache; +import org.compiere.util.Env; /** * Price List Model * * @author Jorg Janke * @version $Id: MPriceList.java,v 1.3 2006/07/30 00:51:03 jjanke Exp $ + * + * @author Teo Sarca, www.arhipac.ro + *
  • BF [ 2073484 ] MPriceList.getDefault is not working correctly */ public class MPriceList extends X_M_PriceList { + private static final long serialVersionUID = 1L; + + /** * Get Price List (cached) * @param ctx context @@ -60,52 +69,29 @@ public class MPriceList extends X_M_PriceList int AD_Client_ID = Env.getAD_Client_ID(ctx); MPriceList retValue = null; // Search for it in cache - Iterator it = s_cache.values().iterator(); + Iterator it = s_cache.values().iterator(); while (it.hasNext()) { - retValue = (MPriceList)it.next(); - if (retValue.isDefault() && retValue.getAD_Client_ID() == AD_Client_ID) + retValue = it.next(); + if (retValue.isDefault() + && retValue.getAD_Client_ID() == AD_Client_ID + && retValue.isSOPriceList() == IsSOPriceList) + { return retValue; + } } - /** Get from DB **/ - retValue = null; - String sql = "SELECT * FROM M_PriceList " - + "WHERE AD_Client_ID=?" - + " AND IsDefault='Y'" - + " AND IsSOPriceList='Y'" - + "ORDER BY M_PriceList_ID"; - PreparedStatement pstmt = null; - try - { - pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, AD_Client_ID); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - retValue = new MPriceList (ctx, rs, null); - 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; - } + // Get from DB + final String whereClause = "AD_Client_ID=? AND IsDefault=? AND IsSOPriceList=?"; + retValue = new Query(ctx, Table_Name, whereClause, null) + .setParameters(new Object[]{AD_Client_ID, "Y", IsSOPriceList ? "Y" : "N"}) + .setOrderBy("M_PriceList_ID") + .first(); + // Return value if (retValue != null) { - Integer key = new Integer (retValue.getM_PriceList_ID()); - s_cache.put(key, retValue); + s_cache.put(retValue.get_ID(), retValue); } return retValue; } // getDefault @@ -134,10 +120,8 @@ public class MPriceList extends X_M_PriceList return pl.getPricePrecisionInt(); } // getPricePrecision - /** Static Logger */ - private static CLogger s_log = CLogger.getCLogger(MPriceList.class); /** Cache of Price Lists */ - private static CCache s_cache = new CCache("M_PriceList", 5); + private static CCache s_cache = new CCache(Table_Name, 5); /************************************************************************** @@ -190,40 +174,13 @@ public class MPriceList extends X_M_PriceList if (m_plv != null && m_plv.getValidFrom().before(valid)) return m_plv; - String sql = "SELECT * FROM M_PriceList_Version " - + "WHERE M_PriceList_ID=?" - + " AND TRUNC(ValidFrom)<=? AND IsActive='Y'" - + "ORDER BY ValidFrom DESC"; - PreparedStatement pstmt = null; - try - { - pstmt = DB.prepareStatement(sql, get_TrxName()); - pstmt.setInt(1, getM_PriceList_ID()); - pstmt.setTimestamp(2, valid); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - m_plv = new MPriceListVersion (getCtx(), rs, get_TrxName()); - rs.close(); - pstmt.close(); - pstmt = null; - } - catch (Exception e) - { - log.log(Level.SEVERE, sql, e); - } - try - { - if (pstmt != null) - pstmt.close(); - pstmt = null; - } - catch (Exception e) - { - pstmt = null; - } + final String whereClause = "M_PriceList_ID=? AND TRUNC(ValidFrom)<=? AND IsActive=?"; + m_plv = new Query(getCtx(), MPriceListVersion.Table_Name, whereClause, get_TrxName()) + .setParameters(new Object[]{getM_PriceList_ID(), valid, "Y"}) + .setOrderBy("ValidFrom DESC") + .first(); if (m_plv == null) - log.warning("None found M_PriceList_ID=" - + getM_PriceList_ID() + " - " + valid + " - " + sql); + log.warning("None found M_PriceList_ID=" + getM_PriceList_ID() + " - " + valid); else log.fine(m_plv.toString()); return m_plv; @@ -250,7 +207,7 @@ public class MPriceList extends X_M_PriceList */ public void setPricePrecision (int PricePrecision) { - setPricePrecision (new BigDecimal(PricePrecision)); + setPricePrecision (BigDecimal.valueOf(PricePrecision)); } // setPricePrecision