Exemplo n.º 1
0
 def Consultar(self, nro_doc):
     "Llama a la API pública de AFIP para obtener los datos de una persona"
     n = 0
     while n <= 4:
         n += 1  # reintentar 3 veces
         try:
             if not self.client:
                 if DEBUG:
                     warnings.warn("reconectando intento [%d]..." % n)
                 self.Conectar()
             self.response = self.client("sr-padron", "v2", "persona",
                                         str(nro_doc))
         except Exception as e:
             self.client = None
             ex = exception_info()
             self.Traceback = ex.get("tb", "")
             try:
                 self.Excepcion = norm(ex.get("msg", "").replace("\n", ""))
             except:
                 self.Excepcion = "<no disponible>"
             if DEBUG:
                 warnings.warn("Error %s [%d]" % (self.Excepcion, n))
         else:
             break
     else:
         return False
     result = json.loads(self.response)
     if result['success']:
         data = result['data']
         # extraigo datos generales del contribuyente:
         self.cuit = data["idPersona"]
         self.tipo_persona = data["tipoPersona"]
         self.tipo_doc = TIPO_CLAVE.get(data["tipoClave"])
         self.dni = data.get("numeroDocumento")
         self.estado = data.get("estadoClave")
         self.denominacion = data.get("nombre")
         # analizo el domicilio
         domicilio = data.get("domicilioFiscal")
         if domicilio:
             self.direccion = domicilio.get("direccion", "")
             self.localidad = domicilio.get("localidad",
                                            "")  # no usado en CABA
             self.provincia = PROVINCIAS.get(domicilio.get("idProvincia"),
                                             "")
             self.cod_postal = domicilio.get("codPostal")
         else:
             self.direccion = self.localidad = self.provincia = ""
             self.cod_postal = ""
         # retrocompatibilidad:
         self.domicilios = [
             "%s - %s (%s) - %s" % (
                 self.direccion,
                 self.localidad,
                 self.cod_postal,
                 self.provincia,
             )
         ]
         # analizo impuestos:
         self.impuestos = data.get("impuestos", [])
         self.actividades = data.get("actividades", [])
         if 32 in self.impuestos:
             self.imp_iva = "EX"
         elif 33 in self.impuestos:
             self.imp_iva = "NI"
         elif 34 in self.impuestos:
             self.imp_iva = "NA"
         else:
             self.imp_iva = "S" if 30 in self.impuestos else "N"
         mt = data.get("categoriasMonotributo", {})
         self.monotributo = "S" if mt else "N"
         self.actividad_monotributo = ""  # TODO: mt[0].get("idCategoria")
         self.integrante_soc = ""
         self.empleador = "S" if 301 in self.impuestos else "N"
         self.cat_iva = ""
         self.data = data
     else:
         error = result['error']
         self.Excepcion = error['mensaje']
     return True
Exemplo n.º 2
0
# Devuelve TA.xml (ticket de autorización de WSAA)

__author__ = "Mariano Reingart ([email protected])"
__copyright__ = "Copyright (C) 2008-2011 Mariano Reingart"
__license__ = "GPL 3.0"
__version__ = "2.11c"

import hashlib, datetime, email, os, sys, time, traceback, warnings
import unicodedata
from pysimplesoap.client import SimpleXMLElement
from utils import inicializar_y_capturar_excepciones, BaseWS, get_install_dir, \
     exception_info, safe_console, date
try:
    from M2Crypto import BIO, Rand, SMIME, SSL
except ImportError:
    ex = exception_info()
    warnings.warn("No es posible importar M2Crypto (OpenSSL)")
    warnings.warn(ex['msg'])            # revisar instalación y DLLs de OpenSSL
    BIO = Rand = SMIME = SSL = None
    # utilizar alternativa (ejecutar proceso por separado) 
    from subprocess import Popen, PIPE
    from base64 import b64encode

# Constantes (si se usa el script de linea de comandos)
WSDL = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl"  # El WSDL correspondiente al WSAA 
CERT = "reingart.crt"        # El certificado X.509 obtenido de Seg. Inf.
PRIVATEKEY = "reingart.key"  # La clave privada del certificado CERT
PASSPHRASE = "xxxxxxx"  # La contraseña para firmar (si hay)
SERVICE = "wsfe"        # El nombre del web service al que se le pide el TA

# WSAAURL: la URL para acceder al WSAA, verificar http/https y wsaa/wsaahomo
Exemplo n.º 3
0
            print "\n".join(ret)

        if '--grupos_carne' in sys.argv:
            ret = wsremcarne.ConsultarGruposCarne()
            print "\n".join(ret)

        if '--tipos_carne' in sys.argv:
            for grupo_carne in wsremcarne.ConsultarGruposCarne(sep=None):
                ret = wsremcarne.ConsultarTiposCarne(grupo_carne['codigo'])
                print "\n".join(ret)

        if '--codigos_domicilio' in sys.argv:
            cuit = raw_input("Cuit Titular Domicilio: ")
            ret = wsremcarne.ConsultarCodigosDomicilio(cuit)
            print "\n".join(ret)

        if wsremcarne.Errores or wsremcarne.ErroresFormato:
            print "Errores:", wsremcarne.Errores, wsremcarne.ErroresFormato

        print "hecho."
        
    except SoapFault,e:
        print "Falla SOAP:", e.faultcode, e.faultstring.encode("ascii","ignore")
        sys.exit(3)
    except Exception, e:
        ex = utils.exception_info()
        print ex
        if DEBUG:
            raise
        sys.exit(5)
Exemplo n.º 4
0
# Devuelve TA.xml (ticket de autorización de WSAA)

__author__ = "Mariano Reingart ([email protected])"
__copyright__ = "Copyright (C) 2008-2011 Mariano Reingart"
__license__ = "GPL 3.0"
__version__ = "2.11b"

import hashlib, datetime, email, os, sys, time, traceback, warnings
import unicodedata
from pysimplesoap.client import SimpleXMLElement
from utils import inicializar_y_capturar_excepciones, BaseWS, get_install_dir, \
     exception_info, safe_console, date
try:
    from M2Crypto import BIO, Rand, SMIME, SSL
except ImportError:
    ex = exception_info()
    warnings.warn("No es posible importar M2Crypto (OpenSSL)")
    warnings.warn(ex['msg'])            # revisar instalación y DLLs de OpenSSL
    BIO = Rand = SMIME = SSL = None
    # utilizar alternativa (ejecutar proceso por separado) 
    from subprocess import Popen, PIPE
    from base64 import b64encode

# Constantes (si se usa el script de linea de comandos)
WSDL = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl"  # El WSDL correspondiente al WSAA 
CERT = "reingart.crt"        # El certificado X.509 obtenido de Seg. Inf.
PRIVATEKEY = "reingart.key"  # La clave privada del certificado CERT
PASSPHRASE = "xxxxxxx"  # La contraseña para firmar (si hay)
SERVICE = "wsfe"        # El nombre del web service al que se le pide el TA

# WSAAURL: la URL para acceder al WSAA, verificar http/https y wsaa/wsaahomo
Exemplo n.º 5
0
        if '--grupos_carne' in sys.argv:
            ret = wsremcarne.ConsultarGruposCarne()
            print "\n".join(ret)

        if '--tipos_carne' in sys.argv:
            for grupo_carne in wsremcarne.ConsultarGruposCarne(sep=None):
                ret = wsremcarne.ConsultarTiposCarne(grupo_carne['codigo'])
                print "\n".join(ret)

        if '--codigos_domicilio' in sys.argv:
            cuit = raw_input("Cuit Titular Domicilio: ")
            ret = wsremcarne.ConsultarCodigosDomicilio(cuit)
            print "\n".join(ret)

        if wsremcarne.Errores or wsremcarne.ErroresFormato:
            print "Errores:", wsremcarne.Errores, wsremcarne.ErroresFormato

        print "hecho."

    except SoapFault, e:
        print "Falla SOAP:", e.faultcode, e.faultstring.encode(
            "ascii", "ignore")
        sys.exit(3)
    except Exception, e:
        ex = utils.exception_info()
        print ex
        if DEBUG:
            raise
        sys.exit(5)
Exemplo n.º 6
0
 def Consultar(self, nro_doc):
     "Llama a la API pública de AFIP para obtener los datos de una persona"
     n = 0
     while n <= 4:
         n += 1                          # reintentar 3 veces
         try:
             if not self.client:
                 if DEBUG:
                     warnings.warn("reconectando intento [%d]..." % n)
                 self.Conectar()
             self.response = self.client("sr-padron", "v2", "persona", str(nro_doc))
         except Exception as e:
             self.client = None
             ex = exception_info()
             self.Traceback = ex.get("tb", "")
             try:
                 self.Excepcion = norm(ex.get("msg", "").replace("\n", ""))
             except:
                 self.Excepcion = "<no disponible>"
             if DEBUG:
                 warnings.warn("Error %s [%d]" % (self.Excepcion, n))
         else:
             break
     else:
         return False
     result = json.loads(self.response)
     if result['success']:
         data = result['data']
         # extraigo datos generales del contribuyente:
         self.cuit = data["idPersona"]
         self.tipo_persona = data["tipoPersona"]
         self.tipo_doc = TIPO_CLAVE.get(data["tipoClave"])
         self.dni = data.get("numeroDocumento")
         self.estado = data.get("estadoClave")
         self.denominacion = data.get("nombre")
         # analizo el domicilio
         domicilio = data.get("domicilioFiscal")
         if domicilio:
             self.direccion = domicilio.get("direccion", "")
             self.localidad = domicilio.get("localidad", "")  # no usado en CABA
             self.provincia = PROVINCIAS.get(domicilio.get("idProvincia"), "")
             self.cod_postal = domicilio.get("codPostal")
         else:
             self.direccion = self.localidad = self.provincia = ""
             self.cod_postal = ""
         # retrocompatibilidad:
         self.domicilios = ["%s - %s (%s) - %s" % (
                                 self.direccion, self.localidad, 
                                 self.cod_postal, self.provincia,) ]
         # analizo impuestos:
         self.impuestos = data.get("impuestos", [])
         self.actividades = data.get("actividades", [])
         if 32 in self.impuestos:
             self.imp_iva = "EX"
         elif 33 in self.impuestos:
             self.imp_iva = "NI"
         elif 34 in self.impuestos:
             self.imp_iva = "NA"
         else:
             self.imp_iva = "S" if 30 in self.impuestos else "N"
         mt = data.get("categoriasMonotributo", {})
         self.monotributo = "S" if mt else "N"
         self.actividad_monotributo = "" # TODO: mt[0].get("idCategoria")
         self.integrante_soc = ""
         self.empleador = "S" if 301 in self.impuestos else "N"
         self.cat_iva = ""
         self.data = data
     else:
         error = result['error']
         self.Excepcion = error['mensaje']
     return True