示例#1
0
        /// <summary>
        ///Get Currency Conversion Rate
        /// </summary>
        /// <param name="CurFrom_ID">The C_Currency_ID FROM</param>
        /// <param name="CurTo_ID">The C_Currency_ID TO</param>
        /// <param name="ConvDate">The Conversion date - if null - use current date</param>
        /// <param name="ConversionType_ID">Conversion rate type - if 0 - use Default</param>
        /// <param name="AD_Client_ID">client</param>
        /// <param name="AD_Org_ID">organization</param>
        /// <returns>currency Rate or null</returns>
        public static Decimal GetRate(int CurFrom_ID, int CurTo_ID,
                                      DateTime?convDate, int ConversionType_ID, int AD_Client_ID, int AD_Org_ID)
        {
            string isFetchAllDateOrNot = "N";

            if (CurFrom_ID == CurTo_ID)
            {
                return(Env.ONE);
            }
            //	Conversion Type
            int C_ConversionType_ID = ConversionType_ID;

            if (C_ConversionType_ID == 0)
            {
                C_ConversionType_ID = MConversionType.GetDefault(AD_Client_ID);
            }
            //	Conversion Date
            if (convDate == null)
            {
                // convDate = new DateTime(CommonFunctions.CurrentTimeMillis());
                convDate = System.DateTime.Now.Date;
            }

            //	Get Rate
            String sql = "SELECT MultiplyRate "
                         + "FROM C_Conversion_Rate "
                         + "WHERE C_Currency_ID=" + CurFrom_ID                                              //	#1
                         + " AND C_Currency_To_ID=" + CurTo_ID                                              //	#2
                         + " AND	C_ConversionType_ID="+ C_ConversionType_ID                  //	#3
                         + " AND " + DataBase.DB.TO_DATE(convDate, true) + " BETWEEN ValidFrom AND ValidTo" //	#4	TRUNC (?) ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP
                         + " AND AD_Client_ID IN (0," + AD_Client_ID + ")"                                  //	#5
                         + " AND AD_Org_ID IN (0," + AD_Org_ID + ") "                                       //	#6
                         + " AND IsActive = 'Y' "                                                           // #7
                         + "ORDER BY AD_Client_ID DESC, AD_Org_ID DESC, ValidFrom DESC";
            //decimal retValue = null;
            decimal?retValue = null;
            DataSet ds       = null;

            try
            {
                ds = DataBase.DB.ExecuteDataset(sql, null, null);
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    DataRow dr = ds.Tables[0].Rows[i];
                    retValue = Utility.Util.GetValueOfDecimal(dr[0].ToString());
                    //when record found then not to continue with another record
                    break;
                }
                ds = null;
            }
            catch (Exception e)
            {
                _log.Log(Level.SEVERE, sql, e);
            }

            // added By Amit
            // if fetch all date or not is true on Conversion type then ppick conversion rate of max previous date
            if (retValue == null)
            {
                try
                {
                    isFetchAllDateOrNot = Util.GetValueOfString(DB.ExecuteScalar(@"SELECT IsFetchAllDateOrnot FROM C_ConversionType
                                     WHERE C_ConversionType_ID = " + C_ConversionType_ID, null, null));
                    if (isFetchAllDateOrNot == "Y")
                    {
                        //System took currencies rate from last updated rate,
                        //when current date rate not defined and consider previous record is true on Conversion type
                        sql      = @"SELECT MultiplyRate FROM C_Conversion_Rate WHERE C_Conversion_Rate_id = (
                              SELECT MAX(C_Conversion_Rate_id) keep (dense_rank last ORDER BY ValidFrom, C_Conversion_Rate_id)
                               FROM C_Conversion_Rate WHERE IsActive = 'Y' AND C_Currency_ID = " + CurFrom_ID + @"
                              AND C_Currency_To_ID   = " + CurTo_ID + @" 
                              AND C_ConversionType_ID= " + C_ConversionType_ID + @"
                              AND ValidFrom < " + DataBase.DB.TO_DATE(convDate, true) + @"
                              AND AD_Client_ID      IN (0," + AD_Client_ID + ")" + @"
                              AND AD_Org_ID         IN (0," + AD_Org_ID + "))";
                        retValue = null;
                        try
                        {
                            ds = DataBase.DB.ExecuteDataset(sql, null, null);
                            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                            {
                                DataRow dr = ds.Tables[0].Rows[i];
                                retValue = Utility.Util.GetValueOfDecimal(dr[0].ToString());
                                //when record found then not to continue with another record
                                break;
                            }
                            ds = null;
                        }
                        catch (Exception e)
                        {
                            _log.Log(Level.SEVERE, sql, e);
                        }
                    }
                }
                catch (Exception e)
                {
                    _log.Log(Level.SEVERE, sql, e);
                }
            }
            //end

            if (retValue == null)
            {
                _log.Info("Not found - CurFrom=" + CurFrom_ID
                          + ", CurTo=" + CurTo_ID
                          + ", " + convDate
                          + ", Type=" + ConversionType_ID + (ConversionType_ID == C_ConversionType_ID ? "" : "->" + C_ConversionType_ID)
                          + ", Client=" + AD_Client_ID
                          + ", Org=" + AD_Org_ID);
                retValue = 0;
            }
            return(retValue.Value);
        }
        /// <summary>
        ///Get Currency Conversion Rate
        /// </summary>
        /// <param name="CurFrom_ID">The C_Currency_ID FROM</param>
        /// <param name="CurTo_ID">The C_Currency_ID TO</param>
        /// <param name="ConvDate">The Conversion date - if null - use current date</param>
        /// <param name="ConversionType_ID">Conversion rate type - if 0 - use Default</param>
        /// <param name="AD_Client_ID">client</param>
        /// <param name="AD_Org_ID">organization</param>
        /// <returns>currency Rate or null</returns>
        public static Decimal GetRate(int CurFrom_ID, int CurTo_ID,
                                      DateTime?convDate, int ConversionType_ID, int AD_Client_ID, int AD_Org_ID)
        {
            if (CurFrom_ID == CurTo_ID)
            {
                return(Env.ONE);
            }
            //	Conversion Type
            int C_ConversionType_ID = ConversionType_ID;

            if (C_ConversionType_ID == 0)
            {
                C_ConversionType_ID = MConversionType.GetDefault(AD_Client_ID);
            }
            //	Conversion Date
            if (convDate == null)
            {
                // convDate = new DateTime(CommonFunctions.CurrentTimeMillis());
                convDate = System.DateTime.Now.Date;
            }

            //	Get Rate
            String sql = "SELECT MultiplyRate "
                         + "FROM C_Conversion_Rate "
                         + "WHERE C_Currency_ID=" + CurFrom_ID                                              //	#1
                         + " AND C_Currency_To_ID=" + CurTo_ID                                              //	#2
                         + " AND	C_ConversionType_ID="+ C_ConversionType_ID                  //	#3
                         + " AND " + DataBase.DB.TO_DATE(convDate, true) + " BETWEEN ValidFrom AND ValidTo" //	#4	TRUNC (?) ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP
                         + " AND AD_Client_ID IN (0," + AD_Client_ID + ")"                                  //	#5
                         + " AND AD_Org_ID IN (0," + AD_Org_ID + ") "                                       //	#6
                         + "ORDER BY AD_Client_ID DESC, AD_Org_ID DESC, ValidFrom DESC";
            //decimal retValue = null;
            decimal?retValue = null;
            DataSet ds       = null;

            try
            {
                ds = DataBase.DB.ExecuteDataset(sql, null, null);
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    DataRow dr = ds.Tables[0].Rows[i];
                    retValue = Utility.Util.GetValueOfDecimal(dr[0].ToString());
                }
                ds = null;
            }
            catch (Exception e)
            {
                _log.Log(Level.SEVERE, sql, e);
            }

            if (retValue == null)
            {
                _log.Info("Not found - CurFrom=" + CurFrom_ID
                          + ", CurTo=" + CurTo_ID
                          + ", " + convDate
                          + ", Type=" + ConversionType_ID + (ConversionType_ID == C_ConversionType_ID ? "" : "->" + C_ConversionType_ID)
                          + ", Client=" + AD_Client_ID
                          + ", Org=" + AD_Org_ID);
                retValue = 0;
            }
            return(retValue.Value);
        }