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
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
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)
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
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
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
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)
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
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
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:
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)
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
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')
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,
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")
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