Web-сервисы: Сервис поиска
Содержание
Введение
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений.
Установка
Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/MasterWeb и выложить туда распакованные файлы из архива 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= название базы данных ПК Мастер-Тур;"/>
Настройка
После установки «Поисковый сервис» доступен по адресу http: //ip- адрес сервера Мастер-Веб/WebServices/Search.asmx.
Настройки web.config приложения ПК Мастер-Web
Дополнительные настройки, задаваемые в файле web.config, находящемся в папке MasterWeb позволяют задать дополнительные условия для отображения и проверки данных.
|
№ |
Описание |
Значение |
Настройка |
|
1 |
Путь к приложению WebServices |
Ссылка на приложение WebServices |
<add key="webServicesSource" value="http: //localhost/MasterWeb/WebService"/> |
Добавление секций
- 1. В секции <ConfigSections> необходимо добавить подсекцию:
<sectionGroup name="Megatec.Web.Services"> <section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/> </sectionGroup>
- 2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию:
<Megatec.Web.Services> <servicesAccessibility Enabled="true"> <Services> <add name="DoSearch" enabled="true"/> </Services> </servicesAccessibility> </Megatec.Web.Services>
Подготовка данных
Описание класса SearchFilter
/// <summary>
/// Поисковый фильтр
/// </summary>
public class SearchFilter
{
public enum SearchSource : short
{
PriceTables = 0,
BindingTables = 1,
}
public enum KindOfTours : int
{
All = 0,
PacketTours = 1,
LandTours = 2
}
/// <summary>
/// Вид тура
/// </summary>
public KindOfTours KindOfToursMask
{
get
{
return this.kindOfTours;
}
set
{
this.kindOfTours = value;
}
}
/// <summary>
/// Маска аттрибутов тура
/// </summary>
public int TurListAttributeMask
{
get
{
return this.turlistAttributeMask;
}
set
{
this.turlistAttributeMask = value;
}
}
/// <summary>
/// Партнер по отелю
/// </summary>
public int HotelPartnerKey
{
get
{
return this.hotelPartnerKey;
}
set
{
this.hotelPartnerKey = value;
}
}
[XmlAttribute]
public int MaxChildAge
{
get
{
return this.maxChildAge;
}
set
{
this.maxChildAge = value;
}
}
/// <summary>
/// Интервал дат
/// </summary>
public DateInterval TurDateRange
{
get
{
return this._turDateRange;
}
set
{
this._turDateRange = value;
}
}
/// <summary>
/// Интервал продолжительностей
/// </summary>
public DurationInterval DurationRange
{
get
{
return this._durationRange;
}
set
{
this._durationRange = value;
}
}
/// <summary>
/// Ключ страны
/// </summary>
[XmlAttribute]
public int CountryKey
{
get
{
if (this._countryKeys.Count == 0)
return -1;
return (int)this._countryKeys[0];
}
set
{
this._countryKeys.Clear();
if (value > 0)
this._countryKeys.Add(value);
}
}
/// <summary>
/// Массив ключей стран
/// </summary>
public ArrayList CountryKeys
{
get
{
return this._countryKeys;
}
}
/// <summary>
/// Поставлен ли флажок все авиакомпании
/// </summary>
[XmlAttribute]
public bool IsAllAirlines
{
get
{
return this._isAllAirlines;
}
set
{
this._isAllAirlines = value;
}
}
/// <summary>
/// Поставлен ли флажок все страны
/// </summary>
[XmlAttribute]
public bool IsAllCountries
{
get
{
return this._isAllCountries;
}
set
{
this._isAllCountries = value;
}
}
/// <summary>
/// Поиск на все продолжительности
/// </summary>
[XmlAttribute]
public bool IsAllDurations
{
get
{
return this._isAllDurations;
}
set
{
this._isAllDurations = value;
}
}
/// <summary>
/// Массив продолжительностей
/// </summary>
public ArrayList Durations
{
get
{
return durations;
}
}
[XmlAttribute]
public bool ExcludeNoPlaces
{
get
{
return excludeNoPlaces;
}
set
{
excludeNoPlaces = value;
}
}
/// <summary>
/// Массив продолжительностей в днях
/// </summary>
public ArrayList Days
{
get
{
return days;
}
}
/// <summary>
/// Массив продолжительностей в ночах
/// </summary>
public ArrayList Nights
{
get
{
return nights;
}
}
/// <summary>
/// Проверять ли квоты
/// </summary>
[XmlAttribute]
public bool CheckQuotes
{
get
{
return checkQuotes;
}
set
{
checkQuotes = value;
}
}
/// <summary>
/// Ключ города отправления
/// </summary>
[XmlAttribute]
public int DepartFromKey
{
get
{
if (this._departFromKeys.Count == 0)
return -1;
return (int)this._departFromKeys[0];
}
set
{
this._departFromKeys.Clear();
if (value >= 0)
this._departFromKeys.Add(value);
}
}
/// <summary>
/// Ключ города прибытия
/// </summary>
[XmlAttribute]
public int DepartToKey
{
get
{
if (this._departToKeys.Count == 0)
return -1;
return (int)this._departToKeys[0];
}
set
{
this._departToKeys.Clear();
if (value > 0)
this._departToKeys.Add(value);
}
}
/// <summary>
/// Массив ключей городов вылета
/// </summary>
public ArrayList DepartFromKeys
{
get
{
return this._departFromKeys;
}
}
/// <summary>
/// Поставлен ли флажок все города вылетов
/// </summary>
[XmlAttribute]
public bool IsAllDepartsFrom
{
get
{
return this._isAllDepartsFrom;
}
set
{
this._isAllDepartsFrom = value;
}
}
/// <summary>
/// Массив ключей городов прибытия
/// </summary>
public ArrayList DepartToKeys
{
get
{
return this._departToKeys;
}
}
/// <summary>
/// Поставлен ли флажок все города вылетов
/// </summary>
[XmlAttribute]
public bool IsAllDepartsTo
{
get
{
return this._isAllDepartsTo;
}
set
{
this._isAllDepartsTo = value;
}
}
/// <summary>
/// Массив ключей аэропортов вылета
/// </summary>
public ArrayList AirportFromKeys
{
get
{
return this._airportFromKeys;
}
}
/// <summary>
/// Поставлен ли флажок все города вылетов
/// </summary>
[XmlAttribute]
public bool IsAllAirportsFrom
{
get
{
return this._isAllAirportsFrom;
}
set
{
this._isAllAirportsFrom = value;
}
}
/// <summary>
/// Массив ключей аэропортов прибытия
/// </summary>
public ArrayList AirportToKeys
{
get
{
return this._airportToKeys;
}
}
/// <summary>
/// Поставлен ли флажок все города вылетов
/// </summary>
[XmlAttribute]
public bool IsAllAirportsTo
{
get
{
return this._isAllAirportsTo;
}
set
{
this._isAllAirportsTo = value;
}
}
/// <summary>
/// Ключ отеля
/// </summary>
[XmlAttribute]
public int HotelKey
{
get
{
if (this._hotelKeys.Count == 0)
return -1;
return (int)this._hotelKeys[0];
}
set
{
this._hotelKeys.Clear();
if (value > 0)
this._hotelKeys.Add(value);
}
}
/// <summary>
/// Ключ тура
/// </summary>
[XmlAttribute]
public int TourKey
{
get
{
return this._tourKey;
}
set
{
this._tourKey = value;
}
}
/// <summary>
/// Ограничение цены
/// </summary>
[XmlAttribute]
public double PriceLimit
{
get
{
return this._priceLimit;
}
set
{
this._priceLimit = value;
}
}
/// <summary>
/// Список ключей курортов
/// </summary>
public ArrayList ResortKeys
{
get
{
return this._resortKeys;
}
}
/// <summary>
/// Поставлен ли флажок все курорты
/// </summary>
[XmlAttribute]
public bool IsAllResort
{
get
{
return this._isAllResort;
}
set
{
this._isAllResort = value;
}
}
/// <summary>
/// Список ключей городов
/// </summary>
public ArrayList CityKeys
{
get
{
return this._cityKeys;
}
}
/// <summary>
/// Установлен ли в фильтре флаг все города
/// </summary>
[XmlAttribute]
public bool IsAllCity
{
get
{
return this._isAllCity;
}
set
{
this._isAllCity = value;
}
}
/// <summary>
/// Список ключей городов
/// </summary>
public ArrayList HotelKeys
{
get
{
return this._hotelKeys;
}
}
/// <summary>
/// Список ключей сервисов в отеле
/// </summary>
public ArrayList HotelOptionsKeys
{
get
{
return this._hotelOptionsKeys;
}
}
/// <summary>
/// Установлен ли в фильтре флаг все отели
/// </summary>
[XmlAttribute]
public bool IsAllHotels
{
get
{
return this._isAllHotels;
}
set
{
this._isAllHotels = value;
}
}
/// <summary>
/// Список ключей типов туров
/// </summary>
public ArrayList TourTypeKeys
{
get
{
return this._tourTypeKeys;
}
}
/// <summary>
/// Установлен ли флаг все типы тура
/// </summary>
[XmlAttribute]
public bool IsAllTourType
{
get
{
return this._isAllTourType;
}
set
{
this._isAllTourType = value;
}
}
/// <summary>
/// Список ключей типов туров
/// </summary>
public ArrayList TourTypeDetailKeys
{
get
{
return this._tourTypeDetailKeys;
}
}
/// <summary>
/// Установлен ли флаг все типы тура
/// </summary>
[XmlAttribute]
public bool IsAllTourTypeDetails
{
get
{
return this._isAllTourTypeDetails;
}
set
{
this._isAllTourTypeDetails = value;
}
}
/// <summary>
/// Список звездностей отелей
/// </summary>
public ArrayList HotelStars
{
get
{
return this._hotelStars;
}
}
/// <summary>
/// Поиск по всем звездностям
/// </summary>
[XmlAttribute]
public bool IsAllHotelStars
{
get
{
return this._isAllHotelStars;
}
set
{
this._isAllHotelStars = value;
}
}
/// <summary>
/// Список ключей питаний
/// </summary>
public ArrayList PansionKeys
{
get
{
return this._pansionKeys;
}
}
/// <summary>
/// Поиск по всем питаниях
/// </summary>
[XmlAttribute]
public bool IsAllPansion
{
get
{
return this._isAllPansion;
}
set
{
this._isAllPansion = value;
}
}
/// <summary>
/// Список ключей авиакомпаний
/// </summary>
public ArrayList AirlineKeys
{
get
{
return this._airlineKeys;
}
}
/// <summary>
/// Список ключей типов номеров
/// </summary>
public ArrayList RoomKeys
{
get
{
return this.roomKeys;
}
}
/// <summary>
/// Список ключей категорий проживания
/// </summary>
public ArrayList RoomCategoryKeys
{
get
{
return this.roomCategoryKeys;
}
}
/// <summary>
/// Список ключей типов размещения
/// </summary>
public ArrayList AccomodationKeys
{
get
{
return this.accomodationKeys;
}
}
/// <summary>
/// Список ключей дополнительных услуг в отеле
/// </summary>
public ArrayList AddHotelServiceKeys
{
get
{
return this._addHotelServiceKeys;
}
}
/// <summary>
/// Поиск по все услугам в отеле
/// </summary>
[XmlAttribute]
public bool IsAllAddHotelService
{
get
{
return this._isAllAddHotelService;
}
set
{
this._isAllAddHotelService = value;
}
}
/// <summary>
/// Искать только основные типы размещения
/// </summary>
[XmlAttribute]
public bool MainOnly
{
get
{
return mainOnly;
}
set
{
mainOnly = value;
}
}
/// <summary>
/// Искать только туры для групп агентов, в которые входит данное агентство
/// </summary>
[XmlAttribute]
public bool GroupOnly
{
get
{
return groupOnly;
}
set
{
groupOnly = value;
}
}
/// <summary>
/// Количество взрослых
/// </summary>
[XmlAttribute]
public int Adults
{
get
{
return adults;
}
set
{
adults = value;
}
}
/// <summary>
/// Количество детей
/// </summary>
[XmlAttribute]
public int Childs
{
get
{
return childs;
}
set
{
childs = value;
}
}
/// <summary>
/// Возраст первого ребенка
/// </summary>
[XmlAttribute]
public int FirstChildAge
{
get
{
return firstChildAge;
}
set
{
firstChildAge = value;
}
}
/// <summary>
/// Возраст второго ребенка
/// </summary>
[XmlAttribute]
public int SecondChildAge
{
get
{
return secondChildAge;
}
set
{
secondChildAge = value;
}
}
/// <summary>
/// Маска квот на проживание
/// </summary>
[XmlAttribute]
public QuotaResult.Status HotelQuotaMask
{
get
{
return hotelQuotaMask;
}
set
{
hotelQuotaMask = value;
}
}
/// <summary>
/// Маска квот на перелет
/// </summary>
[XmlAttribute]
public QuotaResult.Status AviaQuotaMask
{
get
{
return aviaQuotaMask;
}
set
{
aviaQuotaMask = value;
}
}
/// <summary>
/// Количество строк на странице
/// </summary>
[XmlAttribute]
public int PageSize
{
get
{
return this.pageSize;
}
set
{
this.pageSize = value;
}
}
/// <summary>
/// Ограничение цены снизу
/// </summary>
[XmlAttribute]
public double PriceMinimum
{
get
{
return this._priceMinimum;
}
set
{
this._priceMinimum = value;
this.isNullPriceMinimum = false;
}
}
/// <summary>
/// Ограничена ли цена снизу
/// </summary>
[XmlAttribute]
public bool IsNullPriceMinimum
{
get
{
return this.isNullPriceMinimum;
}
set
{
this.isNullPriceMinimum = value;
}
}
/// <summary>
/// Дополнительный фильтр
/// </summary>
[XmlAttribute]
public string AddFilter
{
get
{
return addFilter;
}
set
{
addFilter = value;
}
}
}
}
Описание класса SearchParams
/// <summary>
/// Класс, описывающий параметры подбора тура
/// </summary>
public class SearchParams
{
/// <summary>
/// Идентификатор агенства, от имени которого производится поиск
/// </summary>
[XmlAttribute("Agent")]
public int AgentKey = 0;
/// <summary>
/// Разделять квоты на агентские/неагентские или игнорировать агентские квоты.
/// Настройка web.config: "checkAgentQuotesEnabled".
/// Значение по умолчанию: true.
/// </summary>
[XmlAttribute("CheckAQ")]
public bool CheckAgentQuota = true;
/// <summary>
/// Проверять общую квоту, если агентская закончилась.
/// Настройка web.config: "checkAgentAndCommonQuote".
/// Значение по умолчанию: true.
/// </summary>
[XmlAttribute("CheckCQ")]
public bool CheckCommonQuota = true;
/// <summary>
/// При подборе перелета поиск производится в том же пакете цен, что и перелет в обсчитанном туре,
/// иначе цены в расчет на принимается, а используется только расписание перелетов.
/// Используется только, если FindFlight = true.
/// Настройка web.config: "checkFlightPacket".
/// Значение по умолчанию: true.
/// </summary>
[XmlAttribute("CheckFP")]
public bool CheckFlightPacket = true;
/// <summary>
/// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность.
/// Настройка web.config: "checkNoLongQuota".
/// Значение по умолчанию: true
/// </summary>
[XmlAttribute("CheckNLQ")]
public bool CheckNoLongQuota = true;
/// <summary>
/// Проверять квоты от всех различных партнеров.
/// Настройка web.config: "checkAllPartnersQuota".
/// Значение по умолчанию: false
/// </summary>
[XmlAttribute("CheckAPQ")]
public bool CheckAllPartnersQuota = true;
/// <summary>
/// Результат возвращаемый, если у квоты истек релиз-период.
/// Настройка web.config: "expiredReleaseQuoteResult".
/// Значение по умолчанию: QuotaResult.Status.Request.
/// </summary>
[XmlAttribute("ExpRelRes")]
public QuotaResult.Status ExpiredReleaseResult = QuotaResult.Status.Request;
/// <summary>
/// Подбирать авиаперелет по туру, на который есть свободные места.
/// </summary>
[XmlAttribute("FindFlight")]
public bool FindFlight = true;
/// <summary>
/// Список классов перелета (ключи бизнес- и эконом-класса)
/// </summary>
[XmlAttribute("FlightGroups")]
public string FlightGroups = String.Empty;
/// <summary>
/// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList
/// Настройка web.config: "quotedDynamicPriceTour".
/// Значение по умолчанию: true.
/// </summary>
[XmlAttribute("IsPT")]
public bool IsPriceTour = true;
/// <summary>
/// Результат возвращаемый при наличии квоты, но отсутствии свободных мест.
/// Настройка web.config: "noPlacesQuoteResult".
/// Значение по умолчанию: QuotaResult.Status.No.
/// </summary>
[XmlAttribute("NPResult")]
public QuotaResult.Status NoPlacesResult = QuotaResult.Status.No;
/// <summary>
/// Тип отбора
/// </summary>
[XmlAttribute("PagingType")]
public short PagingType = Megatec.Search.PagingType.Simple;
/// <summary>
/// Возращать ли поле, содержащее список ключей классов услуг по туру
/// </summary>
[XmlAttribute("Services")]
public bool Services = false;
/// <summary>
/// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест.
/// Настройка web.config: "setRequestIfReleaseIsZero".
/// Значение по умолчанию: false.
/// </summary>
[XmlAttribute("SetRequestOnRelease")]
public bool SetRequestOnRelease = false;
/// <summary>
/// Параметры сортировки (выражение ORDER BY)
/// </summary>
[XmlAttribute("Sort")]
public string Sort = string.Empty;
/// <summary>
/// Производить сортировку на сервере БД или на клиенте
/// </summary>
[XmlAttribute("SortInDB")]
public bool SortInDB = true;
/// <summary>
/// Интерфейс, реализующий функцию межвалютной конвертации цен по туру
/// </summary>
[XmlIgnore]
public Megatec.Types.IMoneyConverter MoneyConverter = null;
}
Описание класса SearchResult
[XmlInclude(typeof(SearchResultItem))]
public class SearchResult
{
/// <summary>
/// Общее количество найденных записей
/// </summary>
[XmlAttribute("Total")]
public int TotalCount
/// <summary>
/// Количество отобранных записей
/// </summary>
[XmlAttribute("Parsed")]
public int ParsedCount
/// <summary>
/// Не используется
/// </summary>
[XmlAttribute("Step")]
public double DynamicPriceStepValue
/// <summary>
/// Коллекция найденных результатов
/// </summary>
[XmlElement("SearchResultItem")]
public List<SearchResultItem> Items
}
Описание класса SearchResultItem
public class SearchResultItem: IRoomDescription
{
/// <summary>
/// Количество основных мест
/// </summary>
[XmlAttribute]
public int MainPlaces
/// <summary>
/// Количество неосновных мест
/// </summary>
[XmlAttribute]
public int AddPlaces
/// <summary>
/// Основное или неосновное размещение
/// </summary>
[XmlAttribute]
public bool IsMain
/// <summary>
/// Дата, до которой актуален тур
/// </summary>
[XmlAttribute]
public DateTime TourValid
/// <summary>
/// Дата создания тура
/// </summary>
[XmlAttribute]
public DateTime TourCreated
/// <summary>
/// Дата заезда
/// </summary>
[XmlAttribute]
public DateTime TourDate
/// <summary>
/// Продолжительность тура в днях
/// </summary>
[XmlAttribute]
public int Days
/// <summary>
/// Количество ночей проживания в туре
/// </summary>
[XmlAttribute]
public int Nights
/// <summary>
/// Ключ страны
/// </summary>
[XmlAttribute]
public int CountryKey
/// <summary>
/// Ключ города отправления
/// </summary>
[XmlAttribute]
public int CityFromKey
/// <summary>
/// Ключ города прилета
/// </summary>
[XmlAttribute]
public int CityToKey
/// <summary>
/// Ключ аэропорта вылета
/// </summary>
[XmlAttribute]
public int AirportFromKey
/// <summary>
/// Ключ аэропорта прилета
/// </summary>
[XmlAttribute]
public int AirportToKey
/// <summary>
/// Ключ расчитанного тура (TP_Tours)
/// </summary>
[XmlAttribute]
public int TourKey
/// <summary>
/// Ключ типа тура (TipTur)
/// </summary>
[XmlAttribute]
public int TourTypeKey
/// <summary>
/// Ключ тура из конструктора туров (turList)
/// </summary>
[XmlAttribute]
public int TurListKey
/// <summary>
/// Ключ расчитанного варианта (TP_Lists)
/// </summary>
[XmlAttribute]
public int PriceListKey
/// <summary>
/// Ключ цены (TP_Prices)
/// </summary>
[XmlAttribute]
public int PriceKey
/// <summary>
/// Цена
/// </summary>
[XmlAttribute]
public decimal Price
/// <summary>
/// Ключ главного отеля
/// </summary>
[XmlAttribute]
public int HotelKey
/// <summary>
/// Ключ партнера для главного отеля
/// </summary>
[XmlAttribute]
public int HotelPartnerKey
/// <summary>
/// Ключ курорта главного отеля
/// </summary>
[XmlAttribute]
public int ResortKey
/// <summary>
/// Ключ города главного отеля
/// </summary>
[XmlAttribute]
public int CityKey
/// <summary>
/// Звездность главного отеля
/// </summary>
[XmlAttribute]
public string HotelCategory
/// <summary>
/// Ключ питания главного отеля
/// </summary>
[XmlAttribute]
public int PansionKey
/// <summary>
/// Ключ номера в главном отеле
/// </summary>
[XmlAttribute]
public int HotelRoomKey
/// <summary>
/// Ключ типа номера в главном отеле
/// </summary>
[XmlAttribute]
public int RoomKey
/// <summary>
/// Ключ категории номера в главном отеле
/// </summary>
[XmlAttribute]
public int RoomCategoryKey
/// <summary>
/// Ключ размещения в главном отеле
/// </summary>
[XmlAttribute]
public int AccomodationKey
/// <summary>
/// Минимальный возраст первого ребенка
/// </summary>
[XmlAttribute]
public int ChildAgeFrom
/// <summary>
/// Максимальный возраст первого ребенка
/// </summary>
[XmlAttribute]
public int ChildAgeTo
/// <summary>
/// Минимальный возраст второго ребенка
/// </summary>
[XmlAttribute]
public int ChildAgeFrom2
/// <summary>
/// Максимальный возраст второго ребенка
/// </summary>
[XmlAttribute]
public int ChildAgeTo2
/// <summary>
/// Название отеля
/// </summary>
[XmlAttribute]
public string HotelName
/// <summary>
/// Название тура
/// </summary>
[XmlAttribute]
public string TourName
/// <summary>
/// Название питания
/// </summary>
[XmlAttribute]
public string PansionName
/// <summary>
/// Код питания
/// </summary>
[XmlAttribute]
public string PansionCode
/// <summary>
/// Название типа номера
/// </summary>
[XmlAttribute]
public string RoomName
/// <summary>
/// Код типа номера
/// </summary>
[XmlAttribute]
public string RoomCode
/// <summary>
/// Название категории номера
/// </summary>
[XmlAttribute]
public string RoomCategoryName
/// <summary>
/// Код категории номера
/// </summary>
[XmlAttribute]
public string RoomCategoryCode
/// <summary>
/// Название размещения
/// </summary>
[XmlAttribute]
public string AccomodationName
/// <summary>
/// Код размещения
/// </summary>
[XmlAttribute]
public string AccomodationCode
/// <summary>
/// Название курорта
/// </summary>
[XmlAttribute]
public string ResortName
/// <summary>
/// Название города
/// </summary>
[XmlAttribute]
public string CityName
/// <summary>
/// Порядок сортировки типа номера
/// </summary>
[XmlAttribute]
public int RoomOrder
/// <summary>
/// Порядок сортировки категории номера
/// </summary>
[XmlAttribute]
public int RoomCategoryOrder
/// <summary>
/// Порядок сортировки размещения
/// </summary>
[XmlAttribute]
public int AccomodationOrder
/// <summary>
/// Валюта
/// </summary>
[XmlAttribute]
public string Currency
/// <summary>
/// Ключи услуг, входящих в тур (через запятую)
/// </summary>
[XmlAttribute]
public string Services
/// <summary>
/// Ключ прямого перелета (Charter)
/// </summary>
[XmlAttribute]
public int CharterKey
/// <summary>
/// Ключ обратного перелета (Charter)
/// </summary>
[XmlAttribute]
public int CharterBackKey
/// <summary>
/// День предоставления проживания
/// </summary>
[XmlAttribute]
public int HotelDay
/// <summary>
/// Количество ночей проживания в отеле
/// </summary>
[XmlAttribute]
public int HotelNights
/// <summary>
/// День прямого перелета
/// </summary>
[XmlAttribute]
public int CharterDay
/// <summary>
/// День обратного перелета
/// </summary>
[XmlAttribute]
public int CharterBackDay
/// <summary>
/// Пакет прямого перелета
/// </summary>
[XmlAttribute]
public int CharterPacketKey
/// <summary>
/// Партнер прямого перелета
/// </summary>
[XmlAttribute]
public int CharterPartnerKey
/// <summary>
/// Пакет обратного перелета
/// </summary>
[XmlAttribute]
public int CharterBackPacketKey
/// <summary>
/// Партнер обратного перелета
/// </summary>
[XmlAttribute]
public int CharterBackPartnerKey
/// <summary>
/// Наличие мест в отеле: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест. Пример
/// 10:100
/// </summary>
[XmlAttribute]
public string HotelQuota
/// <summary>
/// Наличие мест на прямом перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест, по каждому классу. Пример:
/// 10:100|0:100|10:100
/// </summary>
[XmlAttribute]
public string CharterThereQuota
/// <summary>
/// Наличие мест на обратном перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу
/// </summary>
[XmlAttribute]
public string CharterBackQuota
/// <summary>
/// Номер строки
/// </summary>
[XmlAttribute]
public int Id
/// <summary>
/// Номер строки
/// </summary>
[XmlAttribute]
public int Key
/// <summary>
/// URL с описанием отеля
/// </summary>
[XmlAttribute]
public string HotelURL
/// <summary>
/// URL с описанием тура
/// </summary>
[XmlAttribute]
public string TourURL
/// <summary>
/// Текстовая строка с информацией о прямом перелете (авиакомпания, рейс, время, аэропорт вылета/прилета)
/// </summary>
[XmlAttribute]
public string CharterInfo
/// <summary>
/// Текстовая строка с информацией об обратном перелете (авиакомпания, рейс, время, аэропорт вылета/прилета)
/// </summary>
[XmlAttribute]
public string CharterBackInfo
/// <summary>
/// Текстовая строка, содержащая ключи всех отелей в пакете услуг (через запятую)
/// </summary>
[XmlAttribute]
public string AllHotelKeys
/// <summary>
/// Текстовая строка, содержащая ключи всех номеров в пакете услуг (через запятую)
/// </summary>
[XmlAttribute]
public string AllHotelRoomKeys
/// <summary>
/// Текстовая строка, содержащая все продолжительности проживаний в пакете услуг (через запятую)
/// </summary>
[XmlAttribute]
public string AllHotelNights
/// <summary>
/// Текстовая строка, содержащая все категории проживаний в пакете услуг (через запятую)
/// </summary>
[XmlAttribute]
public string AllHotelStars
/// <summary>
/// Текстовая строка, содержащая ключи всех питаний в пакете услуг (через запятую)
/// </summary>
[XmlAttribute]
public string AllPansionKeys
/// <summary>
/// Текущий индекс динамического изменения цены для отеля (текущая цена = базовая цена + значение шага изменения цены * текущий индекс динамического изменения цены)
/// </summary>
[XmlAttribute]
public int DynamicHotelPriceStepIndex
/// <summary>
/// Корректировка базовой цены для отеля (пока в шагах)
/// </summary>
[XmlAttribute]
public double DynamicHotelPriceCorrection
}