Внешние функции раздела «Тарифы»
Внешние функции прикрепляются к конкретной операции в формировании тарифа.
Все функции имеют стандартный набор входных параметров:
-
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
Параметризованная строка:
Наименование параметра: идентификатор гостя
Значение: Параметризованная строка с двумя параметрами:
-
Наименование: идентификатор категории размещения, значение: идентификатор возрастной категории
-
Наименование: 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 – значение возвращаемое если параметр в строке не найден либо значение параметра отсутствует)
-
Наименование: 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;
-
Наименование: 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)
-
Наименование: 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.
-
Наименование: -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;
-
Наименование: 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;
-
Наименование: -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;