Просмотр полной версии : Доработка стандартного скрипта добавляющего блюдо в заказ
Ребят помогите доработать скрипт. Есть дисконтная карта, которая дариться клиенту при определенной сумме заказа, так как кассиры частенько забывают её подарить, решили использовать стандартный скрипт:
procedure ProcessOperation1001304(Parameter: integer);
begin
if not RKCheck.Valid then
exit //important checking
else
begin
if RKCheck.CurrentOrder.UnpaidSum >= 300 then // Order sum checking
if GUI.RKMessageDlg('Do You want add bonus dish?', 0, 3, 10000) = 6 then
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(39), '1'); // add dish with code 39
end;
RK7.PostOperation(rkoBalanceReceipt, 0);
end;
Он проверяет сумму заказа и если она равна или превышает установленное значение, появляется сообщение, добавить карту в заказ или нет. Возможно ли сделать так, чтобы сообщение с вопросом не появлялось, если в заказе есть любая скидка? Что в него нужно добавить?
Пройти по списку и выяснить есть ли скидки?
It : TCheckItem;
for j := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[j];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountItem') then
//Ну и здесь либо счетчик, либо bool
end;
А дальше на основании счетчика/bool уже либо запускать, либо нет скрипт на показ предупреждения.
Пройти по списку и выяснить есть ли скидки?
Да, чтоб проверка наличия скидок в заказе прошла до проверки суммы и если они есть - предупреждение не выводиться. В скриптах совсем не силен, помогите этот код правильно срастить:)
Поясную, если клиент сделал заказ на сумму 1000 и более и дал кассиру дисконтную карту, кассир ее прокатал, то в заказ прикрепляется скидка, стало быть, в сообщении о выдаче карты нет необходимости.
Что-то вроде такого, будет работать со скидками на заказ.
var
it : TCheckItem;
flag : boolean;
j : integer;
begin
if not RKCheck.Valid then
exit //important checking
else begin
flag := false;
for j := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[j];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountItem') then
flag := true;
end;
if ((RKCheck.CurrentOrder.UnpaidSum >= 1000) and (flag = false)) then // Order sum checking
GUI.ShowMessage('Есть карта применить?' + #13#10 + 'А если найду?');
end;
RK7.PostOperation(rkoBalanceReceipt, 0);
end;
Большое СПАСИБО! Разобрался!
Вот такой получился код:
procedure ProcessOperation1009002(Parameter: integer);
var
it : TCheckItem;
flag : boolean;
j : integer;
begin
if not RKCheck.Valid then
exit //important checking
else begin
flag := false;
for j := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[j];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountItem') then
flag := true;
end;
if ((RKCheck.CurrentOrder.UnpaidSum >= 1000) and (flag = false)) then // проверка суммы заказа
if GUI.RKMessageDlg('Добавить?', 0, 3, 10000) = 6 then
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
end;
RK7.PostOperation(rkoBalanceReceipt, 0);
end;
Еще один маленький вопросик ;)
Возможно ли в данный скрипт вставить команду на открытие денежного ящика, при нажатии кнопки "ДА" в запросе?
Пробовал вот так:
procedure ProcessOperation1009005(Parameter: integer);
var
it : TCheckItem;
flag : boolean;
j : integer;
begin
if not RKCheck.Valid then
exit //important checking
else begin
flag := false;
for j := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[j];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountItem') then
flag := true;
end;
if ((RKCheck.CurrentOrder.UnpaidSum >= 1000) and (flag = false)) then // проверка суммы заказа
if GUI.RKMessageDlg('Добавить Карту в заказ?', 0, 3, 10000) = 6 then
RK7.PerformOperation(rkoOpenDrawer, 0);
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
end;
RK7.PostOperation(rkoBalanceReceipt, 0);
end;
При нажатии "ДА" ящик открывается, но при этом блюдо в заказ добавляется и по "ДА" и по "НЕТ" :facepalm:
if GUI.RKMessageDlg('Добавить Карту в заказ?', 0, 3, 10000) = 6 then
begin
RK7.PerformOperation(rkoOpenDrawer, 0);
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
end;
Наверное, так надо
Наверное, так надо
Ошибка в коде :(
Баланс begin и end нарушен, одного end; недостает
Потому ошибка.
Баланс begin и end нарушен, одного end; недостает
Потому ошибка.
procedure ProcessOperation1009005(Parameter: integer);
var
it : TCheckItem;
flag : boolean;
j : integer;
begin
if not RKCheck.Valid then
exit //important checking
else begin
flag := false;
for j := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[j];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountItem') then
flag := true;
end;
if ((RKCheck.CurrentOrder.UnpaidSum >= 1000) and (flag = false)) then // проверка суммы заказа
if GUI.RKMessageDlg('Добавить Карту в заказ?', 0, 3, 10000) = 6 then
begin
RK7.PerformOperation(rkoOpenDrawer, 0);
end;
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
end;
RK7.PostOperation(rkoBalanceReceipt, 0);
end;
Ящик открывает, но карту добавляет и по да и по нет.
Ящик открывает, но карту добавляет и по да и по нет.
Вы правда совсем совсем не понимаете написанного кода?
Даже на уровне курса информатики???
begin
RK7.PerformOperation(rkoOpenDrawer, 0);
end;
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
RK7.PerformOperation(rkoOpenDrawer, 0); находится внутри контейнера begin...end те выполняется толко в случае выполнения условия (нажали ДА)
Команда
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
Находится вне рамок условия, т.е. выполняется безусловно, т.е. всегда.
Вот оно и выполняется.
Вот так, begin - end ограничивают область в которой в данном случае будет исполняться условие.
procedure ProcessOperation1009005(Parameter: integer);
var
it : TCheckItem;
flag : boolean;
j : integer;
begin
if not RKCheck.Valid then
exit //important checking
else begin
flag := false;
for j := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[j];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountItem') then
flag := true;
end;
if ((RKCheck.CurrentOrder.UnpaidSum >= 1000) and (flag = false)) then // проверка суммы заказа
if GUI.RKMessageDlg('Добавить Карту в заказ?', 0, 3, 10000) = 6 then
begin
RK7.PerformOperation(rkoOpenDrawer, 0);
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
end;
end;
RK7.PostOperation(rkoBalanceReceipt, 0);
end;
Ящик открывает, но карту добавляет и по да и по нет.
Вы правда совсем совсем не понимаете написанного кода?
Даже на уровне курса информатики???
Какой-то ты злой sibgaba, я в программировании не силен.
Спасибо SLion, все нормально работает!
Какой-то ты злой sibgaba, я в программировании не силен.
Есть такое, согласен, но...
Беда, коль пироги начнет печи сапожник,
А сапоги тачать пирожник,
И дело не пойдет на лад.
Да и примечено стократ...
Powered by vBulletin® Version 4.2.6 LTS Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot