Web-сервисы: Сервис бронирования
Версия статьи от 24-05-2018.
|
Более ранние версии: |
Содержание
- 1 Введение
- 2 Установка
- 3 Настройка
- 4 Настройки в файле WEB.CONFIG
- 5 Подготовка данных
- 5.1 Описание формата данных
- 5.1.1 MainDependentAccommodation (Доступное основное или зависимое размещение)
- 5.1.2 CalculatedPriceInfo (Информация по расчитанной цене)
- 5.1.3 ReservationParams (Параметры бронирования)
- 5.1.4 ReservationResult (Результат расчета стоимости и бронирования комплекса услуг)
- 5.1.5 ReservationInfoParams (Параметры путевки)
- 5.1.6 ReservationInfo (Описание путевки, включая все услуги и туристов)
- 5.2 Сервис формирования списка услуг («ServiceProvider.asmx»)
- 5.2.1 Метод получения основных и неосновных размещений (GetAvailableAccommodations)
- 5.2.2 Метод получения информации по ключу цены (GetCalculatedPriceInfo)
- 5.2.3 Метод получения рассчитанных услуг (GetCalculatedServices)
- 5.2.4 Метод получения информации о дополнительных услугах (GetExtraServiceInfo)
- 5.2.5 Метод получения дополнительных услуг (GetNotCalculatedServices)
- 5.2.6 Метод получения вариантов услуги (GetServiceVariants)
- 5.3 Сервис бронирования (ReservationService.asmx)
- 5.1 Описание формата данных
- 6 Работа в системе
- 6.1 Работа с сервисом «ServiceProvider.asmx» (Формирование списка услуг)
- 6.1.1 Метод получения основных и неосновных размещений (GetAvailableAccommodations )
- 6.1.2 Метод получения информации по ключу цены (GetCalculatedPriceInfo )
- 6.1.3 Метод получения рассчитанных услуг (GetCalculatedServices)
- 6.1.4 Meтод получения получения информации о дополнительных услугах (GetExtraServiceInfo)
- 6.1.5 Метод получения нерассчитанных услуг (GetNotCalculatedServices)
- 6.1.6 Метод получения вариантов услуги (GetServiceVariants)
- 6.2 Работа с сервисом «ReservationService.asmx» (Бронирование)
- 6.1 Работа с сервисом «ServiceProvider.asmx» (Формирование списка услуг)
Введение
Данный модуль включает в себя два сервиса.
Сервис формирования списка услуг предназначен для получения следующей информации:
- Общие данные по ключу цены, такие как тур, продолжительности в днях и ночах, описание тура и условия бронирования;
- Список услуг, включенных в стоимость, по ключу цены;
- Список не рассчитанных услуг по ключу цены;
- Список вариантов какой-либо услуги.
Сервис бронирования предназначен для расчета стоимости совокупности услуг, с возможностью их последующего бронирования в базе данных.
Ссылка на тестовый сервис
С работой тестового сервиса формирования списка услуг и сервиса бронирования вы можете ознакомиться на нашем демо-сервере.
Установка
Создание виртуального каталога
По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:
1 Зайти в Пуск (Start) → Настройки (Settings) → Панель управления (Control Panel) → Администрирование (Administrative Tools)
![]()
2 Диспетчер служб IIS
![]()
3 В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и выбрать Преобразовать в приложение

4 В открывшемся окне нужно нажать кнопку ОК

Подключение к базе данных ПК «Мастер-Тур»
В файле web.config, расположенном в папке Reservation пропишите необходимые параметры подключения (красным цветом выделены значения, которые необходимо ввести).
Строка подключения к базе данных ПК «Мастер-Тур»:
<add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК «Мастер-Тур»;Initial Catalog=название базы данных ПК «Мастер-Тур;User ID=логин пользователя ПК «Мастер-Тур»;Password=пароль пользователя ПК «Мастер-Тур»"/>
Настройка
После установки Сервис бронирования доступен по адресу:
http://ip-адрес сервера Мастер-Веб/Reservation/ServiceProvider.asmx(сервис формирования списка услуг);http://ip-адрес сервера Мастер-Веб/Reservation/ReservationService.asmx(сервис бронирования).
Для корректной работы сервиса Reservation на релизах ПК «Мастер-Web» 2009.2.15 и выше нужно включить настройку customErrors в элементе <system.web>: <system.web> <customErrors mode="On"/> … </system.web>
Настройки в файле WEB.CONFIG
Общие настройки
| № | Описание | Значение | Настройка |
|---|---|---|---|
| 1 | Пользователь, который будет отображаться как Владелец путевки (если не указан ведущий менеджер по туру и партнеру). | Ключ пользователя - поле US_KEY из таблицы [UserList].
|
<add key="webUserKey" value="458" />
|
| 2 | Определение приоритета проставления ведущего менеджера по путевке. |
|
<add key="managerPriority" value="partner" />
|
| 3 | Задание статуса заявки в ПК «Мастер-Тур», забронированной через систему бронирования ПК «Мастер-Web». |
Подробнее см. Механизм изменения статуса путевки. |
<add key="orderStatus" value="web" />
|
| 4 | Настройка, определяющая максимальный возможный возраст детей.
Работает только совместно с настройкой «checkTouristAgeEnable». |
Максимальный возраст ребенка. При отсутствии настройки максимальный возраст ребенка равен 14 лет. |
<add key="maxChildAge" value="16" />
|
| 5 | Определяет справочник, по которому будет проверяться количество основных мест при поиске в экране «Динамический лист предложений» и при бронировании в коризинах бронирования ПК «Мастер-Web». |
Если соответствующее поле там не заполнено, то из справочника «Типы номеров».
|
<add key="useAccomodationPlaces" value="false" />
|
| 6 | Определяет справочник, по которому будет проверяться количество дополнительных мест при поиске в экране «Динамический лист предложений» и при бронировании в коризинах бронирования ПК «Мастер-Web». |
Если соответствующее поле там не заполнено, то из справочника «Типы размещений».
|
<add key="useRoomsExtraPlaces" value="false" />
|
| 7 | Настройка, включающая режим учета процента при конвертации валют. | Коэффициент, на который умножается конвертируемая сумма. | <add key="courseMultiplier" value="1,02" />
|
| 8 | Настройка указывает на то, что в справочнике «Типы номеров» в колонке Число основных мест указано общее количество взрослых и детей. Дополнительно должно быть прописано и количество детей в соответствующей колонке.
При включенной настройке в случае, если сумма основных и дополнительных мест в справочнике «Типы размещений» превышает значение в колонке число основных мест, бронирование невозможно. |
|
<add key="combinedPlaces" value="true" />
|
| 9 | Настройка, включающая проверку прав текущего пользователя на получение доступа к путевке. |
|
<add key="IsAuthDubUser" value="true" />
|
Настройки бронирования инфантов
| № | Описание | Значение | Настройка |
|---|---|---|---|
| 1 | Ключи тарифов на авиаперелет для размещения Младенец (Infant).
Настройка используется либо в дополнительном модуле «Бронирование индивидуального тура», либо для исключения тарифов при отображении списка рейсов в корзинах бронирования. |
Ключи тарифов - поле AS_CODE из таблицы [AirService] через запятую.
|
<add key="infantCharterClasses" value="132,110" />
|
| 2 | Взрослые тарифы (эконом) авиаперелетов, для которых будет подбираться тариф - YCH - Экономический класс (детский). | Ключи тарифа - поле AS_CODE из таблицы [AirService] через запятую.
|
<add key="YCH" value="81,87,89" />
|
| 3 | Взрослые тарифы (бизнес) авиаперелетов, для которых будет подбираться тариф - CCH - Бизнес класс (детский). | Ключи тарифа - поле AS_CODE из таблицы [AirService] через запятую.
|
<add key="CCH" value="67,68,74" />
|
Настройки добавления доплат к рейсам
| № | Описание | Значение | Настройка |
|---|---|---|---|
| 1 | Включение отображения блока доплат к рейсу. | Ключ типа тура - поле TP_KEY из таблицы [TipTur], к которому должны привязываться туры, содержащие доплаты к рейсам.
|
<add key="addFlightTourType" value="13" />
|
| 2 | Название доплаты за изменение рейса. | Текст - название доплаты за изменение рейса, которое будет отображаться в блоке доплат. | <add key="changeFlightPaymentName" value="Доплата за выбор рейса" />
|
| 3 | Настройка, скрывающая поле с доплатой за изменение рейса в блоке доплат. | false - поле с доплатой за изменение рейса скрыто;
true или отсутствие настройки - поле с доплатой за изменение рейса отображается. |
<add key="showFlightVariantDifference" value="true" />
|
Для того, что бы получить все связанные дополнительные услуги, необходимо добавить в файл web.config настройку <add key="addFlightTourType" value="ххх" />, где ххх - ключ типа тура, откуда берутся доплаты. Например, ключ типа у текущего тура - 17, а дополнительная услуга топливного сбора лежит в пакете с ключом типа тура 50. Значит, нам надо указать 50 вместо ххх. При получении списка услуг необходимо использовать метод GetCalculatedServices сервиса ServiceProvider.asmx. Услуга топливного сбора будет находиться в подразделе AdditionalPayments раздела Service структуры XML.
Настройки дополнительного модуля «Бронирование новогодних и рожденственских ужинов»
| № | Описание | Значение | Настройка |
|---|---|---|---|
| 1 | Включение дополнительного модуля «Бронирование новогодних и рожденственских ужинов». | Ссылка на дополнительный модуль. | <add key="happyNewYearServiceManager" value="MasterWebStandard.Extra.HappyNewYearServices.HappyNewYearStandardManager, MasterWebStandard.Extra.HappyNewYearServices" />
|
| 2 | Тип тура для обязательных праздничных ужинов. | Ключ типа тура - поле TP_KEY из таблицы [TipTur] для обязательных ужинов.
|
<add key="requiredNewYearServicesTourTypes" value="12" />
|
| 3 | Тип тура для необязательных праздничных ужинов. | Ключ типа тура - поле TP_KEY из таблицы [TipTur] для необязательных ужинов.
|
<add key="optionalNewYearServicesTourTypes" value="12" />
|
Подготовка данных
С 1 января 2017 года вступили в силу положения Федерального закона от 02.03.2016 № 49-ФЗ «О внесении изменений в отдельные законодательные акты Российской Федерации в целях совершенствования законодательства, регулирующего туристскую деятельность» (далее – Федеральный закон № 49-ФЗ), в связи с чем вводится ограничение на осуществление бронирования партнёрами, не указавшими реестровый номер. Установить дату, начиная с которой данное ограничение начинает функционировать, можно в дополнительных настройках ПК «Мастер-Тур». Настройка работает, начиная с релиза 9222SP0.
Описание формата данных
MainDependentAccommodation (Доступное основное или зависимое размещение)
/// <summary>
/// Доступное основное или зависимое размещение
/// </summary>
public class MainDependentAccommodation
{
/// <summary>
/// Ключ прайса, к которому относится размещение
/// </summary>
public Int32 PriceKey { get; set; }
/// <summary>
/// Название размещения
/// </summary>
public String AccommodationName { get; set; }
/// <summary>
/// Количество человек
/// </summary>
public Int32 Places { get; set; }
/// <summary>
/// Цена
/// </summary>
public Decimal Price { get; set; }
/// <summary>
/// Валюта цены
/// </summary>
public String Currency { get; set; }
/// <summary>
/// Наличие мест
/// </summary>
public QuotaResultStatus QuotaStatus { get; set; }
}
|
CalculatedPriceInfo (Информация по расчитанной цене)
/// <summary>
/// Информация по рассчитанной цене
/// </summary>
public class CalculatedPriceInfo
{
/// <summary>
/// Прайс-лист
/// </summary>
public PriceTour PriceTour { get; set; }
/// <summary>
/// Дата тура
/// </summary>
public DateTime TourDate { get; set; }
/// <summary>
/// Количество дней по туру
/// </summary>
public int TotalDays { get; set; }
/// <summary>
/// Количество ночей по туру
/// </summary>
public int Nights { get; set; }
}
|
ReservationParams (Параметры бронирования)
/// <summary>
/// Параметры бронирования
/// </summary>
public class ReservationParams
{
/// <summary>
/// Идентификатор рекламного источника в БД
/// </summary>
public int AdvertiseID { get; set; }
/// <summary>
/// Идентификатор основания для скидки в БД
/// </summary>
public int CauseDiscountID { get; set; }
/// <summary>
/// Идентификатор страны тура
/// </summary>
public int CountryID { get; set; }
/// <summary>
/// Идентификатор пользователя, бронирующего тур
/// </summary>
public int DupUserID { get; set; }
/// <summary>
/// Имя оператора
/// </summary>
public string OperatorName { get; set; }
/// <summary>
/// Иденификатор ведущего менеджера по путевке
/// </summary>
public int OwnerID { get; set; }
/// <summary>
/// Идентификатор партнера, бронирующего тур
/// </summary>
public int PartnerID { get; set; }
/// <summary>
/// Валюта, в котрой производится бронирование
/// (если не задана, то вытягивается из тура)
/// </summary>
public string RateCode { get; set; }
/// <summary>
/// Бронируемая продолжительность
/// (если не задана, то высчитывается на основании услуг)
/// </summary>
public int ReserveDuration { get; set; }
/// <summary>
/// Дата тура
/// </summary>
public DateTime TourDate { get; set; }
/// <summary>
/// Идентификатор тура
/// </summary>
public int TourID { get; set; }
/// <summary>
/// Количество туристов по услугам
/// </summary>
public int TouristsCount { get; set; }
}
|
ReservationResult (Результат расчета стоимости и бронирования комплекса услуг)
/// <summary>
/// Класс, описывающий результат расчета стоимости и бронирования комплекса услуг
/// </summary>
public class ReservationResult
{
/// <summary>
/// Стоимость к оплате
/// </summary>
public double Brutto { get; set; }
/// <summary>
/// Процент скидки
/// </summary>
public double DiscountPercent { get; set; }
/// <summary>
/// Абсолютная величина скидки
/// </summary>
public double DiscountSumm { get; set; }
/// <summary>
/// Валюта
/// </summary>
public string Rate { get; set; }
/// <summary>
/// Код сформированной путевки
/// </summary>
public string ReservationCode { get; set; }
/// <summary>
/// Сообщение об ошибке
/// </summary>
public string ErrorMessage { get; set; }
}
|
ReservationInfoParams (Параметры путевки)
/// <summary>
/// Класс, описывающий параметры путевки
/// </summary>
public class ReservationInfoParams
{
/// <summary>
/// код путевки
/// </summary>
public string Code { get; set; }
/// <summary>
/// значение скидки
/// </summary>
public double Discount { get; set; }
/// <summary>
/// стоимость путевки
/// </summary>
public double Price { get; set; }
}
|
ReservationInfo (Описание путевки, включая все услуги и туристов)
/// <summary>
/// Класс, описывающий путевку, включая все услуги путевки и туристов
/// </summary>
public class ReservationInfo
{
/// <summary>
/// Название города поездки
/// </summary>
public string CityName { get; set; }
/// <summary>
/// Код путевки
/// </summary>
public string Code { get; set; }
/// <summary>
/// Название страны поездки
/// </summary>
public string CountryName { get; set; }
/// <summary>
/// Скидка по путевке
/// </summary>
public double Discount { get; set; }
/// <summary>
/// Сумма скидки
/// </summary>
public double DiscountSum { get; set; }
/// <summary>
/// Обобщенный статус путевки
/// </summary>
public int? DogovorGlobalStatus { get; set; }
/// <summary>
/// Статус путевки
/// </summary>
public int DogovorStatus { get; set; }
/// <summary>
/// Кол-во дней поездки
/// </summary>
public int Ndays { get; set; }
/// <summary>
/// Количество туристов в путевке
/// </summary>
public int Nmen { get; set; }
/// <summary>
/// Цена без учета скидки
/// </summary>
public double Price { get; set; }
/// <summary>
/// Код валюты путевки
/// </summary>
public string RateCode { get; set; }
/// <summary>
/// Список всеу услуг в путевке
/// </summary>
public List<Service> ReservationServices { get; set; }
/// <summary>
/// Список всех туристов в путевке
/// </summary>
public List<Tourist> ReservationTourists { get; set; }
/// <summary>
/// Дата начала поездки
/// </summary>
public DateTime TurDate { get; set; }
}
|
Сервис формирования списка услуг («ServiceProvider.asmx»)
Метод получения основных и неосновных размещений (GetAvailableAccommodations)
Сигнатура вызова
/// <summary>
/// Возвращает доступные для бронирования размещения
/// </summary>
/// <param name="token">Авторизационный токен (если сервисом запрещен анонимный доступ)</param>
/// <param name="priceKey">Ключ обсчитанной цены (ключ прайса)</param>
/// <param name="isCheckExtraPlaceQuota:">Проверять ли места на еще одно такое же размещение</param>
/// <returns>Список пар [основное размещение; коллекция неосновных]</returns>
[WebMethod]
public List<SerializableKeyValuePair<MainDependentAccommodation, List<MainDependentAccommodation>>>
GetAvailableAccommodations(String token, Int32 priceKey, Boolean isCheckExtraPlaceQuota)
|
Метод получения информации по ключу цены (GetCalculatedPriceInfo)
Сигнатура вызова
/// <summary>
/// Получение информации о цене
/// </summary>
/// <param name="token">Авторизационный токен (если сервисом запрещен анонимный доступ)</param>
/// <param name="priceKey">Ключ цены</param>
/// <param name="includeTourDescriptionText">Возвращать ли описание тура</param>
/// <param name="includeBookingConditionsText">Возвращать ли условия бронирования по туру</param>
/// <returns></returns>
[WebMethod]
public CalculatedPriceInfo GetCalculatedPriceInfo(String token, int priceKey, bool includeTourDescriptionText, bool includeBookingConditionsText)
|
Метод получения рассчитанных услуг (GetCalculatedServices)
Сигнатура вызова
/// <summary>
/// Возвращает список рассчитанных услуг по ключу цены
/// </summary>
/// <param name="token">Авторизационный токен (если сервисом запрещен анонимный доступ)</param>
/// <param name="priceKey">Ключ обсчитанной цены</param>
/// <returns></returns>
[WebMethod]
public List<Service> GetCalculatedServices(String token, int priceKey)
|
Метод получения информации о дополнительных услугах (GetExtraServiceInfo)
Сигнатура вызова
/// <summary>
/// Получение информации о дополнительных услугах
/// </summary>
/// <param name="token">Авторизационный токен (если сервисом запрещен анонимный доступ)</param>
/// <param name="priceKey">Ключ цены</param>
/// <returns></returns>
[WebMethod]
public ExtraServiceInfo GetExtraServiceInfo(String token, int priceKey)
|
Метод получения дополнительных услуг (GetNotCalculatedServices)
Сигнатура вызова
/// <summary>
/// Возвращает список дополнительных услуг по ключу цены. Дополнительные услуги не могут быть отелем или перелётом.
|

