Login
API (Application programming interface)

Program dokáže komunikovať s inými aplikáciami cez https od 2011/04. Odpovede sú v JSON formáte. Dopyty sú GET/POST.


Dostupné actions v API
action=tns ukaz tovar na sklade, skladoch [GET]
action=tns_sklady ukaz tovar na skladoch po skladoch (GROUP BY sklad) [GET]
action=tns_cisla ukaz vsetky tovarove karty, ak je na sklade tak aj mnozstvo. Posielate skupinu cisiel tovarov cez post. [GET+POST]
action=import_tovar_karta import tovarovych kariet, z vasho eshopu alebo dodavatela [GET+POST]
action=update_tovar_karta update tovarovych kariet, z vasho eshopu alebo dodavatela [GET+POST]
action=partner ukaz partnerov - dodavatelia, odberatelia [GET]
action=tns_sklady_sarza ukaz tovar na skladoch po skladoch a po sarziach (GROUP BY sklad, sarza) [GET]
action=prijemka_save uloz skladovu prijemku [GET+POST]
action=vydajka_save uloz skladovu vydajku [GET+POST]
action=sklady vráti zoznam skladov
action=tovar_karta_all vráti zoznam všetkých skladových kariet
action=tovar_karta_bulk_sync update+insert tovarových kariet (z eshopu)
action=objedn_dosla_save uloz doslu objednavku [GET+POST]
action=dashboard_sklad sum pohybov na sklade za posl. 12 mesiacov [GET]

Každý admin firmy má k dispozícii aj modul API, ktorý môže aktivovať a povoliť komunikáciu s externými programami.



Dotazy posielate z Vášho servera cez GET alebo POST.
Program odpovedá v JSON formáte.
Príklad PHP: tovar na sklade podľa čísla tovarovej karty


$jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=tns&cislo=0001";
$json = file_get_contents($jsonurl);
$result = json_decode($json, true);
print_r($result); //tu mame len jeden zaznam, tovar cislo 0001

Odpoveď:
Array
(
	[17] => Array
	(
		[n_tovar_id] => 17
		[s_nazov] => banány taliansko
		[s_ean13] =>
		[s_cislo] => 0001
		[mnozstvo] => 143
		[mj] => kg
		[c_hodnota_mj_avg] => 2.210500000000
		[c_cena_mj] => 3.3350000
		[c_cena_dph_mj] => 3.5350000
		[reserve] => 0
	)
)
 
17 je ID tovaru.

Server vracia okrem množstva na sklade aj ďalšie údaje, ktoré môžete použiť. Ak chcete, aby si Váš klient mohol nastavovať aj maržu v e-shope, tak [c_hodnota_mj_avg] je priemerná skladová cena za kus (resp. mernú jednotku). Polia [cena] je predajná cena bez DPH a s DPH, aká je nastavená na tovarovej karte.

Ak používa Váš klient viac skladov, napríklad má viac pobočiek, môžete vypisovať aj to, na ktorých skladoch sa tovar nachádza.

action=tns

Zobrazí všetky tovarové karty z databázy a pokiaľ sa nachádzajú na sklade, tak aj SUM() množstva na všetkých skladoch.

Možné parametre:
tovar_id= id tovarovej karty
cislo= cislo tovarovej karty
ean13= ciarovy kod z tovarovej karty
sarza= výrobná šarža tovaru, alebo sériové číslo alebo výrobné číslo. Množstvo je GROUP BY šarza
sklad_cid = ID skladu. Ak pošlete, zobrazí len tovary z tohto skladu.
dmod = dátum v SK formáte: dátum poslednej modifikácie tovarovej karty. Ak pošlete, zobrazí len tie tovary, v ktorých bola zmenená tovarová karta od tohto dátumu (vrátane). Dá sa použiť ak si chcete načítať len nové a zmenené karty (názov, predajná cena atď). Množstvo na sklade a skladová cena s týmto dátumom nesúvisia.
Pozn.: Zmazané tovarové karty neposiela, pokiaľ je množstvo na sklade nula.

action=tns_sklady

Zobrazí všetky tovarové karty z databázy a pokiaľ sa nachádzajú na skladoch, tak aj množstvá po skladoch a názov a ID skladu.

Možné parametre:
tovar_id= id tovarovej karty
cislo= cislo tovarovej karty
ean13= ciarovy kod z tovarovej karty
sarza= výrobná šarža tovaru, alebo sériové číslo alebo výrobné číslo
sklad_cid = ID skladu. Ak pošlete, zobrazí len tovary z tohto skladu.
dmod = dátum v SK formáte: dátum poslednej modifikácie tovarovej karty. Ak pošlete, zobrazí len tie tovary, v ktorých bola zmenená tovarová karta od tohto dátumu (vrátane). Dá sa použiť ak si chcete načítať len nové a zmenené karty (názov, predajná cena atď). Množstvo na sklade a skladová cena s týmto dátumom nesúvisia.
Pozn.: Zmazané tovarové karty neposiela, pokiaľ je množstvo na sklade nula.

Odpoveď:

Array
(
    [5] => Array
        (
            [n_tovar_id] => 5
            [s_nazov] => banány taliansko
            [s_ean13] =>
            [s_cislo] => 0001
            [mnozstvo] => 143
            [mj] => kg
            [c_hodnota_mj_avg] => 2.210500000000
            [c_cena_mj] => 3.3350000
            [c_cena_dph_mj] => 3.5350000
            [sklad_id] => 1
            [s_sklad] => Sklad 1
        )

    [21] => Array
        (
            [n_tovar_id] => 21
            [s_nazov] => citróny španielsko
            [s_ean13] =>
            [s_cislo] => 0002
            [mnozstvo] => 39
            [mj] => kg
            [c_hodnota_mj_avg] => 2.100000000000
            [c_cena_mj] => 3.7500000
            [c_cena_dph_mj] => 3.9500000
            [sklad_id] => 1
            [s_sklad] => Sklad 1
        )

    [133] => Array
        (
            [n_tovar_id] => 133
            [s_nazov] => olivy grécko
            [s_ean13] =>
            [s_cislo] => 0003
            [mnozstvo] => 0
            [mj] => ks
            [c_hodnota_mj_avg] => 0.000000000000
            [c_cena_mj] => 5.0000000
            [c_cena_dph_mj] => 5.2000000
            [sklad_id] => 1
            [s_sklad] => Sklad 1
        )
 )

Odpovede zo servera môžete použiť aj na napĺňanie databázy tovarov do eshopu. Ak už niečo klient raz napríjemkuje do skladu, bude to mať pripravené na publikáciu v eshope.
Môžete si dať načítať všetky tovary z účtoonline a tovar_id ktoré nemáte v databáze eshopu ponúknuť užívateľovi na nahratie. Klient pridá popis a obrázky atď.
Alebo môžete aj updatovať ceny v eshope, ak si klient želá mať v eshope ceny podľa cien v sklade účtoonline. Rovnaké alebo so zľavou 10% a podobne.
Môžete si nechať načítavať iba tovary, ktoré boli editované od nejakého dátumu cez parameter dmod.

Ako naprogramovať eshop a prepojiť so skladom v účte online:

V eshope máte svoju databázu, kde máte rozšírené popisy, obrázky k tovarom atď.
V účto online je jedinečný identifikátor tovaru ID (n_tovar_id).
Preto treba prepojiť Vašu databázu s databázou účto cez toto ID. Spravte si teda vo vašej DB stĺpec ucto_id.

Aby ste zabezpečili konzistenciu eshop databázy so skladom zákazníka, ideálne je, aby základom pre eshop databázu bola databáza z účta (teda sklad z účta online).
To znamená, keď klient prijme nový tovar na sklad, alebo vytvorí tovarovú kartu v účte online, tak sa vytvorí záznam aj v databáze eshop, kde bude môcť klient pridať obrázky a popisy.
Toto môžete naprogramovať v administrácii eshopu, kde dáte button "Načítať nové tovary z účta online".
Po stlačení pošlete dotaz cez API, ktorý Vám vráti všetky tovary, ktoré boli zmenené od posledného načítania - teda aj nové tovary.
Na to je v API parameter dmod (date modified).
$jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=tns&dmod=26.8.2012";

Musíte si teda niekam ukladať dátum posledného načítavania.
V prípade, že máte málo tovarov, môžete načítať celú databázu a nahrať do svojej databázy len tie karty, ktoré tam nie sú, a nemúsíte sa zdržiavať dátumom zmeny.
Na rozlišovanie použite ID z ucto online (n_tovar_id).
Číslo tovaru (s_cislo) z účto online nemusí byť jedinečné, lebo užívateľ má povolené ho editovať ako chce, takže môže vzniknúť duplicita. (Dôvod: Niektorí zákazníci to tak chcú, napríklad preto, lebo ako číslo tovaru používajú skladové číslo dodávateľa, a ten môže mať duplicitu a ....)

Zobrazovanie eshopu pre zákazníka:

Tu sa treba rozhodnúť, či chcete mať zobrazovanie úplne online, alebo budete updatovať cez dávky (batch).
K rozhodovaniu by ste mali zo zákazníkom prekonzultovať, akým spôsobom chce fungovať.
Ak predáva v predajni a zároveň cez eshop, treba to zosynchronizovať. Ubúda a pribúda množstvo na sklade v účtoonline a úbúda v eshope.

Stav z účta dostávate cez API, stav objednávok v eshope musíte naprogramovať. Zákazník eshopu by teda mal vidieť stav v účtoonline mínus potvrdené objednávky cez eshop.
Možno stačí updatovať stav z účta raz za deň, možno raz za hodinu (cron), alebo to chcete úplne online.

Pokiaľ to chcete prepojiť úplne online, treba zvážiť ideálny performance pre váš program.
Máte cyklus, ktorým zobrazujete položky z eshop databázy.
Ak sa pri každej položke budete dopytovať cez API do účtoonline na cenu, množstvo, názov atď., tak vám to pôjde pomaly. Dôvod je, že váš server pošle po sieti požiadavku na server účta online, ten spraví SQL dopyt, potom HTTP odpoveď, potom to váš server musí prijať a spracovať. Preto je múdrejšie poslať len jednu požiadavku cez API, kde si vyžiadate všetky karty naraz a uložíte si ich do PHP poľa, ako žiadať po jednom.

Tu je porovnanie rýchlosti:
vypýtanie si jednej položky cez API: 0,14 sekundy
vypýtanie si 3000 položiek cez API: 0,34 sekundy

Preto aj keď na Vašej stránke eshopu zobrazujete vždy len cca 20 položiek, vždy si radšej vypýtajte cez API celý sklad (všetky položky). 20 položiek po jednom by zobralo 0,14*20=2,8sekundy.

Keď si vypýtate všetky položky, dostanete pole, ako je popísané vyššie. Kľúč poľa je ID a hodnota je zasa pole, s kľúčmi a s hodnotami.
Pri zobrazovaní tých 20 položiek v eshope si teda môžete cez ID vypýtať komplet údaje z vášho PHP poľa.



$jsonurl = "https://www.uctoonline.sk/api.php?key=4bf8b826e5e6afebe2024f7e9f986a13&action=tns";
$json = file_get_contents($jsonurl);
$api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie

//eshop zobrazovanie
$resultset = mysql_query("SELECT * FROM my_eshop ORDER BY cena LIMIT 1,20");

while ($row = mysql_fetch_array($resultset) )
{
	$tovar = $api[$row["ucto_id"]]; //kompletne pole z uctoonline o tovare

	echo $row["popis_tovaru"]; //z eshop databazy
	echo $tovar["c_cena_dph_mj"] //z ucto online, predajna cena s DPH
	//... atd. obrazky
}

 

Ak máte 5 či 10.000 položiek, treba zvážiť radšej updatovanie v dávkach.
Tu je stručný postup ako môžete spúšťať PHP scripty cez cron:
http://www.thegeekstuff.com/2011/07/php-cron-job/

action=tns_cisla

Ukáž tovarové karty, množstvo na sklade ak je nejaké, ceny atď.
Môžete poslať v poli skupinu čísiel tovarových kariet, ktoré Vás zaujímajú (zobrazovanie stranky v eshope - najlepšie cez async Ajax).
Limit je 1000 poloziek.

Parametre: [POST]
cisla= jednoduché pole cisiel tovarových kariet napr. array('0001','0013', '0016A');

Príklad Vášho PHP:

$resultset = mysql_query("SELECT cislo FROM tovar LIMIT 1,10");

while ($row = mysql_fetch_array($resultset) )
$cisla[] = $row[0];

// alebo takto $cisla = array('0001','0013', '0016A');

$postdata = http_build_query(
	array(
		'cisla' => $cisla
	)
);

$opts = array('http' =>
	array(
		'method'  => 'POST',
		'header'  => 'Content-type: application/x-www-form-urlencoded',
		'content' => $postdata
	)
);

$context  = stream_context_create($opts);

$jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=tns_cisla";
$json = file_get_contents($jsonurl, false, $context);
$api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie

print_r($api); //pozrite si ako vyzera vysledok

Odpoveď: vracia aj karty co nie su na ziadnom sklade, cize mnozstvo je 0
Array
(
	[2396] => Array
	(
		[n_tovar_id] => 2396
		[s_nazov] => UR silikonový olej do tlumiče 600 CPS
		[s_ean13] =>
		[s_cislo] => 0016A
		[mnozstvo] => 0.0000
		[mj] => ks
		[c_hodnota_mj_avg] => 0.0000000
		[c_cena_mj] => 23.3350000
		[c_cena_dph_mj] => 28.002000
	)
	[2396] => Array
	(
		[n_tovar_id] => 2397
		[s_nazov] => UR silikonový olej do tlumiče 750 CPS
		[s_ean13] =>
		[s_cislo] => 0013
		[mnozstvo] => 1.0000
		[mj] => ks
		[c_hodnota_mj_avg] => 4.6600000
		[c_cena_mj] => 23.3350000
		[c_cena_dph_mj] => 28.002000
	)
)
	

action=import_tovar_karta

Naimportuje tovarové karty do Vášho skladu.
Môžete použiť na nové karty z Vašich eshopov alebo nové tovary od dodávateľov, ak Vám dávajú XML, Excel...

Parametre: [POST]
tovar = pole pre import - viď príklad

Príklad Vášho PHP:


1. vytvor si pole co chces importovat, napr takto

$resultset = mysql_query("SELECT s_cislo,
			s_nazov,
			b_sluzba,
			c_nakupna_cena,
			c_predajna_cena,
			n_dph,
			n_kategoria_id,
			n_zlavap,
			n_dodavatel_id,
			s_ean13,
			s_poznamka,
			'ks' as mj
			FROM tovar LIMIT 1,1000");

while ($row = mysql_fetch_array($resultset, MYSQL_ASSOC) )
$tovar[$row["s_cislo"]] = $row;

ALEBO rucne TAKTO:

$tovar = array( "XAS1" => array (
			"s_cislo" => "XAS1",
			"s_nazov" => "pokusne babany taliansko",
			"b_sluzba" => 0,
			"c_nakupna_cena" => 0.320,
			"c_predajna_cena" => 0.667,
			"n_dph" => 20,
			"n_kategoria_id" => 0,
			"n_zlavap" => 0,
			"n_dodavatel_id" => 0,
			"s_ean13" => '',
			"s_poznamka" => '',
			"mj" => "ks"
		)
);

// Ak nacitavas zo XML, treba objekt prekonvertovat na string:
//$nazov = (string)$nazov; Alebo po sedliacky $nazov = $nazov . "";
// vid print_r($tovar); echo to konvertuje same, ale tu priradujes do premennej


3. priprav import do postu

$postdata = http_build_query($tovar);

$opts = array('http' =>
	array(
		'method'  => 'POST',
		'header'  => 'Content-type: application/x-www-form-urlencoded',
		'content' => $postdata
	)
);

$context  = stream_context_create($opts);

4. daj si svoj kluc a action je import_tovar_karta

$jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=import_tovar_karta";
$json = file_get_contents($jsonurl, false, $context);
$api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie

print_r2($api);

5. Odpoved moze vyzerat takto

Array
(
	[XAS1] => ok
	[DE01] => ok
	[002] => ok
	[B003] => cislo tovaru uz existuje
	[004] => Cannot add or update a child row: a foreign key constraint fails (`uo_skusobna`.`uo_tovar`,
		CONSTRAINT `FK_uo_tovar_dodavatel` FOREIGN KEY (`n_dodavatel_id`)
		REFERENCES `uo_partner` (`n_partner_id`) ON UPDATE CASCADE)
	[005] => Cannot add or update a child row: a foreign key constraint fails (`uo_skusobna`.`uo_tovar`,
		CONSTRAINT `FK_uo_tovar_kategoria` FOREIGN KEY (`n_kategoria_id`)
		REFERENCES `uo_tovar_kategoria` (`n_kategoria_id`) ON UPDATE CASCADE)
)

B003 uz existuje cislo tovaru
004 id dodavatela neexistuje v partneroch. ID zistis cez API action=partner, vid nizsie. Ak nechces riesit, davaj ID = 0.
005 to iste, ale id_kategoria, ak pouzivas. Ak nechces riesit, davaj ID = 0.

Cize pokial nenaimportuje, rovno ti vypise chybu z mySQL. Co sa tyka ciselnych hodnot,
mam tam default values takze by to nemalo padnut aj ked posles prazdnu hodnotu, tak tam da nulu.

	

action=update_tovar_karta

Updateuje tovarové karty.
Môžete použiť na existujuce karty z Vašich eshopov alebo tovary od dodávateľov, ak Vám dávajú XML, Excel...

Parametre: [POST]
tovar = pole pre import - viď príklad
Nemusia byť vyplnené všetky stlpce, stačia tie, ktoré chceš updatovat. Napríklad ak chces meniť len predajnu cenu, potrebuješ iba s_cislo a c_predajna_cena.

Príklad Vášho PHP:


1. vytvor si pole co chces updatovat, napr takto

$resultset = mysql_query("SELECT s_cislo,
			s_nazov,
			b_sluzba,
			c_nakupna_cena,
			c_predajna_cena,
			n_dph,
			n_kategoria_id,
			n_zlavap,
			n_dodavatel_id,
			s_ean13,
			s_poznamka
			FROM tovar LIMIT 1,1000");

while ($row = mysql_fetch_array($resultset, MYSQL_ASSOC) )
$tovar[$row["s_cislo"]] = $row;

ALEBO rucne TAKTO:

$tovar = array( "XAS1" => array (
			"s_cislo" => "XAS1",
			"s_nazov" => "portugalske paradajky micro",
			"b_sluzba" => 0,
			"c_nakupna_cena" => 0.320,
			"c_predajna_cena" => 0.667,
			"n_dph" => 20,
			"n_kategoria_id" => 0,
			"n_zlavap" => 0,
			"n_dodavatel_id" => 0,
			"s_ean13" => '',
			"s_poznamka" => ''
		)
);

alebo ak chcem update iba predajnej ceny tovaru cislo XAS1, tak:

$tovar = array( "XAS1" => array (
		"s_cislo" => "XAS1",
		"c_predajna_cena" => 0.667
		)
);
Vtedy prepise na XAS1 len predajnu cenu a ostatne (nazov atd) necha tak.

// Ak nacitavas zo XML, treba objekt prekonvertovat na string:
//$nazov = (string)$nazov; Alebo po sedliacky $nazov = $nazov . "";
// vid print_r($tovar); echo to konvertuje same, ale tu priradujes do premennej


3. priprav import do postu

$postdata = http_build_query($tovar);

$opts = array('http' =>
	array(
		'method'  => 'POST',
		'header'  => 'Content-type: application/x-www-form-urlencoded',
		'content' => $postdata
	)
);

$context  = stream_context_create($opts);

4. daj si svoj kluc a action je update_tovar_karta

$jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=update_tovar_karta";
$json = file_get_contents($jsonurl, false, $context);
$api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie

print_r2($api);

5. Odpoved moze vyzerat takto

Array ( [XAS1] => ok affected: 1, time: 1.052ms [4] => ok affected: 1, time: 2.047ms )

Pokial je chyba, rovno ti vypise chybu z SQL k onemu zaznamu (kvoli tomu ide po jednom).

	

action=partner

Ukáž obchodnych partnerov, adresy, id...
Bud vsetkych, alebo mozete filtrovat podla ico alebo %nazov%

Parametre: [GET]
ico= presne ico
nazov = cely nazov alebo jeho cast, pridava automaticky % na zaciatok a koniec retazca
dmod = dátum v SK formáte: dátum poslednej modifikácie partnera. Ak pošlete, zobrazí len tych partnerov, v ktorých bola zmenená karta od tohto dátumu (vrátane). Dá sa použiť ak si chcete načítať len novych a zmenenych.

Príklad Vášho PHP:

$jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=partner&nazov=";
$json = file_get_contents($jsonurl, false, $context);
$api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie

print_r2($api);

Odpoved:

Array
(
    [775] => Array
        (
            [n_partner_id] => 775
            [s_nazov] => 1.mechanizačná, s.r.o.
            [s_ico] => 36656465
            [s_dic] => 20254546783
            [s_icdph] => SK20254546783
            [b_platca_dph] => 1
            [n_splatnost] => 14
            [t_poznamka] =>
            [b_nepodnikatel] => 0
            [d_created] =>
            [d_modified] => 2011-10-02 09:17:17
            [s_ulica] => Višnovského 25
            [s_mesto] => Trenčín
            [s_psc] => 684 01
            [s_krajina] =>
            [s_poznamka] =>
            [s_cislo_op] =>
            [s_datum_narodenia] =>
            [s_iny_doklad] =>
        )
 )

	

action=tns_sklady_sarza

Zobrazí všetky tovarové karty z databázy a pokiaľ sa nachádzajú na sklade, tak aj množstvo a šaržu.

Možné parametre:
cislo= cislo tovarovej karty
ean13= ciarovy kod z tovarovej karty
sarza= výrobná šarža tovaru, alebo sériové číslo alebo výrobné číslo.
sklad_cid = ID skladu. Ak pošlete, zobrazí len tovary z tohto skladu.
dmod = dátum v SK formáte: dátum poslednej modifikácie tovarovej karty. Ak pošlete, zobrazí len tie tovary, v ktorých bola zmenená tovarová karta od tohto dátumu (vrátane). Dá sa použiť ak si chcete načítať len nové a zmenené karty (názov, predajná cena atď). Množstvo na sklade a skladová cena s týmto dátumom nesúvisia.
Pozn.: Zmazané tovarové karty neposiela, pokiaľ je množstvo na sklade nula.



$jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=tns_sklady_sarza";
$json = file_get_contents($jsonurl, false, $context);
$api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie

print_r2($api);

Odpoveď: banany su 4x, z toho 3x na Sklade BA, dve rozne sarze + jedna bez sarze. Na sklade KE len bez sarze.

Array
(
    [0] => Array
        (
            [n_tovar_id] => 1
            [s_nazov] => banány taliansko
            [s_ean13] =>
            [s_cislo] => 0001
            [mnozstvo] => 132
            [mj] => kg
            [c_hodnota_mj] => 2.350000000000
            [c_cena_mj] => 16.6750000
            [c_cena_dph_mj] => 20.01000000000
            [s_sarza] =>
            [sklad_id] => 1
            [s_sklad] => Sklad BA
        )

    [1] => Array
        (
            [n_tovar_id] => 1
            [s_nazov] => banány taliansko
            [s_ean13] =>
            [s_cislo] => 0001
            [mnozstvo] => 5
            [mj] => kg
            [c_hodnota_mj] => 2.500000000000
            [c_cena_mj] => 16.6750000
            [c_cena_dph_mj] => 20.01000000000
            [s_sarza] => A4
            [sklad_id] => 1
            [s_sklad] => Sklad BA
        )

    [2] => Array
        (
            [n_tovar_id] => 1
            [s_nazov] => banány taliansko
            [s_ean13] =>
            [s_cislo] => 0001
            [mnozstvo] => 10
            [mj] => kg
            [c_hodnota_mj] => 2.800000000000
            [c_cena_mj] => 16.6750000
            [c_cena_dph_mj] => 20.01000000000
            [s_sarza] => C1
            [sklad_id] => 1
            [s_sklad] => Sklad BA
        )

    [3] => Array
        (
            [n_tovar_id] => 1
            [s_nazov] => banány taliansko
            [s_ean13] =>
            [s_cislo] => 0001
            [mnozstvo] => 5
            [mj] => kg
            [c_hodnota_mj] => 1.900000000000
            [c_cena_mj] => 16.6750000
            [c_cena_dph_mj] => 20.01000000000
            [s_sarza] =>
            [sklad_id] => 2
            [s_sklad] => Sklad KE
        )

    [4] => Array
        (
            [n_tovar_id] => 2
            [s_nazov] => citróny španielsko
            [s_ean13] =>
            [s_cislo] => 0002
            [mnozstvo] => 39
            [mj] => kg
            [c_hodnota_mj] => 2.100000000000
            [c_cena_mj] => 3.7500000
            [c_cena_dph_mj] => 4.50000000000
            [s_sarza] =>
            [sklad_id] => 1
            [s_sklad] => Sklad BA
        )

action=vydajka_save

Uloží skladovú výdajku..



$arr = array();

$arr["n_sklad_cid"] = 1; //u mna Sklad BA
$arr["n_sklad_doklad_id"] = 0; //0 pre novy vydajku, alebo ID existujucej pre EDIT
$arr["n_storno_id"] = 0; //0 ked nic nestornujem, inak ID vydajky pre storno alebo ciastocne storno
$arr["n_partner_id"] =  0; //0 je ziadny partner, alebo posli ID partnera, alebo ak je novy, vypln pole partner, inak neposielaj pole [partner]

//ak posles toto pole, tak API vyplni ID partnera podla emailu (eshop feature), alebo nahra noveho partnera
    $arr["partner"]["s_nazov"] =  "Ferko Jozko";
    $arr["partner"]["s_ulica"] =  "Ulicna 55";
    $arr["partner"]["s_mesto"] =  "Bratislava";
    $arr["partner"]["s_psc"] =  "810 00";
    $arr["partner"]["s_krajina"] =  "Slovakia";
    $arr["partner"]["s_ico"] =  "";
    $arr["partner"]["s_dic"] =  "";
    $arr["partner"]["s_icdph"] =  "";
    $arr["partner"]["b_platca_dph"] =  0; //0 alebo 1, nepovinne
    $arr["partner"]["t_poznamka"] =  ""; //max 255 znakov
    $arr["partner"]["b_nepodnikatel"] =  0; //0 alebo 1, nepovinne
    $arr["partner"]["s_telefon"] =  "555-123456";
    $arr["partner"]["s_email"] =  "ferko@jozko.sk";


$arr["n_ciselny_rad_id"] = 0; //ak nula, vyberie prvy pre vydajky /cislovanie dokladov/
$arr["d_vystavenia"] = "05.03.2015"; //slovensky, with leading zeros
$arr["s_vs"] = ""; //variabilny symbol ak treba
$arr["s_poznamka"] = ""; //max 255 znakov utf8
$arr["do_minusu"] = "0"; //0 alebo 1. Ak jedna, povoli vydaj do minusu (mnozstvo na sklade)
$arr["n_mena_cid"] = 1; //Euro = 1
$arr["n_kurz"] = 1; //Ak Euro, tak 1, inak kurz ku datumu vystavenia

//polozky, key je cislo riadku
    //banany
    $arr["polozky"][1]["n_polozka_id"] = "0"; //nova je vzdy nula, Ak storno alebo ciastocne storno, tak id polozky
    $arr["polozky"][1]["n_tovar_id"] = 0; //jedinecny identifikator tovaru. Ak nemas ID, daj nula, vid dalsi riadok
    $arr["polozky"][1]["s_cislo"] = "0001"; //jedinecny identifikator tovaru, ak tovar_id je nula, pouzije sa tento
    $arr["polozky"][1]["n_mnozstvo"] = -3; //pocet kusov decimal na 6 desatinnych ak treba
    $arr["polozky"][1]["mj"] = "ks"; //nazov mernej jednotky v ktorej sa vydava (vid tovarova karta.. ks, krabica, paleta)
    $arr["polozky"][1]["c_cena_mj"] = "3.80"; //bez dph, decimal na 6, pred zlavou
    $arr["polozky"][1]["n_zlavap"] = "0"; //percentualna zlava integer
    $arr["polozky"][1]["s_poznamka"] = ""; //255 znakov max

    //citrony
    $arr["polozky"][2]["n_polozka_id"] = "0"; //nova je vzdy nula, Ak storno alebo ciastocne storno, tak id polozky
    $arr["polozky"][2]["n_tovar_id"] = 2; //jedinecny identifikator tovaru. Ak nemas ID, vid dalsi riadok
    $arr["polozky"][2]["s_cislo"] = "0002"; //jedinecny identifikator tovaru
    $arr["polozky"][2]["n_mnozstvo"] = -1; //pocet kusov decimal na 6 desatinnych ak treba
    $arr["polozky"][2]["mj"] = "kg"; //nazov mernej jednotky v ktorej sa vydava (vid tovarova karta.. ks, krabica, paleta)
    $arr["polozky"][2]["c_cena_mj"] = "4.80"; //bez dph, decimal na 6, pred zlavou
    $arr["polozky"][2]["n_zlavap"] = "0"; //percentualna zlava integer
    $arr["polozky"][2]["s_poznamka"] = ""; //255 znakov max

    //atd.


$postdata = http_build_query($arr);

//echo $postdata;
//echo "
"; $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); // skusobna c4ea58f9516727284ddf32a8af7411a5 $jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=vydajka_save"; $json = file_get_contents($jsonurl, false, $context); $api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie print_r($api);
ID skladu si zistite Menu> Sklady, otvorte ho a v hornom riadku je record_id=
Pokial API uspesne urobi vydajku, vrati OK:id_vydajky. To id by ste si mohol niekde u seba ulozit, v pripade ze budete robit storno.
V pripade storna treba:
vyplnit n_storno_id = id vydajky, ktoru chcem stornovat.
n_polozka_id, co je cislo riadku povodnej vydajky skoro vzdy. Ak bude s tym nejaky problem, spravim vam API, co vrati polozka_id.
mnozstvo dajte znamienko minus.
Ak zakaznik kupil 3 citrony a 4 banany a vratil 2 banany, tak je to ciastocne storno, cize v polozkach bude jeden riadok –2 banany.

Mozete aj editovat existujuce vydajky – ak bude treba. Tiez treba polozka_id.

Odberatel/zakaznik/partner = identifikator je email. API automaticky nahra noveho, ak nenajde partnera s takym emailom.

Produkty = mozete posielat moje ID tovaru, mate ho z API, alebo moje cislo tovaru, to mame spolocne prepokladam.



MOZNE ODPOVEDE:

1. Ulozil vydajku ID 33.
Array
(
    [msg] => OK:33
    [riadky] => Array
        (
        )

)
2. Neulozil vydajku, lebo:
Array
(
    [msg] => Pozor, sklad by šiel do mínusu:Sklad: Sklad BAriadok 1 > citróny španielsko > -94 kg
    [riadky] => Array
        (
            [0] => 1
        )

    [do_minusu] => 1
)

action=prijemka_save

Uloží skladovú prijemku..



$arr = array();

$arr["n_sklad_cid"] = 1; //Sklad BA
$arr["n_sklad_doklad_id"] = 0; //0 pre novu prijemku
$arr["n_storno_id"] = 0; //0 legacy
$arr["n_partner_id"] =  0; //0 je ziadny partner, alebo posli ID partnera, alebo ak je novy, vypln pole partner, inak neposielaj pole [partner]

//ak posles toto pole, tak API vyplni ID partnera podla emailu (eshop feature), alebo nahra noveho partnera
	$arr["partner"]["s_nazov"] =  "Ferko Jozko";
	$arr["partner"]["s_ulica"] =  "Ulicna 55";
	$arr["partner"]["s_mesto"] =  "Bratislava";
	$arr["partner"]["s_psc"] =  "810 00";
	$arr["partner"]["s_krajina"] =  "Slovakia";
	$arr["partner"]["s_ico"] =  "";
	$arr["partner"]["s_dic"] =  "";
	$arr["partner"]["s_icdph"] =  "";
	$arr["partner"]["b_platca_dph"] =  0; //0 alebo 1, nepovinne
	$arr["partner"]["t_poznamka"] =  ""; //max 255 znakov
	$arr["partner"]["b_nepodnikatel"] =  0; //0 alebo 1, nepovinne
	$arr["partner"]["s_telefon"] =  "555-123456";
	$arr["partner"]["s_email"] =  "ferko@jozko.sk";


$arr["n_ciselny_rad_id"] = 0; //ak nula, vyberie prvy pre prijemky /cislovanie dokladov/
$arr["d_vystavenia"] = "05.03.2015"; //slovensky, with leading zeros
$arr["s_vs"] = ""; //variabilny symbol ak treba
$arr["s_poznamka"] = ""; //max 255 znakov utf8
$arr["do_minusu"] = "0"; //0 legacy
$arr["n_mena_cid"] = 1; //Euro = 1
$arr["n_kurz"] = 1; //Ak Euro, tak 1, inak kurz ku datumu vystavenia
$arr["nastav_dodavatela"] = 0; //ak je, nastavi dodavatela na kartach tovaru za tohto co je v prijemke
$arr["n_zlavap_doklad"] = 0; //zlava na cely doklad v %, max 99

//polozky, key je cislo riadku
	//banany
	$arr["polozky"][1]["n_polozka_id"] = "0"; //vzdy nula
	$arr["polozky"][1]["n_tovar_id"] = 0; //jedinecny identifikator tovaru. Ak nemas ID, daj nula, vid dalsi riadok
	$arr["polozky"][1]["s_cislo"] = "0006"; //jedinecny identifikator tovaru, ak tovar_id je nula, pouzije sa tento
	$arr["polozky"][1]["s_sarza"] = "AD4"; //sarza ak je
	$arr["polozky"][1]["n_mnozstvo"] = 3; //pocet kusov decimal na 6 desatinnych ak treba
	$arr["polozky"][1]["mj"] = "kg"; //nazov mernej jednotky v ktorej sa predava (vid tovarova karta.. ks, krabica, paleta)
	$arr["polozky"][1]["c_hodnota_mj"] = "1.80"; //nakupna cena bez dph, decimal na 6
	$arr["polozky"][1]["s_poznamka"] = ""; //255 znakov max

	//citrony
	$arr["polozky"][2]["n_polozka_id"] = "0"; //nova je vzdy nula, Ak storno alebo ciastocne storno, tak id polozky
	$arr["polozky"][2]["n_tovar_id"] = 2; //jedinecny identifikator tovaru. Ak nemas ID, vid dalsi riadok
	$arr["polozky"][2]["s_cislo"] = "0002"; //jedinecny identifikator tovaru
	$arr["polozky"][2]["s_sarza"] = ""; //sarza
	$arr["polozky"][2]["n_mnozstvo"] = 155; //pocet kusov decimal na 6 desatinnych ak treba
	$arr["polozky"][2]["mj"] = "kg"; //nazov mernej jednotky v ktorej sa vydava (vid tovarova karta.. ks, krabica, paleta)
	$arr["polozky"][2]["c_hodnota_mj"] = "2.80"; //nakupna cena bez dph, decimal na 6
	$arr["polozky"][2]["s_poznamka"] = ""; //255 znakov max

	//atd.

$postdata = http_build_query($arr);

//echo $postdata;
//echo "
"; $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); // skusobna c4ea58f9516727284ddf32a8af7411a5 $jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=prijemka_save"; $json = file_get_contents($jsonurl, false, $context); $api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie print_r2($api);
ID skladu si zistite Menu> Sklady, otvorte ho a v hornom riadku je record_id=
Pokial API uspesne urobi prijemku, vrati OK:id_prijemky.

Odberatel/zakaznik/partner = identifikator je email. API automaticky nahra noveho, ak nenajde partnera s takym emailom.

Produkty = mozete posielat moje ID tovaru, mate ho z API, alebo cislo tovaru z tovarovej karty.



MOZNE ODPOVEDE:

1. Ulozil prijemku ID 33.
Array
(
    [msg] => OK:33
    [riadky] => Array
        (
        )

)
2. Neulozil prijemku, lebo, a cislo riadku kde je problem
Array
(
    [msg] => Pozor, nejaky dovod preco neulozil
    [riadky] => Array
        (
            [0] => 1
        )
)

action=sklady

Vráti zoznam skladov
n_sklad_cid, s_nazov, s_poznamka, b_medzisklad, s_skratka_ciselny_rad, d_modified

Parametre: žiadne

Vráti prázdny object, ak neexistuje žiadny sklad.

$jsonurl = "https://www.uctoonline.sk/api.php?key=".$key."&action=sklady";
$json = file_get_contents($jsonurl);

$api = json_decode($json, true);
print_r($api);

action=tovar_karta_all

Vráti zoznam všetkých skladových kariet. Limit 30.000 riadkov.

Parametre: GET: keyword
možnosť filtrovať podľa poznámky na skladovej karte. s_poznamka LIKE '%keyword%'

Vráti prázdny object, ak neexistuje žiadna karta.

$jsonurl = "https://www.uctoonline.sk/api.php?key=".$key."&action=tovar_karta_all";
$json = file_get_contents($jsonurl);

$api = json_decode($json, true);
print_r($api);

action=tovar_karta_bulk_sync

Dá sa použiť na hromadný insert alebo update tovarových kariet, napr. z eshopu.

GET: žiadne
POST: zoznam na insert/update
Max 10.000 riadkov naraz
Veľmi rýchly, beží v SQL transakcii cez tmp table.
Updatuje na základne čísla tovaru alebo EAN. Tie čo nenájde, to je Insert.
V prípade updatu sa dá použiť ešte hodnota -1, čo znamená, že tento stlpec nemá updatovať. V príklade dole neupdatujeme nákupnú cenu a poznámku.
V prípade že mj = "", tak sa neupdatuje mj.
Ak mj = "" pre insert, tak vloží implicitne "ks".
Odpoveď je "Affected rows" alebo mysql_error().



$rs = $db->query("SELECT s_cislo,
			s_nazov,
			0 as b_sluzba,
			-1 as c_nakupna_cena,
			c_cena as c_predajna_cena,
			n_dph,
			s_ean,
			-1 as s_poznamka,
			'' as mj
			FROM ec_product
			");

while ($row = $rs->fetch_assoc() )
$tovar[] = $row;

// ak mate vela produktov na sync, treba posielanie do API popilit na metrovicu.
// max_input_vars mam 10.000, 1 riadok je 9 vars + 1 = 10, tak dame po 500 produktov (5000 vars)
// ak by niekto potreboval, kludne spravim aj verziu na JSON input v jednej POST var

$chunks = array_chunk($tovar, 500);

$total = 0;
foreach ($chunks as $tovar)
{
	$postdata = http_build_query($tovar);

	$opts = array('http' =>
		array(
			'method'  => 'POST',
			'header'  => 'Content-type: application/x-www-form-urlencoded',
			'content' => $postdata
		)
	);

	$context  = stream_context_create($opts);

	$key = unserialize($config["sklad"])["velky"]["api"];
	$jsonurl = "https://www.uctoonline.sk/api.php?key=".$key."&action=tovar_karta_bulk_sync";
	$json = file_get_contents($jsonurl, false, $context);
	$api = json_decode($json, true);

	if (isset($api["error"])) return json_encode($api);

	$total += $api[0];
}

return json_encode(array($total));


action=objedn_dosla_save

Uloží skladovú došlú objednávku, využitie napr. v eshope.



$arr = array();

$arr["n_sklad_cid"] = 1; //u mna Sklad BA
$arr["n_sklad_objedn_id"] = 0; //0 pre novy vydajku, alebo ID existujucej pre EDIT
$arr["n_partner_id"] =  0; //0 je ziadny partner, alebo posli ID partnera, alebo ak je novy, vypln pole partner, inak neposielaj pole [partner]
$arr["b_reserve"] = 0; //0/1, ci aj rezervovat tovar

//ak posles toto pole, tak API vyplni ID partnera podla emailu (eshop feature), alebo nahra noveho partnera
    $arr["partner"]["s_nazov"] =  "Ferko Jozko";
    $arr["partner"]["s_ulica"] =  "Ulicna 55";
    $arr["partner"]["s_mesto"] =  "Bratislava";
    $arr["partner"]["s_psc"] =  "810 00";
    $arr["partner"]["s_krajina"] =  "Slovakia";
    $arr["partner"]["s_ico"] =  "";
    $arr["partner"]["s_dic"] =  "";
    $arr["partner"]["s_icdph"] =  "";
    $arr["partner"]["b_platca_dph"] =  0; //0 alebo 1, nepovinne
    $arr["partner"]["t_poznamka"] =  ""; //max 255 znakov
    $arr["partner"]["b_nepodnikatel"] =  0; //0 alebo 1, nepovinne
    $arr["partner"]["s_telefon"] =  "555-123456";
    $arr["partner"]["s_email"] =  "ferko@jozko.sk";


$arr["n_ciselny_rad_id"] = 0; //ak nula, vyberie prvy pre objednavky dosle /cislovanie dokladov/
$arr["d_vystavenia"] = "05.03.2015"; //slovensky, with leading zeros
$arr["s_vs"] = ""; //variabilny symbol ak treba
$arr["s_poznamka"] = ""; //max 255 znakov utf8
$arr["n_mena_cid"] = 1; //Euro = 1
$arr["n_kurz"] = 1; //Ak Euro, tak 1, inak kurz ku datumu vystavenia

//polozky, key je cislo riadku
    //banany
    $arr["polozky"][1]["n_polozka_id"] = "0"; //nova je vzdy nula, Ak storno alebo ciastocne storno, tak id polozky
    $arr["polozky"][1]["n_tovar_id"] = 0; //jedinecny identifikator tovaru. Ak nemas ID, daj nula, vid dalsi riadok
    $arr["polozky"][1]["s_cislo"] = "0001"; //jedinecny identifikator tovaru, ak tovar_id je nula, pouzije sa tento
    $arr["polozky"][1]["n_mnozstvo"] = 3; //pocet kusov decimal na 6 desatinnych ak treba
    $arr["polozky"][1]["mj"] = "ks"; //nazov mernej jednotky v ktorej sa vydava (vid tovarova karta.. ks, krabica, paleta)
    $arr["polozky"][1]["c_cena_mj"] = "3.80"; //bez dph, decimal na 6, pred zlavou
    $arr["polozky"][1]["n_zlavap"] = "0"; //percentualna zlava integer
    $arr["polozky"][1]["s_poznamka"] = ""; //255 znakov max
    $arr["polozky"][$key]["s_ean13"] = ""; //jedinecny identifikator tovaru, ak tovar_id je nula a nenájde tovar ani podla cisla, skusa nájst cez EAN

    //citrony
    $arr["polozky"][2]["n_polozka_id"] = "0"; //nova je vzdy nula, Ak storno alebo ciastocne storno, tak id polozky
    $arr["polozky"][2]["n_tovar_id"] = 2; //jedinecny identifikator tovaru. Ak nemas ID, vid dalsi riadok
    $arr["polozky"][2]["s_cislo"] = "0002"; //jedinecny identifikator tovaru
    $arr["polozky"][2]["n_mnozstvo"] = -1; //pocet kusov decimal na 6 desatinnych ak treba
    $arr["polozky"][2]["mj"] = "kg"; //nazov mernej jednotky v ktorej sa vydava (vid tovarova karta.. ks, krabica, paleta)
    $arr["polozky"][2]["c_cena_mj"] = "4.80"; //bez dph, decimal na 6, pred zlavou
    $arr["polozky"][2]["n_zlavap"] = "0"; //percentualna zlava integer
    $arr["polozky"][2]["s_poznamka"] = ""; //255 znakov max
    $arr["polozky"][$key]["s_ean13"] = "99546546354365"; //jedinecny identifikator tovaru, ak tovar_id je nula a nenájde tovar ani podla cisla, skusa nájst cez EAN

    //atd.


$postdata = http_build_query($arr);

//echo $postdata;
//echo "
"; $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); // skusobna c4ea58f9516727284ddf32a8af7411a5 $jsonurl = "https://www.uctoonline.sk/api.php?key=c4ea58f9516727284ddf32a8af7411a5&action=objedn_dosla_save"; $json = file_get_contents($jsonurl, false, $context); $api = json_decode($json, true); //hotove polia v poli, ako na obrazku vyssie print_r($api);
ID skladu si zistite Menu> Sklady, otvorte ho a v address riadku je record_id=. Alebo cez API action=sklady.
Pokial API uspesne urobi vydajku, vrati OK:id_objednavky.

Odberatel/zakaznik/partner = identifikator je email. API automaticky nahra noveho, ak nenajde partnera s takym emailom.

Produkty = mozete posielat moje ID tovaru, mate ho z API, alebo moje cislo tovaru, alebo ean.



MOZNE ODPOVEDE:

1. Ulozil objednavku ID 33.
Array
(
    [msg] => OK:33
    [riadky] => Array
        (
        )

)
2. Neulozil objednavku, lebo:
Array
(
    [msg] => Chyba: Nemám tovar_id pre cislo: 0001.
    [riadky] => Array()
)


action=dashboard_sklad

Vráti prehľad pohybov na sklade za posledných 12 mesiacov.
mon, prijem, vydaj, sklad
mesiac, hodnota prijateho tovaru, hodnota vydaneho tovaru, aktualna hodnota skladu
Parametre: GET: sklad_cid = ID skladu.

Vráti prázdny object, ak nič.

$jsonurl = "https://www.uctoonline.sk/api.php?key=".$key."&action=dashboard_sklad&sklad_cid=".$sklad_cid;
$json = file_get_contents($jsonurl);

$api = json_decode($json, true);
print_r($api);


© Účtoonline s.r.o. 2009-2018
Kontakt
Zoznam platiteľov DPH
Rizikové subjekty DPH
Fio bank zlaté číslo
História účtovníctva
Linky
Hore