Do serwisu można wysyłać dowolne polecenia sterujące, jednak dla wygody użytkowania najczęściej używane funkcje jak wydruk paragonów czy wydruk faktur (od wersji 2.3) mają dedykowane restpointy.
Pojedyncza faktura
Aby wydrukować fakturę, wystarczy wysłać poniższy request z konsoli (lub z dowolnego programu do wysyłania requestów HTTP, np Fiddler lub Postman).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
curl -XPOST "http://localhost:3050/faktura" -H 'Content-Type: application/json' -d'{ "lines" : [ { "na": "Towar 1", "il": 1.0, "vt": 0,"pr": 2350}, { "na": "Towar 2", "il": 1.0, "vt": 0,"pr": 1150} ], "header" : { "nb": "56/2020", "ni": "584-222-98-89", "na": ["Nazwa firmy", "ul. Miejska 56", "88-888 Miasto"], "pd": "2020-02-15", "pt": "przelew" }, "headerex" : { "nr": "WX 12345", "zs": "45/25/2000358", "oz": "Jan Kowalski", "zk": "789/75CGX", "nk": "DX12", "wd": "Warunki dostawy", "sd": "Sposób dostawy" }, "summary" : { "to": 3500 } }' |
Polecenie wydrukuje poniższą fakturę na drukarce:
Paczka dystrybucyjna zawiera katalog docs/ a w nim pliki HTML z przykładowymi requestami do serwisu.
W przypadku wydruku faktur nie zawsze wiadomo który indeks stawki odpowiada jakiej stawce VAT. Aby nie odpytywać za każdym razem drukarki lub tym bardziej nie trzymać konfiguracji w kodzie, PosnetServer pozwala wygodnie przekazać stawkę VAT w formacie “23,00”, “8,00” lub “A”, “B” itd. Przykład:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
curl -XPOST "http://localhost:3050/faktura" -H 'Content-Type: application/json' -d'{ "lines" : [ { "na": "Towar 1", "il": 1.0, "vtp": "23,00","pr": 2350}, { "na": "Towar 2", "il": 1.0, "vtp": "23,00","pr": 1150} ], "header" : { "nb": "56/2020", "ni": "584-222-98-89", "na": ["Nazwa firmy", "ul. Miejska 56", "88-888 Miasto"], "pd": "2020-02-15", "pt": "przelew" }, "summary" : { "to": 3500 } }' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
curl -XPOST "http://localhost:3050/faktura" -H 'Content-Type: application/json' -d'{ "lines" : [ { "na": "Towar 1", "il": 1.0, "vtn": "A","pr": 2350}, { "na": "Towar 2", "il": 1.0, "vtn": "A","pr": 1150} ], "header" : { "nb": "56/2020", "ni": "584-222-98-89", "na": ["Nazwa firmy", "ul. Miejska 56", "88-888 Miasto"], "pd": "2020-02-15", "pt": "przelew" }, "summary" : { "to": 3500 } }' |
Wiele faktur
Często chcemy wydrukować wiele faktur na raz. W takiej sytuacji możemy skorzystać z requestu /faktury.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
curl -XPOST "http://localhost:3050/faktury" -H 'Content-Type: application/json' -d'[{ lines : [ { na: "Towar 1", il: 1.0, vt: 0,pr: 12356}, { na: "Towar 2", il: 1.0, vt: 0,pr: 34567} ], "header" : { "nb": "56/2020", "ni": "584-222-98-89", "na": ["Nazwa firmy", "ul. Miejska 56", "88-888 Miasto"], "pd": "2020-02-15", "pt": "przelew" }, summary : { to: 46923 } }, { lines : [ { na: "Towar 3", il: 1.0, vt: 0,pr: 12356}, { na: "Towar 4", il: 1.0, vt: 0,pr: 34567} ], "header" : { "nb": "56/2020", "ni": "584-222-98-89", "na": ["Nazwa firmy", "ul. Miejska 56", "88-888 Miasto"], "pd": "2020-02-15", "pt": "przelew" }, summary : { to: 46923 } }]' |
Powyższy request wydrukuje 2 faktury na drukarce.
Drukowanie asynchroniczne (OPCJA 1)
Drukarki fiskalne nie należą do najszybszych, stąd pojedynczy request do serwisu może trwać od kilku do nawet kilkunastu sekund, blokując tym samym proces requestujący. Aby otrzymać szybko zwrot i nie czekać na zakończenie drukowania, należy dodać w URL “?async=true“. Dzięki temu PostnetServer przyjmie request i doda go do kolejki, zwracając niezwłocznie 200OK do procesu requetsującego. Drukowanie faktury rozpocznie się jak tylko drukarka będzie gotowa. Status requestu asynchronicznego można sprawdzić odpytując restpoint /faktura podając identyfikator transakcji asynchronicznej.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
curl -XPOST "http://localhost:3050/faktura?async=true" -H 'Content-Type: application/json' -d'{ "lines" : [ { "na": "Towar 1", "il": 1.0, "vt": 0,"pr": 2350}, { "na": "Towar 2", "il": 1.0, "vt": 0,"pr": 1150} ], "header" : { "nb": "56/2020", "ni": "584-222-98-89", "na": ["Nazwa firmy", "ul. Miejska 56", "88-888 Miasto"], "pd": "2020-02-15", "pt": "przelew" }, "summary" : { "to": 3500 } }' |
Sprawdzenie statusu (gdzie 5f1c29d0-3284-4bb7-878c-4cf6f992591b to identyfikator transakcji asynchronicznej zwrócony w odpowiedzi na poprzedni request):
1 |
curl -XGET "http://localhost:3050/faktura/5f1c29d0-3284-4bb7-878c-4cf6f992591b" -H 'Content-Type: application/json' |
DRUKOWANIE ASYNCHRONICZNE (OPCJA 1)
Node.js działa w jednym wątku, co oznacza że kolejne wołanie asynchroniczne (z parametrem ?async=true) będzie i tak oczekiwało na zakończenie aktualnego wydruku. Najlepszym rozwiązaniem aby zapewnić pełną asynchroniczność jest użycie kolejki requestów w formie “proxy” przed PostnetServer’em. Jest wiele sposobów na stworzenie takiej architektury, niemniej jednak w naszym publicznym repozytorium github, zamieszczamy kod przykładowego rozwiązania
https://github.com/bigdotsoftware/posnetserver-async-proxy
dodatkowe linie
Aby wstawić dodatkowe linie do faktury, wyślij request z uzupełnioną strukturą headerex jak w pierwszym przykładzie.