public void FillValutaCourceCollection(DateTime date)
        {
            if (date == default(DateTime))
            {
                return;
            }
            Dictionary <csValuta, csCNMValutaCourse> curs = new Dictionary <csValuta, csCNMValutaCourse>();
            XPQuery <csCNMValutaCourse> valutaCourses     = new XPQuery <csCNMValutaCourse>(Session, true);
            var queryValutaCourses = from valutaCourse in valutaCourses
                                     where valutaCourse.CourseDate == date
                                     select valutaCourse;

            foreach (var valutaCourse in queryValutaCourses)
            {
                curs[valutaCourse.Valuta] = valutaCourse;
            }

            // Дополнение коллекции теми валютами, которые в ней отсутствуют, а в справочнике валют имеются.
            XPQuery <csValuta> currencies = new XPQuery <csValuta>(Session, true);
            var queryCurrencies           = from currency in currencies
                                            select currency;

            foreach (var currency in queryCurrencies)
            {
                if (!curs.ContainsKey(currency))
                {
                    csCNMValutaCourse newRow = new csCNMValutaCourse(Session);
                    newRow.Valuta     = currency;
                    newRow.CourseDate = date;
                    newRow.Course     = 0;
                }
            }
        }
Beispiel #2
0
        public void FillValutaCourceCollection(DateTime courceDate)
        {
            if (courceDate == DateTime.MinValue)
            {
                return;
            }

            XPQuery <csCNMValutaCourse> valutaCourses = new XPQuery <csCNMValutaCourse>(Session, true);
            var queryValutaCourses = from valutaCourse in valutaCourses
                                     where valutaCourse.CourseDate == courceDate
                                     select valutaCourse;

            foreach (var valutaCourse in queryValutaCourses)
            {
                if (!_CourseDayTable.Contains <csCNMValutaCourse>(valutaCourse))
                {
                    _CourseDayTable.Add(valutaCourse);
                }
            }

            // Дополнение коллекции теми валютами, которые в ней отсутствуют, а в справочнике валют имеются.
            XPQuery <csValuta> currencies = new XPQuery <csValuta>(Session, true);
            var queryCurrencies           = from currency in currencies
                                            select currency;

            foreach (var currency in queryCurrencies)
            {
                bool isFound = false;
                foreach (csCNMValutaCourse vCourse in _CourseDayTable)
                {
                    if (vCourse.Valuta == currency)
                    {
                        isFound = true;
                        break;
                    }
                }
                if (!isFound)
                {
                    csCNMValutaCourse newRow = new csCNMValutaCourse(Session);
                    newRow.Valuta     = currency;
                    newRow.CourseDate = CourseDate.Date;
                    newRow.Course     = 0;

                    _CourseDayTable.Add(newRow);
                }
            }
        }
Beispiel #3
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);
        }