Рубрики
Клуб Менеджер Настройки системы

Настройка дотаций через Талоны

В данной статье рассмотрим настройку дотаций для гостей по средствам создания Талонов.

В данной статье рассмотрим настройку дотаций для гостей по средствам создания Талонов.

Талон (он же Купон) — это обычный товар, с отрицательной ценой.

Основная задача, это обеспечение некоего корпоративного списка гостей/клиентов ежедневной дотацией, т.е. суммой средств, которая привязана за их, к примеру, пропуск на день или же на некий отрезок дня.

Пункт 1. Настройка.

Выполняем скрипт C:\AVERS\TRIGGERS\couponch.sql.

couponch.sql

DROP TRIGGER CheckPrintCoupon;

CREATE TRIGGER CheckPrintCoupon
AFTER INSERT ON CheckPayment
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.Total<0 AND n.Total=(SELECT Total FROM Check WHERE CheckID=n.CheckID)) BEGIN ATOMIC UPDATE CheckItem SET -- Price=(SubTotal-(SELECT SubTotal FROM Check WHERE CheckID=n.CheckID))/Amount, -- SubTotal=SubTotal-(SELECT SubTotal FROM Check WHERE CheckID=n.CheckID), Total=Total-(SELECT Total FROM Check WHERE CheckID=n.CheckID), TotalBase=TotalBase-(SELECT TotalBase FROM Check WHERE CheckID=n.CheckID) WHERE CheckItemID=(SELECT MAX(CheckItemID) FROM CheckItem WHERE CheckID=n.CheckID AND Price<0) ; UPDATE Check SET Guest=-1, SubTotal=0, Total=0, TotalBase=0 WHERE CheckID=n.CheckID AND (SELECT COUNT(*) FROM CheckItem WHERE CheckID=n.CheckID AND Price<0)>0
; DELETE FROM CheckPayment WHERE CheckID=n.CheckID
; END
;

Выполнение скрипта

Скрипт предназначен для настройки БД. Он выполняет следующую функцию:
Для чеков на сумму меньше нуля (сумма блюд меньше стоимости талона) удаляет отрицательный платеж и уменьшает на эту сумму стоимость талона в чеке.

Настраиваем скидку для использования талонов. Для этого нам потребуется создать:

  • Категорию клиентов
  • Отдел и цех для отработки Талонов
  • Товар с отрицательной ценой
  • Скидку с привязкой ко всему вышеперечисленному

Создаём категорию клиентов.

Указываем только название, для настройки данной схемы работы остальные параметры нам не требуются.

Создаём отдел и цех для отработки Талонов.

Создаём товар с отрицательной ценой.

Настроив товар, нажимаем применить и переходим к следующему шагу.

Создаём скидку с привязкой ко всему вышеперечисленному.

На картинке выше указаны обязательные к выбору пункты. Кроме последнего — «Многоразовое использование в течении дня» — эта опция позволяет разбить стоимость талона на несколько чеков.

Т.е. если по условиям договора, гостям из данной категории клиентов позволено расходовать дотацию постепенно в течении дня, значит необходимо установить данную галочку.

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

C:\AVERS\TRIGGERS\clientlock.sql
или
C:\AVERS\TRIGGERS\clientlocktime.sql

Предварительно отредактировав в них ID категорий клиентов. Можно использовать одновременно оба скрипта.

Первый блокирует после закрытия чека на клиента и снимает блокировку при удалении чека или при закрытии смены.

Второй позволяет блокировать и разблокировать по временному диапазону, указанному в свойствах скидки.

clientlock.sql

DROP TRIGGER CLIENTLOCK;

CREATE TRIGGER ClientLock
AFTER INSERT ON Check
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ClientID IS NOT NULL)
UPDATE Client SET Locked=1 WHERE ClientID=n.ClientID AND ClientGroupID IN (1,2,3) AND VALUE(Organization,»)<>(SELECT Name FROM ClientGroup WHERE ClientGroupID=Client.ClientGroupID)
;

— 2018-10-31-09.30.50

DROP TRIGGER CLIENTUNLOCKSTORN;

CREATE TRIGGER ClientUnlockStorn
AFTER UPDATE OF DeleteReasonID ON Check
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ClientID IS NOT NULL)
UPDATE Client SET Locked=CASE WHEN n.DeleteReasonID IS NULL THEN 1 ELSE 0 END WHERE ClientID=n.ClientID AND ClientGroupID IN (1,2,3) AND VALUE(Organization,»)<>(SELECT Name FROM ClientGroup WHERE ClientGroupID=Client.ClientGroupID)
;

— 2018-10-31-09.30.50

DROP TRIGGER CLIENTUNLOCKDAY;

CREATE TRIGGER ClientUnlockDay
AFTER INSERT ON Day
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (SUBSTR(n.OpenTime,1,10) NOT IN (SELECT SUBSTR(OpenTime,1,10) FROM Day WHERE DayID(SELECT Name FROM ClientGroup WHERE ClientGroupID=Client.ClientGroupID)
;

clientlocktime.sql

DROP TRIGGER ClientUnlockTime
;

CREATE TRIGGER ClientUnlockTime
AFTER INSERT ON Ident
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN ((
SELECT COUNT(*) FROM Client,Check,CheckItem,Day,Discount
WHERE Client.Locked=1 AND Client.Card=n.Text AND Client.ClientGroupID in (1,2,3)
AND Client.ClientID=Check.ClientID AND Check.CheckID=CheckItem.CheckID
AND Check.DayID=Day.DayID AND Day.CloseTime IS NULL
AND CheckItem.ItemID=Discount.BonusItemID AND Client.ClientGroupID=Discount.ClientGroupId
AND Discount.StartTime IS NOT NULL AND Discount.EndTime IS NOT NULL
AND ((Discount.StartTimeDiscount.EndTime AND SUBSTR(n.Time,12,5)Discount.StartTime AND SUBSTR(n.Time,12,5)Discount.EndTime AND SUBSTR(Check.CloseTime,12,5)Discount.StartTime AND SUBSTR(Check.CloseTime,12,5)Discount.EndTime)
OR (Discount.StartTimeDiscount.EndTime AND (SUBSTR(n.Time,12,5)Discount.StartTime OR SUBSTR(n.Time,12,5)Discount.EndTime) AND (SUBSTR(Check.CloseTime,12,5)Discount.StartTime OR SUBSTR(Check.CloseTime,12,5)Discount.EndTime)))
)=0)
UPDATE Client SET Locked=0 WHERE Card=n.Text AND ClientGroupID in (1,2,3)
;

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

Настройка завершена.

Пункт 2. Применение.

Набирается заказ, применяется карта клиента или клиент выбирается из списка.

Если сумма заказа не превышает сумму талона, при оплате талон в счете становится равным значению минус набранной сумме заказа и счет закрывается с нулем.

Если сумма заказа превышает сумму талона, то при оплате Front запросит доплату, а в фискальном чеке цена товаров будет автоматически снижена на цену талона.

Талон добавляется автоматически при выборе клиента

Талоны так же можно пробивать в ручную, просто выставив его «В продаже» как любой другой товар.

Примечание.

При отмене клиента в счёте, бонусный талон автоматически убирается из счёта.

Если в карточке клиента в поле «Организация» вписать название Категории клиента, то блокировка скриптами C:\AVERS\TRIGGERS\clientlock.sql
или
C:\AVERS\TRIGGERS\clientlocktime.sql
не будет действовать.

Так же схема блокировки может быть модифицирована по желанию клиента. Вопрос решается в каждом случае отдельно.

Первичная статья написана Мустафиным Р.Б. на http://kb.averstech.ru/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *