Napiwki i Darowizny
Dodawanie Napiwków
Do dodawania napiwków używana jest następująca metoda:
IPaymentItem AddDonation([NotNull] ICredentials credentials, [NotNull] IOrder order, [NotNull] IDonationType donationType, [NotNull] IPaymentType paymentType, [CanBeNull] IPaymentItemAdditionalData additionalData, bool isProcessed, decimal donationSum);
- Typ napiwków IDonationType jest przekazywany jako parametr. Listę dostępnych typów napiwków można uzyskać wywołując metodę IOperationService.GetDonationTypesCompatibleWith i przekazując do niej zamówienie jako parametr.
- Metoda płatności IPaymentType używana do przetwarzania napiwków jest również jednym z parametrów. Można sprawdzić, które metody płatności są dostępne dla wybranego typu napiwków, korzystając z wcześniej wybranego typu napiwków — IDonationType.PaymentTypes.
- Parametr
isProcessedinformuje, czy napiwki powinny zostać zaksięgowane w Syrve POS, czy zostały już zaksięgowane z zewnątrz.
Przykłady
- Dodawanie napiwków gotówkowych do otwartego zamówienia.
const bool isProcessed = true;
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var donationType = PluginContext.Operations.GetDonationTypesCompatibleWith(order).Last(dt => dt.PaymentTypes.Any(pt => pt.Kind == PaymentTypeKind.Cash));
var paymentType = donationType.PaymentTypes.First(x => x.Kind == PaymentTypeKind.Cash);
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddDonation(credentials, order, donationType, paymentType, null, isProcessed, order.ResultSum / 10);
order = PluginContext.Operations.GetOrderById(order.Id);
Debug.Assert(order.Donations.Contains(paymentItem));
- Dodawanie napiwków kartą bankową do zamkniętego zamówienia.
const bool isProcessed = true;
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.Closed);
var donationType = PluginContext.Operations.GetDonationTypesCompatibleWith(order).First(dt => dt.PaymentTypes.Any(pt => pt.Kind == PaymentTypeKind.Card));
var paymentType = donationType.PaymentTypes.First(x => x.Kind == PaymentTypeKind.Card && x.Name.ToUpper() == "VISA");
var additionalData = new CardPaymentItemAdditionalData { CardNumber = "123456" };
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddDonation(credentials, order, donationType, paymentType, additionalData, isProcessed, order.ResultSum / 4);
order = PluginContext.Operations.GetOrderById(order.Id);
Debug.Assert(order.Donations.Contains(paymentItem));
- Dodawanie napiwków pluginowych do otwartego zamówienia.
const bool isProcessed = false;
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var donationType = PluginContext.Operations.GetDonationTypesCompatibleWith(order).Last(dt => dt.PaymentTypes.Any(pt => pt.Kind == PaymentTypeKind.Cash));
var paymentType = donationType.PaymentTypes.First(x => x.Kind == PaymentTypeKind.Cash);
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddDonation(credentials, order, donationType, paymentType, null, isProcessed, order.ResultSum / 10);
order = PluginContext.Operations.GetOrderById(order.Id);
Debug.Assert(order.Donations.Contains(paymentItem));
- Dodawanie napiwków gotówkowych do otwartego zamówienia, które mają być przetworzone w Syrve POS.
const bool isProcessed = false;
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var donationType = PluginContext.Operations.GetDonationTypesCompatibleWith(order).Last(dt => dt.PaymentTypes.Any(pt => pt.Kind == PaymentTypeKind.Cash));
var paymentType = donationType.PaymentTypes.First(x => x.Kind == PaymentTypeKind.Cash);
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddDonation(credentials, order, donationType, paymentType, null, isProcessed, order.ResultSum / 10);
order = PluginContext.Operations.GetOrderById(order.Id);
Debug.Assert(order.Donations.Contains(paymentItem));
- Dodawanie napiwków kartą bankową do zamkniętego zamówienia, które mają być przetworzone w Syrve POS.
const bool isProcessed = false;
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.Closed);
var donationType = PluginContext.Operations.GetDonationTypesCompatibleWith(order).First(dt => dt.PaymentTypes.Any(pt => pt.Kind == PaymentTypeKind.Card));
var paymentType = donationType.PaymentTypes.First(x => x.Kind == PaymentTypeKind.Card && x.Name.ToUpper() == "VISA");
var additionalData = new CardPaymentItemAdditionalData { CardNumber = "123456" };
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddDonation(credentials, order, donationType, paymentType, additionalData, isProcessed, order.ResultSum / 4);
order = PluginContext.Operations.GetOrderById(order.Id);
Debug.Assert(order.Donations.Contains(paymentItem));
- Dodawanie nieprzetworzonych napiwków pluginowych do otwartego zamówienia. Należy zauważyć, że aby obsłużyć nieprzetworzone metody płatności, plugin powinien obsługiwać płatność Silent.
const bool isProcessed = false;
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var donationType = PluginContext.Operations.GetDonationTypesCompatibleWith(order).First(dt => dt.PaymentTypes.Any(pt => pt.Kind == PaymentTypeKind.External));
var paymentType = donationType.PaymentTypes.First(x => x.Kind == PaymentTypeKind.External && x.Name == "SampleApiPayment");
var additionalData = new ExternalPaymentItemAdditionalData { CustomData = Serializer.Serialize(new PaymentAdditionalData { SilentPay = true }) };
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddDonation(credentials, order, donationType, paymentType, additionalData, isProcessed, order.ResultSum / 2);
order = PluginContext.Operations.GetOrderById(order.Id);
Debug.Assert(order.Donations.Contains(paymentItem));
- Dodawanie napiwków podczas przetwarzania zewnętrznych płatności pluginowych. W tym przykładzie należy zmienić implementację metody IExternalPaymentProcessor.Pay.
public void Pay(decimal sum, [NotNull] IOrder order, Guid paymentTypeId, Guid transactionId, [NotNull] IPointOfSale pointOfSale, [NotNull] IUser cashier,
[NotNull] IOperationService operations, IReceiptPrinter printer, IViewManager viewManager, IPaymentDataContext context)
{
var donationType = operations.GetDonationTypesCompatibleWith(order).FirstOrDefault(dt => dt.PaymentTypes.Any(pt => pt.Kind == PaymentTypeKind.External));
if (donationType != null)
{
var paymentType = donationType.PaymentTypes.First(x => x.Kind == PaymentTypeKind.External && x.Name == "SampleApiPayment");
var additionalData = new ExternalPaymentItemAdditionalData { CustomData = Serializer.Serialize(new PaymentAdditionalData { SilentPay = true }) };
var credentials = operations.GetCredentials();
operations.AddDonation(credentials, order, donationType, paymentType, additionalData, false, order.ResultSum / 2);
}
}
Komentarze:
- Wyrażenie
PluginContext.Operations.GetOrders().Last(...)jest używane w przykładach, co oznacza pobranie jednego z najnowszych zamówień z listy. Podobne wyrażenia są używane do pobierania typów napiwków i płatności. Aby rozwiązać zadania biznesowe, należy użyć odpowiedniego kryterium wyboru. PluginContext.Operations.GetCredentials()— w dalszej części przykłady pokazują metodę rozszerzającą udostępnioną wyłącznie w celu pokazania, że najnowsze napiwki powinny znajdować się na liście napiwków zamówienia (chyba że ktoś je usunął w czasie między dodaniem a sprawdzeniem).
Uwaga:
- Szczegóły dotyczące płatności Silent można znaleźć w artykule External Payment Types.
- Szczegóły dotyczące płatności, zaliczek i przedpłat znajdują się w artykule Payment Actions.
Usuwanie Napiwków
Do usuwania napiwków z zamówienia używana jest następująca metoda:
IOperationService.DeleteDonation
void DeleteDonation([NotNull] ICredentials credentials, [NotNull] IOrder order, [NotNull] Data.Payments.IPaymentItem paymentItem);
- IPaymentItem (napiwki) jest jednym z parametrów, które należy usunąć.
- Listę podanych napiwków można uzyskać z IOrder.Donations.
Przykłady
- Próba usunięcia napiwków z zamówienia.
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New || o.Status == OrderStatus.Bill || o.Status == OrderStatus.Closed);
var donationItem = order.Donations.LastOrDefault();
if (donationItem != null)
{
PluginContext.Operations.DeleteDonation(PluginContext.Operations.GetCredentials(), order, donationItem);
}