Někde na internetu jsem viděl jak po zadání IČ se zbytek údajů o živnostníkovi/firmě dotáhl sám. A jelikož jsem si chtěl o tuto možnost rozšířit i své personální účetnictví, tak jsem pátral jak na to.
O databázi ARES jsem se dozvěděl již dříve, ale nikdy jsem se nedostal k samotné implementaci. Až dneska jsem narazil na článek Radka Hulána, řešící přesně toto a tak jsem si řekl, že se na to podívám.
Zdroj dat: Databáze ARES
Script: MyEGO blog
Script po úpravě na straně serveru (jedná se o NETTE akci):
public function handleLoadInfo($IC) { $this->payload->firma = array(); // dá se vybrat hned z několika zdrojů dle potřeby http://wwwinfo.mfcr.cz/ares/ares_xml.html.cz#k3 define('ARES','http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico='); $ico = intval($IC); // nemohl jsem použít kvůli omezení na serveru, nahradil jsem pomocí CURL //$file = @file_get_contents(ARES.$ico); if ($curl = curl_init(ARES.$ico)) { curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $content = curl_exec($curl); //$info = curl_getinfo($curl); curl_close($curl); $xml = @simplexml_load_string($content); } $a = array(); if (isset($xml)) { $ns = $xml->getDocNamespaces(); $data = $xml->children($ns['are']); $el = $data->children($ns['D'])->VBAS; if (strval($el->ICO) == $ico) { $a['ico'] = strval($el->ICO); $a['dic'] = strval($el->DIC); $a['firma'] = strval($el->OF); $a['ulice'] = strval($el->AA->NU).' '.strval($el->AA->CD).'/'.strval($el->AA->CO); $a['mesto'] = strval($el->AA->N).'-'.strval($el->AA->NCO); $a['psc'] = strval($el->AA->PSC); $a['stav'] = 'ok'; } else { $a['stav'] = 'IČ firmy nebylo nalezeno'; } } else { $a['stav'] = 'Databáze ARES není dostupná'; } $this->payload->firma = $a; $this->sendPayload(); } |
Script po úpravě na straně uživatele:
<script type="text/javascript"> <!-- $('#frmkontakt-IC').change(function(event) { $.getJSON({link loadInfo!}, {'IC': $('#frmkontakt-IC').val()}, function(payload) { if (payload.firma.stav == 'ok') { $('input[name=DIC]').val(payload.firma.dic); $('input[name=prijmeni]').val(payload.firma.firma); $('input[name=ulice]').val(payload.firma.ulice); $('input[name=mesto]').val(payload.firma.mesto); $('input[name=psc]').val(payload.firma.psc); } else { alert(payload.firma.stav); } }); }); --> </script> |
Chtělo by to ještě doladit o podmínky kdy co a jak vypisovat, spojovat (číslo orientační a popisné, město a čtvrť, atd.), ale jako referenční implementace to je dobrý základ.