Форум по программам и оборудованию > > >

Как сделать, чтобы скидка по штрихкоду срабатывала 2-3 раза в день

26.05.2018 13:23


[ТЕМА ЗАКРЫТА]
12.08.2015 12:56
Tiger
 
Необходимо ограничить срабатывание скидочной карты сотрудника до 2-3 раз в день! Причина сотрудники (кассиры) пробивают скидку всем кому не лень! Может как-то возможно реализовать через скидку? У меня пока одно решение организовать через прием купонов, перенеся скидочные карты в купоны, но этим я ограничу пробитие до одного, а мне надо 2-3!
12.08.2015 13:07
konst
 
Я бы сделал запуск sql запроса каждые 5-15 мин на блокировку карт у которых 2-3 срабатывания в опер чеках. А в 00:00 на разблокировку. Или сразу в СБ для проф-беседы.
12.08.2015 13:09
sh00r00p
 
Если баловаться с sql, то лучше поставить триггер на сработку карты. И тогда лишних заданий запускать не придется.
12.08.2015 13:24
Mtirt
 
Завести накопительные счета от количества покупок.
При количестве больше 3 давать наценку 500% на сумму чека.
12.08.2015 18:20
Tiger
 
Цитата:
konst Я бы сделал запуск sql запроса каждые 5-15 мин на блокировку карт у которых 2-3 срабатывания в опер чеках. А в 00:00 на разблокировку. Или сразу в СБ для проф-беседы.
Можно поподробнее! Как будет выглядеть этот sql запрос? Как его выполнять? Какой запрос на разблокировку?
12.08.2015 18:21
Tiger
 
Цитата:
sh00r00p Если баловаться с sql, то лучше поставить триггер на сработку карты. И тогда лишних заданий запускать не придется.
Можно по-подробнее как это реализовать?
12.08.2015 18:22
Tiger
 
Цитата:
Mtirt Завести накопительные счета от количества покупок.
При количестве больше 3 давать наценку 500% на сумму чека.
Классная идея! Но есть одно НО мне это нужно для того чтобы выявить явного лидера среди сотрудников. Поэтому необходимо поставить всех в одни рамки!
12.08.2015 20:49
sh00r00p
 
Цитата:
Tiger Можно по-подробнее как это реализовать?
Я не знаком со структурой таблиц супермага, поэтому приведу статью с википедии.

Три́ггер (англ. trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением INSERT, удалением DELETE строки в заданной таблице, или изменением UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.

Момент запуска триггера определяется с помощью ключевых слов BEFORE (триггер запускается до выполнения связанного с ним события; например, до добавления записи) или AFTER (после события). В случае, если триггер вызывается до события, он может внести изменения в модифицируемую событием запись (конечно, при условии, что событие — не удаление записи). Некоторые СУБД накладывают ограничения на операторы, которые могут быть использованы в триггере (например, может быть запрещено вносить изменения в таблицу, на которой «висит» триггер, и т. п.).

Кроме того, триггеры могут быть привязаны не к таблице, а к представлению (VIEW). В этом случае с их помощью реализуется механизм «обновляемого представления». В этом случае ключевые слова BEFORE и AFTER влияют лишь на последовательность вызова триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.

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

Пример (Oracle):

Цитата:
/* Триггер на уровне таблицы */
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district
BEGIN
insert into info values ('table "district" has changed');
END;
В этом случае для отличия табличных триггеров от строчных вводится дополнительные ключевые слова при описании строчных триггеров. В Oracle это словосочетание FOR EACH ROW.

Пример:

Цитата:
/* Триггер на уровне строки */
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district FOR EACH ROW
BEGIN
insert into info values ('one string in table "district" has changed');
END;
13.08.2015 01:01
Павел Сосновских
 
Цитата:
Tiger Классная идея! Но есть одно НО мне это нужно для того чтобы выявить явного лидера среди сотрудников. Поэтому необходимо поставить всех в одни рамки!
"Лидеров" скорее всего окажется несколько.
Если цель именно выявить, то может лучше сделать некий отчет, который будет показывать какие карты применяются часто.
Чтобы сделать запрос/отчет, который покажет требуемое, нужно знать какие именно карты используются(клиентские/дисконтные/загружаемые из бэка).
Правда будет нюанс - подобный отчет будет показывать "подозрительное".
Вдруг ребята с карточкой вечерком стоят у магазина и 5-10 раз заходят за пивком, их карта будет "честной", но в отчет попадет.
13.08.2015 06:43
Mtirt
 
Цитата:
Tiger Классная идея! Но есть одно НО мне это нужно для того чтобы выявить явного лидера среди сотрудников. Поэтому необходимо поставить всех в одни рамки!
Хорошо. Просто считать в накопления количество чеков. Потом посмотреть, у кого накопилось больше всех.
13.08.2015 13:14
Tiger
 
А можно на примере показать, как отобрать карты которые повторяются в оперативных чеках более 2-3 раз, и запрос на блокировку этих карт.
13.08.2015 14:29
Павел Сосновских
 
еще раз, карты какие? клиентские/дисконтные/загружаемые из супермага?
13.08.2015 17:12
Tiger
 
Цитата:
Павел Сосновских еще раз, карты какие? клиентские/дисконтные/загружаемые из супермага?
Загружаемые из супермага с установленным процентом скидки!
13.08.2015 19:25
Tiger
 
Цитата:
Tiger А можно на примере показать, как отобрать карты которые повторяются в оперативных чеках более 2-3 раз, и запрос на блокировку этих карт.
Отобрать карты, повторяющиеся в чеках более одного раза получилось

select CODE, count(*) from SMOnlineDiscCard GROUP BY CODE HAVING count(*)>2;
13.08.2015 19:45
Tiger
 
Цитата:
Tiger Отобрать карты, повторяющиеся в чеках более одного раза получилось

select CODE, count(*) from SMOnlineDiscCard GROUP BY CODE HAVING count(*)>2;
C блокировкой тоже разобрался

update SMDiscPers SET STOPPED=1 WHERE CODE='номер карты';
commit;


Вопрос как теперь объединить два запроса, чтобы отобранные карты блокировать?
13.08.2015 20:31
Tiger
 
Цитата:
Tiger Отобрать карты, повторяющиеся в чеках более одного раза получилось

select CODE, count(*) from SMOnlineDiscCard GROUP BY CODE HAVING count(*)>2;
Цитата:
Tiger C блокировкой тоже разобрался

update SMDiscPers SET STOPPED=1 WHERE CODE='номер карты';
commit;


Вопрос как теперь объединить два запроса, чтобы отобранные карты блокировать?
Думаю так:

UPDATE SMDiscPers SET STOPPED=0 WHERE CODE IN (SELECT CODE from SMOnlineDiscCard GROUP BY CODE HAVING count(*)>2)

Поправьте если не прав!
13.08.2015 20:33
Tiger
 
Цитата:
Tiger Думаю так:

UPDATE SMDiscPers SET STOPPED=0 WHERE CODE IN (SELECT CODE from SMOnlineDiscCard GROUP BY CODE HAVING count(*)>2)

Поправьте если не прав!
STOPPED=1, чтобы заблочить!
13.08.2015 21:25
konst
 
Можно еще добавить условие
AND stopped = 0
Чтобы лишний раз не дергать уже заблокированные.
А для разблокировки если есть история то по ней, если нет можно создать доп таблицу - при выполнении первого запроса на блокировку параллельно писать номер карты туда.
26.08.2015 15:17
Tiger
 
В продолжении темы.

Запрет организовал! Теперь хочется сделать отчет, в качестве конечных данных нужно видеть:

ФИО карта общая сумма покупки и сумма скидки по карте

Данные хочу тянуть их mysql УКМ4. Помогите найти таблицы, в которых храниться нужная мне информация?
26.08.2015 19:34
Павел Сосновских
 
а в супермаге не получится?
там же есть какие-то отчеты по дисконтным картам
плюс можно в бизнес-анализе что-то такое накрутить...чеки со спецификацией

если все же в укме, то:
- trm_in_disc_std2perscard - card_code, name, discount_type - сами карты
- trm_out_receipt_discounts - card_code, discount_type, amount - скидки по чекам
- trm_out_receipt_header, trm_out_receipt_foter, trm_out_receipt_subtotal - заголовки, подвалы, подитоги чеков

надо все связать, отфильтровать видимо по времени, нормальности завершения чека,...

ФИО - trm_in_disc_std2perscard.name
карта - trm_in_disc_std2perscard.card_code
сумма покупки - trm_out_receipt_subtotal.amount/clear_amount - со всеми скидками/без скидок
сумма скидки по карте - trm_out_receipt_discounts.amount

надо еще посмотреть, что в суммах именно надо(где со скидками, где без, со всеми скидками, в т.ч. округлением или только со скидками по картам)
Опции темы


Часовой пояс GMT +3, время: 13:23.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.