Luis, tal vez pueda serte util el codigo que mas adelante pego, lo que hace es dado un numero de DNI buscar los posibles CUIT's, digo posibles porque puede darse el caso que con numeros viejos exista mas de uno ya que se asignaba el mismo numero para femenino y masculino.
Una vez que tenes el nro de cuit ya podes obtener toda la informacion que necesitas, al menos asi me manejo en mi sistema ya que permito ingresar un CUIT o DNI de la persona.
A continuacion el codigo, por supuesto, es codigo "autocomentado", lo dejo ya que tal vez pueda serle util a alguien mas:
#!/usr/bin/python
# -*- coding: utf8 -*-
import urllib2, json, sys
sys.path.insert(0, 'c:/pyafipws-master/')
from padron import *
class ErrorGenerico(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
class ErrorNegocio(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
class BuscarCuit():
_public_methods_ = ['realizarConsulta']
_public_attrs_ = ['nroDni','error', 'consultaExitosa', 'coleccionCuit']
def __init__(self):
self.inicializar()
def inicializar(self):
self.nroDni=0
self.consultaExitosa=False
self.error=""
def buscarCuit(self):
self.validarDocumento()
if len(self.nroDni)==11:
self.consultaExitosa=True
self.coleccionCuit=[self.nroDni]
else:
self.realizarConsulta()
def realizarConsulta(self):
try:
response = urllib2.urlopen(URL_CONSULTA+self.nroDni)
respuesta = json.load(response)
self.procesarRespuesta(respuesta)
except urllib2.URLError, e:
self.error=str(e.reason)
except ErrorNegocio, e:
self.error=e.value
except Exception:
self.error="Error generico sin especificar"
def validarDocumento(self):
try:
val = int(self.nroDni)
if val == 0:
raise ErrorNegocio("El documento ingresado es 0, no se hace busqueda")
except ValueError:
raise ErrorNegocio("El documento ingresado no es un valor numerico valido")
def procesarRespuesta(self,jsonRespuesta):
try:
self.consultaExitosa=jsonRespuesta['success']
if not self.consultaExitosa:
raise ErrorNegocio(str(jsonRespuesta['error']['mensaje']))
else:
self.coleccionCuit=jsonRespuesta['data']
except ErrorNegocio, e:
self.error=e.value
def getConsultaExitosa(self):
return self.consultaExitosa
def getColeccionCuit(self):
return self.coleccionCuit
def main(dni):
buscarCuit=BuscarCuit()
buscarCuit.nroDni=dni
buscarCuit.buscarCuit()
if buscarCuit.getConsultaExitosa():
resultado=buscarCuit.getColeccionCuit()
padron = PadronAFIP()
padron.Conectar()
for cuit in resultado:
ok = padron.Consultar(cuit)
if ok:
print "Nro de cuit encontrado: "+str(cuit)+" "+padron.denominacion
else:
print "Nro de cuit encontrado: "+str(cuit)+" "+"No se pudo hacer la consulta contra AFIP"
else:
print "Error en la consulta: "+buscarCuit.error
if __name__ == "__main__":
if len(sys.argv)<>2:
print "Debe ingresar como unico parametro un numero de DNI"
else:
dni=sys.argv[1]
main(dni)