示例#1
8
def autenticar(cert, privatekey, url):
    tra = wsaa.create_tra("wsbfe")
    cms = wsaa.sign_tra(str(tra),str(cert),str(privatekey))
    xml = wsaa.call_wsaa(str(cms),url)
    ta = SimpleXMLElement(xml)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    return token, sign
示例#2
0
文件: receb.py 项目: rustu2/pyafipws
def autenticar(cert, privatekey, url):
    tra = wsaa.create_tra("wsbfe")
    cms = wsaa.sign_tra(str(tra), str(cert), str(privatekey))
    xml = wsaa.call_wsaa(str(cms), url)
    ta = SimpleXMLElement(xml)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    return token, sign
示例#3
0
 def login(self,cert,privatekey,wsaa_url):
     tra = wsaa.create_tra(service="wsfe")
     cms = wsaa.sign_tra(tra,cert,privatekey)
     ta = wsaa.call_wsaa(cms,wsaa_url)
 
     # convertir el ticket de acceso en un objeto xml y extrar datos
     ta = SimpleXMLElement(ta_string)
     self.token = str(ta.credentials.token)
     self.sign = str(ta.credentials.sign)
示例#4
0
def autenticar(cert, privatekey, url):
    "Obtener el TA"
    TA = "TA-wsmtx.xml"
    ttl = 60*60*5
    if not os.path.exists(TA) or os.path.getmtime(TA)+(ttl)<time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsmtxca",ttl=ttl)
        cms = wsaa.sign_tra(str(tra),str(cert),str(privatekey))
        ta_string = wsaa.call_wsaa(cms,wsaa_url,trace=DEBUG)
        open(TA,"w").write(ta_string)
    ta_string=open(TA).read()
    ta = SimpleXMLElement(ta_string)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    return token, sign
示例#5
0
文件: rece.py 项目: rustu2/pyafipws
def autenticar(cert, privatekey, url):
    "Obtener el TA"
    TA = "TA-wsfe.xml"
    ttl = 60 * 60 * 5
    if not os.path.exists(TA) or os.path.getmtime(TA) + (ttl) < time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsfe", ttl=ttl)
        cms = wsaa.sign_tra(str(tra), str(cert), str(privatekey))
        ta_string = wsaa.call_wsaa(cms, wsaa_url, trace=DEBUG)
        open(TA, "w").write(ta_string)
    ta_string = open(TA).read()
    ta = SimpleXMLElement(ta_string)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    return token, sign
示例#6
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time

    DEBUG = '--debug' in sys.argv

    # obteniendo el TA
    TA = "TA-wscoc.xml"
    if not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time():
        import wsaa
        tra = wsaa.create_tra(service="wscoc")
        cms = wsaa.sign_tra(tra,"olano.crt", "olanoycia.key")
        ta_string = wsaa.call_wsaa(cms, trace='--trace' in sys.argv)
        open(TA,"w").write(ta_string)
    
    # fin TA

    ws = WSCOC()
    ws.Cuit = "20267565393"

    ta_string=open(TA).read()
    ta = SimpleXMLElement(ta_string)
    ws.Token = str(ta.credentials.token)
    ws.Sign = str(ta.credentials.sign)

    ws.LanzarExcepciones = True
    ws.Conectar(wsdl=WSDL)
    
    if "--dummy" in sys.argv:
        ##print ws.client.help("dummy")
        try:
            ws.Dummy()
            print "AppServerStatus", ws.AppServerStatus
            print "DbServerStatus", ws.DbServerStatus
            print "AuthServerStatus", ws.AuthServerStatus
        except Exception, e:
            raise
            print "Exception", e
            print ws.XmlRequest
            print ws.XmlResponse
示例#7
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time
    import sys, codecs, locale
    if sys.stdout.encoding is None:
        sys.stdout = codecs.getwriter("latin1")(sys.stdout, "replace")

    url = len(sys.argv) > 2 and sys.argv[2].startswith(
        "http") and sys.argv[2] or WSBFEURL

    # cliente soap del web service
    client = SoapClient(url,
                        action=SOAP_ACTION,
                        namespace=SOAP_NS,
                        trace="--trace" in sys.argv)

    # obteniendo el TA
    TA = "TA.xml"
    if not os.path.exists(TA) or os.path.getmtime(TA) + (60 * 60 *
                                                         5) < time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsbfe")
        cms = wsaa.sign_tra(tra, "reingart.crt", "reingart.key")
        ta_string = wsaa.call_wsaa(cms)
        open("TA.xml", "w").write(ta_string)
    ta_string = open(TA).read()
    ta = SimpleXMLElement(ta_string)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    # fin TA

    CUIT = len(sys.argv) > 1 and sys.argv[1] or "20267565393"

    if "--dummy" in sys.argv:
        print dummy(client)

    # Recuperar parámetros:
    if "--params" in sys.argv:

        print "=== Monedas ==="
        monedas = get_param_mon(client, token, sign, CUIT)
        for m in monedas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % m
        monedas = dict([(m['id'], m['ds']) for m in monedas])

        print "=== NCM ==="
        productos = get_param_ncm(client, token, sign, CUIT)
        for p in productos:
            print "||%(codigo)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % p
        productos = dict([(m['codigo'], m['ds']) for m in productos])

        print "=== Tipos de Comprobante ==="
        cbtes = get_param_tipo_cbte(client, token, sign, CUIT)
        for c in cbtes:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % c
        cbtes = dict([(c['id'], c['ds']) for c in cbtes])

        print "=== Tipos de IVA ==="
        ivas = get_param_tipo_iva(client, token, sign, CUIT)
        for i in ivas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % i
        ivas = dict([(i['id'], i['ds']) for i in ivas])

        print "=== Unidades de Medida ==="
        umedidas = get_param_umed(client, token, sign, CUIT)
        for u in umedidas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % u
        umeds = dict([(u['id'], u['ds']) for u in umedidas])

        ##zonas = get_param_zonas(client, token, sign, CUIT)
        ##print dict([(z['id'],z['ds']) for z in zonas])

    else:

        monedas = {
            'DOL': u'D\xf3lar Estadounidense',
            'PES': u'Pesos Argentinos',
            '010': u'Pesos Mejicanos',
            '011': u'Pesos Uruguayos',
            '012': u'Real',
            '014': u'Coronas Danesas',
            '015': u'Coronas Noruegas',
            '016': u'Coronas Suecas',
            '019': u'Yens',
            '018': u'D\xf3lar Canadiense',
            '033': u'Peso Chileno',
            '056': u'Forint (Hungr\xeda)',
            '031': u'Peso Boliviano',
            '036': u'Sucre Ecuatoriano',
            '051': u'D\xf3lar de Hong Kong',
            '034': u'Rand Sudafricano',
            '053': u'D\xf3lar de Jamaica',
            '057': u'Baht (Tailandia)',
            '043': u'Balboas Paname\xf1as',
            '042': u'Peso Dominicano',
            '052': u'D\xf3lar de Singapur',
            '032': u'Peso Colombiano',
            '035': u'Nuevo Sol Peruano',
            '061': u'Zloty Polaco',
            '060': u'Euro',
            '063': u'Lempira Hondure\xf1a',
            '062': u'Rupia Hind\xfa',
            '064': u'Yuan (Rep. Pop. China)',
            '025': u'Dinar Yugoslavo',
            '002': u'D\xf3lar Libre EEUU',
            '027': u'Dracma Griego',
            '026': u'D\xf3lar Australiano',
            '007': u'Florines Holandeses',
            '023': u'Bol\xedvar Venezolano',
            '047': u'Riyal Saudita',
            '046': u'Libra Egipcia',
            '045': u'Dirham Marroqu\xed',
            '044': u'C\xf3rdoba Nicarag\xfcense',
            '029': u'G\xfcaran\xed',
            '028': u'Flor\xedn (Antillas Holandesas)',
            '054': u'D\xf3lar de Taiwan',
            '040': u'Lei Rumano',
            '024': u'Corona Checa',
            '030': u'Shekel (Israel)',
            '021': u'Libra Esterlina',
            '055': u'Quetzal Guatemalteco',
            '059': u'Dinar Kuwaiti'
        }
        comprobantes = {
            1: u'Factura A',
            2: u'Nota de D\xe9bito A',
            3: u'Nota de Cr\xe9dito A',
            4: u'Recibo A',
            6: u'Factura B',
            7: u'Nota de D\xe9bito B',
            8: u'Nota de Cr\xe9dito B',
            9: u'Recibo B',
            11: u'Factura C',
            12: u'Nota de D\xe9bito C',
            13: u'Nota de Cr\xe9dito C',
            15: u'Recibo C',
            51: u'Factura M',
            52: u'Nota de D\xe9bito M',
            53: u'Nota de Cr\xe9dito M',
            54: u'Recibo M'
        }
        ivas = {
            1: u'No gravado',
            2: u'Exento',
            3: u'0%',
            4: u'10.5%',
            5: u'21%',
            6: u'27%'
        }
        umeds = {
            1: u'kilogramos',
            2: u'metros',
            3: u'metros cuadrados',
            4: u'metros c\xfabicos',
            5: u'litros',
            6: u'1000 kWh',
            7: u'unidades',
            8: u'pares',
            9: u'docenas',
            10: u'quilates',
            11: u'millares',
            14: u'gramos',
            15: u'milimetros',
            16: u'mm c\xfabicos',
            17: u'kil\xf3metros',
            18: u'hectolitros',
            20: u'cent\xedmetros',
            25: u'jgo. pqt. mazo naipes',
            27: u'cm c\xfabicos',
            29: u'toneladas',
            30: u'dam c\xfabicos',
            31: u'hm c\xfabicos',
            32: u'km c\xfabicos',
            33: u'microgramos',
            34: u'nanogramos',
            35: u'picogramos',
            41: u'miligramos',
            47: u'mililitros',
            48: u'curie',
            49: u'milicurie',
            50: u'microcurie',
            51: u'uiacthor',
            52: u'muiacthor',
            53: u'kg base',
            54: u'gruesa',
            61: u'kg bruto',
            62: u'uiactant',
            63: u'muiactant',
            64: u'uiactig',
            65: u'muiactig',
            66: u'kg activo',
            67: u'gramo activo',
            68: u'gramo base',
            96: u'packs',
            97: u'hormas',
            98: u'bonificaci\xf2n',
            99: u'otras unidades'
        }

    # ncm=7308.10.00, 7308.20.00

    if "--prueba" in sys.argv:

        # recupero ultimo comprobante y id
        tipo_cbte = 1
        punto_vta = 5
        cbte_nro, cbte_fecha, events = get_last_cmp(client, token, sign, CUIT,
                                                    tipo_cbte, punto_vta)
        id, events = get_last_id(client, token, sign, CUIT)

        #cbte_nro = 1
        #id = 1002 # 99000000000098

        # creo una factura de prueba
        f = FacturaBF()
        f.punto_vta = punto_vta
        f.cbte_nro = cbte_nro + 1
        f.imp_moneda_id = 'PES'
        f.fecha_cbte = date('Ymd')
        it = ItemBF(ncm='7308.10.00',
                    sec='',
                    ds=u'prueba Anafe económico',
                    qty=2.0,
                    precio=100.0,
                    bonif=0.0,
                    iva_id=5)
        f.add_item(it)
        it = ItemBF(ncm='7308.20.00',
                    sec='',
                    ds='prueba 2',
                    qty=4.0,
                    precio=50.0,
                    bonif=10.0,
                    iva_id=5)
        f.add_item(it)
        print f.to_dict()

        try:
            # autorizar...
            auth, events = authorize(client,
                                     token,
                                     sign,
                                     CUIT,
                                     id=id + 1,
                                     factura=f.to_dict())
            cae = auth['cae']
            print "auth", auth
            print "events", events
            auth, events = get_cmp(client, token, sign, CUIT, f.tipo_cbte,
                                   f.punto_vta, f.cbte_nro)
            print "get_cmp: auth", auth
            print "get_cmp: events", events
        except:
            raise
            ##l= client.xml_request.splitlines()
            ##print l[4][1150:1200]
            ##import pdb; pdb.set_trace()

    sys.exit(0)
示例#8
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time

    url = len(sys.argv)>2 and sys.argv[2].startswith("http") and sys.argv[2] or WSFEXURL

    # cliente soap del web service
    client = SoapClient(url, 
        action = SOAP_ACTION, 
        namespace = SOAP_NS,
        trace = "--trace" in sys.argv)

    # obteniendo el TA
    TA = "TA.xml"
    if not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsfex")
        cms = wsaa.sign_tra(tra,"reingart.crt","reingart.key")
        ta_string = wsaa.call_wsaa(cms)
        open("TA.xml","w").write(ta_string)
    ta_string=open(TA).read()
    ta = SimpleXMLElement(ta_string)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    # fin TA

    CUIT = len(sys.argv)>1 and sys.argv[1] or "20267565393"

    if "--dummy" in sys.argv:
        print dummy(client)
    
    # Recuperar parámetros:
    if "--params" in sys.argv:
        import codecs, locale
        sys.stdout = codecs.getwriter('latin1')(sys.stdout); 
    
        print "=== Monedas ==="
        monedas = get_param_mon(client, token, sign, CUIT)    
        for m in monedas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % m
        monedas = dict([(m['id'],m['ds']) for m in monedas])
        
        print "=== Tipos Comprobante ==="
        cbtes = get_param_tipo_cbte(client, token, sign, CUIT)
        for c in cbtes:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % c
        comprobantes =  dict([(c['id'],c['ds']) for c in cbtes])

        print u"=== Tipos Exportación ==="
        tipos = get_param_tipo_expo(client, token, sign, CUIT)
        for t in tipos:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % t
        tipos_expo = dict([(t['id'],t['ds']) for t in tipos])

        print "=== Idiomas ==="
        tipos = get_param_idiomas(client, token, sign, CUIT)
        for t in tipos:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % t
        idiomas = dict([(t['id'],t['ds']) for t in tipos])
           
        print "=== Unidades de medida ==="
        umedidas = get_param_umed(client, token, sign, CUIT)    
        for u in umedidas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % u
        umeds = dict([(u['id'],u['ds']) for u in umedidas])

        print "=== INCOTERMs ==="
        incoterms = get_param_incoterms(client, token, sign, CUIT)
        for i in incoterms:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % i
        incoterms = dict([(t['id'],t['ds']) for t in incoterms])

        print "=== Pais Destino ==="
        pais = get_param_dst_pais(client, token, sign, CUIT)    
        for p in pais:
            print "||%(codigo)s||%(ds)s||" % p
        paises = dict([(p['codigo'],p['ds']) for p in pais])

        print "=== CUIT Pais Destino ==="
        pais = get_param_dst_cuit(client, token, sign, CUIT)    
        for p in pais:
            print "||%(cuit)s||%(ds)s||" % p
        cuits = dict([(p['cuit'],p['ds']) for p in pais])

        ctz = get_param_ctz(client, token, sign, CUIT, 'DOL')
        print ctz
        
        print get_param_pto_venta(client, token, sign, CUIT)
        

    else:
        monedas = {'DOL': u'D\xf3lar Estadounidense', 'PES': u'Pesos Argentinos', '010': u'Pesos Mejicanos', '011': u'Pesos Uruguayos', '012': u'Real', '014': u'Coronas Danesas', '015': u'Coronas Noruegas', '016': u'Coronas Suecas', '019': u'Yens', '018': u'D\xf3lar Canadiense', '033': u'Peso Chileno', '056': u'Forint (Hungr\xeda)', '031': u'Peso Boliviano', '036': u'Sucre Ecuatoriano', '051': u'D\xf3lar de Hong Kong', '034': u'Rand Sudafricano', '053': u'D\xf3lar de Jamaica', '057': u'Baht (Tailandia)', '043': u'Balboas Paname\xf1as', '042': u'Peso Dominicano', '052': u'D\xf3lar de Singapur', '032': u'Peso Colombiano', '035': u'Nuevo Sol Peruano', '061': u'Zloty Polaco', '060': u'Euro', '063': u'Lempira Hondure\xf1a', '062': u'Rupia Hind\xfa', '064': u'Yuan (Rep. Pop. China)', '009': u'Franco Suizo', '025': u'Dinar Yugoslavo', '002': u'D\xf3lar Libre EEUU', '027': u'Dracma Griego', '026': u'D\xf3lar Australiano', '007': u'Florines Holandeses', '023': u'Bol\xedvar Venezolano', '047': u'Riyal Saudita', '046': u'Libra Egipcia', '045': u'Dirham Marroqu\xed', '044': u'C\xf3rdoba Nicarag\xfcense', '029': u'G\xfcaran\xed', '028': u'Flor\xedn (Antillas Holandesas)', '054': u'D\xf3lar de Taiwan', '040': u'Lei Rumano', '024': u'Corona Checa', '030': u'Shekel (Israel)', '021': u'Libra Esterlina', '055': u'Quetzal Guatemalteco', '059': u'Dinar Kuwaiti'}
        comprobantes = {19: u'Facturas de Exportaci\xf3n\n', 20: u'Nota de D\xe9bito por Operaciones con el Exterior\n', 21: u'Nota de Cr\xe9dito por Operaciones con el Exterior\n'}
        tipos_expo = {1: u'Exportaci\xf3n definitiva de Bienes', 2: u'Servicios', 4: u'Otros'}
        idiomas = {1: u'Espa\xf1ol', 2: u'Ingl\xe9s', 3: u'Portugu\xe9s'}
        umeds = {0: u' ', 1: u'kilogramos', 2: u'metros', 3: u'metros cuadrados', 4: u'metros c\xfabicos', 5: u'litros', 6: u'1000 kWh', 7: u'unidades', 8: u'pares', 9: u'docenas', 10: u'quilates', 11: u'millares', 14: u'gramos', 15: u'milimetros', 16: u'mm c\xfabicos', 17: u'kil\xf3metros', 18: u'hectolitros', 20: u'cent\xedmetros', 25: u'jgo. pqt. mazo naipes', 27: u'cm c\xfabicos', 29: u'toneladas', 30: u'dam c\xfabicos', 31: u'hm c\xfabicos', 32: u'km c\xfabicos', 33: u'microgramos', 34: u'nanogramos', 35: u'picogramos', 41: u'miligramos', 47: u'mililitros', 48: u'curie', 49: u'milicurie', 50: u'microcurie', 51: u'uiacthor', 52: u'muiacthor', 53: u'kg base', 54: u'gruesa', 61: u'kg bruto', 62: u'uiactant', 63: u'muiactant', 64: u'uiactig', 65: u'muiactig', 66: u'kg activo', 67: u'gramo activo', 68: u'gramo base', 96: u'packs', 97: u'hormas', 98: u'bonificaci\xf3n', 99: u'otras unidades'}
        incoterms = {'DAF': u'DAF', 'DDP': u'DDP', 'CIF': u'CIF', 'FCA': u'FCA', 'FAS': u'FAS', 'DES': u'DES', 'CPT': u'CPT', 'EXW': u'EXW', 'CIP': u'CIP', 'DDU': u'DDU', 'FOB': u'FOB', 'DEQ': u'DEQ', 'CFR': u'CFR'}

    if "--prueba" in sys.argv:

        # recupero ultimo comprobante y id
        tipo_cbte = 19
        punto_vta = 1
        cbte_nro, cbte_fecha, events = get_last_cmp(client, token, sign, CUIT, tipo_cbte, punto_vta)
        id, events = get_last_id(client, token, sign, CUIT)

        print "last_cmp", cbte_nro, cbte_fecha
        print "last_id", id
        
        cbte_nro +=1
        id += 1

        if False: # prueba a mano
            f = {
                'Id': id,
                'Fecha_cbte': date('Ymd'),
                'Tipo_cbte': tipo_cbte, 
                'Punto_vta': punto_vta, 
                'Cbte_nro': cbte_nro,
                'Tipo_expo': 1,
                'Permiso_existente': 'N',
                'Dst_cmp': 225,
                'Cliente': 'Jose Yorugua',
                'Cuit_pais_cliente': 50000000016,
                'Domicilio_cliente': 'Montevideo, UY',
                'Id_impositivo': 'RUC 123123',
                'Moneda_Id': 'DOL',
                'Moneda_ctz': 3.85,
                'Obs_comerciales': 'Observaciones comerciales',
                'Imp_total': 60.00,
                'Obs': 'Observaciones',
                'Forma_pago': 'Taka taka',
                'Incoterms': 'FOB',
                'Idioma_cbte': 2,
                'Items': [{
                   'Item': {
                     'Pro_codigo': "kbd",
                     'Pro_ds': "Keyboard (uruguayan layout)",
                     'Pro_qty': 1,
                     'Pro_umed': 7,
                     'Pro_precio_uni': 50.000049,
                     'Pro_total_item': 50.000049}
                   },{
                   'Item': {
                     'Pro_codigo': "mice",
                     'Pro_ds': "Optical Mouse",
                     'Pro_qty': 1,
                     'Pro_umed': 7,
                     'Pro_precio_uni': 10.50,
                     'Pro_total_item': 10.50}
                   }]
                }
        else:
            # creo una factura de prueba
            f = FacturaEX()
            f.punto_vta = punto_vta
            f.cbte_nro = cbte_nro
            f.fecha_cbte = date('Ymd')
            f.tipo_expo = 1
            f.permiso_existente = 'S'
            f.dst_cmp = 203
            f.cliente = 'Joao Da Silva'
            f.cuit_pais_cliente = 50000000016
            f.domicilio_cliente = 'Rua 76 km 34.5 Alagoas'
            f.id_impositivo = 'PJ54482221-l'
            f.moneda_id = '012'
            f.moneda_ctz = 0.5
            f.obs_comerciales = 'Observaciones comerciales'
            f.obs = 'Sin observaciones'
            f.forma_pago = '30 dias'
            f.incoterms = 'FOB'
            f.idioma_cbte = 1
            # agrego los items
            it = ItemFEX(codigo='PRO1', ds=u'Producto Tipo 1 Exportacion MERCOSUR ISO 9001', 
                         qty=1, precio=125)
            f.add_item(it)
            it = ItemFEX(codigo='PRO2', ds=u'Producto Tipo 2 Exportacion MERCOSUR ISO 9001', 
                         qty=1, precio=125)
            f.add_item(it)
            permiso = PermisoFEX(id_permiso="99999AAXX999999A",dst_merc=225)
            f.add_permiso(permiso)
            permiso = PermisoFEX(id_permiso="99999AAXX999999B",dst_merc=225)
            f.add_permiso(permiso)
            if f.tipo_cbte!=19: 
                cmp_asoc = CmpAsocFEX(tipo=19, punto_vta=2, cbte_nro=1)
                f.add_cmp_asoc(cmp_asoc)
                cmp_asoc = CmpAsocFEX(tipo=19, punto_vta=2, cbte_nro=2)
                f.add_cmp_asoc(cmp_asoc)
            f = f.to_dict()
            print f

        try:
            auth, events = authorize(client, token, sign, CUIT, id=id, factura=f)
        except FEXError, fex:
            print "FEX_error:", fex.msg
            print client.xml_response
            sys.exit(1)
        cae = auth['cae']
        print "auth", auth
        print "events", events
        try:
            auth, events = get_cmp(client, token, sign, CUIT, tipo_cbte, punto_vta, cbte_nro)
        except:
            print client.xml_response
            sys.exit(1)
        print "get_cmp: auth", auth
        print "get_cmp: events", events        
示例#9
0
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
    TA = "TA.xml"
    if 'wsaa' in sys.argv or not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsfe")
        cms = wsaa.sign_tra(tra,"reingart.crt","reingart.key")
        url = "" # "https://wsaa.afip.gov.ar/ws/services/LoginCms"
        ta_string = wsaa.call_wsaa(cms, url)
        open(TA,"w").write(ta_string)
    ta_string=open(TA).read()
    ta = SimpleXMLElement(ta_string)
    # fin TA

    if '--cuit' in sys.argv:
        cuit = sys.argv[sys.argv.index("--cuit")+1]
    else:
        cuit = "20276595955"

    #wsfev1.Cuit = cuit
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    wsfev1.SetParametros(cuit, token, sign)
    
    if "--prueba" in sys.argv:
        #print wsfev1.client.help("FECAESolicitar").encode("latin1")

        tipo_cbte = 2
        punto_vta = 0001
        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
示例#10
0
        if config.has_option("WSCTG", "URL") and not H**O:
            wsctg_url = config.get("WSCTG", "URL")
        else:
            wsctg_url = WSCTGURL

        DEBUG = "--debug" in sys.argv
        XML = "--xml" in sys.argv

        if DEBUG:
            print "Usando Configuración:"
            print "wsaa_url:", wsaa_url
            print "wsctg_url:", wsctg_url
        # obteniendo el TA
        TA = "ctg-ta.xml"
        if not os.path.exists(TA) or os.path.getmtime(TA) + (60 * 60 * 5) < time.time():
            tra = wsaa.create_tra(service="wsctg")
            cms = wsaa.sign_tra(tra, CERT, PRIVATEKEY)
            ta_string = wsaa.call_wsaa(cms, wsaa_url)
            open(TA, "w").write(ta_string)
        ta_string = open(TA).read()
        ta = SimpleXMLElement(ta_string)
        token = str(ta.credentials.token)
        sign = str(ta.credentials.sign)
        # fin TA

        # cliente soap del web service
        client = SoapClient(
            wsctg_url, action=SOAP_ACTION, namespace=SOAP_NS, exceptions=True, soap_ns="soapenv", trace=XML, ns="ctg"
        )

        if "--dummy" in sys.argv:
示例#11
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time
    import sys, codecs, locale
    if sys.stdout.encoding is None:
        sys.stdout = codecs.getwriter("latin1")(sys.stdout,"replace");

    url = len(sys.argv)>2 and sys.argv[2].startswith("http") and sys.argv[2] or WSBFEURL

    # cliente soap del web service
    client = SoapClient(url, 
        action = SOAP_ACTION, 
        namespace = SOAP_NS,
        trace = "--trace" in sys.argv)

    # obteniendo el TA
    TA = "TA.xml"
    if not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsbfe")
        cms = wsaa.sign_tra(tra,"reingart.crt","reingart.key")
        ta_string = wsaa.call_wsaa(cms)
        open("TA.xml","w").write(ta_string)
    ta_string=open(TA).read()
    ta = SimpleXMLElement(ta_string)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    # fin TA

    CUIT = len(sys.argv)>1 and sys.argv[1] or "20267565393"

    if "--dummy" in sys.argv:
        print dummy(client)
    
    # Recuperar parámetros:
    if "--params" in sys.argv:
    
        print "=== Monedas ==="
        monedas = get_param_mon(client, token, sign, CUIT)    
        for m in monedas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % m
        monedas = dict([(m['id'],m['ds']) for m in monedas])
        
        print "=== NCM ==="
        productos = get_param_ncm(client, token, sign, CUIT)
        for p in productos:
            print "||%(codigo)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % p
        productos = dict([(m['codigo'],m['ds']) for m in productos])
        
        print "=== Tipos de Comprobante ==="
        cbtes = get_param_tipo_cbte(client, token, sign, CUIT)
        for c in cbtes:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % c
        cbtes = dict([(c['id'],c['ds']) for c in cbtes])
        
        print "=== Tipos de IVA ==="
        ivas = get_param_tipo_iva(client, token, sign, CUIT)
        for i in ivas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % i
        ivas = dict([(i['id'],i['ds']) for i in ivas])

        print "=== Unidades de Medida ==="
        umedidas = get_param_umed(client, token, sign, CUIT)    
        for u in umedidas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % u
        umeds = dict([(u['id'],u['ds']) for u in umedidas])

        ##zonas = get_param_zonas(client, token, sign, CUIT)    
        ##print dict([(z['id'],z['ds']) for z in zonas])

    else:

        monedas = {'DOL': u'D\xf3lar Estadounidense', 'PES': u'Pesos Argentinos', '010': u'Pesos Mejicanos', '011': u'Pesos Uruguayos', '012': u'Real', '014': u'Coronas Danesas', '015': u'Coronas Noruegas', '016': u'Coronas Suecas', '019': u'Yens', '018': u'D\xf3lar Canadiense', '033': u'Peso Chileno', '056': u'Forint (Hungr\xeda)', '031': u'Peso Boliviano', '036': u'Sucre Ecuatoriano', '051': u'D\xf3lar de Hong Kong', '034': u'Rand Sudafricano', '053': u'D\xf3lar de Jamaica', '057': u'Baht (Tailandia)', '043': u'Balboas Paname\xf1as', '042': u'Peso Dominicano', '052': u'D\xf3lar de Singapur', '032': u'Peso Colombiano', '035': u'Nuevo Sol Peruano', '061': u'Zloty Polaco', '060': u'Euro', '063': u'Lempira Hondure\xf1a', '062': u'Rupia Hind\xfa', '064': u'Yuan (Rep. Pop. China)', '025': u'Dinar Yugoslavo', '002': u'D\xf3lar Libre EEUU', '027': u'Dracma Griego', '026': u'D\xf3lar Australiano', '007': u'Florines Holandeses', '023': u'Bol\xedvar Venezolano', '047': u'Riyal Saudita', '046': u'Libra Egipcia', '045': u'Dirham Marroqu\xed', '044': u'C\xf3rdoba Nicarag\xfcense', '029': u'G\xfcaran\xed', '028': u'Flor\xedn (Antillas Holandesas)', '054': u'D\xf3lar de Taiwan', '040': u'Lei Rumano', '024': u'Corona Checa', '030': u'Shekel (Israel)', '021': u'Libra Esterlina', '055': u'Quetzal Guatemalteco', '059': u'Dinar Kuwaiti'}
        comprobantes = {1: u'Factura A', 2: u'Nota de D\xe9bito A', 3: u'Nota de Cr\xe9dito A', 4: u'Recibo A', 6: u'Factura B', 7: u'Nota de D\xe9bito B', 8: u'Nota de Cr\xe9dito B', 9: u'Recibo B', 11: u'Factura C', 12: u'Nota de D\xe9bito C', 13: u'Nota de Cr\xe9dito C', 15: u'Recibo C', 51: u'Factura M', 52: u'Nota de D\xe9bito M', 53: u'Nota de Cr\xe9dito M', 54: u'Recibo M'}
        ivas = {1: u'No gravado', 2: u'Exento', 3: u'0%', 4: u'10.5%', 5: u'21%', 6: u'27%'}
        umeds = {1: u'kilogramos', 2: u'metros', 3: u'metros cuadrados', 4: u'metros c\xfabicos', 5: u'litros', 6: u'1000 kWh', 7: u'unidades', 8: u'pares', 9: u'docenas', 10: u'quilates', 11: u'millares', 14: u'gramos', 15: u'milimetros', 16: u'mm c\xfabicos', 17: u'kil\xf3metros', 18: u'hectolitros', 20: u'cent\xedmetros', 25: u'jgo. pqt. mazo naipes', 27: u'cm c\xfabicos', 29: u'toneladas', 30: u'dam c\xfabicos', 31: u'hm c\xfabicos', 32: u'km c\xfabicos', 33: u'microgramos', 34: u'nanogramos', 35: u'picogramos', 41: u'miligramos', 47: u'mililitros', 48: u'curie', 49: u'milicurie', 50: u'microcurie', 51: u'uiacthor', 52: u'muiacthor', 53: u'kg base', 54: u'gruesa', 61: u'kg bruto', 62: u'uiactant', 63: u'muiactant', 64: u'uiactig', 65: u'muiactig', 66: u'kg activo', 67: u'gramo activo', 68: u'gramo base', 96: u'packs', 97: u'hormas', 98: u'bonificaci\xf2n', 99: u'otras unidades'}

    # ncm=7308.10.00, 7308.20.00 

    if "--prueba" in sys.argv:

        # recupero ultimo comprobante y id
        tipo_cbte = 1
        punto_vta = 5
        cbte_nro, cbte_fecha, events = get_last_cmp(client, token, sign, CUIT, tipo_cbte, punto_vta)
        id, events = get_last_id(client, token, sign, CUIT)    
        
        #cbte_nro = 1
        #id = 1002 # 99000000000098

        # creo una factura de prueba
        f = FacturaBF()
        f.punto_vta = punto_vta
        f.cbte_nro = cbte_nro+1
        f.imp_moneda_id = 'PES'
        f.fecha_cbte = date('Ymd')
        it = ItemBF(ncm='7308.10.00', sec='', ds=u'prueba Anafe económico', qty=2.0, precio=100.0, bonif=0.0, iva_id=5)
        f.add_item(it)
        it = ItemBF(ncm='7308.20.00', sec='', ds='prueba 2', qty=4.0, precio=50.0, bonif=10.0, iva_id=5)
        f.add_item(it)
        print f.to_dict()

        try:
            # autorizar...
            auth, events = authorize(client, token, sign, CUIT, id=id+1, factura=f.to_dict())
            cae = auth['cae']
            print "auth", auth
            print "events", events
            auth, events = get_cmp(client, token, sign, CUIT, f.tipo_cbte, f.punto_vta, f.cbte_nro)
            print "get_cmp: auth", auth
            print "get_cmp: events", events        
        except:
            raise
            ##l= client.xml_request.splitlines()
            ##print l[4][1150:1200]
            ##import pdb; pdb.set_trace()

    sys.exit(0)
示例#12
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time

    url = len(sys.argv) > 2 and sys.argv[2].startswith(
        "http") and sys.argv[2] or WSFEXURL

    # cliente soap del web service
    client = SoapClient(url,
                        action=SOAP_ACTION,
                        namespace=SOAP_NS,
                        trace="--trace" in sys.argv)

    # obteniendo el TA
    TA = "TA.xml"
    if not os.path.exists(TA) or os.path.getmtime(TA) + (60 * 60 *
                                                         5) < time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsfex")
        cms = wsaa.sign_tra(tra, "reingart.crt", "reingart.key")
        ta_string = wsaa.call_wsaa(cms)
        open("TA.xml", "w").write(ta_string)
    ta_string = open(TA).read()
    ta = SimpleXMLElement(ta_string)
    token = str(ta.credentials.token)
    sign = str(ta.credentials.sign)
    # fin TA

    CUIT = len(sys.argv) > 1 and sys.argv[1] or "20267565393"

    if "--dummy" in sys.argv:
        print dummy(client)

    # Recuperar parámetros:
    if "--params" in sys.argv:
        import codecs, locale
        sys.stdout = codecs.getwriter('latin1')(sys.stdout)

        print "=== Monedas ==="
        monedas = get_param_mon(client, token, sign, CUIT)
        for m in monedas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % m
        monedas = dict([(m['id'], m['ds']) for m in monedas])

        print "=== Tipos Comprobante ==="
        cbtes = get_param_tipo_cbte(client, token, sign, CUIT)
        for c in cbtes:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % c
        comprobantes = dict([(c['id'], c['ds']) for c in cbtes])

        print u"=== Tipos Exportación ==="
        tipos = get_param_tipo_expo(client, token, sign, CUIT)
        for t in tipos:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % t
        tipos_expo = dict([(t['id'], t['ds']) for t in tipos])

        print "=== Idiomas ==="
        tipos = get_param_idiomas(client, token, sign, CUIT)
        for t in tipos:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % t
        idiomas = dict([(t['id'], t['ds']) for t in tipos])

        print "=== Unidades de medida ==="
        umedidas = get_param_umed(client, token, sign, CUIT)
        for u in umedidas:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % u
        umeds = dict([(u['id'], u['ds']) for u in umedidas])

        print "=== INCOTERMs ==="
        incoterms = get_param_incoterms(client, token, sign, CUIT)
        for i in incoterms:
            print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % i
        incoterms = dict([(t['id'], t['ds']) for t in incoterms])

        print "=== Pais Destino ==="
        pais = get_param_dst_pais(client, token, sign, CUIT)
        for p in pais:
            print "||%(codigo)s||%(ds)s||" % p
        paises = dict([(p['codigo'], p['ds']) for p in pais])

        print "=== CUIT Pais Destino ==="
        pais = get_param_dst_cuit(client, token, sign, CUIT)
        for p in pais:
            print "||%(cuit)s||%(ds)s||" % p
        cuits = dict([(p['cuit'], p['ds']) for p in pais])

        ctz = get_param_ctz(client, token, sign, CUIT, 'DOL')
        print ctz

        print get_param_pto_venta(client, token, sign, CUIT)

    else:
        monedas = {
            'DOL': u'D\xf3lar Estadounidense',
            'PES': u'Pesos Argentinos',
            '010': u'Pesos Mejicanos',
            '011': u'Pesos Uruguayos',
            '012': u'Real',
            '014': u'Coronas Danesas',
            '015': u'Coronas Noruegas',
            '016': u'Coronas Suecas',
            '019': u'Yens',
            '018': u'D\xf3lar Canadiense',
            '033': u'Peso Chileno',
            '056': u'Forint (Hungr\xeda)',
            '031': u'Peso Boliviano',
            '036': u'Sucre Ecuatoriano',
            '051': u'D\xf3lar de Hong Kong',
            '034': u'Rand Sudafricano',
            '053': u'D\xf3lar de Jamaica',
            '057': u'Baht (Tailandia)',
            '043': u'Balboas Paname\xf1as',
            '042': u'Peso Dominicano',
            '052': u'D\xf3lar de Singapur',
            '032': u'Peso Colombiano',
            '035': u'Nuevo Sol Peruano',
            '061': u'Zloty Polaco',
            '060': u'Euro',
            '063': u'Lempira Hondure\xf1a',
            '062': u'Rupia Hind\xfa',
            '064': u'Yuan (Rep. Pop. China)',
            '009': u'Franco Suizo',
            '025': u'Dinar Yugoslavo',
            '002': u'D\xf3lar Libre EEUU',
            '027': u'Dracma Griego',
            '026': u'D\xf3lar Australiano',
            '007': u'Florines Holandeses',
            '023': u'Bol\xedvar Venezolano',
            '047': u'Riyal Saudita',
            '046': u'Libra Egipcia',
            '045': u'Dirham Marroqu\xed',
            '044': u'C\xf3rdoba Nicarag\xfcense',
            '029': u'G\xfcaran\xed',
            '028': u'Flor\xedn (Antillas Holandesas)',
            '054': u'D\xf3lar de Taiwan',
            '040': u'Lei Rumano',
            '024': u'Corona Checa',
            '030': u'Shekel (Israel)',
            '021': u'Libra Esterlina',
            '055': u'Quetzal Guatemalteco',
            '059': u'Dinar Kuwaiti'
        }
        comprobantes = {
            19: u'Facturas de Exportaci\xf3n\n',
            20: u'Nota de D\xe9bito por Operaciones con el Exterior\n',
            21: u'Nota de Cr\xe9dito por Operaciones con el Exterior\n'
        }
        tipos_expo = {
            1: u'Exportaci\xf3n definitiva de Bienes',
            2: u'Servicios',
            4: u'Otros'
        }
        idiomas = {1: u'Espa\xf1ol', 2: u'Ingl\xe9s', 3: u'Portugu\xe9s'}
        umeds = {
            0: u' ',
            1: u'kilogramos',
            2: u'metros',
            3: u'metros cuadrados',
            4: u'metros c\xfabicos',
            5: u'litros',
            6: u'1000 kWh',
            7: u'unidades',
            8: u'pares',
            9: u'docenas',
            10: u'quilates',
            11: u'millares',
            14: u'gramos',
            15: u'milimetros',
            16: u'mm c\xfabicos',
            17: u'kil\xf3metros',
            18: u'hectolitros',
            20: u'cent\xedmetros',
            25: u'jgo. pqt. mazo naipes',
            27: u'cm c\xfabicos',
            29: u'toneladas',
            30: u'dam c\xfabicos',
            31: u'hm c\xfabicos',
            32: u'km c\xfabicos',
            33: u'microgramos',
            34: u'nanogramos',
            35: u'picogramos',
            41: u'miligramos',
            47: u'mililitros',
            48: u'curie',
            49: u'milicurie',
            50: u'microcurie',
            51: u'uiacthor',
            52: u'muiacthor',
            53: u'kg base',
            54: u'gruesa',
            61: u'kg bruto',
            62: u'uiactant',
            63: u'muiactant',
            64: u'uiactig',
            65: u'muiactig',
            66: u'kg activo',
            67: u'gramo activo',
            68: u'gramo base',
            96: u'packs',
            97: u'hormas',
            98: u'bonificaci\xf3n',
            99: u'otras unidades'
        }
        incoterms = {
            'DAF': u'DAF',
            'DDP': u'DDP',
            'CIF': u'CIF',
            'FCA': u'FCA',
            'FAS': u'FAS',
            'DES': u'DES',
            'CPT': u'CPT',
            'EXW': u'EXW',
            'CIP': u'CIP',
            'DDU': u'DDU',
            'FOB': u'FOB',
            'DEQ': u'DEQ',
            'CFR': u'CFR'
        }

    if "--prueba" in sys.argv:

        # recupero ultimo comprobante y id
        tipo_cbte = 19
        punto_vta = 1
        cbte_nro, cbte_fecha, events = get_last_cmp(client, token, sign, CUIT,
                                                    tipo_cbte, punto_vta)
        id, events = get_last_id(client, token, sign, CUIT)

        print "last_cmp", cbte_nro, cbte_fecha
        print "last_id", id

        cbte_nro += 1
        id += 1

        if False:  # prueba a mano
            f = {
                'Id':
                id,
                'Fecha_cbte':
                date('Ymd'),
                'Tipo_cbte':
                tipo_cbte,
                'Punto_vta':
                punto_vta,
                'Cbte_nro':
                cbte_nro,
                'Tipo_expo':
                1,
                'Permiso_existente':
                'N',
                'Dst_cmp':
                225,
                'Cliente':
                'Jose Yorugua',
                'Cuit_pais_cliente':
                50000000016,
                'Domicilio_cliente':
                'Montevideo, UY',
                'Id_impositivo':
                'RUC 123123',
                'Moneda_Id':
                'DOL',
                'Moneda_ctz':
                3.85,
                'Obs_comerciales':
                'Observaciones comerciales',
                'Imp_total':
                60.00,
                'Obs':
                'Observaciones',
                'Forma_pago':
                'Taka taka',
                'Incoterms':
                'FOB',
                'Idioma_cbte':
                2,
                'Items': [{
                    'Item': {
                        'Pro_codigo': "kbd",
                        'Pro_ds': "Keyboard (uruguayan layout)",
                        'Pro_qty': 1,
                        'Pro_umed': 7,
                        'Pro_precio_uni': 50.000049,
                        'Pro_total_item': 50.000049
                    }
                }, {
                    'Item': {
                        'Pro_codigo': "mice",
                        'Pro_ds': "Optical Mouse",
                        'Pro_qty': 1,
                        'Pro_umed': 7,
                        'Pro_precio_uni': 10.50,
                        'Pro_total_item': 10.50
                    }
                }]
            }
        else:
            # creo una factura de prueba
            f = FacturaEX()
            f.punto_vta = punto_vta
            f.cbte_nro = cbte_nro
            f.fecha_cbte = date('Ymd')
            f.tipo_expo = 1
            f.permiso_existente = 'S'
            f.dst_cmp = 203
            f.cliente = 'Joao Da Silva'
            f.cuit_pais_cliente = 50000000016
            f.domicilio_cliente = 'Rua 76 km 34.5 Alagoas'
            f.id_impositivo = 'PJ54482221-l'
            f.moneda_id = '012'
            f.moneda_ctz = 0.5
            f.obs_comerciales = 'Observaciones comerciales'
            f.obs = 'Sin observaciones'
            f.forma_pago = '30 dias'
            f.incoterms = 'FOB'
            f.idioma_cbte = 1
            # agrego los items
            it = ItemFEX(codigo='PRO1',
                         ds=u'Producto Tipo 1 Exportacion MERCOSUR ISO 9001',
                         qty=1,
                         precio=125)
            f.add_item(it)
            it = ItemFEX(codigo='PRO2',
                         ds=u'Producto Tipo 2 Exportacion MERCOSUR ISO 9001',
                         qty=1,
                         precio=125)
            f.add_item(it)
            permiso = PermisoFEX(id_permiso="99999AAXX999999A", dst_merc=225)
            f.add_permiso(permiso)
            permiso = PermisoFEX(id_permiso="99999AAXX999999B", dst_merc=225)
            f.add_permiso(permiso)
            if f.tipo_cbte != 19:
                cmp_asoc = CmpAsocFEX(tipo=19, punto_vta=2, cbte_nro=1)
                f.add_cmp_asoc(cmp_asoc)
                cmp_asoc = CmpAsocFEX(tipo=19, punto_vta=2, cbte_nro=2)
                f.add_cmp_asoc(cmp_asoc)
            f = f.to_dict()
            print f

        try:
            auth, events = authorize(client,
                                     token,
                                     sign,
                                     CUIT,
                                     id=id,
                                     factura=f)
        except FEXError, fex:
            print "FEX_error:", fex.msg
            print client.xml_response
            sys.exit(1)
        cae = auth['cae']
        print "auth", auth
        print "events", events
        try:
            auth, events = get_cmp(client, token, sign, CUIT, tipo_cbte,
                                   punto_vta, cbte_nro)
        except:
            print client.xml_response
            sys.exit(1)
        print "get_cmp: auth", auth
        print "get_cmp: events", events
示例#13
0
    import traceback
    import datetime

    import wsaa

    try:
    
        if "--version" in sys.argv:
            print "Versión: ", __version__

        CERT='reingart.crt'
        PRIVATEKEY='reingart.key'
        # obteniendo el TA
        TA = "wsddf-ta.xml"
        if not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time():
            tra = wsaa.create_tra(service="wDigDepFiel")
            cms = wsaa.sign_tra(tra,CERT,PRIVATEKEY)
            ta_string = wsaa.call_wsaa(cms)
            open(TA,"w").write(ta_string)
        ta_string=open(TA).read()
        ta = SimpleXMLElement(ta_string)
        token = str(ta.credentials.token)
        sign = str(ta.credentials.sign)
        # fin TA
    
        # cliente soap del web service
        client = SoapClient(WSDDFURL, 
            action = SOAP_ACTION, 
            namespace = SOAP_NS, exceptions = True,
            trace = True, ns = 'ar', soap_ns='soap')
        
示例#14
0
    import datetime

    import wsaa

    try:

        if "--version" in sys.argv:
            print "Versión: ", __version__

        CERT = 'reingart.crt'
        PRIVATEKEY = 'reingart.key'
        # obteniendo el TA
        TA = "wsddf-ta.xml"
        if not os.path.exists(TA) or os.path.getmtime(TA) + (60 * 60 *
                                                             5) < time.time():
            tra = wsaa.create_tra(service="wDigDepFiel")
            cms = wsaa.sign_tra(tra, CERT, PRIVATEKEY)
            ta_string = wsaa.call_wsaa(cms)
            open(TA, "w").write(ta_string)
        ta_string = open(TA).read()
        ta = SimpleXMLElement(ta_string)
        token = str(ta.credentials.token)
        sign = str(ta.credentials.sign)
        # fin TA

        # cliente soap del web service
        client = SoapClient(WSDDFURL,
                            action=SOAP_ACTION,
                            namespace=SOAP_NS,
                            exceptions=True,
                            trace=True,
示例#15
0
文件: wsctg.py 项目: kaajavi/pyafipws
        if config.has_option('WSCTG','URL') and not H**O:
            wsctg_url = config.get('WSCTG','URL')
        else:
            wsctg_url = WSCTGURL

        DEBUG = '--debug' in sys.argv
        XML = '--xml' in sys.argv

        if DEBUG:
            print "Usando Configuración:"
            print "wsaa_url:", wsaa_url
            print "wsctg_url:", wsctg_url
        # obteniendo el TA
        TA = "ctg-ta.xml"
        if not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time():
            tra = wsaa.create_tra(service="wsctg")
            cms = wsaa.sign_tra(tra,CERT,PRIVATEKEY)
            ta_string = wsaa.call_wsaa(cms, wsaa_url)
            open(TA,"w").write(ta_string)
        ta_string=open(TA).read()
        ta = SimpleXMLElement(ta_string)
        token = str(ta.credentials.token)
        sign = str(ta.credentials.sign)
        # fin TA

        # cliente soap del web service
        client = SoapClient(wsctg_url, 
            action = SOAP_ACTION, 
            namespace = SOAP_NS, exceptions = True,
            soap_ns = 'soapenv',
            trace = XML, ns = "ctg")
示例#16
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time

    DEBUG = '--debug' in sys.argv

    # obteniendo el TA
    TA = "TA-wsmtxca.xml"
    if 'wsaa' in sys.argv or not os.path.exists(TA) or os.path.getmtime(TA)+(60*60*5)<time.time():
        import wsaa
        tra = wsaa.create_tra(service="wsmtxca")
        cms = wsaa.sign_tra(tra,"reingart.crt","reingart.key")
        ta_string = wsaa.call_wsaa(cms, trace='--trace' in sys.argv)
        open(TA,"w").write(ta_string)
    ta_string=open(TA).read()
    ta = SimpleXMLElement(ta_string)
    # fin TA

    wsmtxca = WSMTXCA()
    wsmtxca.Cuit = "20267565393"
    wsmtxca.Token = str(ta.credentials.token)
    wsmtxca.Sign = str(ta.credentials.sign)

    wsmtxca.Conectar()
    
    if "--dummy" in sys.argv:
        print wsmtxca.client.help("dummy")
        wsmtxca.Dummy()
        print "AppServerStatus", wsmtxca.AppServerStatus
        print "DbServerStatus", wsmtxca.DbServerStatus
        print "AuthServerStatus", wsmtxca.AuthServerStatus
    
    if "--prueba" in sys.argv:
        print wsmtxca.client.help("autorizarComprobante").encode("latin1")
        try:
            tipo_cbte = 1
            punto_vta = 4000
            cbte_nro = wsmtxca.ConsultarUltimoComprobanteAutorizado(tipo_cbte, punto_vta)
            fecha = datetime.datetime.now().strftime("%Y-%m-%d")
            concepto = 3
            tipo_doc = 80; nro_doc = "30000000007"
            cbte_nro = long(cbte_nro) + 1
            cbt_desde = cbte_nro; cbt_hasta = cbt_desde
            imp_total = "122.00"; imp_tot_conc = "0.00"; imp_neto = "100.00"
            imp_trib = "1.00"; imp_op_ex = "0.00"; imp_subtotal = "100.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'
            obs = "Observaciones Comerciales, libre"

            wsmtxca.CrearFactura(concepto, tipo_doc, nro_doc, tipo_cbte, punto_vta,
                cbt_desde, cbt_hasta, imp_total, imp_tot_conc, imp_neto,
                imp_subtotal, imp_trib, imp_op_ex, fecha_cbte, fecha_venc_pago, 
                fecha_serv_desde, fecha_serv_hasta, #--
                moneda_id, moneda_ctz, obs)
            
            #tipo = 19
            #pto_vta = 2
            #nro = 1234
            #wsmtxca.AgregarCmpAsoc(tipo, pto_vta, nro)
            
            tributo_id = 99
            desc = 'Impuesto Municipal Matanza'
            base_imp = "100.00"
            alic = "1.00"
            importe = "1.00"
            wsmtxca.AgregarTributo(tributo_id, desc, base_imp, alic, importe)

            iva_id = 5 # 21%
            base_im = 100
            importe = 21
            wsmtxca.AgregarIva(iva_id, base_imp, importe)
            
            u_mtx = 123456
            cod_mtx = 1234567890123
            codigo = "P0001"
            ds = "Descripcion del producto P0001"
            qty = 2.00
            umed = 7
            precio = 100.00
            bonif = 0.00
            iva_id = 5
            imp_iva = 42.00
            imp_subtotal = 242.00
            wsmtxca.AgregarItem(u_mtx, cod_mtx, codigo, ds, qty, umed, precio, bonif, 
                        iva_id, imp_iva, imp_subtotal)
            
            wsmtxca.AgregarItem(None, None, None, 'bonificacion', 0, 99, 1, None, 
                        5, -21, -121)
            
            wsmtxca.AutorizarComprobante()

            print "Resultado", wsmtxca.Resultado
            print "CAE", wsmtxca.CAE
            print "Vencimiento", wsmtxca.Vencimiento
            
            cae = wsmtxca.CAE
            
            wsmtxca.ConsultarComprobante(tipo_cbte, punto_vta, cbte_nro)
            print "CAE consulta", wsmtxca.CAE, wsmtxca.CAE==cae 
            print "NRO consulta", wsmtxca.CbteNro, wsmtxca.CbteNro==cbte_nro 
            print "TOTAL consulta", wsmtxca.ImpTotal, wsmtxca.ImpTotal==imp_total

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


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


    if "--parametros" in sys.argv:
        print wsmtxca.ConsultarTiposComprobante()
        print wsmtxca.ConsultarTiposDocumento()
        print wsmtxca.ConsultarAlicuotasIVA()
        print wsmtxca.ConsultarCondicionesIVA()
        print wsmtxca.ConsultarMonedas()
        print wsmtxca.ConsultarUnidadesMedida()
        print wsmtxca.ConsultarTiposTributo()

    if "--cotizacion" in sys.argv:
        print wsmtxca.ConsultarCotizacionMoneda('DOL')
        
    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 "Consultando CAEA para periodo %s orden %s" % (periodo, orden)
        
        caea = wsmtxca.ConsultarCAEA(periodo, orden)
        if not caea:
            print "Solicitando CAEA para periodo %s orden %s" % (periodo, orden)
            caea = wsmtxca.SolicitarCAEA(periodo, orden)

        print "CAEA:", caea

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