class Afip::Padron

Constants

PROVINCIAS

Attributes

body[R]
client[R]
data[RW]
dni[RW]
fault_code[R]
tipo[RW]

Public Class Methods

divide_name(full_name) click to toggle source
# File lib/Afip/padron.rb, line 81
def self.divide_name(full_name)
        full_name = full_name.strip.split(/\s+/)
 last_name = ''
 last = (full_name.count / 2) - 1
 (0..last).each do |i|
   if i != last
     last_name += full_name[i] + ' '
   else
     last_name += full_name[i]
   end
 end
 full_name = full_name - (last_name.strip.split(/\s+/))
 first_name = full_name.join(", ").gsub(",","").split.map(&:capitalize).join(' ')
 last_name = last_name.split.map(&:capitalize).join(' ')
 return [last_name, first_name]
end
new(attrs = {}) click to toggle source
# File lib/Afip/padron.rb, line 5
 def initialize(attrs = {})
         Afip::AuthData.environment = Afip.environment || :production
         url = Afip::AuthData.environment == :production ? "aws" : "awshomo"
         Afip.service_url = "https://#{url}.afip.gov.ar/sr-padron/webservices/personaServiceA4?WSDL"
         Afip.cuit ||= "20368642682"
         Afip.cert ||= "#{Afip.root}/lib/Afip/certs/desideral_prod.crt"
         Afip.pkey ||= "#{Afip.root}/lib/Afip/certs/desideral.key"
Afip::AuthData.fetch("ws_sr_padron_a4")

@client         = Savon.client(
         ssl_cert_key_file: Afip.pkey,
         ssl_cert_file: Afip.cert,
         env_namespace: :soapenv,
         namespace_identifier: :a4, 
         encoding: 'UTF-8',
         wsdl:  Afip.service_url
     )

@dni  = attrs[:dni].rjust(8, "0")
@tipo = attrs[:tipo]
@cuit = get_cuit
end

Public Instance Methods

calculate_cuit() click to toggle source
# File lib/Afip/padron.rb, line 106
def calculate_cuit
        multiplicador = "2345672345"

        case tipo
        when "F"
                xy = 27
                xy_dni = "27#{dni}"
        when "M"
                xy = 20
                xy_dni = "20#{dni}"
        end
        verificador = 0
        (0..9).each do |i|
                verificador += (xy_dni.reverse[i].to_i * multiplicador[i].to_i)
        end
        verificador
        z = verificador - (verificador / 11 * 11)

        case z
        when 0
                z = 0
        when 1
                if tipo == "M"
                        z = 9
                        xy = 23
                elsif tipo == "F"
                        z = 4
                        xy = 23
                else
                        z = 11 - z
                end
        else
                z = 11 - z
        end

        return "#{xy}#{dni}#{z}"
end
get_cuit() click to toggle source
# File lib/Afip/padron.rb, line 98
def get_cuit
        if dni.length == 11
                @cuit = @dni
        else
                @cuit = calculate_cuit
        end
end
get_data() click to toggle source
# File lib/Afip/padron.rb, line 41
def get_data
        @data = get_persona
        if fault_code.nil?
                set_data
        else
                return nil
        end
        
end
get_persona() click to toggle source
# File lib/Afip/padron.rb, line 28
def get_persona
        body = setup_body

 response = client.call(:get_persona,message: body)
 rescue Savon::SOAPFault => error
       if !error.blank?
               @fault_code = error.to_hash[:fault][:faultstring]
       else
               @fault_code = nil
       end
       return response
end
set_data() click to toggle source
# File lib/Afip/padron.rb, line 51
def set_data
        if not data.body[:get_persona_response][:persona_return][:persona][:actividad].nil?
               {
                       :name                    => set_name(data),
                       :cuit                    => data.body[:get_persona_response][:persona_return][:persona][:id_persona],
                       :cp                      => data.body[:get_persona_response][:persona_return][:persona][:domicilio].last[:cod_postal],
                       :address                 => data.body[:get_persona_response][:persona_return][:persona][:domicilio].last[:direccion],
                       :city_id                 => data.body[:get_persona_response][:persona_return][:persona][:domicilio].last[:id_provincia],
                       :city                    => PROVINCIAS[data.body[:get_persona_response][:persona_return][:persona][:domicilio].last[:id_provincia]],
                       :locality                => data.body[:get_persona_response][:persona_return][:persona][:domicilio].last[:localidad],
                       :birthday                => data.body[:get_persona_response][:persona_return][:persona][:fecha_nacimiento].to_date
               }
       else
               {
                       :name                    => data.body[:get_persona_response][:persona_return][:persona][:apellido])
                       :cuit                    => data.body[:get_persona_response][:persona_return][:persona][:id_persona],
                       :cp                      => data.body[:get_persona_response][:persona_return][:persona].try(:[], :domicilio).try(:[], :cod_postal),
                       :address                 => data.body[:get_persona_response][:persona_return][:persona].try(:[], :domicilio).try(:[], :direccion),
                       :city_id                 => data.body[:get_persona_response][:persona_return][:persona].try(:[], :domicilio).try(:[], :id_provincia),
                       :city                    => PROVINCIAS[data.body[:get_persona_response][:persona_return][:persona].try(:[], :domicilio).try(:[], :id_provincia)],
                       :locality                => data.body[:get_persona_response][:persona_return][:persona].try(:[], :domicilio).try(:[], :localidad),
                       :birthday                => data.body[:get_persona_response][:persona_return][:persona][:fecha_nacimiento].to_date
               }
       end
end
set_name(data) click to toggle source
# File lib/Afip/padron.rb, line 77
def set_name(data)
        return data.body[:get_persona_response][:persona_return][:persona][:nombre] + data.body[:get_persona_response][:persona_return][:persona][:apellido]
end
setup_body() click to toggle source
# File lib/Afip/padron.rb, line 144
def setup_body
       body = {
                'token'                          => Afip::TOKEN,
                'sign'                           => Afip::SIGN,
                'cuitRepresentada'               => Afip.cuit,
                'idPersona'                      => @cuit.to_s
       }
 end