Внешние функции раздела «Тарифы»

Внешние функции прикрепляются к конкретной операции в формировании тарифа.

 

Все функции имеют стандартный набор входных параметров:

 


BeginDate

Дата заезда

EndDate

Дата выезда

PostDate

Расчетная дата

Quant

Количество услуг

Cost

Стоимость

RefType

Тип операции:

1 - Услуга по тарифу

2 - Доп. Услуга

3 - Поздний выезд

4 - % за бронь

5 - Ранний заезд

6 - Простой номера

Operation

Идентификатор операции

ParamStr

Параметризованная строка с дополнительными входными параметрами

 

Описание дополнительных входных параметров в ParamStr:

 


arrival

Дата заезда

departure

Дата выезда

ResDate

Смена создания

ResBeginDate

Дата начала бронирования

CreationDate

Дата создания

typesale

Тип размещения

CIE

Признак раннего заезда

IDLE

Признак простоя номера

COL

Признак позднего выезда

UseOrgParams

Признак использования тарифов и скидок организации

Ch

Расчетные параметры: Время

cost

Стоимость (ручной ввод)

workload

Загрузка отеля в разрезе номера

GuestsRateAdd

Параметризованная строка. Пакеты услуг для конкретного гостя (наименование параметра: идентификатор гостя, значение параметра: код пакета услуг)

RateAdd

Код пакета услуг (для брони)

GuestsPlaces

Параметризованная строка:

Наименование параметра: идентификатор гостя

Значение: Параметризованная строка с двумя параметрами:

  1. Наименование: идентификатор категории размещения, значение: идентификатор возрастной категории

  2. Наименование: ismain, значение: признак главного гостя

LoadingMode

Признак автоматического добавления услуг к автоначислениям

UserMode

Признак изменения услуги из карточки брони

RoomKind

Идентификатор типа номера

IDRoom

Идентификатор номера

Packagekind

Идентификатор типа тарифа

Section

Идентификатор секции фолио

Season

Идентификатор дополнительной стоимости на дату

QuantReal

Количество услуг. Будет больше Quant в случае неиспользования настройки «Не разделять автоначисления по гостям»

ISRES%

Процент за бронь

R%PACK

Идентификатор тарифа

Числовые значения в качестве имен параметров

Идентификаторы категорий размещения. В качестве значения имеют параметризованную строку:

Наименование: идентификатор возрастной категории

Значение: количество занятых мест

Статистические данные по гостю

ST_Night

Количество ночей

ST_Count

Количество заездов

ST_Cancel

Количество отмен

ST_NoShow

Количество незаездов

ST_Sum_Accommodation

Сумма за проживание

ST_Sum_Service

Сумма за доп.услуги

ST_Sum

Итоговая сумма

ST_First_Arrival

Дата первого заезда

ST_Last_Arrival

Дата последнего заезда

 

Выходным значением функция является параметризованная строка

Описание возможных параметров в выходной строке:

 


COST

Базовая стоимость

PRICE1

Стоимость выходного дня

PRICE2

Специальная стоимость

OperationCode

Код операции

Operation

Идентификатор операции по умолчанию (если не будет найдена операция по коду)

Quant

Количество

Section

Идентификатор секции фолио

 

 

Описания алгоритмов работы стандартных внешних функций

 

Trunc – Функция Trunc возвращает целочисленную часть числа с плавающей запятой. Она возвращает эту часть как Целочисленное значение.

Пример: Trunc(12.75) = 12

Mod - дает остаток от деления делимого на делитель

Пример: 19 mod 4 = 3

Now - возвращает текущую дату и время для местной временной зоны.

GetNamedParamDefFloat(ParamStr, ParamName, DefaultValue) – возвращает из параметризованной строки вещественное значение параметра по его наименованию (ParamStrпараметризованная строка, ParamNameнаименование параметра, DefaultValueзначение возвращаемое если параметр в строке не найден либо значение параметра отсутствует)

GetNamedParamDefInt(ParamStr, ParamName, DefaultValue) – возвращает из параметризованной строки целочисленное значение параметра по его наименованию (ParamStrпараметризованная строка, ParamNameнаименование параметра, DefaultValueзначение возвращаемое если параметр в строке не найден либо значение параметра отсутствует)

 

  1. Наименование: 4+1

Функция предназначена для реализации тарифа "Одни сутки бесплатно при покупке 4-х суток"

Исходный код:

 

function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;

begin

Result := '';

if (Trunc(EndDate) - Trunc(BeginDate) > 4) then

if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) and

((Trunc(PostDate) - Trunc(BeginDate) + 1) mod 5 = 0) then

Result := '&COST=0';

end;

 

begin

 

end.

 

Описание алгоритма работы:

 

begin

Result := '';

если проживание более 4-х дней:

if (Trunc(EndDate) - Trunc(BeginDate) > 4) then

то если расчетная дата больше даты начала:

if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) and

и остаток от целочисленного деления разности даты начала проживания и расчетной даты (увеличиваем на 1 из-за отбрасывания дробной части (времени)) на 5 (требуемое количество дней для скидки) равен нулю:

((Trunc(PostDate) - Trunc(BeginDate) + 1) mod 5 = 0) then

тогда обнуляем стоимость за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST=0';

end;

 

  1. Наименование: QUANT

Функция предназначена для автоматического изменения кол-ва гостей при фиксированной стоимости

Исходный код:

 

function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;

begin

передаем реальное значение количества услуг и вычисленное значение реальной стоимости в результирующую параметризованную строку

Result := '&QUANT=' + FloatToStr(GetNamedParamDefFloat(ParamStr, 'QUANTREAL', 0)) + '&COST=' + FloatToStr(GetNamedParamDefFloat(ParamStr, 'QUANTREAL', 0) * Cost);

end;

 

begin

 

end.

 

*Функция неактуальна ('QUANTREAL'=1)

 

  1. Наименование: 10=0

Функция предназначена для реализации тарифа "10-е сутки бесплатно (с учетом предыдущих заездов)"

Исходный код:

 

function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;

begin

Result := '';

if (GetNamedParamDefInt(ParamStr, 'ST_NIGHT', 0) + (Trunc(PostDate) - Trunc(BeginDate) + 1) = 10) then

Result := '&COST=0';

end;

 

begin

 

end.

 

Описание алгоритма работы:

begin

Result := '';

Если сумма количества ночей предыдущих проживаний гостя и текущего проживания до расчетной даты равно 10

if (GetNamedParamDefInt(ParamStr, 'ST_NIGHT', 0) + (Trunc(PostDate) - Trunc(BeginDate) + 1) = 10) then

тогда обнуляем стоимость за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST=0';

end.

 

  1. Наименование: -10%/-20%/-30%

Функция делает скидку 10% при заезде на количество дней от 7 до 13, 20% при заезде от 14 до 29 дней, 30% при заезде от 30 и более дней

Исходный код:

 

function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;

begin

Result := '';

if (Trunc(EndDate) - Trunc(BeginDate) > 6) then

if (Trunc(EndDate) - Trunc(BeginDate) < 14) then

Result := '&COST='+floattostr(Cost-Cost*10/100)

else

if ((Trunc(EndDate) - Trunc(BeginDate) > 13)and

(Trunc(EndDate) - Trunc(BeginDate) < 30)) then

Result := '&COST='+floattostr(Cost-Cost*20/100)

else

if (Trunc(EndDate) - Trunc(BeginDate) > 29) then

Result := '&COST='+floattostr(Cost-Cost*30/100);

end;

 

begin

 

end.

 

Описание алгоритма работы:

begin

Result := '';

если заезд более 6 дней:

if (Trunc(EndDate) - Trunc(BeginDate) > 6) then

тогда если заезд менее 14 дней

if (Trunc(EndDate) - Trunc(BeginDate) < 14) then

тогда устанавливаем стоимость со скидкой 10% за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST='+floattostr(Cost-Cost*10/100)

Else

Иначе если заезд более 6 дней: и менее 30 дней

if ((Trunc(EndDate) - Trunc(BeginDate) > 13)and

(Trunc(EndDate) - Trunc(BeginDate) < 30)) then

тогда устанавливаем стоимость со скидкой 20% за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST='+floattostr(Cost-Cost*20/100)

Else

Иначе если заезд более 30 дней

if (Trunc(EndDate) - Trunc(BeginDate) > 29) then

тогда устанавливаем стоимость со скидкой 30% за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST='+floattostr(Cost-Cost*30/100);

end;

  1. Наименование: 7=0

Функция делает каждый 7-й день проживания бесплатный. Все дни после последнего бесплатного дня за заезд - со скидкой.

Исходный код:

 

function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;

begin

Result := '';

if (Trunc(EndDate) - Trunc(BeginDate) > 7) then

if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) then

if((Trunc(PostDate) - Trunc(BeginDate)) mod 7 = 0) then

Result := '&COST=0'

else

if (Trunc(PostDate) > (Trunc(EndDate) - ((Trunc(EndDate) - Trunc(BeginDate)) mod 7))) then

Result := '&COST='+FloatToStr(Cost*0.9);

end;

 

begin

 

end..

 

Описание алгоритма работы:

 

begin

Result := '';

если проживание более 7 дней:

if (Trunc(EndDate) - Trunc(BeginDate) > 7) then

тогда если не первые сутки

if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) then

тогда если остаток от целочисленного деления разности даты начала проживания и расчетной даты (увеличиваем на 1 из-за отбрасывания дробной части (времени)) на 7 (требуемое количество дней для скидки) равен нулю:

if((Trunc(PostDate) - Trunc(BeginDate)) mod 7 = 0) then

тогда обнуляем стоимость за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST=0'

Else

иначе если расчетная дата больше чем разность даты выезда и остатка от целочисленного деления разности двты выезда и даты заезда на 7

if (Trunc(PostDate) > (Trunc(EndDate) - ((Trunc(EndDate) - Trunc(BeginDate)) mod 7))) then

тогда устанавливаем стоимость со скидкой 10% за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST='+FloatToStr(Cost*0.9);

end;

 

 

  1. Наименование: -10%

Функция делает скидку 10%, если бронирование происходит в день заезда

Исходный код:

 

function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;

begin

Result := ';

if trunc(BeginDate) = trunc(now) then

Result := '&COST=' + floattostr(cost * 0.9);

end;

 

begin

 

end.

 

Описание алгоритма работы:

 

begin

Result := '';

если дата заезда равна текущей дате

if trunc(BeginDate) = trunc(now) then

тогда устанавливаем стоимость со скидкой 10% за расчетную дату и передаем значение в результирующую параметризованную строку:

Result := '&COST=' + floattostr(cost * 0.9);

end;