Web-сервисы: Сервис поиска — различия между версиями
| [досмотренная версия] | [досмотренная версия] |
(→Настройки web.config приложения ПК Мастер-Web) |
Porunova (обсуждение | вклад) (→Описание класса SearchParams) |
||
| (не показаны 34 промежуточные версии 7 участников) | |||
| Строка 1: | Строка 1: | ||
==Введение== | ==Введение== | ||
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений. | Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений. | ||
| + | |||
| + | ===Ссылка на тестовый сервис=== | ||
| + | С работой тестового [http://demo.megatec.ru/DS_Search/Search.asmx сервиса поиска] вы можете ознакомиться на нашем демо-сервере. | ||
| + | |||
==Установка== | ==Установка== | ||
| − | Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ | + | Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip. |
В управлении IIS необходимо создать виртуальный каталог для папки WebServices. | В управлении IIS необходимо создать виртуальный каталог для папки WebServices. | ||
===Создание виртуального каталога=== | ===Создание виртуального каталога=== | ||
| Строка 24: | Строка 28: | ||
В файле 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=== | ||
| − | + | ====Добавление секций==== | |
| − | + | *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> | |
| − | + | /// Поисковый фильтр | |
| − | [[Category: | + | /// </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)
- 2. В открывшемся окне выбрать Администрирование (Administrative Tools).
- 3. Запустить Internet Information Services (IIS) Manager.
- 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties).
- 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК».
Подключение к базе данных ПК «Мастер-Тур»
В файле 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 |
|
<add key="setRequestIfReleaseIsZero" value="true" />
|
| 2 | Проверка агентской квоты |
|
<add key="checkAgentQuotesEnabled" value="true" />
|
| 3 | Проверка общей квоты, если закончились места в агентской |
|
<add key="checkAgentAndCommonQuote" value="true" />
|
| 4 | Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность |
|
<add key="checkNoLongQuota" value="true" />
|
| 5 | Наличие мест, отображаемое при наступлении релиз-периода |
|
<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>
|
