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();
} |
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> |
<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.