Настройка блокировки заказа от изменений

Последние изменения: 19.09.2024

Для блокировки заказа от изменения в ходе обработки необходимо изменить форму. 

Если нужно отредактировать заказ, удалите скидку из заказа. Это действие отменит блокировку и вы сможете дальше добавить или удалить товары в заказе. 


Настройка форм

Перейдите в НастройкиГрафический интерфейс Формы, в группе «Заказ» выберите «Редактирование заказа» для обычного заказа или «Редактирование заказа (Быстрый чек)» для быстрого чека.

Выбираем «Редактор заказа» и создаем его копию. Меняем его название через поле комментарий.

После чего нажимаем на поле [Форма] в пункте Модель, в основном разделе

В появившемся окне, нам необходимо выбрать редактируемый элемент CheckView, после чего перейти во вкладку события и выбрать событие OnBeforeCheckViewEdit

После чего необходимо заменить функцию CheckViewOnBeforeCheckViewEdit на код ниже.
Важно! Предварительно необходимо заменить:

  • код 12, на код скидки «Карта гостя»;

  • код 3, на код скидки «Промокод»;

  • код 14, на код скидки .

function CheckPremiumBonusDiscount: boolean;

var

isDiscountExists: boolean;

i: integer;

it: TCheckItem;

begin

isDiscountExists := False;

for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do

begin

if isDiscountExists then break;

it := RKCheck.CurrentOrder.Sessions.Lines[i];

if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountitem') then

if (it.CODE = 12) and (it.state <> disDeleted) then

isDiscountExists := True;

end;

result := isDiscountExists;

end;

procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);

var

BlockOperation :boolean;

begin

dbg.dbgprint('OnBeforeCheckViewEdit ' + TCheckItem(AObjectAft).Name + ' ' + GetClassName(AObjectAft));

if (CheckPremiumBonusDiscount) then

begin

if SYS.ObjectInheritsFrom(AObjectAft, 'TDish') then

BlockOperation := true;

if (SYS.ObjectInheritsFrom(AObjectAft, 'TDiscountItem')) then

begin

if (AEditType = etRemove) and (TCheckItem(AObjectAft).Code <> 12) then

BlockOperation := true;

if (AEditType = etInsert) and (TCheckItem(AObjectAft).Code <> 3) and (TCheckItem(AObjectAft).Code <> 14) then

BlockOperation := true;

end;

if (BlockOperation) then

begin

AAllow := False;

AMessage := 'Запрещено изменение заказа, пока в заказе присутствует карта гостя!';

end;

end;

end;

var

ButtonsList : TStringList;

N :integer;

procedure MainSelectorOnSuitableObjectScript(Sender: TBasePanel; Obj: TObject; var Suitable: boolean);

begin

if GUI.CheckFormInPayMode then

if Suitable then

begin

N := ButtonsList.Count;

dbg.dbgprint(GetClassname(Obj));

if SYS.ObjectInheritsFrom(Obj, 'TMcrPay') then

begin

dbg.dbgprint('TMcrPay ' + 'Owner= ' + TMcrPay(Obj).Owner + ' Interface= ' + IntToStr(TMcrPay(Obj).AddByInterface) + ' AccountIdent= ' + IntToStr(TMcrPay(Obj).AccountIdent));

ButtonsList.Add(IntToStr(TMcrPay(Obj).AccountIdent) + '=' + IntToStr(TMcrPay(Obj).AddByInterface));

end;

if SYS.ObjectInheritsFrom(Obj, 'TMcrCoupon') then

begin

dbg.dbgprint('TMcrCoupon ' + 'Owner= ' + TMcrCoupon(Obj).Name + ' Interface= ' + IntToStr(TMcrCoupon(Obj).IntfID) + ' AccountIdent= ' + IntToStr(TMcrCoupon(Obj).AccountID));

ButtonsList.Add(IntToStr(TMcrCoupon(Obj).AccountID) + '=' + IntToStr(TMcrCoupon(Obj).IntfID));

end;

if SYS.ObjectInheritsFrom(Obj, 'TMcrPay') OR SYS.ObjectInheritsFrom(Obj, 'TMcrCoupon') then

if (ButtonsList.Count = N) then Suitable := false;

dbg.dbgprint(ButtonsList.Text);

end;

end;

procedure MainSelectorOnNewPathScript();

begin

ButtonsList := TStringList.Create;

ButtonsList.Sorted := true;

ButtonsList.Duplicates := dupIgnore;

end;

После этого необходимо сохранить изменения.

Следующим шагом переходим в раздел НастройкиГрафический интерфейс Схемы форм и создаем копию элемента «Новый дизайн». После чего, в созданной копии находим раздел: Редактирование заказа и, в зависимости от разрешения, выбираем нужное и устанавливаем на него отредактированную нами ранее форму

Аналогично поступаем с быстрым чеком, при необходимости.

Последнее, что необходимо настроить НастройкиГрафический интерфейс Использование схем форм. Внутри, нам требуется перенести созданный нами интерфейс в главную рабочую область:

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



Если вы не нашли ответ на свой вопрос, задайте его нам в Telegram @SamosaleSupport_Bot 😃



Помогла ли вам статья?