Web-сервисы: Сервис поиска

Материал из Megatec
Перейти к: навигация, поиск

Введение

Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений.

Установка

Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/MasterWeb и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки WebServices.

Создание виртуального каталога

По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:

  • 1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel)


799.PNG

  • 2. В открывшемся окне выбрать Администрирование (Administrative Tools).


800.PNG

  • 3. Запустить Internet Information Services (IIS) Manager.


801.PNG

  • 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties).


802.PNG

  • 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК».


803.PNG

Подключение к базе данных ПК «Мастер-Тур»

В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). Строка подключения к базе данных ПК «Мастер-Тур»:

  • 1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
  • 2. <add key = "connectionStringShort" value = "Data Source= ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog= название базы данных ПК Мастер-Тур;"/>

Настройка

После установки «Поисковый сервис» доступен по адресу http: //ip- адрес сервера Мастер-Веб/WebServices/Search.asmx.

Настройки web.config приложения ПК Мастер-Web

Дополнительные настройки, задаваемые в файле web.config, находящемся в папке MasterWeb позволяют задать дополнительные условия для отображения и проверки данных.

Описание

Значение

Настройка

1

Путь к приложению WebServices

Ссылка на приложение WebServices

<add key="webServicesSource" value="http: //localhost/MasterWeb/WebService"/>

Добавление секций

  • 1. В секции <ConfigSections> необходимо добавить подсекцию:
<sectionGroup name="Megatec.Web.Services">
<section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/>
</sectionGroup>
  • 2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию:
<Megatec.Web.Services>
<servicesAccessibility Enabled="true">
<Services>
<add name="DoSearch" enabled="true"/>
</Services>
</servicesAccessibility>
</Megatec.Web.Services>

Подготовка данных

Описание класса SearchFilter

/// <summary>
    /// Поисковый фильтр
    /// </summary>
    public class SearchFilter
    {
        public enum SearchSource : short
        {
            PriceTables = 0,
            BindingTables = 1,
        }

        public enum KindOfTours : int
        {
            All = 0,
            PacketTours = 1,
            LandTours = 2
        }

        /// <summary>
        /// Вид тура 
        /// </summary>
        public KindOfTours KindOfToursMask
        {
            get
            {
                return this.kindOfTours;
            }
            set
            {
                this.kindOfTours = value;
            }
        }

        /// <summary>
        /// Маска аттрибутов тура
        /// </summary>
        public int TurListAttributeMask
        {
            get
            {
                return this.turlistAttributeMask;
            }
            set
            {
                this.turlistAttributeMask = value;
            }
        }

        /// <summary>
        /// Партнер по отелю
        /// </summary>
        public int HotelPartnerKey
        {
            get
            {
                return this.hotelPartnerKey;
            }
            set
            {
                this.hotelPartnerKey = value;
            }
        }

        [XmlAttribute]
        public int MaxChildAge
        {
            get
            {
                return this.maxChildAge;
            }
            set
            {
                this.maxChildAge = value;
            }
        }

        /// <summary>
        /// Интервал дат
        /// </summary>
        public DateInterval TurDateRange
        {
            get
            {
                return this._turDateRange;
            }
            set
            {
                this._turDateRange = value;
            }
        }

        /// <summary>
        /// Интервал продолжительностей
        /// </summary>
        public DurationInterval DurationRange
        {
            get
            {
                return this._durationRange;
            }
            set
            {
                this._durationRange = value;
            }
        }

        /// <summary>
        /// Ключ страны
        /// </summary>
        [XmlAttribute]
        public int CountryKey
        {
            get
            {
                if (this._countryKeys.Count == 0)
                    return -1;

                return (int)this._countryKeys[0];
            }
            set
            {
                this._countryKeys.Clear();
                if (value > 0)
                    this._countryKeys.Add(value);
            }
        }

        /// <summary>
        /// Массив ключей стран
        /// </summary>
        public ArrayList CountryKeys
        {
            get
            {
                return this._countryKeys;
            }
        }


        /// <summary>
        /// Поставлен ли флажок все авиакомпании
        /// </summary>
        [XmlAttribute]
        public bool IsAllAirlines
        {
            get
            {
                return this._isAllAirlines;
            }
            set
            {
                this._isAllAirlines = value;
            }
        }

        /// <summary>
        /// Поставлен ли флажок все страны
        /// </summary>
        [XmlAttribute]
        public bool IsAllCountries
        {
            get
            {
                return this._isAllCountries;
            }
            set
            {
                this._isAllCountries = value;
            }
        }

        /// <summary>
        /// Поиск на все продолжительности
        /// </summary>
        [XmlAttribute]
        public bool IsAllDurations
        {
            get
            {
                return this._isAllDurations;
            }
            set
            {
                this._isAllDurations = value;
            }
        }

        /// <summary>
        /// Массив продолжительностей
        /// </summary>
        public ArrayList Durations
        {
            get
            {
                return durations;
            }
        }

        [XmlAttribute]
        public bool ExcludeNoPlaces
        {
            get
            {
                return excludeNoPlaces;
            }
            set
            {
                excludeNoPlaces = value;
            }
        }

        /// <summary>
        /// Массив продолжительностей в днях
        /// </summary>
        public ArrayList Days
        {
            get
            {
                return days;
            }
        }

        /// <summary>
        /// Массив продолжительностей в ночах
        /// </summary>
        public ArrayList Nights
        {
            get
            {
                return nights;
            }
        }

        /// <summary>
        /// Проверять ли квоты
        /// </summary>
        [XmlAttribute]
        public bool CheckQuotes
        {
            get
            {
                return checkQuotes;
            }
            set
            {
                checkQuotes = value;
            }
        }

        /// <summary>
        /// Ключ города отправления
        /// </summary>
        [XmlAttribute]
        public int DepartFromKey
        {
            get
            {
                if (this._departFromKeys.Count == 0)
                    return -1;

                return (int)this._departFromKeys[0];
            }
            set
            {
                this._departFromKeys.Clear();
                if (value >= 0)
                    this._departFromKeys.Add(value);
            }
        }

        /// <summary>
        /// Ключ города прибытия
        /// </summary>
        [XmlAttribute]
        public int DepartToKey
        {
            get
            {
                if (this._departToKeys.Count == 0)
                    return -1;

                return (int)this._departToKeys[0];
            }
            set
            {
                this._departToKeys.Clear();
                if (value > 0)
                    this._departToKeys.Add(value);
            }
        }

        /// <summary>
        /// Массив ключей городов вылета
        /// </summary>
        public ArrayList DepartFromKeys
        {
            get
            {
                return this._departFromKeys;
            }
        }


        /// <summary>
        /// Поставлен ли флажок все города вылетов
        /// </summary>
        [XmlAttribute]
        public bool IsAllDepartsFrom
        {
            get
            {
                return this._isAllDepartsFrom;
            }
            set
            {
                this._isAllDepartsFrom = value;
            }
        }

        /// <summary>
        /// Массив ключей городов прибытия
        /// </summary>
        public ArrayList DepartToKeys
        {
            get
            {
                return this._departToKeys;
            }
        }


        /// <summary>
        /// Поставлен ли флажок все города вылетов
        /// </summary>
        [XmlAttribute]
        public bool IsAllDepartsTo
        {
            get
            {
                return this._isAllDepartsTo;
            }
            set
            {
                this._isAllDepartsTo = value;
            }
        }


        /// <summary>
        /// Массив ключей аэропортов вылета
        /// </summary>
        public ArrayList AirportFromKeys
        {
            get
            {
                return this._airportFromKeys;
            }
        }


        /// <summary>
        /// Поставлен ли флажок все города вылетов
        /// </summary>
        [XmlAttribute]
        public bool IsAllAirportsFrom
        {
            get
            {
                return this._isAllAirportsFrom;
            }
            set
            {
                this._isAllAirportsFrom = value;
            }
        }

        /// <summary>
        /// Массив ключей аэропортов прибытия
        /// </summary>
        public ArrayList AirportToKeys
        {
            get
            {
                return this._airportToKeys;
            }
        }


        /// <summary>
        /// Поставлен ли флажок все города вылетов
        /// </summary>
        [XmlAttribute]
        public bool IsAllAirportsTo
        {
            get
            {
                return this._isAllAirportsTo;
            }
            set
            {
                this._isAllAirportsTo = value;
            }
        }

        /// <summary>
        /// Ключ отеля
        /// </summary>
        [XmlAttribute]
        public int HotelKey
        {
            get
            {
                if (this._hotelKeys.Count == 0)
                    return -1;

                return (int)this._hotelKeys[0];
            }
            set
            {
                this._hotelKeys.Clear();
                if (value > 0)
                    this._hotelKeys.Add(value);
            }
        }
        /// <summary>
        /// Ключ тура
        /// </summary>
        [XmlAttribute]
        public int TourKey
        {
            get
            {
                return this._tourKey;
            }
            set
            {
                this._tourKey = value;
            }
        }
        /// <summary>
        /// Ограничение цены
        /// </summary>
        [XmlAttribute]
        public double PriceLimit
        {
            get
            {
                return this._priceLimit;
            }
            set
            {
                this._priceLimit = value;
            }
        }
        /// <summary>
        /// Список ключей курортов
        /// </summary>  
        public ArrayList ResortKeys
        {
            get
            {
                return this._resortKeys;
            }
        }

        /// <summary>
        /// Поставлен ли флажок все курорты
        /// </summary>
        [XmlAttribute]
        public bool IsAllResort
        {
            get
            {
                return this._isAllResort;
            }
            set
            {
                this._isAllResort = value;
            }
        }
        /// <summary>
        /// Список ключей городов
        /// </summary>
        public ArrayList CityKeys
        {
            get
            {
                return this._cityKeys;
            }
        }

        /// <summary>
        /// Установлен ли в фильтре флаг все города
        /// </summary>
        [XmlAttribute]
        public bool IsAllCity
        {
            get
            {
                return this._isAllCity;
            }
            set
            {
                this._isAllCity = value;
            }
        }

        /// <summary>
        /// Список ключей городов
        /// </summary>
        public ArrayList HotelKeys
        {
            get
            {
                return this._hotelKeys;
            }
        }

        /// <summary>
        /// Список ключей сервисов в отеле
        /// </summary>
        public ArrayList HotelOptionsKeys
        {
            get
            {
                return this._hotelOptionsKeys;
            }
        }

        /// <summary>
        /// Установлен ли в фильтре флаг все отели
        /// </summary>
        [XmlAttribute]
        public bool IsAllHotels
        {
            get
            {
                return this._isAllHotels;
            }
            set
            {
                this._isAllHotels = value;
            }
        }
        /// <summary>
        /// Список ключей типов туров
        /// </summary>
        public ArrayList TourTypeKeys
        {
            get
            {
                return this._tourTypeKeys;
            }
        }

        /// <summary>
        /// Установлен ли флаг все типы тура
        /// </summary>
        [XmlAttribute]
        public bool IsAllTourType
        {
            get
            {
                return this._isAllTourType;
            }
            set
            {
                this._isAllTourType = value;
            }
        }
        /// <summary>
        /// Список ключей типов туров
        /// </summary>
        public ArrayList TourTypeDetailKeys
        {
            get
            {
                return this._tourTypeDetailKeys;
            }
        }

        /// <summary>
        /// Установлен ли флаг все типы тура
        /// </summary>
        [XmlAttribute]
        public bool IsAllTourTypeDetails
        {
            get
            {
                return this._isAllTourTypeDetails;
            }
            set
            {
                this._isAllTourTypeDetails = value;
            }
        }
        /// <summary>
        /// Список звездностей отелей
        /// </summary>
        public ArrayList HotelStars
        {
            get
            {
                return this._hotelStars;
            }
        }

        /// <summary>
        /// Поиск по всем звездностям
        /// </summary>
        [XmlAttribute]
        public bool IsAllHotelStars
        {
            get
            {
                return this._isAllHotelStars;
            }
            set
            {
                this._isAllHotelStars = value;
            }
        }
        /// <summary>
        /// Список ключей питаний
        /// </summary>
        public ArrayList PansionKeys
        {
            get
            {
                return this._pansionKeys;
            }
        }

        /// <summary>
        /// Поиск по всем питаниях
        /// </summary>
        [XmlAttribute]
        public bool IsAllPansion
        {
            get
            {
                return this._isAllPansion;
            }
            set
            {
                this._isAllPansion = value;
            }
        }
        /// <summary>
        /// Список ключей авиакомпаний
        /// </summary>
        public ArrayList AirlineKeys
        {
            get
            {
                return this._airlineKeys;
            }
        }
        /// <summary>
        /// Список ключей типов номеров
        /// </summary>
        public ArrayList RoomKeys
        {
            get
            {
                return this.roomKeys;
            }
        }
        /// <summary>
        /// Список ключей категорий проживания
        /// </summary>
        public ArrayList RoomCategoryKeys
        {
            get
            {
                return this.roomCategoryKeys;
            }
        }
        /// <summary>
        /// Список ключей типов размещения
        /// </summary>
        public ArrayList AccomodationKeys
        {
            get
            {
                return this.accomodationKeys;
            }
        }
        /// <summary>
        /// Список ключей дополнительных услуг в отеле
        /// </summary>
        public ArrayList AddHotelServiceKeys
        {
            get
            {
                return this._addHotelServiceKeys;
            }
        }

        /// <summary>
        /// Поиск по все услугам в отеле
        /// </summary>
        [XmlAttribute]
        public bool IsAllAddHotelService
        {
            get
            {
                return this._isAllAddHotelService;
            }
            set
            {
                this._isAllAddHotelService = value;
            }
        }

        /// <summary>
        /// Искать только основные типы размещения
        /// </summary>
        [XmlAttribute]
        public bool MainOnly
        {
            get
            {
                return mainOnly;
            }
            set
            {
                mainOnly = value;
            }
        }

        /// <summary>
        /// Искать только туры для групп агентов, в которые входит данное агентство
        /// </summary>
        [XmlAttribute]
        public bool GroupOnly
        {
            get
            {
                return groupOnly;
            }
            set
            {
                groupOnly = value;
            }
        }

        /// <summary>
        /// Количество взрослых
        /// </summary>
        [XmlAttribute]
        public int Adults
        {
            get
            {
                return adults;
            }
            set
            {
                adults = value;
            }
        }

        /// <summary>
        /// Количество детей
        /// </summary>
        [XmlAttribute]
        public int Childs
        {
            get
            {
                return childs;
            }
            set
            {
                childs = value;
            }
        }

        /// <summary>
        /// Возраст первого ребенка
        /// </summary>
        [XmlAttribute]
        public int FirstChildAge
        {
            get
            {
                return firstChildAge;
            }
            set
            {
                firstChildAge = value;
            }
        }

        /// <summary>
        /// Возраст второго ребенка
        /// </summary>
        [XmlAttribute]
        public int SecondChildAge
        {
            get
            {
                return secondChildAge;
            }
            set
            {
                secondChildAge = value;
            }
        }

        /// <summary>
        /// Маска квот на проживание
        /// </summary>
        [XmlAttribute]
        public QuotaResult.Status HotelQuotaMask
        {
            get
            {
                return hotelQuotaMask;
            }
            set
            {
                hotelQuotaMask = value;
            }
        }

        /// <summary>
        /// Маска квот на перелет
        /// </summary>
        [XmlAttribute]
        public QuotaResult.Status AviaQuotaMask
        {
            get
            {
                return aviaQuotaMask;
            }
            set
            {
                aviaQuotaMask = value;
            }
        }

        /// <summary>
        /// Количество строк на странице
        /// </summary>
        [XmlAttribute]
        public int PageSize
        {
            get
            {
                return this.pageSize;
            }
            set
            {
                this.pageSize = value;
            }
        }

        /// <summary>
        /// Ограничение цены снизу
        /// </summary>
        [XmlAttribute]
        public double PriceMinimum
        {
            get
            {
                return this._priceMinimum;
            }
            set
            {
                this._priceMinimum = value;
                this.isNullPriceMinimum = false;
            }
        }

        /// <summary>
        /// Ограничена ли цена снизу
        /// </summary>
        [XmlAttribute]
        public bool IsNullPriceMinimum
        {
            get
            {
                return this.isNullPriceMinimum;
            }
            set
            {
                this.isNullPriceMinimum = value;
            }
        }

        /// <summary>
        /// Дополнительный фильтр
        /// </summary>
        [XmlAttribute]
        public string AddFilter
        {
            get
            {
                return addFilter;
            }
            set
            {
                addFilter = value;
            }
        }
    }
}

Описание класса SearchParams

/// <summary>
    /// Класс, описывающий параметры подбора тура
    /// </summary>
    public class SearchParams
    {
        /// <summary>
        /// Идентификатор агенства, от имени которого производится поиск
        /// </summary>
        [XmlAttribute("Agent")]
        public int AgentKey = 0;

        /// <summary>
        /// Разделять квоты на агентские/неагентские или игнорировать агентские квоты.
        /// Настройка web.config: "checkAgentQuotesEnabled".
        /// Значение по умолчанию: true.
        /// </summary>
        [XmlAttribute("CheckAQ")]
        public bool CheckAgentQuota = true;

        /// <summary>
        /// Проверять общую квоту, если агентская закончилась.
        /// Настройка web.config: "checkAgentAndCommonQuote".
        /// Значение по умолчанию: true.
        /// </summary>
        [XmlAttribute("CheckCQ")]
        public bool CheckCommonQuota = true;

        /// <summary>
        /// При подборе перелета поиск производится в том же пакете цен, что и перелет в обсчитанном туре,
        /// иначе цены в расчет на принимается, а используется только расписание перелетов.
        /// Используется только, если FindFlight = true.
        /// Настройка web.config: "checkFlightPacket".
        /// Значение по умолчанию: true.
        /// </summary>
        [XmlAttribute("CheckFP")]
        public bool CheckFlightPacket = true;

        /// <summary>
        /// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность.
        /// Настройка web.config: "checkNoLongQuota".
        /// Значение по умолчанию: true
        /// </summary>
        [XmlAttribute("CheckNLQ")]
        public bool CheckNoLongQuota = true;

        /// <summary>
        /// Проверять квоты от всех различных партнеров.
        /// Настройка web.config: "checkAllPartnersQuota".
        /// Значение по умолчанию: false
        /// </summary>
        [XmlAttribute("CheckAPQ")]
        public bool CheckAllPartnersQuota = true;

        /// <summary>
        /// Результат возвращаемый, если у квоты истек релиз-период.
        /// Настройка web.config: "expiredReleaseQuoteResult".
        /// Значение по умолчанию: QuotaResult.Status.Request.
        /// </summary>
        [XmlAttribute("ExpRelRes")]
        public QuotaResult.Status ExpiredReleaseResult = QuotaResult.Status.Request;

        /// <summary>
        /// Подбирать авиаперелет по туру, на который есть свободные места.
        /// </summary>
        [XmlAttribute("FindFlight")]
        public bool FindFlight = true;

        /// <summary>
        /// Список классов перелета (ключи бизнес- и эконом-класса)
        /// </summary>
        [XmlAttribute("FlightGroups")]
        public string FlightGroups = String.Empty;

        /// <summary>
        /// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList
        /// Настройка web.config: "quotedDynamicPriceTour".
        /// Значение по умолчанию: true.
        /// </summary>
        [XmlAttribute("IsPT")]
        public bool IsPriceTour = true;

        /// <summary>
        /// Результат возвращаемый при наличии квоты, но отсутствии свободных мест.
        /// Настройка web.config: "noPlacesQuoteResult".
        /// Значение по умолчанию: QuotaResult.Status.No.
        /// </summary>
        [XmlAttribute("NPResult")]
        public QuotaResult.Status NoPlacesResult = QuotaResult.Status.No;

        /// <summary>
        /// Тип отбора
        /// </summary>
        [XmlAttribute("PagingType")]
        public short PagingType = Megatec.Search.PagingType.Simple;

        /// <summary>
        /// Возращать ли поле, содержащее список ключей классов услуг по туру
        /// </summary>
        [XmlAttribute("Services")]
        public bool Services = false;

        /// <summary>
        /// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест.
        /// Настройка web.config: "setRequestIfReleaseIsZero".
        /// Значение по умолчанию: false.
        /// </summary>
        [XmlAttribute("SetRequestOnRelease")]
        public bool SetRequestOnRelease = false;

        /// <summary>
        /// Параметры сортировки (выражение ORDER BY)
        /// </summary>
        [XmlAttribute("Sort")]
        public string Sort = string.Empty;

        /// <summary>
        /// Производить сортировку на сервере БД или на клиенте
        /// </summary>
        [XmlAttribute("SortInDB")]
        public bool SortInDB = true;

        /// <summary>
        /// Интерфейс, реализующий функцию межвалютной конвертации цен по туру
        /// </summary>
        [XmlIgnore]
        public Megatec.Types.IMoneyConverter MoneyConverter = null;
    }

Описание класса SearchResult

[XmlInclude(typeof(SearchResultItem))]
    public class SearchResult
    {
        /// <summary>
        /// Общее количество найденных записей
        /// </summary>
        [XmlAttribute("Total")]
        public int TotalCount

        /// <summary>
        /// Количество отобранных записей
        /// </summary>
        [XmlAttribute("Parsed")]
        public int ParsedCount

        /// <summary>
        /// Не используется
        /// </summary>
        [XmlAttribute("Step")]
        public double DynamicPriceStepValue

        /// <summary>
        /// Коллекция найденных результатов
        /// </summary>
        [XmlElement("SearchResultItem")]
        public List<SearchResultItem> Items
    }

Описание класса SearchResultItem

public class SearchResultItem: IRoomDescription
    {
        /// <summary>
        /// Количество основных мест
        /// </summary>
        [XmlAttribute]
        public int MainPlaces

        /// <summary>
        /// Количество неосновных мест
        /// </summary>
        [XmlAttribute]
        public int AddPlaces

        /// <summary>
        /// Основное или неосновное размещение
        /// </summary>
        [XmlAttribute]
        public bool IsMain

        /// <summary>
        /// Дата, до которой актуален тур
        /// </summary>
        [XmlAttribute]
        public DateTime TourValid

        /// <summary>
        /// Дата создания тура
        /// </summary>
        [XmlAttribute]
        public DateTime TourCreated

        /// <summary>
        /// Дата заезда
        /// </summary>
        [XmlAttribute]
        public DateTime TourDate

        /// <summary>
        /// Продолжительность тура в днях
        /// </summary>
        [XmlAttribute]
        public int Days

        /// <summary>
        /// Количество ночей проживания в туре
        /// </summary>
        [XmlAttribute]
        public int Nights

        /// <summary>
        /// Ключ страны
        /// </summary>
        [XmlAttribute]
        public int CountryKey

        /// <summary>
        /// Ключ города отправления
        /// </summary>
        [XmlAttribute]
        public int CityFromKey

        /// <summary>
        /// Ключ города прилета
        /// </summary>
        [XmlAttribute]
        public int CityToKey

        /// <summary>
        /// Ключ аэропорта вылета
        /// </summary>
        [XmlAttribute]
        public int AirportFromKey

        /// <summary>
        /// Ключ аэропорта прилета
        /// </summary>
        [XmlAttribute]
        public int AirportToKey

        /// <summary>
        /// Ключ расчитанного тура (TP_Tours)
        /// </summary>
        [XmlAttribute]
        public int TourKey

        /// <summary>
        /// Ключ типа тура (TipTur)
        /// </summary>
        [XmlAttribute]
        public int TourTypeKey

        /// <summary>
        /// Ключ тура из конструктора туров (turList)
        /// </summary>
        [XmlAttribute]
        public int TurListKey

        /// <summary>
        /// Ключ расчитанного варианта (TP_Lists)
        /// </summary>
        [XmlAttribute]
        public int PriceListKey

        /// <summary>
        /// Ключ цены (TP_Prices)
        /// </summary>
        [XmlAttribute]
        public int PriceKey

        /// <summary>
        /// Цена
        /// </summary>
        [XmlAttribute]
        public decimal Price

        /// <summary>
        /// Ключ главного отеля
        /// </summary>
        [XmlAttribute]
        public int HotelKey

        /// <summary>
        /// Ключ партнера для главного отеля
        /// </summary>
        [XmlAttribute]
        public int HotelPartnerKey

        /// <summary>
        /// Ключ курорта главного отеля
        /// </summary>
        [XmlAttribute]
        public int ResortKey

        /// <summary>
        /// Ключ города главного отеля
        /// </summary>
        [XmlAttribute]
        public int CityKey

        /// <summary>
        /// Звездность главного отеля
        /// </summary>
        [XmlAttribute]
        public string HotelCategory

        /// <summary>
        /// Ключ питания главного отеля
        /// </summary>
        [XmlAttribute]
        public int PansionKey

        /// <summary>
        /// Ключ номера в главном отеле
        /// </summary>
        [XmlAttribute]
        public int HotelRoomKey

        /// <summary>
        /// Ключ типа номера в главном отеле
        /// </summary>
        [XmlAttribute]
        public int RoomKey

        /// <summary>
        /// Ключ категории номера в главном отеле
        /// </summary>
        [XmlAttribute]
        public int RoomCategoryKey

        /// <summary>
        /// Ключ размещения в главном отеле
        /// </summary>
        [XmlAttribute]
        public int AccomodationKey

        /// <summary>
        /// Минимальный возраст первого ребенка
        /// </summary>
        [XmlAttribute]
        public int ChildAgeFrom

        /// <summary>
        /// Максимальный возраст первого ребенка
        /// </summary>
        [XmlAttribute]
        public int ChildAgeTo

        /// <summary>
        /// Минимальный возраст второго ребенка
        /// </summary>
        [XmlAttribute]
        public int ChildAgeFrom2

        /// <summary>
        /// Максимальный возраст второго ребенка
        /// </summary>
        [XmlAttribute]
        public int ChildAgeTo2

        /// <summary>
        /// Название отеля
        /// </summary>
        [XmlAttribute]
        public string HotelName

        /// <summary>
        /// Название тура
        /// </summary>
        [XmlAttribute]
        public string TourName

        /// <summary>
        /// Название питания
        /// </summary>
        [XmlAttribute]
        public string PansionName

        /// <summary>
        /// Код питания
        /// </summary>
        [XmlAttribute]
        public string PansionCode

        /// <summary>
        /// Название типа номера
        /// </summary>
        [XmlAttribute]
        public string RoomName

        /// <summary>
        /// Код типа номера
        /// </summary>
        [XmlAttribute]
        public string RoomCode

        /// <summary>
        /// Название категории номера
        /// </summary>
        [XmlAttribute]
        public string RoomCategoryName

        /// <summary>
        /// Код категории номера
        /// </summary>
        [XmlAttribute]
        public string RoomCategoryCode

        /// <summary>
        /// Название размещения
        /// </summary>
        [XmlAttribute]
        public string AccomodationName

        /// <summary>
        /// Код размещения
        /// </summary>
        [XmlAttribute]
        public string AccomodationCode

        /// <summary>
        /// Название курорта
        /// </summary>
        [XmlAttribute]
        public string ResortName

        /// <summary>
        /// Название города
        /// </summary>
        [XmlAttribute]
        public string CityName

        /// <summary>
        /// Порядок сортировки типа номера
        /// </summary>
        [XmlAttribute]
        public int RoomOrder

        /// <summary>
        /// Порядок сортировки категории номера
        /// </summary>
        [XmlAttribute]
        public int RoomCategoryOrder

        /// <summary>
        /// Порядок сортировки размещения
        /// </summary>
        [XmlAttribute]
        public int AccomodationOrder

        /// <summary>
        /// Валюта
        /// </summary>
        [XmlAttribute]
        public string Currency

        /// <summary>
        /// Ключи услуг, входящих в тур (через запятую)
        /// </summary>
        [XmlAttribute]
        public string Services

        /// <summary>
        /// Ключ прямого перелета (Charter)
        /// </summary>
        [XmlAttribute]
        public int CharterKey

        /// <summary>
        /// Ключ обратного перелета (Charter)
        /// </summary>
        [XmlAttribute]
        public int CharterBackKey

        /// <summary>
        /// День предоставления проживания
        /// </summary>
        [XmlAttribute]
        public int HotelDay

        /// <summary>
        /// Количество ночей проживания в отеле
        /// </summary>
        [XmlAttribute]
        public int HotelNights

        /// <summary>
        /// День прямого перелета
        /// </summary>
        [XmlAttribute]
        public int CharterDay

        /// <summary>
        /// День обратного перелета
        /// </summary>
        [XmlAttribute]
        public int CharterBackDay

        /// <summary>
        /// Пакет прямого перелета
        /// </summary>
        [XmlAttribute]
        public int CharterPacketKey

        /// <summary>
        /// Партнер прямого перелета
        /// </summary>
        [XmlAttribute]
        public int CharterPartnerKey

        /// <summary>
        /// Пакет обратного перелета
        /// </summary>
        [XmlAttribute]
        public int CharterBackPacketKey

        /// <summary>
        /// Партнер обратного перелета
        /// </summary>
        [XmlAttribute]
        public int CharterBackPartnerKey

        /// <summary>
        /// Наличие мест в отеле: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест. Пример
        /// 10:100
        /// </summary>
        [XmlAttribute]
        public string HotelQuota

        /// <summary>
        /// Наличие мест на прямом перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест, по каждому классу. Пример:
        /// 10:100|0:100|10:100
        /// </summary>
        [XmlAttribute]
        public string CharterThereQuota

        /// <summary>
        /// Наличие мест на обратном перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу
        /// </summary>
        [XmlAttribute]
        public string CharterBackQuota

        /// <summary>
        /// Номер строки
        /// </summary>
        [XmlAttribute]
        public int Id

        /// <summary>
        /// Номер строки
        /// </summary>
        [XmlAttribute]
        public int Key

        /// <summary>
        /// URL с описанием отеля
        /// </summary>
        [XmlAttribute]
        public string HotelURL
/// <summary>
        /// URL с описанием тура
        /// </summary>
        [XmlAttribute]
        public string TourURL

        /// <summary>
        /// Текстовая строка с информацией о прямом перелете (авиакомпания, рейс, время, аэропорт вылета/прилета)
        /// </summary>
        [XmlAttribute]
        public string CharterInfo

        /// <summary>
        /// Текстовая строка с информацией об обратном перелете (авиакомпания, рейс, время, аэропорт вылета/прилета)
        /// </summary>
        [XmlAttribute]
        public string CharterBackInfo

        /// <summary>
        /// Текстовая строка, содержащая ключи всех отелей в пакете услуг (через запятую)
        /// </summary>
        [XmlAttribute]
        public string AllHotelKeys

        /// <summary>
        /// Текстовая строка, содержащая ключи всех номеров в пакете услуг (через запятую)
        /// </summary>
        [XmlAttribute]
        public string AllHotelRoomKeys

        /// <summary>
        /// Текстовая строка, содержащая все продолжительности проживаний в пакете услуг (через запятую)
        /// </summary>
        [XmlAttribute]
        public string AllHotelNights

        /// <summary>
        /// Текстовая строка, содержащая все категории проживаний в пакете услуг (через запятую)
        /// </summary>
        [XmlAttribute]
        public string AllHotelStars

        /// <summary>
        /// Текстовая строка, содержащая ключи всех питаний в пакете услуг (через запятую)
        /// </summary>
        [XmlAttribute]
        public string AllPansionKeys

        /// <summary>
        /// Текущий индекс динамического изменения цены для отеля (текущая цена = базовая цена + значение шага изменения цены * текущий индекс динамического изменения цены)
        /// </summary>
        [XmlAttribute]
        public int DynamicHotelPriceStepIndex

        /// <summary>
        /// Корректировка базовой цены для отеля (пока в шагах)
        /// </summary>
        [XmlAttribute]
        public double DynamicHotelPriceCorrection
    }