Web-сервисы: Сервис поиска — различия между версиями

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
(Описание класса SearchParams)
 
(не показано 36 промежуточных версий 7 участников)
Строка 1: Строка 1:
 
==Введение==
 
==Введение==
 
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений.
 
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений.
 +
 +
===Ссылка на тестовый сервис===
 +
С работой тестового [http://demo.megatec.ru/DS_Search/Search.asmx сервиса поиска] вы можете ознакомиться на нашем демо-сервере.
 +
 
==Установка==
 
==Установка==
Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/MasterWeb и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip.
+
Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/  и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip.
 
В управлении IIS необходимо создать виртуальный каталог для папки WebServices.
 
В управлении IIS необходимо создать виртуальный каталог для папки WebServices.
 
===Создание виртуального каталога===
 
===Создание виртуального каталога===
Строка 21: Строка 25:
 
<BR>
 
<BR>
 
[[Файл:803.PNG]]<BR>
 
[[Файл:803.PNG]]<BR>
[[Category:Мастер-Web_Дополнительные_модули]]
 
 
===Подключение к базе данных ПК «Мастер-Тур»===
 
===Подключение к базе данных ПК «Мастер-Тур»===
 
В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести).
 
В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести).
 
Строка подключения к базе данных ПК «Мастер-Тур»:
 
Строка подключения к базе данных ПК «Мастер-Тур»:
*1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
+
*1. <add key = "connectionString" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-тур'';Initial Catalog=''название базы данных ПК Мастер-тур'';User ID=''логин пользователя ПК Мастер-тур'';Password=''пароль пользователя ПК Мастер-тур''"/>
*2. <add key = "connectionStringShort" value = "Data Source= ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog= название базы данных ПК Мастер-Тур;"/>  
+
*2. <add key = "connectionStringShort" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-Тур'';Initial Catalog=''название базы данных ПК Мастер-Тур''"/>
 +
<br>При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка '''searchConnectionString''' веб-сервисом не поддерживается.
 +
 
 
==Настройка==
 
==Настройка==
После установки «Поисковый сервис» доступен по адресу http://ip- адрес сервера Мастер-Веб/WebServices/Search.asmx.
+
После установки «Поисковый сервис» доступен по адресу <code><nowiki>http://ip-адрес сервера Мастер-Веб/WebServices/Search.asmx</nowiki></code>.
 +
 
 +
===Настройки web.config «Поискового сервиса»===
 +
Дополнительные настройки, задаваемые в секции <code><appSettings></code> файла web.config, находящемся в папке WebServices, позволяют задать дополнительные условия для отображения и проверки данных по турам от удаленных источников.
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse"
 +
 
 +
|- style="background-color:#F2F2F2"
 +
 
 +
! width="2%" | №
 +
! width="28%" | Описание
 +
! width="35%" | Значение
 +
! width="35%" | Настройка
 +
 
 +
|- style="vertical-align:text-top"
 +
| 1
 +
| Отображение наличия мест в экранах, '''если релиз-период = 0'''
 +
|
 +
*'''true''' – отображается “запрос”, даже если в квоте еще есть свободные места;
 +
*'''false''' или '''отсутствие настройки''' – отображается статус в соответствии с обычными правилами
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<add key="setRequestIfReleaseIsZero" value="true" />
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 2
 +
| Проверка агентской квоты
 +
|
 +
*'''true''' или '''отсутствие настройки''' – квоты разделяются на агентские/общие;
 +
*'''false''' – агентские квоты игнорируются, и проверяется только общая квота
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<add key="checkAgentQuotesEnabled" value="true" />
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 3
 +
| Проверка общей квоты, если закончились места в агентской
 +
|
 +
*'''true''' или '''отсутствие настройки''' – если агентская квота закончилась, то проверяется общая квота;
 +
*'''false''' – если агентская квота закончилась, общая не проверяется
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<add key="checkAgentAndCommonQuote" value="true" />
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 4
 +
| Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность
 +
|
 +
*'''true''' или '''отсутствие настройки''' – проверять квоты без продолжительности после того, как закончатся квоты на продолжительность;
 +
*'''false''' – не проверять квоты без продолжительности
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<add key="checkNoLongQuota" value="true" />
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 5
 +
| Наличие мест, отображаемое при наступлении релиз-периода
 +
|
 +
*'''request''' – запрос;
 +
*'''no''' – нет
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<add key="expiredReleaseQuoteResult" value="request" />
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
|}
 +
 
 
===Настройки web.config приложения ПК Мастер-Web===
 
===Настройки web.config приложения ПК Мастер-Web===
Дополнительные настройки, задаваемые в файле web.config, находящемся в папке MasterWeb позволяют задать дополнительные условия для отображения и проверки данных.
+
====Добавление секций====
 +
*1. В секции <ConfigSections> необходимо добавить подсекцию:
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="100%"><TR><TD>
 +
<syntaxhighlight lang="xml">
 +
<sectionGroup name="Megatec.Web.Services">
 +
<section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/>
 +
</sectionGroup>
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
 
 +
*2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию:
 +
<span style="color:#808080">В данной секции необходимо указать адрес поискового веб-сервиса.</span>
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="100%"><TR><TD>
 +
<syntaxhighlight lang="xml">
 +
<Megatec.Web.Services>
 +
<servicesAccessibility Enabled="true">
 +
<Services>
 +
<add name="DoSearch" enabled="true" url="http://somesite/Webservices/Search.asmx"/>
 +
</Services>
 +
</servicesAccessibility>
 +
</Megatec.Web.Services>
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
 
 +
==Подготовка данных==
 +
===Описание класса SearchFilter===
 +
 
 +
[[Файл: mb_030.png|left|Предупреждение]] <BR>
 +
Параметр '''PageSize''' является ''обязательным'' и его значение должно быть менее 1000.
 +
<BR><BR><BR><BR><BR>
 +
Возможные значения '''HotelQuotaMask''':
 +
*'''None'''    - Ничего не выбрано
 +
*'''Yes'''      - Есть гарантированные места
 +
*'''Request'''  - Места под запрос
 +
*'''NoFlight''' - Гарантированные места + места под запрос
 +
*'''All'''      - Гарантированные места + места под запрос + мест нет
 +
<br>
 +
Возможные значения '''AviaQuotaMask''':
 +
*'''None'''    - Ничего не выбрано
 +
*'''Yes'''      - Есть гарантированные места
 +
*'''Request'''  - Места под запрос
 +
*'''NoFlight''' - Гарантированные места + места под запрос
 +
*'''All'''      - Гарантированные места + места под запрос + мест нет
 +
<br>
 +
<nowiki>/// <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 AirlineCodes
 +
        {
 +
            get
 +
            {
 +
                return this._airlineCodes;
 +
            }
 +
        }
 +
        /// <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;
 +
            }
 +
        }
 +
    }
 +
}</nowiki>
 +
 
 +
===Описание класса SearchParams===
 +
<nowiki>/// <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>
 +
        /// Тип отбора
 +
        /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "PagingType".
 +
        /// </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;
 +
 
 +
    }</nowiki>
 +
 
 +
===Описание класса SearchResult===
 +
<nowiki>[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
 +
    }</nowiki>
 +
===Описание класса SearchResultItem===
 +
<nowiki>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
 +
    }</nowiki>
 +
==Работа в системе==
 +
===Использование сервиса подборов тура===
 +
 
 +
Для использования сервиса подборов тура необходимо вызвать метод DoSearch у сервиса Search.asmx со следующими параметрами:
 +
 
 +
*SearchFilter filter – объект класса, описывающего критерии подбора тура
 +
*int pageNumber – порядковый номер запрашиваемой страницы (нумерация начинается с 0)
 +
*SearchParams searchParams – объект класса, описывающего параметры подбора тура
 +
 
 +
Сервис возвращает объект класса SearchResult, содержащий коллекцию объектов класса SearchResultItem.
 +
 
 +
===Примеры запросов к сервису===
 +
 
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse"
 +
 
 +
|- style="background-color:#F2F2F2"
 +
|- style="vertical-align:text-top"
 +
 
 +
| <syntaxhighlight lang="xml">
 +
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 +
    <soap:Body>
 +
        <DoSearch xmlns="http://megatec.ru/">
 +
            <filter CountryKey="90" ExcludeNoPlaces="true" DepartFromKey="1" IsAllHotels="true" IsAllTourType="false"
 +
                IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" IsNullPriceMinimum="true" IsAllPansion="false">
 +
                <ExcludeTourType>false</ExcludeTourType>
 +
                <KindOfToursMask>All</KindOfToursMask>
 +
                <TurListAttributeMask>0</TurListAttributeMask>
 +
                <CruiseCountryKey>0</CruiseCountryKey>
 +
                <HotelPartnerKey>0</HotelPartnerKey>
 +
                <CruisePortKey>0</CruisePortKey>
 +
                <TurDateRange DateFrom="2016-09-12" DateTo="2016-09-20" />             
 +
                <PansionKeys>1</PansionKeys>
 +
            </filter>
 +
            <pageNumber>0</pageNumber>
 +
            <searchParams Sort="PT_Price">
 +
                <CalculateVisaDeadline>false</CalculateVisaDeadline>
 +
                <NotDefaultSort>false</NotDefaultSort>
 +
                <IsShowCOName>false</IsShowCOName>
 +
            </searchParams>
 +
        </DoSearch>
 +
    </soap:Body>
 +
</soap:Envelope>
 +
</syntaxhighlight>
 +
|}
 +
<br />
 +
 
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse"
 +
 
 +
|- style="background-color:#F2F2F2"
 +
|- style="vertical-align:text-top"
 +
 
 +
| <syntaxhighlight lang="xml">
 +
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 +
  <soap:Body>
 +
      <DoSearch xmlns="http://megatec.ru/">
 +
          <filter CountryKey="90" ExcludeNoPlaces="false" DepartFromKey="1" IsAllHotels="true"
 +
          IsAllTourType="false"  IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15"
 +
          IsNullPriceMinimum="true" IsAllPansion="false">
 +
              <DurationRange DurationFrom="0" DurationTo="0" />
 +
              <PansionKeys>
 +
                  <anyType xsi:type="xsd:int">1</anyType>
 +
                  <anyType xsi:type="xsd:int">2</anyType>
 +
              </PansionKeys>
 +
              <HotelStars>
 +
                  <anyType xsi:type="xsd:string">1*</anyType>
 +
                  <anyType xsi:type="xsd:string">2*</anyType>
 +
              </HotelStars>
 +
              <HotelKeys>
 +
                  <anyType xsi:type="xsd:int">1</anyType>
 +
                  <anyType xsi:type="xsd:int">2</anyType>
 +
              </HotelKeys>
 +
              <CityKeys>
 +
                  <anyType xsi:type="xsd:int">2</anyType>
 +
                  <anyType xsi:type="xsd:int">3</anyType>
 +
              </CityKeys>
 +
              <ResortKeys>
 +
                  <anyType xsi:type="xsd:int">4</anyType>
 +
                  <anyType xsi:type="xsd:int">5</anyType>
 +
              </ResortKeys>
 +
              <ExcludeTourType>false</ExcludeTourType>
 +
              <KindOfToursMask>All</KindOfToursMask>
 +
              <TurListAttributeMask>0</TurListAttributeMask>
 +
              <CruiseCountryKey>0</CruiseCountryKey>
 +
              <HotelPartnerKey>0</HotelPartnerKey>
 +
              <CruisePortKey>0</CruisePortKey>
 +
              <TurDateRange DateFrom="2017-05-12" DateTo="2017-05-12" />             
 +
              <PansionKeys>1</PansionKeys>
 +
          </filter>
 +
          <pageNumber>0</pageNumber>
 +
          <searchParams Sort="PT_Price, pt_hdstars desc, pt_tourdate" CheckCQ="false" CheckNLQ="false">
 +
              <CalculateVisaDeadline>false</CalculateVisaDeadline>
 +
              <NotDefaultSort>false</NotDefaultSort>
 +
              <IsShowCOName>false</IsShowCOName>
 +
          </searchParams>
 +
      </DoSearch>
 +
  </soap:Body>
 +
</soap:Envelope>
 +
</syntaxhighlight>
 +
|}
 +
<br />
 +
 
 +
[[Category:Web-сервисы]]

Текущая версия на 09:36, 14 июня 2017

Введение

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

Ссылка на тестовый сервис

С работой тестового сервиса поиска вы можете ознакомиться на нашем демо-сервере.

Установка

Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ и выложить туда распакованные файлы из архива 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=название базы данных ПК Мастер-Тур"/>


При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка searchConnectionString веб-сервисом не поддерживается.

Настройка

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

Настройки web.config «Поискового сервиса»

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

Описание Значение Настройка
1 Отображение наличия мест в экранах, если релиз-период = 0
  • true – отображается “запрос”, даже если в квоте еще есть свободные места;
  • false или отсутствие настройки – отображается статус в соответствии с обычными правилами
<add key="setRequestIfReleaseIsZero" value="true" />
2 Проверка агентской квоты
  • true или отсутствие настройки – квоты разделяются на агентские/общие;
  • false – агентские квоты игнорируются, и проверяется только общая квота
<add key="checkAgentQuotesEnabled" value="true" />
3 Проверка общей квоты, если закончились места в агентской
  • true или отсутствие настройки – если агентская квота закончилась, то проверяется общая квота;
  • false – если агентская квота закончилась, общая не проверяется
<add key="checkAgentAndCommonQuote" value="true" />
4 Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность
  • true или отсутствие настройки – проверять квоты без продолжительности после того, как закончатся квоты на продолжительность;
  • false – не проверять квоты без продолжительности
<add key="checkNoLongQuota" value="true" />
5 Наличие мест, отображаемое при наступлении релиз-периода
  • request – запрос;
  • no – нет
<add key="expiredReleaseQuoteResult" value="request" />

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

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

  • 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" url="http://somesite/Webservices/Search.asmx"/>
 </Services>
 </servicesAccessibility>
 </Megatec.Web.Services>

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

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

Предупреждение


Параметр PageSize является обязательным и его значение должно быть менее 1000.




Возможные значения HotelQuotaMask:

  • None - Ничего не выбрано
  • Yes - Есть гарантированные места
  • Request - Места под запрос
  • NoFlight - Гарантированные места + места под запрос
  • All - Гарантированные места + места под запрос + мест нет


Возможные значения AviaQuotaMask:

  • None - Ничего не выбрано
  • Yes - Есть гарантированные места
  • Request - Места под запрос
  • NoFlight - Гарантированные места + места под запрос
  • All - Гарантированные места + места под запрос + мест нет


/// <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 AirlineCodes
        {
            get
            {
                return this._airlineCodes;
            }
        }
        /// <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>
        /// Тип отбора
        /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "PagingType".
        /// </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;

    }

Описание класса 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
    }

Работа в системе

Использование сервиса подборов тура

Для использования сервиса подборов тура необходимо вызвать метод DoSearch у сервиса Search.asmx со следующими параметрами:

  • SearchFilter filter – объект класса, описывающего критерии подбора тура
  • int pageNumber – порядковый номер запрашиваемой страницы (нумерация начинается с 0)
  • SearchParams searchParams – объект класса, описывающего параметры подбора тура

Сервис возвращает объект класса SearchResult, содержащий коллекцию объектов класса SearchResultItem.

Примеры запросов к сервису

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <DoSearch xmlns="http://megatec.ru/">
            <filter CountryKey="90" ExcludeNoPlaces="true" DepartFromKey="1" IsAllHotels="true" IsAllTourType="false"
                IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" IsNullPriceMinimum="true" IsAllPansion="false">
                <ExcludeTourType>false</ExcludeTourType>
                <KindOfToursMask>All</KindOfToursMask>
                <TurListAttributeMask>0</TurListAttributeMask>
                <CruiseCountryKey>0</CruiseCountryKey>
                <HotelPartnerKey>0</HotelPartnerKey>
                <CruisePortKey>0</CruisePortKey>
                <TurDateRange DateFrom="2016-09-12" DateTo="2016-09-20" />               
                <PansionKeys>1</PansionKeys> 
            </filter>
            <pageNumber>0</pageNumber>
            <searchParams Sort="PT_Price">
                <CalculateVisaDeadline>false</CalculateVisaDeadline>
                <NotDefaultSort>false</NotDefaultSort>
                <IsShowCOName>false</IsShowCOName>
            </searchParams>
        </DoSearch>
    </soap:Body>
 </soap:Envelope>


 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
       <DoSearch xmlns="http://megatec.ru/">
           <filter CountryKey="90" ExcludeNoPlaces="false" DepartFromKey="1" IsAllHotels="true"
           IsAllTourType="false"  IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15"
           IsNullPriceMinimum="true" IsAllPansion="false">
               <DurationRange DurationFrom="0" DurationTo="0" />
               <PansionKeys>
                   <anyType xsi:type="xsd:int">1</anyType>
                   <anyType xsi:type="xsd:int">2</anyType>
               </PansionKeys>
               <HotelStars>
                   <anyType xsi:type="xsd:string">1*</anyType>
                   <anyType xsi:type="xsd:string">2*</anyType>
               </HotelStars>
               <HotelKeys>
                   <anyType xsi:type="xsd:int">1</anyType>
                   <anyType xsi:type="xsd:int">2</anyType>
               </HotelKeys>
               <CityKeys>
                   <anyType xsi:type="xsd:int">2</anyType>
                   <anyType xsi:type="xsd:int">3</anyType>
               </CityKeys>
               <ResortKeys>
                   <anyType xsi:type="xsd:int">4</anyType>
                   <anyType xsi:type="xsd:int">5</anyType>
               </ResortKeys>
               <ExcludeTourType>false</ExcludeTourType>
               <KindOfToursMask>All</KindOfToursMask>
               <TurListAttributeMask>0</TurListAttributeMask>
               <CruiseCountryKey>0</CruiseCountryKey>
               <HotelPartnerKey>0</HotelPartnerKey>
               <CruisePortKey>0</CruisePortKey>
               <TurDateRange DateFrom="2017-05-12" DateTo="2017-05-12" />               
               <PansionKeys>1</PansionKeys> 
           </filter>
           <pageNumber>0</pageNumber>
           <searchParams Sort="PT_Price, pt_hdstars desc, pt_tourdate" CheckCQ="false" CheckNLQ="false">
               <CalculateVisaDeadline>false</CalculateVisaDeadline>
               <NotDefaultSort>false</NotDefaultSort>
               <IsShowCOName>false</IsShowCOName>
           </searchParams>
       </DoSearch>
   </soap:Body>
 </soap:Envelope>