コード例 #1
0
        public static csCNMValutaCourse GetValutaCourseOnDate(Session session, DateTime courseDate, csValuta valuta)
        {
            // Курс с указанными параметрами
            XPQuery <csCNMValutaCourse> valutaCourses = new XPQuery <csCNMValutaCourse>(session, true);
            var query = from valutaCourse in valutaCourses
                        where valutaCourse.CourseDate.Date == courseDate.Date &&
                        valutaCourse.Valuta == valuta
                        select valutaCourse;

            if (query.Count() == 0)
            {
                return(null);
            }
            return(query.First());
        }
コード例 #2
0
        /// <summary>
        /// Кросс-курс валюты valuta1 относительновалюты valuta2 на дату courseDate, вычисленный через курсы для рубля,
        /// т.е. сколькоо valuta1 дают за 1 единицу valuta2
        /// </summary>
        /// <param name="courseDate"></param>
        /// <param name="valuta1"></param>
        /// <param name="valuta2"></param>
        /// <returns></returns>
        public static Decimal GetCrossCourceOnDate(Session session, DateTime courseDate, csValuta valuta1, csValuta valuta2)
        {
            if (valuta1 == valuta2)
            {
                return(1);
            }

            if (valuta1 == null)
            {
                throw new Exception("Не задана валюта, курс которой определяется");
            }
            if (valuta2 == null)
            {
                throw new Exception("Не задана валюта, к курсу которой выполняется приведение");
            }

            Decimal crossCource = 1;

            Decimal conversionCount1 = 1; // За сколько единиц валюты дают сумму в рублях, равную курсу
            Decimal course1          = 1; // Курс на дату courseDate

            Decimal conversionCount2 = 1; // За сколько единиц валюты дают сумму в рублях, равную курсу
            Decimal course2          = 1; // Курс на дату courseDate

            XPQuery <csCNMValutaCourse> valutaCourses1 = new XPQuery <csCNMValutaCourse>(session, true);
            csCNMValutaCourse           qValutaCourse1 = (from valutaCourse in valutaCourses1
                                                          where valutaCourse.CourseDate.Date == courseDate &&
                                                          valutaCourse.Valuta == valuta1
                                                          select valutaCourse).FirstOrDefault();

            if (qValutaCourse1 != null)
            {
                conversionCount1 = qValutaCourse1.ConversionCount;   // За сколько единиц валюты дают сумму в рублях, равную курсу
                if (conversionCount1 == 0)
                {
                    conversionCount1 = 1;
                }
                course1 = qValutaCourse1.Course;   // Курс на дату courseDate.Date
            }
            else
            {
                throw new Exception("Exchage course not found. Currency: " + valuta1.Code + ", date: " + courseDate.ToString("dd.MM.yyyy"));
            }


            XPQuery <csCNMValutaCourse> valutaCourses2 = new XPQuery <csCNMValutaCourse>(session, true);
            csCNMValutaCourse           qValutaCourse2 = (from valutaCourse in valutaCourses2
                                                          where valutaCourse.CourseDate.Date == courseDate &&
                                                          valutaCourse.Valuta == valuta2
                                                          select valutaCourse).First();

            if (qValutaCourse2 != null)
            {
                conversionCount2 = qValutaCourse2.ConversionCount;   // За сколько единиц валюты дают сумму в рублях, равную курсу
                if (conversionCount2 == 0)
                {
                    conversionCount2 = 1;
                }
                course2 = qValutaCourse2.Course;   // Курс на дату courseDate.Date
            }
            else
            {
                throw new Exception("Exchage course not found. Currency: " + valuta2.Code + ", date: " + courseDate.ToString("dd.MM.yyyy"));
            }

            // Соглашение. Если conversionCount1 == 0, то считаем его равным 1, то же и с conversionCount2
            if (course1 == 0)
            {
                course1 = GetDefaultCourceRub(session, valuta1.Code);
            }
            if (course2 == 0)
            {
                course2 = GetDefaultCourceRub(session, valuta2.Code);
            }

            // Курс valuta1 к 1 рублю
            //Decimal normCource1 = Math.Round(course1 / conversionCount1, 4);
            Decimal normCource1 = course1 / conversionCount1;

            // Курс valuta2 к 1 рублю
            //Decimal normCource2 = Math.Round(course2 / conversionCount2, 4);
            Decimal normCource2 = course2 / conversionCount2;

            if (normCource2 == 0)
            {
                throw new Exception("Не задан курс валюты " + valuta1.Code + ", на дату " + courseDate.ToString("yyyy.MM.dd"));
            }
            //crossCource = Math.Round(normCource1 / normCource2, 4);
            crossCource = normCource1 / normCource2;

            return(crossCource);
        }