Przejdź do głównej zawartości

Mieszane pozycje postpaid i prepaid

Sesja stolika może zawierać jednocześnie pozycje postpaid wprowadzone przez kelnera i pozycje prepaid wysłane przez klienta na tym samym rachunku POS. Pozycje dodane przez kelnera przed skanowaniem przez klienta pojawiają się w początkowym snapshocie. Pozycje dodane przez kelnera po skanowaniu przychodzą jako TableOrderSnapshotChanged(POS_LINE_ADDED) razem z ewentualnymi pozycjami prepaid wysłanymi przez klienta, aż do ORDER_CLOSED.

Dwa warianty kompozycji zbudowane z istniejących wiadomości stolika, prepaid i rachunku postpaid pokrywają przestrzeń projektową. POS nie rozgałęzia logiki zależnie od wariantu realizowanego przez aplikację; oba są poprawnymi równoległymi ścieżkami dla tej samej otwartej sesji stolika.

Rozliczenie całego stolika

Ten wariant odpowiada intencji klienta przy finalizacji: „zapłać teraz za wszystko, w tym pozycje dodane przez kelnera”. Powstaje jedna płatność OpenApp i jeden zapis płatności widoczny dla POS.

  1. OpenApp wysyła OrderSubmissionRequested(orderContext=TABLE, items=[customer-added]) bez payment. Pozycje dodane przez klienta są wysyłane jako postpaid i dołączają do otwartego rachunku razem z pozycjami kelnera.
  2. OpenApp wysyła BillPreparationRequested(orderContext=TABLE, checkpoint) bez podzbioru items. POS zwraca pełny rachunek obejmujący pozycje dodane przez klienta i przez kelnera.
  3. OpenApp wykonuje płatność klienta za pełną kwotę.
  4. OpenApp wysyła BillPaymentCompleted(posBillId, payment). POS rejestruje płatność i wysyła TableOrderSnapshotChanged(ORDER_CLOSED) zgodnie z Płatnością rachunku postpaid.

Przedpłata pozycji klienta i osobne rozliczenie pozostałych

Ten wariant odpowiada intencji klienta: „opłać teraz to, co dodałem” - samodzielnie, z pozostawieniem pozostałych pozycji kelnerowi.

  1. OpenApp wysyła OrderSubmissionRequested(orderContext=TABLE, items=[customer-added], payment) z płatnością prepaid klienta za pozycje dodane przez klienta. POS akceptuje pozycje i zwraca paragon bezpośrednio w odpowiedzi. Mechanikę wysłania prepaid opisuje Zamawianie prepaid.
  2. W opcjonalnym albo odroczonym manualnym kroku rozliczenia pozostałej części OpenApp wysyła BillPreparationRequested(orderContext=TABLE, items=[waiter-line-refs]) dla pozostałego podzbioru, a następnie BillPaymentCompleted(posBillId, payment) po opłaceniu reszty przez klienta. Jeśli ten krok zostanie pominięty, kelner obsługuje resztę fizycznie.

Jeśli krok pozostałej części nie powiedzie się po udanym kroku prepaid, OpenApp zwraca tylko pozostałą część; pozycje dodane przez klienta pozostają opłacone i przypisane do rachunku.