Для блокировки заказа от изменения в ходе обработки необходимо изменить форму.
Если нужно отредактировать заказ, удалите скидку из заказа. Это действие отменит блокировку и вы сможете дальше добавить или удалить товары в заказе.
Настройка форм
Перейдите в Настройки → Графический интерфейс → Формы, в группе «Заказ» выберите «Редактирование заказа» для обычного заказа или «Редактирование заказа (Быстрый чек)» для быстрого чека.
Выбираем «Редактор заказа» и создаем его копию. Меняем его название через поле комментарий.
После чего нажимаем на поле [Форма] в пункте Модель, в основном разделе
В появившемся окне, нам необходимо выбрать редактируемый элемент 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 😃