Preskoči na glavno vsebino

Vytvorenie objednávky na výrobu pomocou REST API

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

Avtor: Petr Pech

Objednávka pre výrobu vzniká z existujúcej objednávky vydanej: REST API prejde jej položky, rozloží ich podľa kusovníka na materiál a z neho vytvorí novú objednávku vydanú na vybraného dodávateľa. Aby to fungovalo, musia mať položky materiálu nastavený kusovník a mapovanie skladu.

ℹ️ Služba je dostupná iba nad evidenciou objednávok vydaných. Správanie funkcie v aplikácii popisuje článok Objednávka vydaná.


Zostavenie URL

Objednávanie pre výrobu je v REST API implementované ako virtuálna evidencia objednani s dvomi subevidenciami. Volanie prebieha v dvoch krokoch — najprv si vyžiadate zoznam materiálu, potom ho odošlete späť na tvorbu objednávky.

Adresa

Metódy

Čo robí

/c/{firma}/objednani/(filtr)/pro-vyrobu-zbozi

GET

Vráti materiál potrebný pre výrobu tovaru na vyfiltrovaných objednávkach.

/c/{firma}/objednani/(filtr)/pro-vyrobu

POST, PUT

Vytvorí objednávku materiálu od zadaných dodávateľov.

Podporované výstupné formáty sú XML a JSON, volia sa príponou v URL. Prehľad HTTP metód nájdete vo vývojárskej dokumentácii.

⚠️ Obe subevidencie vyžadujú filter v URL, ktorý identifikuje objekty z evidencie objednavka-vydana — zapisuje sa v okrúhlych zátvorkách medzi názov virtuálnej evidencie a názov subevidencie. Bez filtra vracia API 404 s kódom adresaNeplatnaUrl.


Získanie zoznamu materiálu

Dotaz metódou GET vráti materiál rozložený podľa kusovníka. Pri každej položke zbozi dostanete tieto vlastnosti:

Vlastnosť

Význam

cenik

Tovar, ktorý sa bude objednávať.

sklad

Sklad, do ktorého tovar patrí.

jizObjednano

Už objednané množstvo.

jizRezervovano

Vykryté rezervácie.

objednano

Množstvo na objednanie.

objednat

Objednávané množstvo — túto hodnotu je možné pred odoslaním upraviť.

skladem

Množstvo na sklade.

sklMinimum

Minimálne množstvo na sklade.

Na objednávke vydanej s ID 123 máme pripravený na výrobu tovar, ktorý má špecifikovaný kusovník:

GET https://demo.flexibee.eu/c/demo/objednani/(id=123)/pro-vyrobu-zbozi.xml

Odpoveďou je zoznam materiálu:

<?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>

Rovnaký dotaz je možné poslať aj v JSON:

GET https://demo.flexibee.eu/c/demo/objednani/(id=123)/pro-vyrobu-zbozi.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"
}
]
}
}


Vytvorenie objednávky pre výrobu

Získaný zoznam materiálu — s prípadne upravenou hodnotou objednat — odošlete späť ako telo požiadavky. Každý element objednaniProVyrobu vytvorí jednu objednávku vydanú a vyžaduje:

Element

Hodnota

typDokl

ID alebo kód objektu z evidencie typ-objednavky-vydane

dodavatel

ID alebo kód objektu z evidencie adresar

zboziProVyrobu

Zoznam elementov zbozi získaný zo subevidencie pro-vyrobu-zbozi

POST https://demo.flexibee.eu/c/demo/objednani/(id=123)/pro-vyrobu.xml
<?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>
</zboziProVyrobu>
</objednaniProVyrobu>
</winstrom>

Pri úspechu vracia API 201 Created s identifikátormi vytvorených objednávok vydaných:

<?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>

⚠️ Skontrolujte v odpovedi hodnotu created. Položku, pri ktorej nie je možné určiť sklad — napríklad preto, že ste v zbozi vynechali element sklad — služba preskočí, napriek tomu ale vráti 201 Created s created rovným nule a prázdnym elementom results.

Objednanie od viacerých dodávateľov

Element objednaniProVyrobu je možné v jednej požiadavke uviesť viackrát — pre každého dodávateľa vznikne samostatná objednávka:

POST https://demo.flexibee.eu/c/demo/objednani/(id=123)/pro-vyrobu.json
{
"winstrom": {
"@version": "1.0",
"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"
}
}
}
]
}
}

Objednanie v baleniach

Namiesto elementu objednat je možné použiť element objednatBaleni a zadať množstvo v baleniach. Balenia sú definované v cenníku pri tovare identifikovanom elementom cenik a v jednej požiadavke je možné skombinovať viac ich druhov. Každé balenie obsahuje:

  • id — identifikácia balenia v cenníku (hodnoty 1 až 5)

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

Ak máme balenie s id 1 po dvoch kusoch a balenie s id 2 po štyroch kusoch, nasledujúci dotaz objedná 10 kusov tovaru:

POST https://demo.flexibee.eu/c/demo/objednani/(id=123)/pro-vyrobu.json
{
"winstrom": {
"@version": "1.0",
"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"
}
}
}
}
}

Na položke vytvorenej objednávky sa uloží počet balení do mnozBaleni a prepočítané množstvo v merných jednotkách do mnozMj.


Neúspešné požiadavky

Situácia

Odpoveď

Metóda GET poslaná na subevidenciu pro-vyrobu

405 Method Not Allowed, success je false

V URL chýba filter objednávok

404, adresaNeplatnaUrlAdresa … není platná.

Objednávka je už objednaná do výroby, alebo neobsahuje položku tovaru s kusovníkom

400, obchodGenerNicProHromObjNebyly nalezeny žádné položky vhodné pro objednání.

Materiál z kusovníka nemá nastavené mapovanie skladu

400, mapSkladChybiPro položku ceníku 'DOPRAVA' není nastaveno mapování skladů.

V tele požiadavky chýba typDokl

400, importXmlMissingIdentifierIdentifikátor (typDokl) není uveden.

Preklep v názve elementu, napríklad doddavatel

400unexpected element (uri:"", local:"doddavatel"). Expected elements are <zboziProVyrobu>, <dodavatel>, <typDokl>

Chybová správa vzniká už pri čítaní zoznamu materiálu, nie až pri vytváraní objednávky — kódy obchodGenerNicProHromObj a mapSkladChybi preto uvidíte aj pri dotaze GET na pro-vyrobu-zbozi.

🚨 Subevidencia pro-vyrobu nerešpektuje parameter testovacieho uloženia ?dry-run=true — objednávka vydaná sa vytvorí aj s ním. Volanie si preto neskúšajte „na skúšku" v produkčnej firme.


Súvisiace

Ste s tem dobili odgovor na svoje vprašanje?