Przejdź do głównej zawartości

Niestandardowe funkcje kasy fiskalnej

Wprowadzenie

Możesz dodać dowolne operacje do listy poleceń kasy fiskalnej. Może to być konieczne na przykład, jeśli potrzebujesz, aby niektóre operacje były wykonywane przed lub po wydruku paragonów. Można to schematycznie przedstawić w następujący sposób:

DoCheque

Jeśli wtyczka musi przejąć kontrolę podczas drukowania paragonu płatności lub zwrotu albo podczas wpłat, wypłat oraz drukowania raportów X i Z, wystarczy zaimplementować interfejs IChequeTaskProcessor i zarejestrować go, wywołując metodę API RegisterChequeTaskProcessor():

var chequeTaskProcessor = new ChequeTaskProcessor()
PluginContext.Operations.RegisterChequeTaskProcessor(chequeTaskProcessor);

Wszystkie polecenia interfejsu IChequeTaskProcessor mogą przerwać główną operację: fiskalizację paragonu, wpłatę, wypłatę, drukowanie raportów X i Z. W tym celu należy wyrzucić dowolny typ wyjątku w ciele polecenia. Na przykład dodajemy warunek zabraniający wirtualnym drukarkom paragonów (FCR) zamykania zamówień:

public BeforeDoCheckActionResult BeforeDoCheckAction(ChequeTask chequeTask, ICashRegisterInfo device, CashRegisterChequeExtensions chequeExtensions, IViewManager viewManager)
{
// Przykład: pozwól na drukowanie paragonów płatności i przedpłat tylko na urządzeniach fizycznych.
if (device.IsVirtual)
throw new Exception("Kasa fiskalna jest wirtualna. Proszę zamknąć zamówienie na rzeczywistym urządzeniu.");

PluginContext.Log.InfoFormat("Przed drukowaniem paragonu: {0} ({1})", device.FriendlyName, device.Id);

...
}

Gdy zamówienie jest opłacone na wirtualnym FCR, Syrve POS wyświetli komunikat o błędzie, a zamówienie pozostanie otwarte:

BeforeDoChequeException

Przykład implementacji i rejestracji IChequeTaskProcessor znajdziesz w SDK SamplePlugin.

Interfejs IChequeTaskProcessor

Przyjrzyjmy się bliżej poleceniom IChequeTaskProcessor.

1. BeforeDoCheckAction

BeforeDoCheckAction() – polecenie wykonywane przed fiskalizacją paragonu. Może to być zamknięcie zamówienia, zwrot, drukowanie rachunku gościa, anulowanie rachunku gościa oraz zwrot produktu. Głównym celem jest sprawdzenie dostępności operacji oraz dodanie dodatkowych szczegółów do paragonu.

Jak dodać dodatkowe szczegóły do paragonu?

Można to zrobić na dwa sposoby:

  • Dodając szablon paragonu w „Syrve Office” > „Administracja” > „Szablony paragonów” > „Dodaj” > „Typ: Dodatek do paragonu fiskalnego”. Szablon zostanie dodany na dole paragonu chequeTask.TextAfterCheque. To nie jest niestandardowa funkcja FCR, więc nie trzeba rejestrować IChequeTaskProcessor.

AddChequeExtensionsSyrveOffice

public BeforeDoCheckActionResult BeforeDoCheckAction(ChequeTask chequeTask, ICashRegisterInfo device, CashRegisterChequeExtensions chequeExtensions, IViewManager viewManager)
{
var beforeCheque = new List<Data.Print.Document>();
var documentBefore = new Data.Print.Document();
documentBefore.Markup.Add(new XElement(Tags.LargeFont, "Witamy"));
documentBefore.Markup.Add(new XElement(Tags.SmallFont, "tel. 555-123456"));
beforeCheque.Add(documentBefore);

var afterCheque = new List<Data.Print.Document>();
var documentAfter = new Data.Print.Document();
documentBefore.Markup.Add(new XElement(Tags.SmallFont, "Dziękujemy za zakupy"));
documentBefore.Markup.Add(new XElement(Tags.QRCode, "en.syrve.help"));
beforeCheque.Add(documentAfter);

return new BeforeDoCheckActionResult
{
BeforeCheque = beforeCheque,
AfterCheque = afterCheque,
CashierName = "NazwaKasjera"
};
}

Argumenty funkcji BeforeDoCheckAction():

2. AfterDoCheckAction

AfterDoCheckAction() – polecenie wykonywane po operacji fiskalizacji paragonu. Głównym celem jest wykonanie końcowej akcji po wydruku paragonu. Na przykład, aby umieścić w kolejce operację eksportu do systemu zewnętrznego. Argument result opisuje wynik operacji FCR. result.Success = true — operacja zakończona sukcesem, w przeciwnym razie nie. Jeśli operacja nie powiodła się result.Success = false, opis błędu zostanie podany w result.Message.

3. BeforeXReport

BeforeXReport() — polecenie wykonywane przed wydrukowaniem raportu X. Przekazywane są następujące parametry: rejestr fiskalny wykonujący operację, IViewManager do wyświetlania komunikatów lub wprowadzania danych oraz użytkownik authUser, który zainicjował drukowanie raportu X.

4. AfterXReport

AfterXReport() — polecenie wykonywane po wydrukowaniu raportu X. Argumenty są podobne do polecenia AfterDoCheckAction.

5. BeforeZReport

BeforeZReport — polecenie wykonywane przed wydrukowaniem raportu Z. Parametry przekazują następujące dane: FCR, użytkownika oraz menedżera okien IViewManager.

6. AfterPayIn

AfterPayIn — polecenie wykonywane po wpłacie pieniędzy do kasy fiskalnej. Funkcja otrzymuje następujące dane: FCR, odpowiedź FCR podczas operacji wpłaty, menedżera okien IViewManager oraz kwotę wpłaconą do kasy fiskalnej.

7. AfterPayOut

AfterPayOut — polecenie wykonywane po wypłacie pieniędzy z kasy fiskalnej. Funkcja otrzymuje następujące dane: FCR, odpowiedź FCR podczas operacji wypłaty, menedżera okien IViewManager oraz kwotę wypłaconą z kasy fiskalnej.

Dodatkowe interfejsy IReadonlyChequeTaskProcessor oraz IEditableChequeTaskProcessor

Obok opisanego powyżej interfejsu IChequeTaskProcessor istnieją także rozszerzające interfejsy IReadonlyChequeTaskProcessor oraz IEditableChequeTaskProcessor, które pozwalają na wykonanie określonych zadań przed wpłatą i wypłatą.

Są one rejestrowane w taki sam sposób jak interfejs nadrzędny. Różnica między nimi polega jedynie na tym, że przy użyciu interfejsu IReadonlyChequeTaskProcessor wtyczka podczas wypłaty nie może edytować kwoty wypłaty, natomiast interfejs IEditableChequeTaskProcessor — może to zrobić za pomocą parametru ref estimatedSum. Zaimplementowano to, aby umożliwić wtyczce kontrolę kwot wypłat na koniec dnia.