Przejdź do głównej zawartości

Akcje płatności

Dodawanie płatności

Do dodawania płatności używane są następujące metody

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());

card

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:

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);

payOrder

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:

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());

cash

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);

card

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:

paymentType

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

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.