コード例 #1
0
ファイル: pyafipws.py プロジェクト: rustu2/pyafipws.rece2py
def autenticar(service="wsfe", cert=CERT, pkey=PKEY, url=""):
    wsaa = WSAA()
    tra = wsaa.CreateTRA(service)
    cms = wsaa.SignTRA(tra, cert, pkey)
    wsaa.Conectar("", url)
    ta = wsaa.LoginCMS(cms)
    return wsaa
コード例 #2
0
def main():
    """
    Función utilizada para la ejecución del script por línea de comandos
    """
    # Obtengo los parámetros pasados por línea de comandos
    args = utility.cli_parser(__version__)

    # Obtengo los datos de configuración
    try:
        config_data = utility.get_config_data(args)
    except ValueError as error:
        raise SystemExit(error)

    # Muestro las opciones de configuración via stdout
    if config_data['debug']:
        utility.print_config(config_data)

    # Instancio WSAA para obtener un objeto de autenticación y autorización
    wsaa = WSAA(config_data)

    # Instancio WSFE para obtener un objeto de Factura Electrónica AFIP
    voucher = WSFE(config_data)

    # Obtengo el ticket de autorización de AFIP
    voucher.token, voucher.sign = wsaa.get_ticket()

    # Obtengo los datos solicitados
    voucher.get_request()

    # Imprimo la ubicación del archivo de salida
    print('Respuesta AFIP en: {}'.format(voucher.output))
コード例 #3
0
def main():
    """
    Función utilizada para la ejecución del script por línea de comandos
    """
    # Obtengo los parámetros pasados por línea de comandos
    args = utility.cli_parser(__version__)

    # Actualizo el nombre del web service según el alcance
    args['web_service'] += '_a' + args['alcance']

    # Obtengo los datos de configuración
    try:
        config_data = utility.get_config_data(args)
    except ValueError as error:
        raise SystemExit(error)

    # Muestro las opciones de configuración via stdout
    if config_data['debug']:
        utility.print_config(config_data)

    # Instancio WSAA para obtener un objeto de autenticación y autorización
    wsaa = WSAA(config_data)

    # Instancio WSSRPADRON para obtener un objeto de padrón AFIP
    census = WSSRPADRON(config_data)

    # Obtengo el ticket de autorización de AFIP
    census.token, census.sign = wsaa.get_ticket()

    # Obtengo los datos solicitados
    census.get_scope_data()

    # Imprimo la ubicación del archivo de salida
    print('Respuesta AFIP en: {}'.format(census.output))
コード例 #4
0
ファイル: wsfev1.py プロジェクト: imclab/pyafipws
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time

    DEBUG = '--debug' in sys.argv

    if DEBUG:
        from pysimplesoap.client import __version__ as soapver
        print "pysimplesoap.__version__ = ", soapver

    wsfev1 = WSFEv1()
    wsfev1.LanzarExcepciones = True

    cache = None
    wsdl = "https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL"
    proxy = ""
    wrapper = ""  #"pycurl"
    cacert = None  #geotrust.crt"

    ok = wsfev1.Conectar(cache, wsdl, proxy, wrapper, cacert)

    if not ok:
        raise RuntimeError(wsfev1.Excepcion)

    if DEBUG:
        print "LOG: ", wsfev1.DebugLog()

    if "--dummy" in sys.argv:
        print wsfev1.client.help("FEDummy")
        wsfev1.Dummy()
        print "AppServerStatus", wsfev1.AppServerStatus
        print "DbServerStatus", wsfev1.DbServerStatus
        print "AuthServerStatus", wsfev1.AuthServerStatus
        sys.exit(0)

    # obteniendo el TA para pruebas
    from wsaa import WSAA
    ta = WSAA().Autenticar("wsfe", "reingart.crt", "reingart.key", debug=True)
    wsfev1.SetTicketAcceso(ta)
    wsfev1.Cuit = "20267565393"

    if "--prueba" in sys.argv:
        print wsfev1.client.help("FECAESolicitar").encode("latin1")

        tipo_cbte = 2
        punto_vta = 4001
        cbte_nro = long(wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta) or 0)
        fecha = datetime.datetime.now().strftime("%Y%m%d")
        concepto = 2
        tipo_doc = 80
        nro_doc = "30500010912"  # CUIT BNA
        cbt_desde = cbte_nro + 1
        cbt_hasta = cbte_nro + 1
        imp_total = "122.00"
        imp_tot_conc = "0.00"
        imp_neto = "100.00"
        imp_iva = "21.00"
        imp_trib = "1.00"
        imp_op_ex = "0.00"
        fecha_cbte = fecha
        fecha_venc_pago = fecha
        # Fechas del período del servicio facturado (solo si concepto = 1?)
        fecha_serv_desde = fecha
        fecha_serv_hasta = fecha
        moneda_id = 'PES'
        moneda_ctz = '1.000'

        wsfev1.CrearFactura(
            concepto,
            tipo_doc,
            nro_doc,
            tipo_cbte,
            punto_vta,
            cbt_desde,
            cbt_hasta,
            imp_total,
            imp_tot_conc,
            imp_neto,
            imp_iva,
            imp_trib,
            imp_op_ex,
            fecha_cbte,
            fecha_venc_pago,
            fecha_serv_desde,
            fecha_serv_hasta,  #--
            moneda_id,
            moneda_ctz)

        if tipo_cbte not in (1, 2):
            tipo = 19
            pto_vta = 2
            nro = 1234
            wsfev1.AgregarCmpAsoc(tipo, pto_vta, nro)

        id = 99
        desc = 'Impuesto Municipal Matanza'
        base_imp = 100
        alic = 1
        importe = 1
        wsfev1.AgregarTributo(id, desc, base_imp, alic, importe)

        id = 5  # 21%
        base_im = 100
        importe = 21
        wsfev1.AgregarIva(id, base_imp, importe)

        import time
        t0 = time.time()
        wsfev1.CAESolicitar()
        t1 = time.time()

        print "Resultado", wsfev1.Resultado
        print "Reproceso", wsfev1.Reproceso
        print "CAE", wsfev1.CAE
        print "Vencimiento", wsfev1.Vencimiento
        if DEBUG:
            print "t0", t0
            print "t1", t1
            print "lapso", t1 - t0
            open("xmlrequest.xml", "wb").write(wsfev1.XmlRequest)
            open("xmlresponse.xml", "wb").write(wsfev1.XmlResponse)

        wsfev1.AnalizarXml("XmlResponse")
        p_assert_eq(wsfev1.ObtenerTagXml('CAE'), str(wsfev1.CAE))
        p_assert_eq(wsfev1.ObtenerTagXml('Concepto'), '2')
        p_assert_eq(wsfev1.ObtenerTagXml('Obs', 0, 'Code'), "10063")
        print wsfev1.ObtenerTagXml('Obs', 0, 'Msg')

        if "--reprocesar" in sys.argv:
            print "reprocesando...."
            wsfev1.Reproceso = True
            wsfev1.CAESolicitar()

    if "--get" in sys.argv:
        tipo_cbte = 2
        punto_vta = 4001
        cbte_nro = wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta)

        wsfev1.CompConsultar(tipo_cbte, punto_vta, cbte_nro)

        print "FechaCbte = ", wsfev1.FechaCbte
        print "CbteNro = ", wsfev1.CbteNro
        print "PuntoVenta = ", wsfev1.PuntoVenta
        print "ImpTotal =", wsfev1.ImpTotal
        print "CAE = ", wsfev1.CAE
        print "Vencimiento = ", wsfev1.Vencimiento
        print "EmisionTipo = ", wsfev1.EmisionTipo

        wsfev1.AnalizarXml("XmlResponse")
        p_assert_eq(wsfev1.ObtenerTagXml('CodAutorizacion'), str(wsfev1.CAE))
        p_assert_eq(wsfev1.ObtenerTagXml('CbteFch'), wsfev1.FechaCbte)
        p_assert_eq(wsfev1.ObtenerTagXml('MonId'), "PES")
        p_assert_eq(wsfev1.ObtenerTagXml('MonCotiz'), "1")
        p_assert_eq(wsfev1.ObtenerTagXml('DocTipo'), "80")
        p_assert_eq(wsfev1.ObtenerTagXml('DocNro'), "30500010912")

    if "--parametros" in sys.argv:
        import codecs, locale, traceback
        if sys.stdout.encoding is None:
            sys.stdout = codecs.getwriter(locale.getpreferredencoding())(
                sys.stdout, "replace")
            sys.stderr = codecs.getwriter(locale.getpreferredencoding())(
                sys.stderr, "replace")

        print "=== Tipos de Comprobante ==="
        print u'\n'.join(wsfev1.ParamGetTiposCbte())
        print "=== Tipos de Concepto ==="
        print u'\n'.join(wsfev1.ParamGetTiposConcepto())
        print "=== Tipos de Documento ==="
        print u'\n'.join(wsfev1.ParamGetTiposDoc())
        print "=== Alicuotas de IVA ==="
        print u'\n'.join(wsfev1.ParamGetTiposIva())
        print "=== Monedas ==="
        print u'\n'.join(wsfev1.ParamGetTiposMonedas())
        print "=== Tipos de datos opcionales ==="
        print u'\n'.join(wsfev1.ParamGetTiposOpcional())
        print "=== Tipos de Tributo ==="
        print u'\n'.join(wsfev1.ParamGetTiposTributos())
        print "=== Puntos de Venta ==="
        print u'\n'.join(wsfev1.ParamGetPtosVenta())

    if "--cotizacion" in sys.argv:
        print wsfev1.ParamGetCotizacion('DOL')

    if "--comptox" in sys.argv:
        print wsfev1.CompTotXRequest()

    if "--ptosventa" in sys.argv:
        print wsfev1.ParamGetPtosVenta()

    if "--solicitar-caea" in sys.argv:
        periodo = sys.argv[sys.argv.index("--solicitar-caea") + 1]
        orden = sys.argv[sys.argv.index("--solicitar-caea") + 2]

        if DEBUG:
            print "Solicitando CAEA para periodo %s orden %s" % (periodo,
                                                                 orden)

        caea = wsfev1.CAEASolicitar(periodo, orden)
        print "CAEA:", caea

        if wsfev1.Errores:
            print "Errores:"
            for error in wsfev1.Errores:
                print error

        if DEBUG:
            print "periodo:", wsfev1.Periodo
            print "orden:", wsfev1.Orden
            print "fch_vig_desde:", wsfev1.FchVigDesde
            print "fch_vig_hasta:", wsfev1.FchVigHasta
            print "fch_tope_inf:", wsfev1.FchTopeInf
            print "fch_proceso:", wsfev1.FchProceso

        if not caea:
            print 'Consultando CAEA'
            caea = wsfev1.CAEAConsultar(periodo, orden)
            print "CAEA:", caea
            if wsfev1.Errores:
                print "Errores:"
                for error in wsfev1.Errores:
                    print error

    if "--sinmovimiento-caea" in sys.argv:
        punto_vta = sys.argv[sys.argv.index("--sinmovimiento-caea") + 1]
        caea = sys.argv[sys.argv.index("--sinmovimiento-caea") + 2]

        if DEBUG:
            print "Informando Punto Venta %s CAEA %s SIN MOVIMIENTO" % (
                punto_vta, caea)

        resultado = wsfev1.CAEASinMovimientoInformar(punto_vta, caea)
        print "Resultado:", resultado
        print "fch_proceso:", wsfev1.FchProceso

        if wsfev1.Errores:
            print "Errores:"
            for error in wsfev1.Errores:
                print error
コード例 #5
0
ファイル: wsltv.py プロジェクト: fjbardelli/pyafipws
            if DEBUG: print "conf_dbf", conf_dbf
        else:
            conf_dbf = {}
            
        DEBUG = '--debug' in sys.argv
        XML = '--xml' in sys.argv

        if DEBUG:
            print "Usando Configuración:"
            print "WSAA_URL:", WSAA_URL
            print "WSLTV_URL:", WSLTV_URL
            print "CACERT", CACERT
            print "WRAPPER", WRAPPER
        # obteniendo el TA
        from wsaa import WSAA
        wsaa = WSAA()
        ta = wsaa.Autenticar("wsltv", CERT, PRIVATEKEY, wsdl=WSAA_URL, 
                               proxy=PROXY, wrapper=WRAPPER, cacert=CACERT)
        if not ta:
            sys.exit("Imposible autenticar con WSAA: %s" % wsaa.Excepcion)

        # cliente soap del web service
        wsltv = WSLTV()
        wsltv.LanzarExcepciones = True
        wsltv.Conectar(url=WSLTV_URL, proxy=PROXY, wrapper=WRAPPER, cacert=CACERT)
        wsltv.SetTicketAcceso(ta)
        wsltv.Cuit = CUIT

        if '--dummy' in sys.argv:
            ret = wsltv.Dummy()
            print "AppServerStatus", wsltv.AppServerStatus
コード例 #6
0
ファイル: wsfexv1.py プロジェクト: jmjacquet/IronWeb
            win32com.server.register.UseCommandLine(WSFEX)
    #elif "/Automate" in sys.argv:
    #    # MS seems to like /automate to run the class factories.
    #    import win32com.server.localserver
    #    #win32com.server.localserver.main()
    #    # start the server.
    #    win32com.server.localserver.serve([WSFEXv1._reg_clsid_])
    else:

        # Crear objeto interface Web Service de Factura Electrónica de Exportación
        wsfexv1 = WSFEXv1()
        # Setear token y sing de autorización (pasos previos)

        # obteniendo el TA para pruebas
        from wsaa import WSAA
        ta = WSAA().Autenticar("wsfex", "reingart.crt", "reingart.key")
        wsfexv1.SetTicketAcceso(ta)

        # CUIT del emisor (debe estar registrado en la AFIP)
        wsfexv1.Cuit = "20267565393"

        # Conectar al Servicio Web de Facturación (producción u homologación)
        if "--prod" in sys.argv:
            wsdl = "https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL"
        else:
            wsdl = "https://wswhomo.afip.gov.ar/wsfexv1/service.asmx?WSDL"
        cache = proxy = ""
        wrapper = "httplib2"
        cacert = open("conf/afip_ca_info.crt").read()
        ok = wsfexv1.Conectar(cache, wsdl, proxy, wrapper, cacert)
    
コード例 #7
0
ファイル: ws_sr_padron.py プロジェクト: jmjacquet/IronWeb
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time
    global CONFIG_FILE

    DEBUG = '--debug' in sys.argv

    if '--constancia' in sys.argv:
        padron = WSSrPadronA5()
        SECTION = 'WS-SR-PADRON-A5'
        service = "ws_sr_constancia_inscripcion"
    else:
        padron = WSSrPadronA4()
        SECTION = 'WS-SR-PADRON-A4'
        service = "ws_sr_padron_a4"

    config = abrir_conf(CONFIG_FILE, DEBUG)
    if config.has_section('WSAA'):
        crt = config.get('WSAA', 'CERT')
        key = config.get('WSAA', 'PRIVATEKEY')
        cuit = config.get(SECTION, 'CUIT')
    else:
        crt, key = "reingart.crt", "reingart.key"
        cuit = "20267565393"
    url_wsaa = url_ws = None
    if config.has_option('WSAA','URL'):
        url_wsaa = config.get('WSAA', 'URL')
    if config.has_option(SECTION,'URL') and not H**O:
        url_ws = config.get(SECTION, 'URL')

    # obteniendo el TA para pruebas
    from wsaa import WSAA

    cache = ""
    ta = WSAA().Autenticar(service, crt, key, url_wsaa)

    padron.SetTicketAcceso(ta)
    padron.Cuit = cuit
    padron.Conectar(cache, url_ws, cacert="conf/afip_ca_info.crt")

    if "--dummy" in sys.argv:
        print padron.client.help("dummy")
        wssrpadron4.Dummy()
        print "AppServerStatus", wssrpadron4.AppServerStatus
        print "DbServerStatus", wssrpadron4.DbServerStatus
        print "AuthServerStatus", wssrpadron4.AuthServerStatus

    try:

        if "--prueba" in sys.argv:
            id_persona = "20000000516"
        else:
            id_persona = len(sys.argv)>1 and sys.argv[1] or "20267565393"

        if "--testing" in sys.argv:
            padron.LoadTestXML("tests/xml/%s_resp.xml" % service)
        print "Consultando AFIP online via webservice...",
        ok = padron.Consultar(id_persona)

        if DEBUG:
            print "Persona", padron.Persona
            print padron.Excepcion

        print 'ok' if ok else "error", padron.Excepcion
        print "Denominacion:", padron.denominacion
        print "Tipo:", padron.tipo_persona, padron.tipo_doc, padron.nro_doc
        print "Estado:", padron.estado
        print "Direccion:", padron.direccion
        print "Localidad:", padron.localidad
        print "Provincia:", padron.provincia
        print "Codigo Postal:", padron.cod_postal
        print "Impuestos:", padron.impuestos
        print "Actividades:", padron.actividades
        print "IVA", padron.imp_iva
        print "MT", padron.monotributo, padron.actividad_monotributo
        print "Empleador", padron.empleador

        if padron.Excepcion:
            print "Excepcion:", padron.Excepcion
            # ver padron.errores para el detalle

    except:
        raise
        print padron.XmlRequest
        print padron.XmlResponse
コード例 #8
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time
    global CONFIG_FILE

    DEBUG = '--debug' in sys.argv

    sire = WSSIREc2005()
    SECTION = 'WSSIREc2005'
    service = "sire-ws"

    config = abrir_conf(CONFIG_FILE, DEBUG)
    if config.has_section('WSAA'):
        crt = config.get('WSAA', 'CERT')
        key = config.get('WSAA', 'PRIVATEKEY')
        cuit = config.get(SECTION, 'CUIT')
    else:
        crt, key = "reingart.crt", "reingart.key"
        cuit = "20267565393"
    url_wsaa = url_ws = None
    if config.has_option('WSAA', 'URL'):
        url_wsaa = config.get('WSAA', 'URL')
    if config.has_option(SECTION, 'URL') and not H**O:
        url_ws = config.get(SECTION, 'URL')

    # obteniendo el TA para pruebas
    from wsaa import WSAA

    cache = ""
    ta = WSAA().Autenticar(service, crt, key, url_wsaa)

    sire.SetTicketAcceso(ta)
    sire.Cuit = cuit
    sire.Conectar(cache, url_ws, cacert="conf/afip_ca_info.crt")

    if "--dummy" in sys.argv:
        print sire.client.help("dummy")
        sire.Dummy()
        print "AppServerStatus", sire.AppServerStatus
        print "DbServerStatus", sire.DbServerStatus
        print "AuthServerStatus", sire.AuthServerStatus

    try:

        if "--testing" in sys.argv:
            sire.LoadTestXML("tests/xml/%s_resp.xml" % service)
        print "Consultando AFIP online via webservice...",
        ok = sire.Emitir(
            version=100,
            impuesto=216,
            regimen=831,
            fecha_retencion='2020-07-11T11:16:00.000-03:00',
            importe_retencion=2100.00,
            importe_base_calculo=20000.00,
            regimen_exclusion=False,
            tipo_comprobante=1,
            fecha_comprobante='2020-07-11T11:15:53.000-03:00',
            importe_comprobante=22200.00,
            cuit_retenido='30500010912',
            fecha_retencion_certificado_original=
            '2020-07-11T11:16:00.000-03:00',
            codigo_trazabilidad=None,
            condicion=1,  # 1: Inscripto, 2: No inscriptio
            imposibilidad_retencion=False,
            motivo_no_retencion=None,
            porcentaje_exclusion=None,
            fecha_publicacion=None,
            numero_comprobante='00003-00008497',
            coe=None,
            coe_original=None,
            cae=None,
            motivo_emision_nota_credito=None,
            numero_certificado_original=None,
            importe_certificado_original=None,
            motivo_anulacion=None,
        )

        print "CertificadoNro: ", sire.CertificadoNro
        print "CodigoSeguridad: ", sire.CodigoSeguridad

        print 'ok' if ok else "error!"
        if sire.Excepcion:
            print "Excepcion:", sire.Excepcion

    except:
        raise
        print sire.XmlRequest
        print sire.XmlResponse
コード例 #9
0
ファイル: wsct.py プロジェクト: fcarena/pyafipws
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time

    DEBUG = '--debug' in sys.argv

    # obteniendo el TA para pruebas
    from wsaa import WSAA
    ta = WSAA().Autenticar("wsct", "reingart.crt", "reingart.key")

    wsct = WSCT()
    wsct.SetTicketAcceso(ta)
    wsct.Cuit = "20267565393"

    cache = ""
    if "--prod" in sys.argv:
        wsdl = "https://serviciosjava.afip.gob.ar/wsct/CTService?wsdl"
    else:
        wsdl = WSDL
    wsct.Conectar(cache, wsdl, cacert="conf/afip_ca_info.crt")
    
    if "--dummy" in sys.argv:
        print wsct.client.help("dummy")
        wsct.Dummy()
        print "AppServerStatus", wsct.AppServerStatus
        print "DbServerStatus", wsct.DbServerStatus
        print "AuthServerStatus", wsct.AuthServerStatus
    
    if "--prueba" in sys.argv:
        ##print wsct.client.help("autorizarComprobante").encode("latin1")
        try:
            tipo_cbte = 195
            punto_vta = 4000
            cbte_nro = wsct.ConsultarUltimoComprobanteAutorizado(tipo_cbte, punto_vta)
            fecha = datetime.datetime.now().strftime("%Y-%m-%d")
            tipo_doc = 80; nro_doc = "50000000059"
            cbte_nro = long(cbte_nro) + 1
            id_impositivo = 9     # "Cliente del Exterior"
            cod_relacion = 3      # Alojamiento Directo a Turista No Residente
            imp_total = "101.00"; imp_tot_conc = "0.00"; imp_neto = "100.00"
            imp_trib = "1.00"; imp_op_ex = "0.00"; imp_subtotal = "100.00"
            imp_reintegro = -21.00      # validación AFIP 346
            cod_pais = 203
            domicilio = "Rua N.76 km 34.5 Alagoas"
            fecha_cbte = fecha
            moneda_id = 'PES'; moneda_ctz = '1.000'
            obs = "Observaciones Comerciales, libre"

            wsct.CrearFactura(tipo_doc, nro_doc, tipo_cbte, punto_vta,
                              cbte_nro, imp_total, imp_tot_conc, imp_neto,
                              imp_subtotal, imp_trib, imp_op_ex, imp_reintegro,
                              fecha_cbte, id_impositivo, cod_pais, domicilio,
                              cod_relacion, moneda_id, moneda_ctz, obs)            
            
            tributo_id = 99
            desc = 'Impuesto Municipal Matanza'
            base_imp = "100.00"
            alic = "1.00"
            importe = "1.00"
            wsct.AgregarTributo(tributo_id, desc, base_imp, alic, importe)

            iva_id = 5 # 21%
            base_imp = 100
            importe = 21
            wsct.AgregarIva(iva_id, base_imp, importe)
            
            tipo = 0    # Item General
            cod_tur = 1 # Servicio de hotelería - alojamiento sin desayuno
            codigo = "T0001"
            ds = "Descripcion del producto P0001"
            iva_id = 5
            imp_iva = 21.00
            imp_subtotal = 121.00
            wsct.AgregarItem(tipo, cod_tur, codigo, ds, 
                             iva_id, imp_iva, imp_subtotal)
            
            codigo = 68             # tarjeta de crédito
            tipo_tarjeta = 99       # otra (ver tabla de parámetros)
            numero_tarjeta = "999999"
            swift_code = None
            tipo_cuenta = None
            numero_cuenta = None
            wsct.AgregarFormaPago(codigo, tipo_tarjeta, numero_tarjeta, 
                                  swift_code, tipo_cuenta, numero_cuenta)

            print wsct.factura
            
            wsct.AutorizarComprobante()

            print "Resultado", wsct.Resultado
            print "CAE", wsct.CAE
            print "Vencimiento", wsct.Vencimiento
            print "Reproceso", wsct.Reproceso
            print "Errores", wsct.ErrMsg
            
            print wsct.Excepcion
            print wsct.ErrMsg
            
            cae = wsct.CAE
            
            if cae:
                
                wsct.ConsultarComprobante(tipo_cbte, punto_vta, cbte_nro)
                print "CAE consulta", wsct.CAE, wsct.CAE==cae 
                print "NRO consulta", wsct.CbteNro, wsct.CbteNro==cbte_nro 
                print "TOTAL consulta", wsct.ImpTotal, wsct.ImpTotal==imp_total

                wsct.AnalizarXml("XmlResponse")
                assert wsct.ObtenerTagXml('codigoAutorizacion') == str(wsct.CAE)
                assert wsct.ObtenerTagXml('codigoConcepto') == str(concepto)
                assert wsct.ObtenerTagXml('arrayItems', 0, 'item', 'unidadesMtx') == '123456'


        except:
            print wsct.XmlRequest        
            print wsct.XmlResponse        
            print wsct.ErrCode
            print wsct.ErrMsg

    if "--ptosventa" in sys.argv:
        print wsct.ConsultarPuntosVenta()

    if "--parametros" in sys.argv:
        print wsct.ConsultarTiposDatosAdicionales()
        print wsct.ConsultarTiposComprobante()
        print wsct.ConsultarTiposDocumento()
        print wsct.ConsultarTiposIVA()
        print wsct.ConsultarCondicionesIVA()
        print wsct.ConsultarMonedas()
        print wsct.ConsultarTiposItem()
        print wsct.ConsultarCodigosItemTurismo()
        print wsct.ConsultarTiposTributo()
        print wsct.ConsultarFomasPago()
        for forma_pago in wsct.ConsultarFomasPago(sep=None)[:2]:
            print wsct.ConsultarTiposTarjeta(forma_pago["codigo"])
        print wsct.ConsultarTiposCuenta()
        print "\n".join(wsct.ConsultarPaises())
        print "\n".join(wsct.ConsultarCUITsPaises())

    if "--cotizacion" in sys.argv:
        print wsct.ConsultarCotizacionMoneda('DOL')
コード例 #10
0
ファイル: wsbfev1.py プロジェクト: Ren14/pyafipws-exportacion
    if "--register" in sys.argv or "--unregister" in sys.argv:
        import win32com.server.register
        win32com.server.register.UseCommandLine(WSBFEv1)
        if '--wsbfe' in sys.argv:
            win32com.server.register.UseCommandLine(WSBFE)
    else:

        # Crear objeto interface Web Service de Factura Electrónica de Exportación
        wsbfev1 = WSBFEv1()
        # Setear token y sing de autorización (pasos previos)

        # obteniendo el TA para pruebas
        from wsaa import WSAA
        ta = WSAA().Autenticar(
            "wsbfe", "certificado_testing_renzo_dev_vb_ubuntu16.crt",
            "pk_renzo_dev.key")
        wsbfev1.SetTicketAcceso(ta)

        # CUIT del emisor (debe estar registrado en la AFIP)
        wsbfev1.Cuit = "20267565393"

        # Conectar al Servicio Web de Facturación (homologación)
        wsdl = "http://wswhomo.afip.gov.ar/WSBFEv1/service.asmx"
        cache = proxy = ""
        wrapper = "httplib2"
        cacert = open("conf/afip_ca_info.crt").read()
        ok = wsbfev1.Conectar(cache, wsdl, proxy, wrapper, cacert)

        if '--dummy' in sys.argv:
            #wsbfev1.LanzarExcepciones = False
コード例 #11
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time
    global CONFIG_FILE

    DEBUG = '--debug' in sys.argv

    if '--constancia' in sys.argv:
        padron = WSSrPadronA5()
        SECTION = 'WS-SR-PADRON-A5'
        service = "ws_sr_constancia_inscripcion"
    else:
        padron = WSSrPadronA4()
        SECTION = 'WS-SR-PADRON-A4'
        service = "ws_sr_padron_a4"

    config = abrir_conf(CONFIG_FILE, DEBUG)
    if config.has_section('WSAA'):
        crt = config.get('WSAA', 'CERT')
        key = config.get('WSAA', 'PRIVATEKEY')
        cuit = config.get(SECTION, 'CUIT')
    else:
        crt, key = "reingart.crt", "reingart.key"
        cuit = "20267565393"
    url_wsaa = url_ws = None
    if config.has_option('WSAA', 'URL'):
        url_wsaa = config.get('WSAA', 'URL')
    if config.has_option(SECTION, 'URL') and not H**O:
        url_ws = config.get(SECTION, 'URL')

    # obteniendo el TA para pruebas
    from wsaa import WSAA

    cache = ""
    ta = WSAA().Autenticar(service, crt, key, url_wsaa)

    padron.SetTicketAcceso(ta)
    padron.Cuit = cuit
    padron.Conectar(cache, url_ws, cacert="conf/afip_ca_info.crt")

    if "--dummy" in sys.argv:
        print padron.client.help("dummy")
        wssrpadron4.Dummy()
        print "AppServerStatus", wssrpadron4.AppServerStatus
        print "DbServerStatus", wssrpadron4.DbServerStatus
        print "AuthServerStatus", wssrpadron4.AuthServerStatus

    if '--csv' in sys.argv:
        csv_reader = csv.reader(open("entrada.csv", "rU"),
                                dialect='excel',
                                delimiter=",")
        csv_writer = csv.writer(open("salida.csv", "w"),
                                dialect='excel',
                                delimiter=",")
        encabezado = next(csv_reader)
        columnas = [
            "cuit", "denominacion", "estado", "direccion", "localidad",
            "provincia", "cod_postal", "impuestos", "actividades", "imp_iva",
            "monotributo", "actividad_monotributo", "empleador",
            "imp_ganancias", "integrante_soc"
        ]
        csv_writer.writerow(columnas)

        for fila in csv_reader:
            cuit = (fila[0] if fila else "").replace("-", "")
            if cuit.isdigit():
                print "Consultando AFIP online...", cuit,
                try:
                    ok = padron.Consultar(cuit)
                except SoapFault as e:
                    ok = None
                    if e.faultstring != "No existe persona con ese Id":
                        raise
                print 'ok' if ok else "error", padron.Excepcion
                # domicilio posiblemente esté en Latin1, normalizar
                csv_writer.writerow(
                    [norm(getattr(padron, campo, "")) for campo in columnas])
        sys.exit(0)

    try:

        if "--prueba" in sys.argv:
            id_persona = "20000000516"
        else:
            id_persona = len(sys.argv) > 1 and sys.argv[1] or "20267565393"

        if "--testing" in sys.argv:
            padron.LoadTestXML("tests/xml/%s_resp.xml" % service)
        print "Consultando AFIP online via webservice...",
        ok = padron.Consultar(id_persona)

        if DEBUG:
            print "Persona", padron.Persona
            print padron.Excepcion

        print 'ok' if ok else "error", padron.Excepcion
        print "Denominacion:", padron.denominacion
        print "Tipo:", padron.tipo_persona, padron.tipo_doc, padron.nro_doc
        print "Estado:", padron.estado
        print "Direccion:", padron.direccion
        print "Localidad:", padron.localidad
        print "Provincia:", padron.provincia
        print "Codigo Postal:", padron.cod_postal
        print "Impuestos:", padron.impuestos
        print "Actividades:", padron.actividades
        print "IVA", padron.imp_iva
        print "MT", padron.monotributo, padron.actividad_monotributo
        print "Empleador", padron.empleador

        if padron.Excepcion:
            print "Excepcion:", padron.Excepcion
            # ver padron.errores para el detalle

    except:
        raise
        print padron.XmlRequest
        print padron.XmlResponse
コード例 #12
0
ファイル: wscdc.py プロジェクト: kaajavi/pyafipws
def main():
    "Funcion principal para utilizar la interfaz por linea de comando"

    if '--formato' in sys.argv:
        print "Formato:"
        for msg, formato in [('Encabezado', ENCABEZADO),
                             ('Observacion', OBSERVACION),
                             ('Evento', EVENTO), ('Error', ERROR), 
                             ]:
            comienzo = 1
            print "=== %s ===" % msg
            print "|| %-20s || %8s || %9s || %-12s || %-20s ||" % (
                "Campo", "Posición", "Longitud", "Tipo", "Descripción")
            for fmt in formato:
                clave, longitud, tipo, desc = fmt
                print "|| %-20s || %8d || %9d || %-12s || %-20s ||" % (
                    clave, comienzo, longitud, tipo, desc.encode("latin1"))
                comienzo += longitud
        sys.exit(0)
    
    # leer configuracion
    global CONFIG_FILE
    if len(sys.argv)>1 and sys.argv[1][0] not in "-/":
        CONFIG_FILE = sys.argv.pop(1)
    config = SafeConfigParser()
    config.read(CONFIG_FILE)
    crt = config.get('WSAA', 'CERT')
    key = config.get('WSAA', 'PRIVATEKEY')
    cuit = config.get('WSCDC', 'CUIT')
    url_wsaa = config.get('WSAA', 'URL') if config.has_option('WSAA','URL') else ""
    url_wscdc = config.get('WSCDC', 'URL') if config.has_option('WSCDC','URL') else ""
    
    # leo configuración de archivos de intercambio
    ENTRADA = config.get('WSCDC','ENTRADA')
    SALIDA = config.get('WSCDC','SALIDA')
    if config.has_section('DBF'):
        conf_dbf = dict(config.items('DBF'))
    else:
        conf_dbf = {}

    # instanciar la interfaz con el webservice
    wscdc = WSCDC()
    ok = wscdc.Conectar("", url_wscdc)
    
    if "--dummy" in sys.argv:
        #print wscdc.client.help("ComprobanteDummy")
        wscdc.Dummy()
        print "AppServerStatus", wscdc.AppServerStatus
        print "DbServerStatus", wscdc.DbServerStatus
        print "AuthServerStatus", wscdc.AuthServerStatus
        sys.exit(0)

    # Gestionar credenciales de acceso con AFIP:
    from wsaa import WSAA
    wsaa = WSAA()
    ta = wsaa.Autenticar("wscdc", crt, key, url_wsaa)
    if not ta:
        sys.exit("Imposible autenticar con WSAA: %s" % wsaa.Excepcion)
    wscdc.SetTicketAcceso(ta)
    wscdc.Cuit = cuit

    if "--constatar" in sys.argv:
        if len(sys.argv) < 8:
            if "--prueba" in sys.argv:
                dic = dict(
                    cbte_modo="CAE",
                    cuit_emisor="20267565393",
                    pto_vta=4002,
                    cbte_tipo=1,
                    cbte_nro=109,
                    cbte_fch="20131227",
                    imp_total="121.0",
                    cod_autorizacion="63523178385550",
                    doc_tipo_receptor=80 ,
                    doc_nro_receptor="30628789661",
                    )
                # escribir archivo de intercambio con datos de prueba:
                escribir_archivo(dic, ENTRADA)
            else:
                # leer archivo de intercambio:
                dic = leer_archivo(ENTRADA)
            # constatar el comprobante
            wscdc.ConstatarComprobante(**dic)
            # actualizar el diccionario con los datos de devueltos por AFIP
            dic.update({'resultado': wscdc.Resultado,
                        'fch_proceso': wscdc.FchProceso,
                        })
            dic['observaciones'] = wscdc.observaciones
            dic['errores'] = wscdc.errores
            escribir_archivo(dic, SALIDA)
        else:
            # usar los datos pasados por linea de comandos:
            wscdc.ConstatarComprobante(*sys.argv[sys.argv.index("--constatar")+1:])
        
        print "Resultado:", wscdc.Resultado
        print "Mensaje de Error:", wscdc.ErrMsg
        print "Observaciones:", wscdc.Obs    

    if "--params" in sys.argv:

        print "=== Modalidad Comprobantes ==="
        print u'\n'.join(wscdc.ConsultarModalidadComprobantes("||"))
        print "=== Tipo Comprobantes ==="
        print u'\n'.join(wscdc.ConsultarTipoComprobantes("||"))
        print "=== Tipo Documentos ==="
        print u'\n'.join(wscdc.ConsultarTipoDocumentos("||"))
        print "=== Tipo Opcionales ==="
        print u'\n'.join(wscdc.ConsultarTipoOpcionales("||"))
        print "Mensaje de Error:", wscdc.ErrMsg
コード例 #13
0
            win32com.server.register.UseCommandLine(WSFEX)
    #elif "/Automate" in sys.argv:
    #    # MS seems to like /automate to run the class factories.
    #    import win32com.server.localserver
    #    #win32com.server.localserver.main()
    #    # start the server.
    #    win32com.server.localserver.serve([WSFEXv1._reg_clsid_])
    else:

        # Crear objeto interface Web Service de Factura Electronica de Exportacion
        wsfexv1 = WSFEXv1()
        # Setear token y sing de autorizacion (pasos previos)

        # obteniendo el TA para pruebas
        from wsaa import WSAA
        ta = WSAA().Autenticar("wsfex", "ubykuoERP.crt",
                               "ClavePrivadaUbykuo.key")
        wsfexv1.SetTicketAcceso(ta)

        # CUIT del emisor (debe estar registrado en la AFIP)
        wsfexv1.Cuit = "20119613524"

        # Conectar al Servicio Web de Facturacion (produccion u homologacion)
        if "--prod" in sys.argv:
            wsdl = "https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL"
        else:
            wsdl = "https://wswhomo.afip.gov.ar/wsfexv1/service.asmx?WSDL"
        cache = proxy = ""
        wrapper = "httplib2"
        cacert = open("conf/afip_ca_info.crt").read()
        ok = wsfexv1.Conectar(cache, wsdl, proxy, wrapper, cacert)
コード例 #14
0
ファイル: wsfev1.py プロジェクト: rustu2/pyafipws
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time

    DEBUG = '--debug' in sys.argv

    if DEBUG:
        from pysimplesoap.client import __version__ as soapver
        print "pysimplesoap.__version__ = ", soapver

    wsfev1 = WSFEv1()
    wsfev1.LanzarExcepciones = True

    cache = None
    wsdl = "https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL"
    proxy = ""
    wrapper = "" #"pycurl"
    cacert = None #geotrust.crt"

    ok = wsfev1.Conectar(cache, wsdl, proxy, wrapper, cacert)
    
    if not ok:
        raise RuntimeError(wsfev1.Excepcion)

    if DEBUG:
        print "LOG: ", wsfev1.DebugLog()
        
    if "--dummy" in sys.argv:
        print wsfev1.client.help("FEDummy")
        wsfev1.Dummy()
        print "AppServerStatus", wsfev1.AppServerStatus
        print "DbServerStatus", wsfev1.DbServerStatus
        print "AuthServerStatus", wsfev1.AuthServerStatus
        sys.exit(0)


    # obteniendo el TA para pruebas
    from wsaa import WSAA
    ta = WSAA().Autenticar("wsfe", "reingart.crt", "reingart.key", debug=True)
    wsfev1.SetTicketAcceso(ta)
    wsfev1.Cuit = "20267565393"
    
    if "--prueba" in sys.argv:
        print wsfev1.client.help("FECAESolicitar").encode("latin1")

        tipo_cbte = 1 if '--usados' not in sys.argv else 49
        punto_vta = 4001
        cbte_nro = long(wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta) or 0)
        fecha = datetime.datetime.now().strftime("%Y%m%d")
        concepto = 2 if '--usados' not in sys.argv else 1
        tipo_doc = 80 if '--usados' not in sys.argv else 30
        nro_doc = "30000000001"
        cbt_desde = cbte_nro + 1; cbt_hasta = cbte_nro + 1
        imp_total = "122.00"; imp_tot_conc = "0.00"; imp_neto = "100.00"
        imp_iva = "21.00"; imp_trib = "1.00"; imp_op_ex = "0.00"
        fecha_cbte = fecha
        # Fechas del período del servicio facturado y vencimiento de pago:
        if concepto > 1:
            fecha_venc_pago = fecha
            fecha_serv_desde = fecha; fecha_serv_hasta = fecha
        else:
            fecha_venc_pago = fecha_serv_desde = fecha_serv_hasta = None
        moneda_id = 'PES'; moneda_ctz = '1.000'

        wsfev1.CrearFactura(concepto, tipo_doc, nro_doc, tipo_cbte, punto_vta,
            cbt_desde, cbt_hasta, imp_total, imp_tot_conc, imp_neto,
            imp_iva, imp_trib, imp_op_ex, fecha_cbte, fecha_venc_pago, 
            fecha_serv_desde, fecha_serv_hasta, #--
            moneda_id, moneda_ctz)
        
        if '--caea' in sys.argv:
            periodo = datetime.datetime.today().strftime("%Y%M")
            orden = 1 if datetime.datetime.today().day < 15 else 2
            caea = wsfev1.CAEAConsultar(periodo, orden)
            wsfev1.EstablecerCampoFactura("caea", caea)

        # comprobantes asociados (notas de crédito / débito)
        if tipo_cbte in (1, 2, 3, 6, 7, 8, 11, 12, 13):
            tipo = 3
            pto_vta = 2
            nro = 1234
            wsfev1.AgregarCmpAsoc(tipo, pto_vta, nro)
        
        # otros tributos:
        tributo_id = 99
        desc = 'Impuesto Municipal Matanza'
        base_imp = 100
        alic = 1
        importe = 1
        wsfev1.AgregarTributo(tributo_id, desc, base_imp, alic, importe)

        # subtotales por alicuota de IVA:
        iva_id = 5 # 21%
        base_imp = 100
        importe = 21
        wsfev1.AgregarIva(iva_id, base_imp, importe)

        # datos opcionales para proyectos promovidos:
        if '--proyectos' in sys.argv:
            wsfev1.AgregarOpcional(2, "1234")   # identificador del proyecto
        # datos opcionales para RG Bienes Usados 3411 (del vendedor):
        if '--usados' in sys.argv:
            wsfev1.AgregarOpcional(91, "Juan Perez")    # Nombre y Apellido 
            wsfev1.AgregarOpcional(92, "200")           # Nacionalidad
            wsfev1.AgregarOpcional(93, "Balcarce 50")   # Domicilio
        # datos opcionales para RG 3668 Impuesto al Valor Agregado - Art.12:
        if '--rg3668' in sys.argv:
            wsfev1.AgregarOpcional(5, "02")             # IVA Excepciones
            wsfev1.AgregarOpcional(61, "80")            # Firmante Doc Tipo
            wsfev1.AgregarOpcional(62, "20267565393")   # Firmante Doc Nro
            wsfev1.AgregarOpcional(7, "01")             # Carácter del Firmante

        import time
        t0 = time.time()
        if not '--caea' in sys.argv:
            wsfev1.CAESolicitar()
        else:
            wsfev1.CAEARegInformativo()
        t1 = time.time()
        
        print "Resultado", wsfev1.Resultado
        print "Reproceso", wsfev1.Reproceso
        print "CAE", wsfev1.CAE
        print "Vencimiento", wsfev1.Vencimiento
        if DEBUG:
            print "t0", t0
            print "t1", t1
            print "lapso", t1-t0
            open("xmlrequest.xml","wb").write(wsfev1.XmlRequest)
            open("xmlresponse.xml","wb").write(wsfev1.XmlResponse)

        wsfev1.AnalizarXml("XmlResponse")
        p_assert_eq(wsfev1.ObtenerTagXml('CAE'), str(wsfev1.CAE))
        p_assert_eq(wsfev1.ObtenerTagXml('Concepto'), '2')
        p_assert_eq(wsfev1.ObtenerTagXml('Obs',0,'Code'), "10017")
        print wsfev1.ObtenerTagXml('Obs',0,'Msg')

        if "--reprocesar" in sys.argv:
            print "reprocesando...."
            wsfev1.Reproceso = True
            wsfev1.CAESolicitar()

        if "--consultar" in sys.argv:
            cae = wsfev1.CAE
            cae2 = wsfev1.CompConsultar(tipo_cbte, punto_vta, cbt_desde)
            p_assert_eq(cae, cae2)
            # comparar datos del encabezado
            p_assert_eq(wsfev1.ObtenerCampoFactura('cae'), str(wsfev1.CAE))
            p_assert_eq(wsfev1.ObtenerCampoFactura('nro_doc'), long(nro_doc))
            p_assert_eq(wsfev1.ObtenerCampoFactura('imp_total'), float(imp_total))
            # comparar primer alicuota de IVA
            p_assert_eq(wsfev1.ObtenerCampoFactura('iva', 0, 'importe'), 21)
            # comparar primer tributo
            p_assert_eq(wsfev1.ObtenerCampoFactura('tributos', 0, 'importe'), 1)
            # comparar primer opcional
            if '--rg3668' in sys.argv:
                p_assert_eq(wsfev1.ObtenerCampoFactura('opcionales', 0, 'valor'), "02")
            # comparar primer observacion de AFIP
            p_assert_eq(wsfev1.ObtenerCampoFactura('obs', 0, 'code'), 10017)
            # pruebo la segunda observacion inexistente
            p_assert_eq(wsfev1.ObtenerCampoFactura('obs', 1, 'code'), None)
            p_assert_eq(wsfev1.Excepcion, u"El campo 1 solicitado no existe")
    
    if "--get" in sys.argv:
        tipo_cbte = 2
        punto_vta = 4001
        cbte_nro = wsfev1.CompUltimoAutorizado(tipo_cbte, punto_vta)

        wsfev1.CompConsultar(tipo_cbte, punto_vta, cbte_nro)

        print "FechaCbte = ", wsfev1.FechaCbte
        print "CbteNro = ", wsfev1.CbteNro
        print "PuntoVenta = ", wsfev1.PuntoVenta
        print "ImpTotal =", wsfev1.ImpTotal
        print "CAE = ", wsfev1.CAE
        print "Vencimiento = ", wsfev1.Vencimiento
        print "EmisionTipo = ", wsfev1.EmisionTipo
        
        wsfev1.AnalizarXml("XmlResponse")
        p_assert_eq(wsfev1.ObtenerTagXml('CodAutorizacion'), str(wsfev1.CAE))
        p_assert_eq(wsfev1.ObtenerTagXml('CbteFch'), wsfev1.FechaCbte)
        p_assert_eq(wsfev1.ObtenerTagXml('MonId'), "PES")
        p_assert_eq(wsfev1.ObtenerTagXml('MonCotiz'), "1")
        p_assert_eq(wsfev1.ObtenerTagXml('DocTipo'), "80")
        p_assert_eq(wsfev1.ObtenerTagXml('DocNro'), "30500010912")
            
    if "--parametros" in sys.argv:
        import codecs, locale, traceback
        if sys.stdout.encoding is None:
            sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout,"replace");
            sys.stderr = codecs.getwriter(locale.getpreferredencoding())(sys.stderr,"replace");

        print u'\n'.join(wsfev1.ParamGetTiposDoc())
        print "=== Tipos de Comprobante ==="
        print u'\n'.join(wsfev1.ParamGetTiposCbte())
        print "=== Tipos de Concepto ==="
        print u'\n'.join(wsfev1.ParamGetTiposConcepto())
        print "=== Tipos de Documento ==="
        print u'\n'.join(wsfev1.ParamGetTiposDoc())
        print "=== Alicuotas de IVA ==="
        print u'\n'.join(wsfev1.ParamGetTiposIva())
        print "=== Monedas ==="
        print u'\n'.join(wsfev1.ParamGetTiposMonedas())
        print "=== Tipos de datos opcionales ==="
        print u'\n'.join(wsfev1.ParamGetTiposOpcional())
        print "=== Tipos de Tributo ==="
        print u'\n'.join(wsfev1.ParamGetTiposTributos())
        print "=== Puntos de Venta ==="
        print u'\n'.join(wsfev1.ParamGetPtosVenta())

    if "--cotizacion" in sys.argv:
        print wsfev1.ParamGetCotizacion('DOL')

    if "--comptox" in sys.argv:
        print wsfev1.CompTotXRequest()
        
    if "--ptosventa" in sys.argv:
        print wsfev1.ParamGetPtosVenta()

    if "--solicitar-caea" in sys.argv:
        periodo = sys.argv[sys.argv.index("--solicitar-caea")+1]
        orden = sys.argv[sys.argv.index("--solicitar-caea")+2]

        if DEBUG: 
            print "Solicitando CAEA para periodo %s orden %s" % (periodo, orden)
        
        caea = wsfev1.CAEASolicitar(periodo, orden)
        print "CAEA:", caea

        if wsfev1.Errores:
            print "Errores:"
            for error in wsfev1.Errores:
                print error
            
        if DEBUG:
            print "periodo:", wsfev1.Periodo 
            print "orden:", wsfev1.Orden 
            print "fch_vig_desde:", wsfev1.FchVigDesde 
            print "fch_vig_hasta:", wsfev1.FchVigHasta 
            print "fch_tope_inf:", wsfev1.FchTopeInf 
            print "fch_proceso:", wsfev1.FchProceso

        if not caea:
            print 'Consultando CAEA'
            caea = wsfev1.CAEAConsultar(periodo, orden)
            print "CAEA:", caea
            if wsfev1.Errores:
                print "Errores:"
                for error in wsfev1.Errores:
                    print error

    if "--sinmovimiento-caea" in sys.argv:
        punto_vta = sys.argv[sys.argv.index("--sinmovimiento-caea")+1]
        caea = sys.argv[sys.argv.index("--sinmovimiento-caea")+2]

        if DEBUG: 
            print "Informando Punto Venta %s CAEA %s SIN MOVIMIENTO" % (punto_vta, caea)
        
        resultado = wsfev1.CAEASinMovimientoInformar(punto_vta, caea)
        print "Resultado:", resultado
        print "fch_proceso:", wsfev1.FchProceso

        if wsfev1.Errores:
            print "Errores:"
            for error in wsfev1.Errores:
                print error