Web-сервисы: Сервис бронирования

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

Версия статьи от 24-05-2018.

Более ранние версии:
До версии ПК «Мастер-Web» 2009.2.20.20 включительно


Содержание

Введение

Данный модуль включает в себя два сервиса.

Сервис формирования списка услуг предназначен для получения следующей информации:

  • Общие данные по ключу цены, такие как тур, продолжительности в днях и ночах, описание тура и условия бронирования;
  • Список услуг, включенных в стоимость, по ключу цены;
  • Список не рассчитанных услуг по ключу цены;
  • Список вариантов какой-либо услуги.

Сервис бронирования предназначен для расчета стоимости совокупности услуг, с возможностью их последующего бронирования в базе данных.

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

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

Установка

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

По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:
1 Зайти в Пуск (Start) → Настройки (Settings) → Панель управления (Control Panel) → Администрирование (Administrative Tools)

Панель управления

2 Диспетчер служб IIS
Администрирование - Диспетчер служб 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 Определение приоритета проставления ведущего менеджера по путевке.
  • partner — ведущий менеджер по партнеру;
  • filial — ведущий менеджер по филиалу (при включенной настройке «useFilialChoice»);
  • tour или пустое значение или отсутствие настройки — ведущий менеджер по туру.
<add key="managerPriority" value="partner" />
3 Задание статуса заявки в ПК «Мастер-Тур», забронированной через систему бронирования ПК «Мастер-Web».
  • web — статус Web-турагент;
  • wait — статус Wait-лист;
  • отсутствие параметра или пустое значениестандартный статус в ПК «Мастер-Тур».

Подробнее см. Механизм изменения статуса путевки.

<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 Настройка указывает на то, что в справочнике «Типы номеров» в колонке Число основных мест указано общее количество взрослых и детей. Дополнительно должно быть прописано и количество детей в соответствующей колонке.

При включенной настройке в случае, если сумма основных и дополнительных мест в справочнике «Типы размещений» превышает значение в колонке число основных мест, бронирование невозможно.

  • true — в колонке число основных мест указано общее количество взрослых и детей (сумма основных и дополнительных мест в размещении не должна превышать значение в колонке число основных мест в номерах);
  • false или отсутствие настройки — количество взрослых и детей не суммируется (проверка не производится).
<add key="combinedPlaces" value="true" />
9 Настройка, включающая проверку прав текущего пользователя на получение доступа к путевке.
  • true — включена проверка;
  • false или отсутствие настройки — проверка отключена.
<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>
/// Возвращает список дополнительных услуг по ключу цены. Дополнительные услуги не могут быть отелем или перелётом.