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ą (jest przydatna tylko dla zamówień dostawy)
Możesz także użyć metod o tej samej nazwie z operacji rozszerzających, gdzie sesja edycji jest tworzona niejawnie (w przeciwieństwie do wielu akcji zamówienia. Jeśli oprócz płatności potrzebujesz na przykład dodać gościa, użyj metod w ramach sesji edycji). Aby skonfigurować i zarejestrować typy płatności zewnętrznych, zobacz artykuł Typy płatności zewnętrznych.
Ograniczenia dotyczące płatności:
Płatność można dodać tylko, jeśli zamówienie jest Nowe lub Rachunek gościa jest wydrukowany, w przeciwnym razie metoda zgłasza 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 order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x => x.Kind == PaymentTypeKind.Cash);
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddPaymentItem(100m, null, paymentType, order);
- Dodawanie płatności kartą do zamówień dostawy
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() == "DINERS");
var additionalData = new CardPaymentItemAdditionalData { CardNumber = "123456" };
PluginContext.Operations.AddExternalPaymentItem(150, 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 na liście. 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.
Realizacja płatności zamówień
Do opłacania zamówień używane są następujące metody:
-
IOperationService.PayOrder — płatność zamówienia
-
IOperationService.PayOrderAndPayOutOnUser — płatność zamówienia dla kelnera
istnieje także metoda konwertująca płatność na przedpłatę w POS
- IOperationService.ProcessPrepay
Jeśli płatność jest realizowana za pomocą fiskalnej metody gotówkowej, to użytkownik, w imieniu którego wykonano IOperationService.PayOrderAndPayOutOnUser, będzie miał zarejestrowane fiskalne wypłacenie.
Przykłady
Realizacja zamówień opłaconych w całości
Załóżmy, że istnieje zamówienie IOrder, które należy zamknąć w Syrve POS. To zamówienie ma wystarczającą liczbę zaksięgowanych płatności: przedpłat dokonanych na ekranie kasy POS lub płatności zainicjowanych przez wtyczkę za pomocą metody AddExternalPaymentItem z ustawionym parametrem isProcessed na true. Można wtedy wywołać następującą metodę:
operationService.PayOrder(credentials, order);

Realizacja zamówień opłaconych gotówką dla kelnera
Załóżmy, że istnieje zamówienie IOrder, które należy w pełni opłacić gotówką 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);
Realizacja zamówień za pomocą wtyczek
Załóżmy, że istnieje zamówienie IOrder, które należy zrealizować za pomocą 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 (podczas głównej zmiany kasy) za pomocą metod IOperationService.PayOrder lub IOperationService.PayOrderAndPayOutOnUser, zamówienie zostanie zamknięte i umieszczone na odpowiedniej liście w Syrve POS, a wszystkie wymagane paragony i rachunek fiskalny zostaną wydrukowane.
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 przetworzonych zewnętrznie
Czasami konieczne jest dodanie płatności przetworzonych poza Syrve POS. Do tego służy metoda AddExternalPaymentItem. Parametr isProcessed jest ustawiony na true. W takim przypadku Syrve POS traktuje wymagane transakcje płatnicze jako przetworzone zewnętrznie. Dlatego nie przetwarza ich, lecz oznacza jako zaksięgowane.
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 Instance przed zamknięciem zamówienia. Wtedy należy dodać płatność AddExternalPaymentItem z parametrem isProcessed ustawionym na true. Następnie wywołaj metodę IOperationService.ProcessPrepay.
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 płatności zaliczkowych i konwertowanie ich na przedpłaty Syrve POS
Aby rozliczyć zamówienia dostawy, najpierw dodaj płatność zaliczkową za pomocą metody IEditSession.AddPreliminaryPaymentItem, a następnie wywołaj metodę IOperationService.ProcessPrepay.
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ą dokonywać przedpłat i dodawać napiwki za pomocą wtyczki (bez korzystania z funkcjonalności Syrve POS) jako płatności nieprzetworzone, które mają być dalej przetwarzane na POS. Płatność nieprzetworzona lub niezaksięgowana oznacza, że została utworzona z fałszywą flagą isProcessed. 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. do zbierania 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 instancji Syrve w następujący sposób:
Cicha płatność może być również udostępniona dla typu wtyczki zewnętrznej. Szczegóły znajdują się w artykule Metody Płatności Zewnętrznych.
Inne ustawienia:
-
Usuwanie płatności
-
I_EditSession.DeletePaymentItem — usuń płatność
-
IEditSession.DeleteExternalPaymentItem — usuń płatność zewnętrzną
-
IEditSession.DeletePreliminaryPaymentItem — usuń przedpłatę (jest przydatne tylko dla zamówień na dowóz)
-
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 można znaleźć w projekcie SDK SamplePaymentPlugin.