Ekran edycji zamówienia pozwala na wprowadzanie zmian inicjowanych przez wtyczkę
Począwszy od V7Preview5, wtyczka może edytować bieżące zamówienie za pomocą API bez otrzymywania EntityAlreadyInUseException :-)
Wcześniej, w V7Preview4 dodano możliwość edycji bieżącego zamówienia podczas obsługi karty lub kodu kreskowego ([więcej szczegółów]({% post_url 2020-07-24-order-edit-card-barcode-handlers%})). Teraz podobna funkcja jest dostępna w dowolnym momencie, gdy nie są wykonywane inne operacje.
Aby wprowadzić zmiany w zamówieniu otwartym na ekranie edycji, wtyczka musi wywołać metodę TryEditCurrentOrder i przekazać do niej odwołanie do callbacku, który Syrve POS wywoła, gdy tylko pojawi się taka możliwość.
Jeśli nie ma żadnej akcji, stanie się to natychmiast, a jeśli w tym momencie wykonywane są inne operacje, callback zostanie wywołany zaraz po ich zakończeniu.
W każdym przypadku metoda TryEditCurrentOrder zwróci kontrolę po wywołaniu callbacku.
Jeśli callback rzuci wyjątek, zostanie on rzucony z metody TryEditCurrentOrder.
Jeśli w momencie wywołania TryEditCurrentOrder trwała inna operacja, która ostatecznie doprowadziła do opuszczenia ekranu edycji zamówienia, callback nie zostanie wywołany ani natychmiast, ani z opóźnieniem, a metoda TryEditCurrentOrder wygeneruje wyjątek OperationCanceledException.
Na razie metoda TryEditCurrentOrder jest obsługiwana tylko na ekranie edycji zamówienia w trybie fast food lub restauracyjnym (IOrderEditScreen).
Później pojawi się wsparcie dla ekranów edycji dostaw, bankietów, płatności itp.
Podczas działania callbacku wyświetlany jest pasek postępu.
Do callbacku zostaną przesłane bieżące zamówienie oraz lokalna wersja IOperationService do edycji bieżącego zamówienia, a także IViewManager z możliwością wyświetlania okien dialogowych oraz zmiany tekstu na pasku postępu.
W oknie EditorTester dołączonym do SamplePlugin, gdzie zebrano przykłady edycji zamówień, dodano pole wyboru „Zastosuj zmiany do zamówienia otwartego w Syrve POS”; po jego zaznaczeniu zmiany są stosowane do aktualnie otwartego na ekranie zamówienia.