Import zboží ze souboru XLSX

POST
/api/v2/import/products

Načte tabulku XLSX, která už je na serveru, a zpracuje z ní zboží firmy. Pro každý řádek (hlavičku na prvním řádku přeskočí) vezme kód produktu ze sloupce A a hledá nesmazaný produkt firmy se stejným kódem. Existující produkt upraví, jinak založí nový. Poté srovná jeho kategorie, sklady, ingredience a ceníky podle řádku.

Odkud se bere soubor

Operace nepřijímá soubor v těle požadavku. Pracuje se souborem, který už je na serveru, a najde ho podle dvojice file a table v rámci vaší firmy:

  • table=imports: soubor dříve nahraný k importu, například v aplikaci na obrazovce Import / Export.
  • table=exports: soubor vytvořený exportem zboží.

Co se v souboru čte

Čte se první (aktivní) list, sloupce A až AJ ve stejném pořadí, v jakém je vytváří export zboží; význam sloupců a hodnot popisuje návod Import / Export. Nejjednodušší cesta je vyexportovat zboží, v souboru upravit řádky a nahrát ho zpět.

Řádek se zpracuje, jen když jsou vyplněné sloupce A (Kod), C (Nazev), F (Merna jednotka), G (Mena nakupni ceny), H (DPH), I (s DPH? u nákupní ceny), L (Primarni DPH), M (s DPH? u prodejní ceny), Q (Skladove), T (Hlidani min a max), Y (Zadavat mnozstvi), Z (Hlasit do kuchyne), AA (Respektovat sklad), AB (Samostatne prodejne) a AC (Vytezovani).

  • Kód produktu se z hodnoty ve sloupci A upraví: odstraní se diakritika, písmena se převedou na velká a mezery, / a - se nahradí podtržítkem. Podle takto upraveného kódu se produkt hledá.
  • Ceny: když je v sloupci I (resp. M) 0, bere se cena bez DPH ze sloupce J (resp. N) a cena s DPH se dopočítá. Jinak se bere cena s DPH ze sloupce K (resp. O) a cena bez DPH se dopočítá. Výsledek se zaokrouhlí na dvě desetinná místa.
  • Kódy jednotky, měny a DPH se hledají v nastavení firmy. U existujícího produktu se nenalezená hodnota nezmění.
  • Kategorie, sklady, ingredience a ceníky (sloupce P, R až S, AD až AE, AH až AI) se srovnají podle řádku: co v řádku chybí, se od produktu odpojí (DETACHING), co přibylo, se přiřadí (ASSIGNING), změněné počty a ceny se přepíšou (UPDATING). Počty a ceny jsou čísla oddělená čárkou ve stejném pořadí jako kódy. Rozdílný počet kódů a čísel je chyba řádku.

Odpověď

Úspěšné zpracování je HTTP 200 s Content-Type: text/html; charset=UTF-8. Tělo není JSON, ale text, kde každý řádek končí <br />. Zprávy začínají INFO: (provedená změna), WARNING: (upozornění, například náhrada sekundárního DPH primárním) nebo ERROR: (problém na řádku, například ERROR: INVALID ROW (4) - ( ... ), ERROR: CATEGORY NOT FOUND, ERROR: STOCK NOT FOUND ..., ERROR: count(STOCKS) != count(COUNTS)). Když se nezpracoval žádný řádek, tělo je No rows processed.

Chybný řádek zpracování nezastaví a odpověď má i tak HTTP 200, proto čtěte tělo. Řádky se ukládají postupně, dříve zpracované řádky zůstanou uložené i při chybě v pozdějším řádku. Selhání před zpracováním (neplatné parametry, soubor nenalezen nebo nečitelný) vrací HTTP 400 nebo 404 s Content-Type: text/plain; charset=UTF-8 a textem začínajícím ERROR:. Chyby přihlášení vrací JSON se status a message. Viz Chybové stavy.

Autentizace a oprávnění

Vyžaduje API token: Bearer v hlavičce nebo URL token.

Parametry

Query parametry

NázevTypPovinnýPopisPříklad
fileinteger anoID souboru, který je už na serveru, ze skupiny určené parametrem `table`. Soubor musí patřit vaší firmě. 12
tableenum anoOdkud je soubor. `imports` = soubor nahraný k importu, `exports` = soubor vytvořený exportem. Jiná hodnota je chyba. imports

Příklad požadavku

curl

curl -X POST 'https://www.elpokladny.cz/api/v2/import/products?file=12&table=imports' \
  -H 'Authorization: Bearer elp_live_example.example_secret'

PHP

<?php
$ch = curl_init('https://www.elpokladny.cz/api/v2/import/products?file=12&table=imports');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array (
  0 => 'Authorization: Bearer elp_live_example.example_secret',
),
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

javascript

const response = await fetch("https://www.elpokladny.cz/api/v2/import/products?file=12&table=imports", {
    "method": "POST",
    "headers": {
        "Authorization": "Bearer elp_live_example.example_secret"
    }
});
const data = await response.json();

Ukázkové odpovědi

Zpráva o zpracování řádků (HTTP 200)

text/html; charset=UTF-8

WARNING: SECONDARY VAT () NOT FOUND - REPLACED BYPRIMARY VAT<br />INFO: INSERTED: (PRODUCT ID: 105 / CODE: KAVA / NAME: Káva<br />INFO: ASSIGNING CATEGORY "NAPOJE" TO PRODUCT<br />INFO: UPDATED: (PRODUCT ID: 77 / CODE: CAJ / NAME: Čaj<br />INFO: DETACHING CATEGORY "AKCE" FROM PRODUCT<br />ERROR: INVALID ROW (4) - ( A - Kod, C - Nazev )<br />

Soubor nenalezen (HTTP 404)

text/plain; charset=UTF-8

ERROR: file not found

Neplatné parametry (HTTP 400)

text/plain; charset=UTF-8

ERROR: invalid parameters

Chybí platné přihlášení (HTTP 401)

application/json

{
  "status": "error",
  "message": "Unauthorized"
}

Možné chyby

Chybové stavy

HTTPKdyPodoba
400Chybí `file` nebo `table`, `file` není kladné číslo, nebo `table` není `imports` ani `exports`. Tělo je `ERROR: invalid parameters`. text
400Soubor nejde přečíst jako tabulka. Tělo je `ERROR: cannot read spreadsheet`. text
404Soubor s tímto ID ve vaší firmě neexistuje (`ERROR: file not found`), nebo už není na serveru (`ERROR: file does not exist on disk`). text
401Chybí API token. Odpověď má hlavičku WWW-Authenticate: Bearer. status-message
401Neplatný, odvolaný nebo expirovaný API token (Bearer, api_token). Odpověď nemá hlavičku WWW-Authenticate. status-message
403API token se použil z IP adresy, která není u přístupu povolená. status-message

Související návody