Akcje płatności
Dodawanie płatności
Do dodawania płatności używane są następujące metody
-
IEditSession.AddPaymentItem— dodaj płatność -
IEditSession.AddExternalPaymentItem— dodaj płatność zewnętrzną -
IEditSession.AddPreliminaryPaymentItem— dodaj płatność zaliczkową (przydatne tylko dla zamówień na dowóz)
Można również użyć metod o tej samej nazwie rozszerzeń operacji, gdzie sesja edycyjna jest tworzona implicitnie (w przeciwieństwie do wielu akcji na zamówieniu. Jeśli oprócz płatności potrzebujesz na przykład dodać gościa, użyj metod w ramach sesji edycyjnej). Aby skonfigurować i zarejestrować zewnętrzne typy płatności, sprawdź artykuł Zewnętrzne typy płatności.
Ograniczenia dotyczące płatności:
Płatność można dodać tylko, jeśli zamówienie jest Nowe lub wydrukowano Rachunek gościa, w przeciwnym razie metoda rzuca wyjątek ConstraintViolationException. Ponadto nie można dodać kilku niezaksięgowanych płatności tego samego typu (UWAGA: planowane jest zniesienie tego ograniczenia).
Przykłady
- Dodawanie płatności gotówkowych
var deliveryOrder = PluginContext.Operations.GetDeliveryOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x => x.Kind == PaymentTypeKind.Card && x.Name.ToUpper() == "DINERS");
var additionalData = new CardPaymentItemAdditionalData { CardNumber = "123456" };
PluginContext.Operations.AddPreliminaryPaymentItem(150, additionalData, paymentType, deliveryOrder, PluginContext.Operations.GetCredentials());
- Dodawanie płatności kartą do zamówień na dowóz
var deliveryOrder = PluginContext.Operations.GetDeliveryOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x => x.Kind == PaymentTypeKind.Card && x.Name.ToUpper() == "DINERS");
var additionalData = new CardPaymentItemAdditionalData { CardNumber = "123456" };
PluginContext.Operations.AddPreliminaryPaymentItem(150, additionalData, paymentType, deliveryOrder, PluginContext.Operations.GetCredentials());
- Dodawanie zewnętrznych niezaksięgowanych płatności
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x => x.Kind == PaymentTypeKind.Card && x.Name.ToUpper() == "Visa Bank cards");
var additionalData = new CardPaymentItemAdditionalData { CardNumber = "123456" };
PluginContext.Operations.AddExternalPaymentItem(10, false, additionalData, paymentType, order, PluginContext.Operations.GetCredentials());

Komentarze:
- W przykładach użyto wyrażenia
PluginContext.Operations.GetOrders().Last(...), co oznacza pobranie ostatniego zamówienia z listy. Użyj odpowiedniego kryterium wyboru, aby rozwiązać zadania biznesowe. PluginContext.Operations.GetCredentials()— dalej w przykładach pokazano metodę rozszerzającą udostępnioną w przykładzie SamplePlugin.
Płatność za zamówienie
Do opłacania zamówień używane są następujące metody:
-
IOperationService.PayOrder— płatność za zamówienie -
IOperationService.PayOrderAndPayOutOnUser— płatność za zamówienie dla kelnera istnieje także metoda konwertująca płatność na przedpłatę w POS
Jeśli płatność jest realizowana metodą fiskalną, to użytkownik, w imieniu którego wykonano IOperationService.PayOrderAndPayOutOnUser, będzie miał fiskalne wypłaty.
Przykłady
Płatność za zamówienie, które ma wystarczające środki zdeponowane
Załóżmy, że istnieje zamówienie IOrder, które należy zamknąć w Syrve POS. To zamówienie ma wystarczającą ilość zaksięgowanych płatności: przedpłat dokonanych na ekranie kasy POS lub płatności inicjowanych przez wtyczkę za pomocą metody AddExternalPaymentItem z flagą isProcessed ustawioną na true. Dla tego zamówienia można wywołać następującą metodę:
operationService.PayOrder(credentials, order);

Płatność za zamówienie gotówką dla kelnera
Załóżmy, że istnieje IOrder order, które należy zapłacić gotówką w całości i zamknąć w Syrve POS. W tym celu wybierz odpowiedni paymentType. Następnie wywołaj metodę IOperationService.PayOrderAndPayOutOnUser. W poniższym przykładzie zamówienie jest w pełni opłacone gotówką:
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New || o.Status == OrderStatus.Bill);
var credentials = PluginContext.Operations.AuthenticateByPin("777");
var paymentType = operationService.GetPaymentTypesToPayOutOnUser().First(x => x.IsCash);
PluginContext.Operations.PayOrderAndPayOutOnUser(credentials, order, paymentType, order.ResultSum);
Płatność za zamówienie za pomocą wtyczek
Załóżmy, że istnieje IOrder order, które należy zapłacić przy użyciu metody płatności wtyczki.
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Single(i => i.Kind== PaymentTypeKind.External && i.Name == "SamplePaymentType");
var credentials = PluginContext.Operations.GetCredentials();
PluginContext.Operations.PayOrderAndPayOutOnUser(credentials, order, paymentType, order.ResultSum);
Komentarze:
- Podczas płacenia zamówień na głównej kasie (w trakcie zmiany kasy głównej) za pomocą metod
IOperationService.PayOrderlubIOperationService.PayOrderAndPayOutOnUser, zamówienie zostanie zamknięte i umieszczone na odpowiedniej liście w Syrve POS oraz wydrukowane zostaną wszystkie wymagane paragony i rachunek fiskalny.
Zwroty
Na razie zwroty i zwroty zamówień nie mogą być inicjowane przez wtyczkę, dlatego powinny być wykonywane na terminalach z Syrve POS przez użytkowników.
Przetwarzanie płatności
Dodawanie płatności przetwarzanych zewnętrznie
Czasami konieczne jest dodanie płatności przetwarzanych poza Syrve POS. W tym celu używana jest metoda AddExternalPaymentItem. Parametr isProcessed jest ustawiony na true. W takim przypadku Syrve POS traktuje wymagane transakcje płatnicze jako przetwarzane zewnętrznie. W związku z tym nie przetwarza ich, lecz oznacza jako zaksięgowane.
Przykład
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x => x.Kind == PaymentTypeKind.Cash);
PluginContext.Operations.AddExternalPaymentItem(150, true, null, paymentType, order, PluginContext.Operations.GetCredentials());

Dodawanie przetworzonych płatności i konwertowanie ich na przedpłaty Syrve POS
Od czasu do czasu takie płatności muszą zostać dodane do zamówienia i wyświetlone w raportach Syrve Office przed zamknięciem zamówienia. Wtedy należy dodać płatność AddExternalPaymentItem z parametrem isProcessed ustawionym na true. Następnie wywołać metodę IOperationService.ProcessPrepay.
Przykład
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x > x.Kind == PaymentTypeKind.Card && x.Name.ToUpper() == "DINERS");
var additionalData = new CardPaymentItemAdditionalData { CardNumber "123456" };
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddExternalPaymentItem(150, true, additionalData, paymentType, order, credentials);
order = PluginContext.Operations.GetOrderById(order.Id);
PluginContext.Operations.ProcessPrepay(credentials, order, paymentItem);

Dodawanie przedpłat i konwertowanie ich na przedpłaty Syrve POS
Aby zapłacić za zamówienie na dostawę, najpierw dodaj przedpłatę za pomocą metody IEditSession.AddPreliminaryPaymentItem, a następnie wywołaj metodę IOperationService.ProcessPrepay.
Przykład
var order = PluginContext.Operations.GetDeliveryOrders().Last(o => o.Status == OrderStatus.New || o.Status == OrderStatus.Bill);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(i => i.Kind == PaymentTypeKind.Cash);
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddPreliminaryPaymentItem(order.ResultSum, null, paymentType, order, credentials);
PluginContext.Operations.ProcessPrepay(credentials, PluginContext.Operations.GetDeliveryOrderById(order.Id), paymentItem);
Typy płatności obsługujące ciche przetwarzanie (Silent Payment)
Od czasu do czasu klienci muszą zaksięgować przedpłaty i dodać napiwki za pomocą wtyczki (bez korzystania z funkcjonalności Syrve POS) jako nieprzetworzone płatności, które zostaną dalej przetworzone na POS. Nieprzetworzona lub niezaksięgowana płatność oznacza, że została utworzona z flagą isProcessed ustawioną na false. Aby płatności mogły być przetwarzane przez wtyczkę, powinny obsługiwać tzw. cichą płatność — gdy przetwarzanie nie wymaga interakcji z interfejsem użytkownika Syrve POS (np. w celu zebrania danych). Zakłada się, że wszystkie niezbędne dane zostały zebrane. Niektóre typy płatności domyślnie obsługują cichą płatność:
- Gotówka
- Karty bankowe, których system płatności jest ustawiony na „Zewnętrzny”. System płatności musi być skonfigurowany w Syrve Office w następujący sposób:

Cicha płatność może być również udostępniona dla typu wtyczki zewnętrznej. Szczegóły znajdziesz w artykule Metody płatności zewnętrznych.
Inne ustawienia:
- Aby dodać napiwki, sprawdź proszę Napiwki.
Usuwanie płatności
-
IEditSession.DeletePaymentItem— usuń płatność -
IEditSession.DeleteExternalPaymentItem— usuń płatność zewnętrzną -
IEditSession.DeletePreliminaryPaymentItem— usuń przedpłatę (przydatne tylko dla zamówień na dostawę)
Przykład
- Usuwanie płatności zewnętrznych z zamówienia
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentItem = order.Payments.FirstOrDefault(i => i.IsExternal);
if (paymentItem != null)
PluginContext.Operations.DeleteExternalPaymentItem(paymentItem, order, PluginContext.Operations.GetCredentials());
Więcej przykładów znajdziesz w projekcie SDK SamplePaymentPlugin.