Preskoči na glavno vsebino

Tvorba objednávky pre výrobu pomocou REST API

Ako vytvoriť objednávku vydanú pre výrobu cez REST API Flexi?

Avtor: Petr Pech

Táto funkcia slúži na vydanie objednávky do výroby. Z prijatej objednávky vytvoríme vydanú objednávku a z tej vytvoríme objednávku do výroby. Pre používanie tejto možnosti je potrebné mať správne nastavený kusovník a mapovanie skladu pre položky materiálu.

Táto funkcia je využiteľná iba pre evidenciu vydaných objednávok. Všeobecnú dokumentáciu k funkcii nájdete v dokumentácii aplikácie.

Zostavenie URL a URL parametre

Cez REST API možno z existujúcej vydanej objednávky vytvoriť objednávku pre výrobu pomocou virtuálnej evidencie objednani a jej subevidencií:

  • pro-vyrobu-zbozi

    • vráti materiály potrebné pre výrobu tovaru v daných objednávkach

    • je dostupná na adrese /c/{ID firmy}/objednani/pro-vyrobu-zbozi

    • volá sa metódou GET a vyžaduje filter v URL, ktorý identifikuje objekty z evidencie objednavka-vydana

    • vracia tovar s nasledujúcimi vlastnosťami:

      • cenik - tovar, ktorý sa bude objednávať

      • sklad - sklad, do ktorého tovar patrí

      • jizObjednano - už objednané množstvo

      • jizRezervovano - kryté rezervácie

      • objednano - množstvo na objednanie

      • objednat - objednávané množstvo (túto hodnotu možno pred odoslaním upraviť)

      • skladem - množstvo na sklade

      • sklMinimum - minimálne množstvo na sklade

  • pro-vyrobu

    • vytvorí objednávku tovaru od zadaných dodávateľov

    • je dostupná na adrese /c/{ID firmy}/objednani/pro-vyrobu

    • volá sa metódami POST alebo PUT a vyžaduje zadať:

Vytvorenie objednávky pre výrobu s použitím balení

Namiesto elementu objednat je možné použiť element objednatBaleni, v ktorom možno špecifikovať množstvo v baleniach. Je možné použiť jedno alebo viac druhov balení, ktoré sú definované v cenníku identifikovanom elementom cenik. Každé balenie musí obsahovať:

  • id - identifikácia balenia (hodnoty 1 až 5)

  • mnozMj - objednávané množstvo v baleniach (desatinné číslo)

Spôsob volania

Možno využiť HTTP metódu: GET alebo POST/PUT, podporované výstupné formáty sú XML alebo JSON.

Endpoint pre volanie služby obsahuje názov virtuálnej evidencie objednani a názov jej subevidencie pro-vyrobu-zbozi alebo pro-vyrobu:

  • Získanie tovaru

https://localhost:5434/c/{ID firmy}/objednani/(fitrace objednávek)/pro-vyrobu-zbozi.xml (.json).

  • Vytvorenie objednávky

https://localhost:5434/c/{ID firmy}/objednani/(fitrace objednávek)/pro-vyrobu.xml (.json).

Príklady použitia

Ako sme uviedli, volanie sa skladá z dvoch krokov. V prvom kroku získame materiál pre výrobu tovaru na vybranej objednávke. V ďalšom kroku tento zoznam zašleme na vytvorenie objednávky do výroby s uvedeným zoznamom materiálov.

1. získanie zoznamu materiálov v XML, na vydanej objednávke s ID = 123 máme pripravený na výrobu tovar KOLO, ktorý má špecifikovaný kusovník:

GET https://localhost:5434/c/firma_s_r_o_/objednani/(id=123)/pro-vyrobu-zbozi.xml

Odpoveď API je zoznam materiálov podľa kusovníka vrátane vyššie špecifikovaných polí:

<?xml version="1.0" ?>
<winstrom>
<zbozi>
<cenik>code:DRÁT</cenik>
<jizObjednano>680.9</jizObjednano>
<jizRezervovano>0.0</jizRezervovano>
<objednano>32.0</objednano>
<objednat>0.0</objednat>
<sklMinimum>0.0</sklMinimum>
<sklad>code:LIBEREC</sklad>
<skladem>49.7</skladem>
</zbozi>
<zbozi>
<cenik>code:STŘED</cenik>
<jizObjednano>0.0</jizObjednano>
<jizRezervovano>0.0</jizRezervovano>
<objednano>1.0</objednano>
<objednat>0.0</objednat>
<sklMinimum>0.0</sklMinimum>
<sklad>code:LIBEREC</sklad>
<skladem>112.0</skladem>
</zbozi>
<zbozi>
<cenik>code:RÁFEK</cenik>
<jizObjednano>0.0</jizObjednano>
<jizRezervovano>0.0</jizRezervovano>
<objednano>1.0</objednano>
<objednat>0.0</objednat>
<sklMinimum>0.0</sklMinimum>
<sklad>code:LIBEREC</sklad>
<skladem>122.0</skladem>
</zbozi>
</winstrom>

2. obdobné volanie možno realizovať pomocou JSON:

GET https://localhost:5434/c/firma_s_r_o_/objednani/(id=123)/pro-vyrobu-zbozi.json

Odpoveď API je zoznam materiálov podľa kusovníka vrátane vyššie špecifikovaných polí vo formáte JSON:

{
"winstrom": {
"zbozi": [
{
"cenik": "code:DRÁT",
"jizObjednano": "685.9",
"jizRezervovano": "0.0",
"objednano": "32.0",
"objednat": "0.0",
"sklMinimum": "0.0",
"sklad": "code:LIBEREC",
"skladem": "49.7"
},
{
"cenik": "code:STŘED",
"jizObjednano": "10.0",
"jizRezervovano": "0.0",
"objednano": "1.0",
"objednat": "0.0",
"sklMinimum": "0.0",
"sklad": "code:LIBEREC",
"skladem": "112.0"
},
{
"cenik": "code:RÁFEK",
"jizObjednano": "10.0",
"jizRezervovano": "0.0",
"objednano": "1.0",
"objednat": "0.0",
"sklMinimum": "0.0",
"sklad": "code:LIBEREC",
"skladem": "122.0"
}
]
}
}

3. získaný zoznam materiálov s prípadnou úpravou poľa objednat odovzdáme ako telo požiadavky na vytvorenie objednávky do výroby:

POST https://localhost:5434/c/firma_s_r_o_/objednani/(id=123)/pro-vyrobu.xml

Telo požiadavky:

<?xml version="1.0" ?>
<winstrom>
<objednaniProVyrobu>
<typDokl>code:VYROBA</typDokl>
<dodavatel>code:SIGNA</dodavatel>
<zboziProVyrobu>
<zbozi>
<cenik>code:DRÁT</cenik>
<jizObjednano>680.9</jizObjednano>
<jizRezervovano>0.0</jizRezervovano>
<objednano>32.0</objednano>
<objednat>5.0</objednat>
<sklMinimum>0.0</sklMinimum>
<sklad>code:LIBEREC</sklad>
<skladem>49.7</skladem>
</zbozi>
<zbozi>
<cenik>code:STŘED</cenik>
<jizObjednano>0.0</jizObjednano>
<jizRezervovano>0.0</jizRezervovano>
<objednano>1.0</objednano>
<objednat>10.0</objednat>
<sklMinimum>0.0</sklMinimum>
<sklad>code:LIBEREC</sklad>
<skladem>112.0</skladem>
</zbozi>
<zbozi>
<cenik>code:RÁFEK</cenik>
<jizObjednano>0.0</jizObjednano>
<jizRezervovano>0.0</jizRezervovano>
<objednano>1.0</objednano>
<objednat>10.0</objednat>
<sklMinimum>0.0</sklMinimum>
<sklad>code:LIBEREC</sklad>
<skladem>122.0</skladem>
</zbozi>
</zboziProVyrobu>
</objednaniProVyrobu>
</winstrom>

V prípade úspešného vytvorenia s návratovým kódom 201 Created a identifikátormi vytvorených vydaných objednávok:

<?xml version="1.0" encoding="utf-8"?>
<winstrom version="1.0">
<success>true</success>
<stats>
<created>1</created>
<updated>0</updated>
<deleted>0</deleted>
<skipped>0</skipped>
<failed>0</failed>
</stats>
<results>
<result>
<id>363</id>
</result>
</results>
</winstrom>

4. objednanie materiálov je možné aj pre viacerých dodávateľov a taktiež je podporovaný formát JSON:

POST https://localhost:5434/c/firma_s_r_o_/objednani/(id=123)/pro-vyrobu.json

Telo požiadavky:

{
"winstrom": {
"objednaniProVyrobu": [
{
"typDokl": "code:OBV",
"dodavatel": "code:DODAVATEL-A",
"zboziProVyrobu": {
"zbozi": {
"cenik": "5",
"sklad": "4",
"jizObjednano": "0.0",
"jizRezervovano": "0.0",
"objednano": "10.0",
"objednat": "10.0",
"sklMinimum": "0.0",
"skladem": "0.0"
}
}
},
{
"typDokl": "code:OBV",
"dodavatel": "code:DODAVATEL-B",
"zboziProVyrobu": {
"zbozi": {
"cenik": "6",
"sklad": "4",
"jizObjednano": "0.0",
"jizRezervovano": "0.0",
"objednano": "20.0",
"objednat": "20.0",
"sklMinimum": "0.0",
"skladem": "0.0"
}
}
}
],
"_version": "1.0"
}
}

5. objednanie balení v JSON. Ak máme napríklad balenie s id 1 po dvoch kusoch a balenie s id 2 po štyroch kusoch, môžeme nasledujúcim dotazom objednať 10 kusov tovaru.

POST https://localhost:5434/c/firma_s_r_o_/objednani/(id=123)/pro-vyrobu.json

Telo požiadavky:

{
"winstrom": {
"objednaniProVyrobu": {
"typDokl": "code:OBV",
"dodavatel": "code:DODAVATEL-A",
"zboziProVyrobu": {
"zbozi": {
"cenik": "5",
"sklad": "4",
"jizObjednano": "0.0",
"jizRezervovano": "0.0",
"objednano": "10.0",
"objednatBaleni": {
"baleni": [
{
"id": "1",
"mnozMj": "1.0"
},
{
"id": "2",
"mnozMj": "2.0"
}
]
},
"sklMinimum": "0.0",
"skladem": "0.0"
}
}
},
"@version": "1.0"
}
}

Neúspešné requesty

1. Nesprávne použitie HTTP metód, napríklad zaslanie metódy GET na subevidenciu pro-vyrobu:

Odpoveď API je 405 Method not Allowed "success": "false"

2. Ak je vydaná objednávka už objednaná do výroby alebo objednávka neobsahuje položku tovaru, ktorá má kusovník, API o tejto skutočnosti informuje správou:

"message": "Nebyly nalezeny žádné položky vhodné pro objednání."

3. Chybné zaslanie položky materiálu do výroby, ktorá nemá správne nastavený kusovník alebo mapovanie skladu.

"message": "Pro položku ceníku 'HRUŠKA' není nastaveno mapování skladů."

4. syntaktická chyba v zápise tela požiadavky na výrobu. Napríklad preklep v elemente dodavatel apod.:

"message": "unexpected element (uri:\"\", local:\"doddavatel\"). Expected elements are <{}zboziProVyrobu>,<{}dodavatel>,<{}typDokl>"

Potrebujete poradiť?

V prípade otázok k aplikácii nás kontaktujte na podporaflexi@abra.eu prípadne prostredníctvom okna chatu v pravom dolnom rohu.

Ste s tem dobili odgovor na svoje vprašanje?