PDA

Просмотр полной версии : Доработка стандартного скрипта добавляющего блюдо в заказ



pixnet
02.02.2020, 20:27
Ребят помогите доработать скрипт. Есть дисконтная карта, которая дариться клиенту при определенной сумме заказа, так как кассиры частенько забывают её подарить, решили использовать стандартный скрипт:

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;

Он проверяет сумму заказа и если она равна или превышает установленное значение, появляется сообщение, добавить карту в заказ или нет. Возможно ли сделать так, чтобы сообщение с вопросом не появлялось, если в заказе есть любая скидка? Что в него нужно добавить?

SLion
03.02.2020, 10:37
Пройти по списку и выяснить есть ли скидки?
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 уже либо запускать, либо нет скрипт на показ предупреждения.

pixnet
03.02.2020, 10:52
Пройти по списку и выяснить есть ли скидки?

Да, чтоб проверка наличия скидок в заказе прошла до проверки суммы и если они есть - предупреждение не выводиться. В скриптах совсем не силен, помогите этот код правильно срастить:)

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

SLion
03.02.2020, 12:02
Что-то вроде такого, будет работать со скидками на заказ.

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;

pixnet
03.02.2020, 12:34
Большое СПАСИБО! Разобрался!

Вот такой получился код:

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;

pixnet
04.02.2020, 10:09
Еще один маленький вопросик ;)
Возможно ли в данный скрипт вставить команду на открытие денежного ящика, при нажатии кнопки "ДА" в запросе?

Пробовал вот так:

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:

satan
04.02.2020, 11:19
if GUI.RKMessageDlg('Добавить Карту в заказ?', 0, 3, 10000) = 6 then
begin
RK7.PerformOperation(rkoOpenDrawer, 0);
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(539), '1'); // код блюда 539
end;

Наверное, так надо

pixnet
04.02.2020, 12:32
Наверное, так надо

Ошибка в коде :(

SLion
05.02.2020, 01:38
Баланс begin и end нарушен, одного end; недостает
Потому ошибка.

pixnet
05.02.2020, 10:44
Баланс 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;

Ящик открывает, но карту добавляет и по да и по нет.

sibgaba
05.02.2020, 13:55
Ящик открывает, но карту добавляет и по да и по нет.

Вы правда совсем совсем не понимаете написанного кода?
Даже на уровне курса информатики???

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

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

SLion
05.02.2020, 13:57
Вот так, 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;

Ящик открывает, но карту добавляет и по да и по нет.

pixnet
05.02.2020, 18:11
Вы правда совсем совсем не понимаете написанного кода?
Даже на уровне курса информатики???

Какой-то ты злой sibgaba, я в программировании не силен.

Спасибо SLion, все нормально работает!

sibgaba
06.02.2020, 07:02
Какой-то ты злой sibgaba, я в программировании не силен.
Есть такое, согласен, но...

Беда, коль пироги начнет печи сапожник,
А сапоги тачать пирожник,
И дело не пойдет на лад.
Да и примечено стократ...