module EgovUtils module Iszr module LegalPeople class FindAddressByIco < Request string :remote_id private def handle_response! EgovUtils::Address.new( street: response_body.xpath('//UliceNazev').text.presence || response_body.xpath('//CastObceNazev').text, house_number: response_body.xpath('//CisloDomovni').text, orientation_number: response_body.xpath('//CisloOrientacni').text, city: response_body.xpath('//ObecNazev').text, postcode: response_body.xpath('//PostaKod').text, egov_identifier: response_body.xpath('//AdresniMistoKod').text, country: 203, district: district.name, region: region.name ) end def body Nokogiri::XML::Builder.new do |xml| xml['e256'].RosCtiIco2( 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'urn:cz:isvs:iszr:schemas:IszrRosCtiIco2:v1 IszrRosCtiIco2.xsd', 'xmlns:abs' => 'urn:cz:isvs:iszr:schemas:IszrAbstract:v1', 'xmlns:e256' => 'urn:cz:isvs:iszr:schemas:IszrRosCtiIco2:v1', 'xmlns:reg' => 'urn:cz:isvs:reg:schemas:RegTypy:v1', 'xmlns:ros' => 'urn:cz:isvs:ros:schemas:RosDotazyData:v2' ) { xml['abs'].ZadostInfo { xml['reg'].CasZadosti Time.current.iso8601 xml['reg'].Agenda EgovUtils::Settings['iszr']['agenda'] xml['reg'].AgendovaRole EgovUtils::Settings['iszr']['agendova_role'] xml['reg'].Ovm '00025429' xml['reg'].Ais EgovUtils::Settings['iszr']['ais'] xml['reg'].Subjekt '00025429' xml['reg'].Uzivatel 'Administrator' xml['reg'].DuvodUcel 'ztotozneni' xml['reg'].AgendaZadostId SecureRandom.uuid } xml['abs'].AutorizaceInfo { xml['abs'].SeznamUdaju 'ObchodniNazev AdresaSidla ROBCti ROSCti RUIANCti' } xml['e256'].Zadost { xml['e256'].RosCtiIco2Data { xml['ros'].Ico remote_id } } } end end def response_error_code @response_error_code ||= response_body.xpath('//VysledekSubKod').last&.text&.presence end def internal_error_code return unless response_error_code if response_error_code == 'ZAZNAM NENALEZEN' "not_found" elsif response_error_code == 'PREKROCEN POCET' "multiple_records_found" end end def service_id 'E256' end end end end end