Přeskočit na hlavní obsah

Generování faktur ze smluv přes API

Jak generovat faktury ze smluv přes REST API?

Autor: Petr Pech

Přes REST API — stejně jako přes webové rozhraní — lze vygenerovat faktury ze smluv, a to buď ze všech, nebo z jedné konkrétní. Jde o jednoduché volání metodou PUT nebo POST.


Sestavení URL

Adresa

Co udělá

/c/{firma}/smlouva/generovani-faktur.xml

Vygeneruje vydané faktury pro všechny odběratelské smlouvy.

/c/{firma}/smlouva/1/generovani-faktur.xml

Vygeneruje vydané faktury pro odběratelskou smlouvu s ID 1.

/c/{firma}/dodavatelska-smlouva/generovani-faktur.xml

Analogicky vygeneruje přijaté faktury z dodavatelských smluv.

PUT https://demo.flexibee.eu/c/demo/smlouva/generovani-faktur.xml
PUT https://demo.flexibee.eu/c/demo/dodavatelska-smlouva/generovani-faktur.xml

🚨 Volání nerespektuje parametr testovacího uložení ?dry-run=true — faktury se vytvoří i s ním. Nezkoušejte proto generování „na nečisto" v produkční firmě.


Parametry

Požadavek je možné doplnit volitelným parametrem datumGenerovani ve formátu ISO 8601 (YYYY-MM-DD); výchozí hodnotou je aktuální datum.

PUT https://demo.flexibee.eu/c/demo/smlouva/generovani-faktur.xml?datumGenerovani=2023-03-01

⚠️ Datum v jiném než uvedeném formátu neskončí chybou 400, ale 500 s hlášením Text 'nesmysl' could not be parsed at index 0. Formát si proto ověřte na straně integrace.


Výsledek

Odpověď v XML má následující podobu — obsahuje odkazy na vytvořené doklady, jedno souhrnné hlášení a případná chybová hlášení:

<?xml version="1.0"?>
<winstrom version="1.0">
<operation>Generování faktur</operation>
<success>ok</success>
<results>
<result>
<ref>/c/demo/faktura-vydana/1503</ref>
</result>
</results>
<messages>
<message>Počet úspěšně vygenerovaných faktur: 1</message>
</messages>
<errors></errors>
</winstrom>

Element success může nabývat těchto hodnot:

ok

Vygenerování faktur proběhlo v pořádku. Nemusely přitom vzniknout žádné faktury, pokud to nebylo potřeba — pak je v messages hlášení Nebyla vygenerována žádná nová faktura.

partial

Pro některé smlouvy vygenerování proběhlo v pořádku, u jiných došlo k chybě.

failed

Nebyly vygenerovány žádné faktury a u některých smluv došlo k chybě.

unknown

Nemělo by nikdy nastat.

⚠️ HTTP status je 200 i u partial a failed — úspěch tedy poznáte pouze z elementu success, ne ze statusu.


Odkazy na vytvořené doklady a chyby

Elementy result obsahují odkazy na vytvořené doklady, message souhrnné hlášení o úspěchu (nejvýše jedno) a error chybová hlášení — jedno pro každou smlouvu, u které došlo k chybě. Každá chyba nese messageCode a je uvozena kódem smlouvy:

<errors>
<error messageCode="polDoklNeniDostVyrobnichCisel">211&gt; - Není zadáno odpovídající množství výrobních čísel (0/64).</error>
<error messageCode="validace.neplatnyCiselnik">TEST_01 - Pole 'Kód z ceníku' obsahuje neplatnou položku číselníku.</error>
</errors>

Chyba u jedné smlouvy nezastaví generování ostatních — proto může celkový výsledek skončit jako partial.


Žurnál smluv

Každé generování — ruční i automatické — se zapíše do žurnálu, který je přes API dostupný na endpointu smlouva-zurnal:

GET https://demo.flexibee.eu/c/demo/smlouva-zurnal.xml?detail=full
<winstrom version="1.0">
<smlouva-zurnal>
<id>2</id>
<datCas>2019-11-18T09:20:57.413+01:00</datCas>
<transakceK showAs="Ruční generace">operaceZurnalSmlouvy.manualGenerace</transakceK>
<pocetOk>1</pocetOk>
<pocetErr>0</pocetErr>
<chyby></chyby>
<uzivatel>code:admin</uzivatel>
</smlouva-zurnal>
</winstrom>

Vlastnost transakceK rozlišuje operaceZurnalSmlouvy.manualGenerace (Ruční generace) a operaceZurnalSmlouvy.autoGenerace (Automatická generace); generování přes REST API se do žurnálu zapíše jako ruční.


Související

Dostali jste odpověď na svou otázku?