internal PriceSummary CatalogExcursionMinPrice(DataRow row)
            {
                PriceSummary result;

                if (row.IsNull("minprice$forservice") || row.IsNull("minprice$price"))
                {
                    result = null;
                }
                else
                {
                    result = new PriceSummary
                    {
                        priceType = (row.ReadInt("minprice$forservice") > 0) ? PriceSummary.PriceType.perService : PriceSummary.PriceType.perPerson,
                        price     = row.ReadDecimal("minprice$price"),
                        currency  = row.ReadNullableTrimmedString("minprice$currency")
                    };
                }
                return(result);
            }
        private PriceSummary ConvertPrice(PriceSummary inp, string targetCurrency)
        {
            //ключ для кэша курсов
            string key = inp.currency + "to" + targetCurrency;

            //если курса нет в кэше, ищем в базе
            if (!_courses.ContainsKey(key))
                _courses[key] = GetCourse(inp.currency, targetCurrency);

            //если ключ найден и он реальный, конвертируем
            if (_courses[key] > 0)
            {
                inp.price *= _courses[key];
                inp.price = Math.Round(inp.price, 2);

                inp.currency = targetCurrency;
            }

            return inp;
        }