[Aporte] Clase para obtener CUITs a partir del Nro. de DNI

433 views
Skip to first unread message

Flavio V.

unread,
Jul 23, 2015, 10:55:59 PM7/23/15
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Gente, en la ultima clase que publique hubo un aporte interesante por parte de Gerardo mencionando un servicio de la AFIP en el cual se le da un numero de DNI y devuelve los posibles CUITs que estan asociados a ese numero.
En principio en mi sistema no lo voy a implementar ya que actualmente estoy trabajando con la clase que genera los numeros de CUITs y quiero probar que tal me va ya que si eso funciona es una consulta menos contra AFIP, pero llegado el caso calculo que voy a recurrir a la clase que presento en unas lineas mas adelante.

Esta clase dado un numero de dni se conecta contra la afip y obtiene los cuits, ademas usa la clase padron de Mariano para, a partir de ese cuit obtener el nombre y mostrarlo por pantalla.

La verdad no tiene muchas pruebas pero con los casos basicos funciono, lo publico por si a alguien le sirve.
Tengan en cuenta que nunca programe en python por lo que seria interesante saber si detectan algun error me avisen, yo particularmente vengo del mundo feliz de Smalltalk.

------------------------------------------ INICIO DE CODIGO ---------------------------------------------------

buscarCuit.py

#!/usr/bin/python
# -*- coding: utf8 -*-


import urllib2, json, sys
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 realizarConsulta(self):
try:
self.validarDni()
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 validarDni(self):
try:
val = int(self.nroDni)
except ValueError:
raise ErrorNegocio("El DNI 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.realizarConsulta()
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)

-----------------------------------------------------  FIN DE CODIGO -------------------------------------------------

Saludos
Flavio


Reply all
Reply to author
Forward
0 new messages