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:

  • 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.