def load_config(self, fn_channel = DIR_DEFAULT_CONF_CHANNEL, fn_pocket = DIR_DEFAULT_CONF_POCKET): """ Read configs: * channel.conf * pocket.conf """ count_add_channel = 0 try: with open(path.abspath(fn_channel), "r") as fp: allinfo = json.load(fp) for site in allinfo: if self.add_channel(utils.JsonDict(site)): count_add_channel += 1 except IOError: #raise snserror.config.nofile(fn_channel) logger.warning("'%s' does not exist. Use default", fn_channel) except ValueError as e: raise snserror.config.load("file: %s; message: %s" % (fn_channel, e)) try: with open(path.abspath(fn_pocket), "r") as fp: allinfo = json.load(fp) self.jsonconf = allinfo except IOError: #raise snserror.config.nofile(fn_pocket) logger.warning("'%s' does not exist. Use default", fn_pocket) except ValueError as e: raise snserror.config.load("file: %s; message:%s" % (fn_channel, e)) logger.info("Read configs done. Add %d channels" % count_add_channel)
def load_config(self, fn_channel=DIR_DEFAULT_CONF_CHANNEL, fn_pocket=DIR_DEFAULT_CONF_POCKET): """ Read configs: * channel.conf * pocket.conf """ count_add_channel = 0 try: with open(path.abspath(fn_channel), "r") as fp: allinfo = json.load(fp) for site in allinfo: if self.add_channel(utils.JsonDict(site)): count_add_channel += 1 except IOError: #raise snserror.config.nofile(fn_channel) logger.warning("'%s' does not exist. Use default", fn_channel) except ValueError as e: raise snserror.config.load("file: %s; message: %s" % (fn_channel, e)) try: with open(path.abspath(fn_pocket), "r") as fp: allinfo = json.load(fp) self.jsonconf = allinfo except IOError: #raise snserror.config.nofile(fn_pocket) logger.warning("'%s' does not exist. Use default", fn_pocket) except ValueError as e: raise snserror.config.load("file: %s; message:%s" % (fn_channel, e)) logger.info("Read configs done. Add %d channels" % count_add_channel)
def get_saved_token(self): try: fname = self.auth_info.save_token_file if fname == "(default)": fname = self.jsonconf.channel_name + ".token.save" if fname != "(null)": with open(fname, "r") as fp: token = utils.JsonObject(json.load(fp)) #check expire time if self.is_expired(token): logger.debug( "Saved Access token is expired, try to get one through sns.auth() :D" ) return False #TODO: decrypt token self.token = token else: logger.debug( "This channel is configured not to save token to file") return False except IOError: logger.debug( "No access token saved, try to get one through sns.auth() :D") return False logger.info("Read saved token for '%s' successfully", self.jsonconf.channel_name) return True
def get_saved_token(self): try: fname = self.auth_info.save_token_file if fname == "(default)" : fname = self.jsonconf.channel_name+".token.save" if fname != "(null)" : with open(fname, "r") as fp: token = utils.JsonObject(json.load(fp)) # check expire time if self.is_expired(token): logger.debug("Saved Access token is expired, try to get one through sns.auth() :D") return False #TODO: decrypt token self.token = token else: logger.debug("This channel is configured not to save token to file") return False except IOError: logger.debug("No access token saved, try to get one through sns.auth() :D") return False logger.info("Read saved token for '%s' successfully", self.jsonconf.channel_name) print self.token return True
def leer_archivo(nombre_archivo): archivo = open(nombre_archivo, "r") items = [] ext = os.path.splitext(nombre_archivo)[1] if ext == '.csv': csv_reader = csv.reader(open(ENTRADA), dialect='excel', delimiter=";") for row in csv_reader: items.append(row) cols = [str(it).strip() for it in items[0]] # armar diccionario por cada linea items = [dict([(cols[i],str(v).strip()) for i,v in enumerate(item)]) for item in items[1:]] return cols, items elif ext == '.json': items = json.load(archivo) elif ext == '.dbf': dic = {} formatos = [('Encabezado', ENCABEZADO, dic), ] leer_dbf(formatos, conf_dbf) items = [dic] elif ext == '.txt': dic = {} for linea in archivo: if str(linea[0])=='0': dic.update(leer(linea, ENCABEZADO)) else: print "Tipo de registro incorrecto:", linea[0] items.append(dic) else: raise RuntimeError("Extension de archivo desconocida: %s" % ext) archivo.close() cols = [k[0] for k in ENCABEZADO] return cols, items
def get(self, url, data={}, headers=DEFAULT_HEADERS, timeout=-1, value="data"): r = None if timeout == 0: return r if data: url_hash = hashlib.sha1(url + '?' + data).hexdigest() else: url_hash = hashlib.sha1(url).hexdigest() domain = ".".join(urlparse.urlparse(url)[1].split('.')[-2:]) prefix, i, f = self.files(domain, url_hash) if os.path.exists(i): with open(i) as _i: try: info = json.load(_i) except: return r now = time.mktime(time.localtime()) expired = now-timeout if value != 'headers' and info['only_headers']: return None if timeout < 0 or info['created'] > expired: if value == 'headers': r = info['headers'] else: with open(f) as data: r = data.read() if info['compressed']: r = zlib.decompress(r) return r
def leer_archivo(nombre_archivo): archivo = open(nombre_archivo, "r") if '--json' in sys.argv: dic = json.load(archivo) elif '--dbf' in sys.argv: dic = {} formatos = [ ('Encabezado', ENCABEZADO, dic), ] leer_dbf(formatos, conf_dbf) else: dic = {} for linea in archivo: if str(linea[0]) == '0': d = leer(linea, ENCABEZADO) dic.update(d) else: print "Tipo de registro incorrecto:", linea[0] archivo.close() if not 'cod_autorizacion' in dic: raise RuntimeError( "Archivo de entrada invalido, revise campos y lineas en blanco") return dic
def new_channel(self, pl=None, **kwarg): if pl: try: return getattr(platform, pl).new_channel(**kwarg) except AttributeError: logger.warning("can not find platform '%s'", pl) return utils.JsonDict() else: return utils.JsonDict(json.load(open(abspath("conf/init-channel.json.example"), "r")))
def new_channel(self, pl = None, **kwarg): if pl: try: return getattr(platform, pl).new_channel(**kwarg) except AttributeError: logger.warning("can not find platform '%s'", pl) return utils.JsonDict() else: _fn_conf = path.join(SNSConf._SNSAPI_DIR_STATIC_DATA, 'init-channel.json.example') return utils.JsonDict(json.load(open(_fn_conf)))
def new_channel(self, pl=None, **argd): if pl: try: return getattr(platform, pl).new_channel(**argd) except AttributeError: logger.warning("can not find platform '%s'", pl) return utils.JsonDict() else: return utils.JsonDict( json.load(open(abspath('conf/init-channel.json.example'), 'r')))
def new_channel(self, pl=None, **kwarg): if pl: try: return getattr(platform, pl).new_channel(**kwarg) except AttributeError: logger.warning("can not find platform '%s'", pl) return utils.JsonDict() else: _fn_conf = path.join(SNSConf._SNSAPI_DIR_STATIC_DATA, 'init-channel.json.example') return utils.JsonDict(json.load(open(_fn_conf)))
def geocode(q): data = json.load( urllib.urlopen('http://ws.geonames.org/searchJSON?' + urllib.urlencode({ 'q': q, 'maxRows': 1, 'lang': 'en', 'style': 'full' }))) if not data['geonames']: return None, (None, None) place = data['geonames'][0] name = place['name'] if place['adminName1'] and place['name'] != place['adminName1']: name += ', ' + place['adminName1'] return name, (place['lat'], place['lng'])
def geocode(q): data = json.load(urllib.urlopen( 'http://ws.geonames.org/searchJSON?' + urllib.urlencode({ 'q': q, 'maxRows': 1, 'lang': 'en', 'style': 'full' }) )) if not data['geonames']: return None, (None, None) place = data['geonames'][0] name = place['name'] if place['adminName1'] and place['name'] != place['adminName1']: name += ', ' + place['adminName1'] return name, (place['lat'], place['lng'])
def load_config(self, fn_channel="conf/channel.json", fn_pocket="conf/pocket.json"): """ Read configs: * channel.conf * pocket.conf """ count_add_channel = 0 try: with open(abspath(fn_channel), "r") as fp: allinfo = json.load(fp) for site in allinfo: if self.add_channel(utils.JsonDict(site)): count_add_channel += 1 except IOError: # raise snserror.config.nofile(fn_channel) logger.warning("'%s' does not exist. Use default", fn_channel) except ValueError, e: raise snserror.config.load("file: %s; message: %s" % (fn_channel, e.message))
def load_config(self, \ fn_channel = 'conf/channel.json',\ fn_pocket = 'conf/pocket.json'): """ Read configs: * channel.conf * pocket.conf """ count_add_channel = 0 try: with open(abspath(fn_channel), "r") as fp: allinfo = json.load(fp) for site in allinfo: if self.add_channel(utils.JsonDict(site)): count_add_channel += 1 except IOError: #raise snserror.config.nofile(fn_channel) logger.warning("'%s' does not exist. Use default", fn_channel) except ValueError, e: raise snserror.config.load("file: %s; message: %s" % (fn_channel, e.message))
def leer_archivo(nombre_archivo): archivo = open(nombre_archivo, "r") if '--json' in sys.argv: dic = json.load(archivo) elif '--dbf' in sys.argv: dic = {} formatos = [('Encabezado', ENCABEZADO, dic), ] leer_dbf(formatos, conf_dbf) else: dic = {} for linea in archivo: if str(linea[0])=='0': d = leer(linea, ENCABEZADO) dic.update(d) else: print "Tipo de registro incorrecto:", linea[0] archivo.close() if not 'cod_autorizacion' in dic: raise RuntimeError("Archivo de entrada invalido, revise campos y lineas en blanco") return dic
def main(): "Función principal de pruebas (obtener CAE)" import os, time, sys global WSDL, LOCATION DEBUG = '--debug' in sys.argv ws = TrazaProdMed() ws.Username = '******' ws.Password = '******' if '--prod' in sys.argv and not H**O: WSDL = WSDL_PROD print "Usando WSDL:", WSDL sys.argv.pop(sys.argv.index("--prod")) # Inicializo las variables y estructuras para el archivo de intercambio: transacciones = [] errores = [] formatos = [] if '--formato' in sys.argv: print "Formato:" for msg, formato, lista in formatos: comienzo = 1 print "=== %s ===" % msg print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % ( "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)") claves = [] for fmt in formato: clave, longitud, tipo = fmt[0:3] clave_dbf = dar_nombre_campo_dbf(clave, claves) claves.append(clave_dbf) print "|| %-25s || %-12s || %5d || %4d || %-10s ||" % ( clave, tipo, longitud, comienzo, clave_dbf) comienzo += longitud sys.exit(0) if '--cargar' in sys.argv: if '--dbf' in sys.argv: leer_dbf(formatos[:1], {}) elif '--json' in sys.argv: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".json", "r") d = json.load(archivo) formato[2].extend(d) archivo.close() else: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".txt", "r") for linea in archivo: d = leer(linea, formato[1]) formato[2].append(d) archivo.close() ws.Conectar("", WSDL) if ws.Excepcion: print ws.Excepcion print ws.Traceback sys.exit(-1) # Datos de pruebas: if '--test' in sys.argv: ws.CrearTransaccion( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="7791234567801", gln_destino="7791234567801", n_remito="R0001-12341234", n_factura="A0001-12341234", vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="07791234567810", lote=datetime.datetime.now().strftime("%Y"), # R4556567 numero_serial=int(time.time()*10), # A23434 id_evento=1, cuit_medico="30711622507", id_obra_social=465667, apellido="Reingart", nombres="Mariano", tipo_documento="96", n_documento="28510785", sexo="M", calle="San Martin", numero="5656", piso="", depto="1", localidad="Berazategui", provincia="Buenos Aires", n_postal="1700", fecha_nacimiento="20/12/1972", telefono="5555-5555", nro_afiliado="9999999999999", cod_diagnostico="B30", cod_hiv="NOAP31121970", id_motivo_devolucion=1, otro_motivo_devolucion="producto fallado", ) # Opciones principales: if '--cancela' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML("tests/xml/trazaprodmed_cancela_err.xml") # cargo respuesta ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela")+1:]) elif '--cancela_parcial' in sys.argv: ws.SendCancelacTransaccParcial(*sys.argv[sys.argv.index("--cancela_parcial")+1:]) elif '--consulta' in sys.argv: ws.GetTransaccionesWS( *sys.argv[sys.argv.index("--consulta")+1:] ) print "CantPaginas", ws.CantPaginas print "HayError", ws.HayError #print "TransaccionPlainWS", ws.TransaccionPlainWS # parametros comunes de salida (columnas de la tabla): TRANSACCIONES = ws.Transacciones[0].keys() if ws.Transacciones else [] claves = [k for k in TRANSACCIONES] # extiendo la lista de resultado para el archivo de intercambio: transacciones.extend(ws.Transacciones) # encabezado de la tabla: print "||", "||".join(["%s" % clave for clave in claves]), "||" # recorro los datos devueltos (TransaccionPlainWS): while ws.LeerTransaccion(): for clave in claves: print "||", ws.GetParametro(clave), # imprimo cada fila print "||" elif '--catalogo' in sys.argv: ret = ws.GetCatalogoElectronicoByGTIN( *sys.argv[sys.argv.index("--catalogo")+1:] ) for catalogo in ws.params_out.values(): print catalogo # imprimo cada fila else: argv = [argv for argv in sys.argv if not argv.startswith("--")] if not transacciones: if len(argv)>16: ws.CrearTransaccion(*argv[3:]) else: print "ERROR: no se indicaron todos los parámetros requeridos" if ws.Transacciones: try: usuario, password = argv[1:3] except: print "ADVERTENCIA: no se indico parámetros usuario y passoword" usuario = password = "******" ws.InformarProducto(usuario, password) for i, tx in enumerate(transacciones): print "Procesando registro", i tx['codigo_transaccion'] = ws.CodigoTransaccion errores.extend(ws.errores) print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) else: print "ERROR: no se especificaron productos a informar" if ws.Excepcion: print ws.Traceback if '--grabar' in sys.argv: if '--dbf' in sys.argv: guardar_dbf(formatos, True, {}) elif '--json' in sys.argv: for formato in formatos: archivo = open(formato[0].lower() + ".json", "w") json.dump(formato[2], archivo, sort_keys=True, indent=4) archivo.close() else: for formato in formatos: archivo = open(formato[0].lower() + ".txt", "w") for it in formato[2]: archivo.write(escribir(it, formato[1])) archivo.close()
wsltv.AgregarTributo(codigo_tributo, descripcion, base_imponible, alicuota, importe) # flete: descripcion = "transporte" importe = 1000.00 wsltv.AgregarFlete(descripcion, importe) # bonificacion: porcentaje = 10.0 importe = 100.00 wsltv.AgregarBonificacion(porcentaje, importe) else: # cargar un archivo de texto: with open("wsltv.json", "r") as f: wsltv.solicitud = json.load(f, encoding="utf-8") if '--testing' in sys.argv: # mensaje de prueba (no realiza llamada remota), # usar solo si no está operativo, cargo respuesta: wsltv.LoadTestXML("tests/xml/wsltv_aut_test_pdf.xml") import json with open("wsltv.json", "w") as f: json.dump(wsltv.solicitud, f, sort_keys=True, indent=4, encoding="utf-8",) print "Liquidacion: pto_vta=%s nro_cbte=%s tipo_cbte=%s" % ( wsltv.solicitud['liquidacion']['puntoVenta'], wsltv.solicitud['liquidacion']['nroComprobante'], wsltv.solicitud['liquidacion']['tipoComprobante'], )
class SNSPocket(dict): """The container class for snsapi's""" __default_mapping = { "home_timeline": "home_timeline", "update": "update", "reply": "reply", "read": "home_timeline", "write": "update", "writeto": "reply" } def __init__(self): super(SNSPocket, self).__init__() self.jsonconf = {} def __iter__(self): """ By default, the iterator only return opened channels. """ l = [] for c in self.itervalues(): if c.jsonconf['open'] == 'yes': l.append(c.jsonconf['channel_name']) return iter(l) def clear_channel(self): self.clear() def __dummy_method(self, channel, name): def dummy(*al, **ad): logger.warning("'%s' does not have method '%s'", channel, name) return False return dummy def __method_routing(self, channel, mapping=None): #TODO: # This function can support higher layer method # routing. The basic usage is to enable alias to # lower level methods. e.g. you can call "read", # which may be routed to "home_timeline" for # real business. # # Currently, it is here to map non existing methods # to dummy methods. # # It's also unclear that where is the best place # for this function. here, or in the base class # 'SNSBase'? # # The implementation does not look good. # I need two scan: # * The first is to determine who is dummy. # * The second is to really assign dummy. # # If we do everything in one scan, after assigning # dummy, the later reference will find it "hasattr". # Then we do not get the correct method name in # log message. if not mapping: mapping = SNSPocket.__default_mapping c = self[channel] d = {} for src in mapping: dst = mapping[src] if not hasattr(c, dst): d[dst] = 1 d[src] = 1 else: if src != dst: setattr(c, src, getattr(c, dst)) for m in d: setattr(c, m, self.__dummy_method(channel, m)) def add_channel(self, jsonconf): logger.debug(json.dumps(jsonconf)) cname = jsonconf['channel_name'] if cname in self: logger.warning( "Duplicate channel_name '%s'. Nothing happens to it. ", cname) return False try: p = getattr(platform, jsonconf['platform']) self[cname] = p(jsonconf) self.__method_routing(cname, SNSPocket.__default_mapping) except AttributeError: logger.warning("No such platform '%s'. Nothing happens to it. ", jsonconf['platform']) return True def load_config(self, \ fn_channel = 'conf/channel.json',\ fn_pocket = 'conf/pocket.json'): """ Read configs: * channel.conf * pocket.conf """ count_add_channel = 0 try: with open(abspath(fn_channel), "r") as fp: allinfo = json.load(fp) for site in allinfo: if self.add_channel(utils.JsonDict(site)): count_add_channel += 1 except IOError: #raise snserror.config.nofile(fn_channel) logger.warning("'%s' does not exist. Use default", fn_channel) except ValueError, e: raise snserror.config.load("file: %s; message: %s" % (fn_channel, e.message)) try: with open(abspath(fn_pocket), "r") as fp: allinfo = json.load(fp) self.jsonconf = allinfo except IOError: #raise snserror.config.nofile(fn_pocket) logger.warning("'%s' does not exist. Use default", fn_pocket) except ValueError, e: raise snserror.config.load("file: %s; message:%s" % (fn_channel, e.message))
wslum.AgregarOtroImpuesto(tipo=1, base_imponible=100.00, alicuota=10.00, detalle="") wslum.AgregarOtroImpuesto(tipo=9, base_imponible=100.00, alicuota=10.00, detalle="Detalle Otras Percepciones") wslum.AgregarOtroImpuesto(tipo=8, base_imponible=100.00, alicuota=10.00, detalle="") wslum.AgregarRemito(nro_remito="123456789012") wslum.AgregarRemito(nro_remito="123456789") else: # cargar un archivo de texto: with open("wslum.json", "r") as f: wslum.solicitud = json.load(f, encoding="utf-8") if '--testing' in sys.argv: # mensaje de prueba (no realiza llamada remota), # usar solo si no está operativo, cargo respuesta: wslum.LoadTestXML("tests/xml/wslum_liq_test_pdf_response.xml") import json with open("wslum.json", "w") as f: json.dump(wslum.solicitud, f, sort_keys=True, indent=4, encoding="utf-8",) print "Liquidacion: pto_vta=%s nro_cbte=%s tipo_cbte=%s" % ( wslum.solicitud['liquidacion']['puntoVenta'], wslum.solicitud['liquidacion']['nroComprobante'], wslum.solicitud['liquidacion']['tipoComprobante'], )
def main(): "Función principal de pruebas (obtener CAE)" import os, time, sys global WSDL, LOCATION DEBUG = '--debug' in sys.argv ws = TrazaVet() ws.Username = '******' ws.Password = '******' if '--prod' in sys.argv and not H**O: WSDL = "https://servicios.pami.org.ar/trazavet.WebService?wsdl" print "Usando WSDL:", WSDL sys.argv.pop(sys.argv.index("--prod")) if '--proxy' in sys.argv and not H**O: proxy = sys.argv.pop(sys.argv.index("--proxy") + 1) print "Usando proxy:", proxy sys.argv.pop(sys.argv.index("--proxy")) else: proxy = None # Inicializo las variables y estructuras para el archivo de intercambio: transaccion_dto = [] transacciones = [] errores = [] formatos = [('TransaccionDTO', TRANSACCION_DTO, transaccion_dto), ('Transacciones', TRANSACCIONES, transacciones), ('Errores', ERRORES, errores), ] if '--formato' in sys.argv: print "Formato:" for msg, formato, lista in formatos: comienzo = 1 print "=== %s ===" % msg print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % ( "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)") claves = [] for fmt in formato: clave, longitud, tipo = fmt[0:3] clave_dbf = dar_nombre_campo_dbf(clave, claves) claves.append(clave_dbf) print "|| %-25s || %-12s || %5d || %4d || %-10s ||" % ( clave, tipo, longitud, comienzo, clave_dbf) comienzo += longitud sys.exit(0) if '--cargar' in sys.argv: if '--dbf' in sys.argv: leer_dbf(formatos[:1], {}) elif '--json' in sys.argv: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".json", "r") d = json.load(archivo) formato[2].extend(d) archivo.close() else: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".txt", "r") for linea in archivo: d = leer(linea, formato[1]) formato[2].append(d) archivo.close() ws.Conectar("", WSDL, proxy) if ws.Excepcion: print ws.Excepcion print ws.Traceback sys.exit(-1) # Datos de pruebas: if '--test' in sys.argv: transaccion_dto.append(dict( gln_origen="9876543210982", gln_destino="3692581473693", f_operacion=datetime.datetime.now().strftime("%d/%m/%Y"), f_elaboracion=datetime.datetime.now().strftime("%d/%m/%Y"), f_vto=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), id_evento=11, cod_producto="88900000000001", n_cantidad=1, n_serie=int(time.time()*10), n_lote=datetime.datetime.now().strftime("%Y"), n_cai="123456789012345", n_cae="", id_motivo_destruccion=0, n_manifiesto="", en_transporte="N", n_remito="1234", motivo_devolucion="", observaciones="prueba", n_vale_compra="", apellidoNombres="Juan Peres", direccion="Saraza", numero="1234", localidad="Hurlingham", provincia="Buenos Aires", n_postal="1688", cuit="20267565393", codigo_transaccion=None, )) # Opciones principales: if '--confirma' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML("trazamed_confirma.xml") # cargo respuesta ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******", p_ids_transac="1", f_operacion="31-12-2013") if not ok: raise RuntimeError(ws.Excepcion) ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:]) elif '--alerta' in sys.argv: ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:]) elif '--cancela' in sys.argv: ws.SendCancelaTransac(*sys.argv[sys.argv.index("--cancela")+1:]) elif '--consulta' in sys.argv: ws.GetTransacciones( *sys.argv[sys.argv.index("--consulta")+1:] ) print "CantPaginas", ws.CantPaginas print "HayError", ws.HayError #print "TransaccionSenasa", ws.TransaccionSenasa # parametros comunes de salida (columnas de la tabla): claves = [k for k, v, l in TRANSACCIONES] # extiendo la lista de resultado para el archivo de intercambio: transacciones.extend(ws.TransaccionSenasa) # encabezado de la tabla: print "||", "||".join(["%s" % clave for clave in claves]), "||" # recorro los datos devueltos (TransaccionSenasa): while ws.LeerTransaccion(): for clave in claves: print "||", ws.GetParametro(clave), # imprimo cada fila print "||" else: argv = [argv for argv in sys.argv if not argv.startswith("--")] if not transaccion_dto: if len(argv)>10: ws.SaveTransaccion(*argv[1:]) else: print "ERROR: no se indicaron todos los parámetros requeridos" elif transaccion_dto: try: usuario, password = argv[-2:] except: print "ADVERTENCIA: no se indico parámetros usuario y passoword" usuario, password = "******", "Clave2013" for i, dto in enumerate(transaccion_dto): print "Procesando registro", i del dto['codigo_transaccion'] ws.SaveTransaccion(usuario, password, **dto) dto['codigo_transaccion'] = ws.CodigoTransaccion errores.extend(ws.errores) print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) else: print "ERROR: no se especificaron productos a informar" if not transaccion_dto: print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) if ws.Excepcion: print ws.Traceback if '--grabar' in sys.argv: if '--dbf' in sys.argv: guardar_dbf(formatos, True, {}) elif '--json' in sys.argv: for formato in formatos: archivo = open(formato[0].lower() + ".json", "w") json.dump(formato[2], archivo, sort_keys=True, indent=4) archivo.close() else: for formato in formatos: archivo = open(formato[0].lower() + ".txt", "w") for it in formato[2]: archivo.write(escribir(it, formato[1])) archivo.close()
def main(): "Función principal de pruebas (obtener CAE)" import os, time, sys global WSDL, LOCATION DEBUG = '--debug' in sys.argv ws = TrazaMed() ws.Username = '******' ws.Password = '******' if '--prod' in sys.argv and not H**O: WSDL = "https://trazabilidad.pami.org.ar:9050/trazamed.WebService" print "Usando WSDL:", WSDL sys.argv.pop(sys.argv.index("--prod")) # Inicializo las variables y estructuras para el archivo de intercambio: medicamentos = [] transacciones = [] errores = [] formatos = [('Medicamentos', MEDICAMENTOS, medicamentos), ('Transacciones', TRANSACCIONES, transacciones), ('Errores', ERRORES, errores), ] if '--formato' in sys.argv: print "Formato:" for msg, formato, lista in formatos: comienzo = 1 print "=== %s ===" % msg print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % ( "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)") claves = [] for fmt in formato: clave, longitud, tipo = fmt[0:3] clave_dbf = dar_nombre_campo_dbf(clave, claves) claves.append(clave_dbf) print "|| %-25s || %-12s || %5d || %4d || %-10s ||" % ( clave, tipo, longitud, comienzo, clave_dbf) comienzo += longitud sys.exit(0) if '--cargar' in sys.argv: if '--dbf' in sys.argv: leer_dbf(formatos[:1], {}) elif '--json' in sys.argv: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".json", "r") d = json.load(archivo) formato[2].extend(d) archivo.close() else: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".txt", "r") for linea in archivo: d = leer(linea, formato[1]) formato[2].append(d) archivo.close() ws.Conectar("", WSDL) if ws.Excepcion: print ws.Excepcion print ws.Traceback sys.exit(-1) # Datos de pruebas: if '--test' in sys.argv: medicamentos.append(dict( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="9999999999918", gln_destino="glnws", n_remito="R000100001234", n_factura="A000100001234", vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"), numero_serial=int(time.time()*10), id_obra_social=None, id_evento=134, cuit_origen="20267565393", cuit_destino="20267565393", apellido="Reingart", nombres="Mariano", tipo_documento="96", n_documento="26756539", sexo="M", direccion="Saraza", numero="1234", piso="", depto="", localidad="Hurlingham", provincia="Buenos Aires", n_postal="1688", fecha_nacimiento="01/01/2000", telefono="5555-5555", nro_asociado="9999999999999", cantidad=None, desde_numero_serial=None, hasta_numero_serial=None, codigo_transaccion=None, )) if '--testfraccion' in sys.argv: medicamentos.append(dict( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="9999999999918", gln_destino="glnws", n_remito="1234", n_factura="1234", vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"), numero_serial=int(time.time()*10), id_obra_social=None, id_evento=134, cuit_origen="20267565393", cuit_destino="20267565393", apellido="Reingart", nombres="Mariano", tipo_documento="96", n_documento="26756539", sexo="M", direccion="Saraza", numero="1234", piso="", depto="", localidad="Hurlingham", provincia="Buenos Aires", n_postal="1688", fecha_nacimiento="01/01/2000", telefono="5555-5555", nro_asociado="9999999999999", cantidad=5, desde_numero_serial=None, hasta_numero_serial=None, codigo_transaccion=None, )) if '--testdh' in sys.argv: medicamentos.append(dict( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="9999999999918", gln_destino="glnws", n_remito="1234", n_factura="1234", vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"), desde_numero_serial=int(time.time()*10)-1, hasta_numero_serial=int(time.time()*10)+1, id_obra_social=None, id_evento=134, nro_asociado="1234", cantidad=None, numero_serial=None, codigo_transaccion=None, )) # Opciones principales: if '--cancela' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML("trazamed_cancela_err.xml") # cargo respuesta ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela")+1:]) elif '--cancela_parcial' in sys.argv: ws.SendCancelacTransaccParcial(*sys.argv[sys.argv.index("--cancela_parcial")+1:]) elif '--confirma' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML("trazamed_confirma.xml") # cargo respuesta ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******", p_ids_transac="1", f_operacion="31-12-2013") if not ok: raise RuntimeError(ws.Excepcion) ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:]) elif '--alerta' in sys.argv: ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:]) elif '--consulta' in sys.argv: if '--alertados' in sys.argv: ws.GetEnviosPropiosAlertados( *sys.argv[sys.argv.index("--alertados")+1:] ) elif '--movimientos' in sys.argv: ws.GetTransaccionesWS( *sys.argv[sys.argv.index("--movimientos")+1:] ) else: ws.GetTransaccionesNoConfirmadas( *sys.argv[sys.argv.index("--consulta")+1:] #usuario="pruebasws", password="******", #p_id_transaccion_global="1234", #id_agente_informador="1", #id_agente_origen="1", #id_agente_destino="1", #id_medicamento="1", #id_evento="1", #fecha_desde_op="01/01/2015", #fecha_hasta_op="31/12/2013", #fecha_desde_t="01/01/2013", #fecha_hasta_t="31/12/2013", #fecha_desde_v="01/04/2013", #fecha_hasta_v="30/04/2013", #n_factura=5, n_remito=6, #estado=1, #lote=88745, #numero_serial=894124788, ) print "CantPaginas", ws.CantPaginas print "HayError", ws.HayError #print "TransaccionPlainWS", ws.TransaccionPlainWS # parametros comunes de salida (columnas de la tabla): claves = [k for k, v, l in TRANSACCIONES] # extiendo la lista de resultado para el archivo de intercambio: transacciones.extend(ws.TransaccionPlainWS) # encabezado de la tabla: print "||", "||".join(["%s" % clave for clave in claves]), "||" # recorro los datos devueltos (TransaccionPlainWS): while ws.LeerTransaccion(): for clave in claves: print "||", ws.GetParametro(clave), # imprimo cada fila print "||" elif '--catalogo' in sys.argv: ret = ws.GetCatalogoElectronicoByGTIN( *sys.argv[sys.argv.index("--catalogo")+1:] ) for catalogo in ret: print ret # imprimo cada fila else: argv = [argv for argv in sys.argv if not argv.startswith("--")] if not medicamentos: if len(argv)>16: if '--dh' in sys.argv: ws.SendMedicamentosDHSerie(*argv[1:]) elif '--fraccion' in sys.argv: ws.SendMedicamentosFraccion(*argv[1:]) else: ws.SendMedicamentos(*argv[1:]) else: print "ERROR: no se indicaron todos los parámetros requeridos" elif medicamentos: try: usuario, password = argv[1:3] except: print "ADVERTENCIA: no se indico parámetros usuario y passoword" usuario = password = "******" for i, med in enumerate(medicamentos): print "Procesando registro", i del med['codigo_transaccion'] if med.get("cantidad"): del med["desde_numero_serial"] del med["hasta_numero_serial"] ws.SendMedicamentosFraccion(usuario, password, **med) elif med.get("desde_numero_serial"): del med["cantidad"] del med["numero_serial"] ws.SendMedicamentosDHSerie(usuario, password, **med) else: del med["cantidad"] del med["desde_numero_serial"] del med["hasta_numero_serial"] ws.SendMedicamentos(usuario, password, **med) med['codigo_transaccion'] = ws.CodigoTransaccion errores.extend(ws.errores) print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) else: print "ERROR: no se especificaron medicamentos a informar" if not medicamentos: print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) if ws.Excepcion: print ws.Traceback if '--grabar' in sys.argv: if '--dbf' in sys.argv: guardar_dbf(formatos, True, {}) elif '--json' in sys.argv: for formato in formatos: archivo = open(formato[0].lower() + ".json", "w") json.dump(formato[2], archivo, sort_keys=True, indent=4) archivo.close() else: for formato in formatos: archivo = open(formato[0].lower() + ".txt", "w") for it in formato[2]: archivo.write(escribir(it, formato[1])) archivo.close()
cod_remito=30, ) if "--autorizar" in sys.argv: rec["estado"] = 'A' # 'A': Autorizar, 'D': Denegar rec['viaje'] = dict(cuit_transportista='20333333334', cuit_conductor='20333333334', fecha_inicio_viaje='2018-10-01', distancia_km=999) rec['viaje']['vehiculo'] = dict(dominio_vehiculo='AAA000', dominio_acoplado='ZZZ000') rec['mercaderias'] = [dict(orden=1, tropa=1, cod_tipo_prod='2.13', kilos=10, unidades=1)] rec['datos_autorizacion'] = None # dict(nro_remito=None, cod_autorizacion=None, fecha_emision=None, fecha_vencimiento=None) rec['contingencias'] = [dict(tipo=1, observacion="anulacion")] with open(ENTRADA, "w") as archivo: json.dump(rec, archivo, sort_keys=True, indent=4) if '--cargar' in sys.argv: with open(ENTRADA, "r") as archivo: rec = json.load(archivo) wsremcarne.CrearRemito(**rec) wsremcarne.AgregarViaje(**rec['viaje']) wsremcarne.AgregarVehiculo(**rec['viaje']['vehiculo']) for mercaderia in rec['mercaderias']: wsremcarne.AgregarMercaderia(**mercaderia) datos_aut = rec['datos_autorizacion'] if datos_aut: wsremcarne.AgregarDatosAutorizacion(**datos_aut) for contingencia in rec['contingencias']: wsremcarne.AgregarContingencias(**contingencia) if '--generar' in sys.argv: if '--testing' in sys.argv: wsremcarne.LoadTestXML("tests/xml/wsremcarne.xml") # cargo respuesta
def main(): "Función principal de pruebas (obtener CAE)" import os, time, sys global WSDL, LOCATION DEBUG = '--debug' in sys.argv ws = TrazaFito() ws.Username = '******' ws.Password = '******' if '--prod' in sys.argv and not H**O: WSDL = "https://servicios.pami.org.ar/trazaagr.WebService?wsdl" print "Usando WSDL:", WSDL sys.argv.pop(sys.argv.index("--prod")) # Inicializo las variables y estructuras para el archivo de intercambio: transaccion_dto = [] transacciones = [] errores = [] formatos = [('TransaccionDTO', TRANSACCION_DTO, transaccion_dto), ('Transacciones', TRANSACCIONES, transacciones), ('Errores', ERRORES, errores), ] if '--formato' in sys.argv: print "Formato:" for msg, formato, lista in formatos: comienzo = 1 print "=== %s ===" % msg print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % ( "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)") claves = [] for fmt in formato: clave, longitud, tipo = fmt[0:3] clave_dbf = dar_nombre_campo_dbf(clave, claves) claves.append(clave_dbf) print "|| %-25s || %-12s || %5d || %4d || %-10s ||" % ( clave, tipo, longitud, comienzo, clave_dbf) comienzo += longitud sys.exit(0) if '--cargar' in sys.argv: if '--dbf' in sys.argv: leer_dbf(formatos[:1], {}) elif '--json' in sys.argv: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".json", "r") d = json.load(archivo) formato[2].extend(d) archivo.close() else: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".txt", "r") for linea in archivo: d = leer(linea, formato[1]) formato[2].append(d) archivo.close() ws.Conectar("", WSDL) if ws.Excepcion: print ws.Excepcion print ws.Traceback sys.exit(-1) # Datos de pruebas: if '--test' in sys.argv: transaccion_dto.append(dict( gln_origen="9876543210982", gln_destino="3692581473693", f_operacion=datetime.datetime.now().strftime("%d/%m/%Y"), f_elaboracion=datetime.datetime.now().strftime("%d/%m/%Y"), f_vto=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), id_evento=11, cod_producto="88900000000001", n_cantidad=1, n_serie=int(time.time()*10), n_lote=datetime.datetime.now().strftime("%Y"), n_cai="123456789012345", n_cae="", id_motivo_destruccion=0, n_manifiesto="", en_transporte="N", n_remito="1234", motivo_devolucion="", observaciones="prueba", n_vale_compra="", apellidoNombres="Juan Peres", direccion="Saraza", numero="1234", localidad="Hurlingham", provincia="Buenos Aires", n_postal="1688", cuit="20267565393", codigo_transaccion=None, )) # Opciones principales: if '--confirma' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML("trazamed_confirma.xml") # cargo respuesta ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******", p_ids_transac="1", f_operacion="31-12-2013") if not ok: raise RuntimeError(ws.Excepcion) ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:]) elif '--alerta' in sys.argv: ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:]) elif '--cancela' in sys.argv: ws.SendCancelaTransac(*sys.argv[sys.argv.index("--cancela")+1:]) elif '--consulta' in sys.argv: ws.GetTransacciones( *sys.argv[sys.argv.index("--consulta")+1:] ) print "CantPaginas", ws.CantPaginas print "HayError", ws.HayError #print "TransaccionSenasa", ws.TransaccionSenasa # parametros comunes de salida (columnas de la tabla): claves = [k for k, v, l in TRANSACCIONES] # extiendo la lista de resultado para el archivo de intercambio: transacciones.extend(ws.TransaccionSenasa) # encabezado de la tabla: print "||", "||".join(["%s" % clave for clave in claves]), "||" # recorro los datos devueltos (TransaccionSenasa): while ws.LeerTransaccion(): for clave in claves: print "||", ws.GetParametro(clave), # imprimo cada fila print "||" else: argv = [argv for argv in sys.argv if not argv.startswith("--")] if not transaccion_dto: if len(argv)>10: ws.SaveTransaccion(*argv[1:]) else: print "ERROR: no se indicaron todos los parámetros requeridos" elif transaccion_dto: try: usuario, password = argv[-2:] except: print "ADVERTENCIA: no se indico parámetros usuario y passoword" usuario, password = "******", "Clave2013" for i, dto in enumerate(transaccion_dto): print "Procesando registro", i del dto['codigo_transaccion'] ws.SaveTransaccion(usuario, password, **dto) dto['codigo_transaccion'] = ws.CodigoTransaccion errores.extend(ws.errores) print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) else: print "ERROR: no se especificaron productos a informar" if not transaccion_dto: print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) if ws.Excepcion: print ws.Traceback if '--grabar' in sys.argv: if '--dbf' in sys.argv: guardar_dbf(formatos, True, {}) elif '--json' in sys.argv: for formato in formatos: archivo = open(formato[0].lower() + ".json", "w") json.dump(formato[2], archivo, sort_keys=True, indent=4) archivo.close() else: for formato in formatos: archivo = open(formato[0].lower() + ".txt", "w") for it in formato[2]: archivo.write(escribir(it, formato[1])) archivo.close()
def main(): "Función principal de pruebas (obtener CAE)" import os, time, sys global WSDL, LOCATION DEBUG = '--debug' in sys.argv ws = TrazaProdMed() ws.Username = '******' ws.Password = '******' if '--prod' in sys.argv and not H**O: WSDL = WSDL_PROD print "Usando WSDL:", WSDL sys.argv.pop(sys.argv.index("--prod")) # Inicializo las variables y estructuras para el archivo de intercambio: transacciones = [] errores = [] formatos = [] if '--formato' in sys.argv: print "Formato:" for msg, formato, lista in formatos: comienzo = 1 print "=== %s ===" % msg print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % ( "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)") claves = [] for fmt in formato: clave, longitud, tipo = fmt[0:3] clave_dbf = dar_nombre_campo_dbf(clave, claves) claves.append(clave_dbf) print "|| %-25s || %-12s || %5d || %4d || %-10s ||" % ( clave, tipo, longitud, comienzo, clave_dbf) comienzo += longitud sys.exit(0) if '--cargar' in sys.argv: if '--dbf' in sys.argv: leer_dbf(formatos[:1], {}) elif '--json' in sys.argv: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".json", "r") d = json.load(archivo) formato[2].extend(d) archivo.close() else: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".txt", "r") for linea in archivo: d = leer(linea, formato[1]) formato[2].append(d) archivo.close() ws.Conectar("", WSDL) if ws.Excepcion: print ws.Excepcion print ws.Traceback sys.exit(-1) # Datos de pruebas: if '--test' in sys.argv: ws.CrearTransaccion( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="7791234567801", gln_destino="7791234567801", n_remito="R0001-12341234", n_factura="A0001-12341234", vencimiento=(datetime.datetime.now() + datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="07791234567810", lote=datetime.datetime.now().strftime("%Y"), # R4556567 numero_serial=int(time.time() * 10), # A23434 id_evento=1, cuit_medico="30711622507", id_obra_social=465667, apellido="Reingart", nombres="Mariano", tipo_documento="96", n_documento="28510785", sexo="M", calle="San Martin", numero="5656", piso="", depto="1", localidad="Berazategui", provincia="Buenos Aires", n_postal="1700", fecha_nacimiento="20/12/1972", telefono="5555-5555", nro_afiliado="9999999999999", cod_diagnostico="B30", cod_hiv="NOAP31121970", id_motivo_devolucion=1, otro_motivo_devolucion="producto fallado", ) # Opciones principales: if '--cancela' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML( "tests/xml/trazaprodmed_cancela_err.xml") # cargo respuesta ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela") + 1:]) elif '--cancela_parcial' in sys.argv: ws.SendCancelacTransaccParcial( *sys.argv[sys.argv.index("--cancela_parcial") + 1:]) elif '--consulta' in sys.argv: ws.GetTransaccionesWS(*sys.argv[sys.argv.index("--consulta") + 1:]) print "CantPaginas", ws.CantPaginas print "HayError", ws.HayError #print "TransaccionPlainWS", ws.TransaccionPlainWS # parametros comunes de salida (columnas de la tabla): TRANSACCIONES = ws.Transacciones[0].keys() if ws.Transacciones else [] claves = [k for k in TRANSACCIONES] # extiendo la lista de resultado para el archivo de intercambio: transacciones.extend(ws.Transacciones) # encabezado de la tabla: print "||", "||".join(["%s" % clave for clave in claves]), "||" # recorro los datos devueltos (TransaccionPlainWS): while ws.LeerTransaccion(): for clave in claves: print "||", ws.GetParametro(clave), # imprimo cada fila print "||" elif '--catalogo' in sys.argv: ret = ws.GetCatalogoElectronicoByGTIN( *sys.argv[sys.argv.index("--catalogo") + 1:]) for catalogo in ws.params_out.values(): print catalogo # imprimo cada fila else: argv = [argv for argv in sys.argv if not argv.startswith("--")] if not transacciones: if len(argv) > 16: ws.CrearTransaccion(*argv[3:]) else: print "ERROR: no se indicaron todos los parámetros requeridos" if ws.Transacciones: try: usuario, password = argv[1:3] except: print "ADVERTENCIA: no se indico parámetros usuario y passoword" usuario = password = "******" ws.InformarProducto(usuario, password) for i, tx in enumerate(transacciones): print "Procesando registro", i tx['codigo_transaccion'] = ws.CodigoTransaccion errores.extend(ws.errores) print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) else: print "ERROR: no se especificaron productos a informar" if ws.Excepcion: print ws.Traceback if '--grabar' in sys.argv: if '--dbf' in sys.argv: guardar_dbf(formatos, True, {}) elif '--json' in sys.argv: for formato in formatos: archivo = open(formato[0].lower() + ".json", "w") json.dump(formato[2], archivo, sort_keys=True, indent=4) archivo.close() else: for formato in formatos: archivo = open(formato[0].lower() + ".txt", "w") for it in formato[2]: archivo.write(escribir(it, formato[1])) archivo.close()
def main(): "Función principal de pruebas (obtener CAE)" import os, time, sys global WSDL, LOCATION DEBUG = '--debug' in sys.argv ws = TrazaMed() ws.Username = '******' ws.Password = '******' if '--prod' in sys.argv and not H**O: WSDL = "https://trazabilidad.pami.org.ar:9050/trazamed.WebService" print "Usando WSDL:", WSDL sys.argv.pop(sys.argv.index("--prod")) # Inicializo las variables y estructuras para el archivo de intercambio: medicamentos = [] transacciones = [] errores = [] formatos = [('Medicamentos', MEDICAMENTOS, medicamentos), ('Transacciones', TRANSACCIONES, transacciones), ('Errores', ERRORES, errores), ] if '--formato' in sys.argv: print "Formato:" for msg, formato, lista in formatos: comienzo = 1 print "=== %s ===" % msg print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % ( "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)") claves = [] for fmt in formato: clave, longitud, tipo = fmt[0:3] clave_dbf = dar_nombre_campo_dbf(clave, claves) claves.append(clave_dbf) print "|| %-25s || %-12s || %5d || %4d || %-10s ||" % ( clave, tipo, longitud, comienzo, clave_dbf) comienzo += longitud sys.exit(0) if '--cargar' in sys.argv: if '--dbf' in sys.argv: leer_dbf(formatos[:1], {}) elif '--json' in sys.argv: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".json", "r") d = json.load(archivo) formato[2].extend(d) archivo.close() else: for formato in formatos[:1]: archivo = open(formato[0].lower() + ".txt", "r") for linea in archivo: d = leer(linea, formato[1]) formato[2].append(d) archivo.close() ws.Conectar("", WSDL) if ws.Excepcion: print ws.Excepcion print ws.Traceback sys.exit(-1) # Datos de pruebas: if '--test' in sys.argv: medicamentos.append(dict( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="9999999999918", gln_destino="glnws", n_remito="R000100001234", n_factura="A000100001234", vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"), numero_serial=int(time.time()*10), id_obra_social=None, id_evento=134, cuit_origen="20267565393", cuit_destino="20267565393", apellido="Reingart", nombres="Mariano", tipo_documento="96", n_documento="26756539", sexo="M", direccion="Saraza", numero="1234", piso="", depto="", localidad="Hurlingham", provincia="Buenos Aires", n_postal="1688", fecha_nacimiento="01/01/2000", telefono="5555-5555", nro_asociado="9999999999999", cantidad=None, desde_numero_serial=None, hasta_numero_serial=None, codigo_transaccion=None, )) if '--testfraccion' in sys.argv: medicamentos.append(dict( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="9999999999918", gln_destino="glnws", n_remito="1234", n_factura="1234", vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"), numero_serial=int(time.time()*10), id_obra_social=None, id_evento=134, cuit_origen="20267565393", cuit_destino="20267565393", apellido="Reingart", nombres="Mariano", tipo_documento="96", n_documento="26756539", sexo="M", direccion="Saraza", numero="1234", piso="", depto="", localidad="Hurlingham", provincia="Buenos Aires", n_postal="1688", fecha_nacimiento="01/01/2000", telefono="5555-5555", nro_asociado="9999999999999", cantidad=5, desde_numero_serial=None, hasta_numero_serial=None, codigo_transaccion=None, )) if '--testdh' in sys.argv: medicamentos.append(dict( f_evento=datetime.datetime.now().strftime("%d/%m/%Y"), h_evento=datetime.datetime.now().strftime("%H:%M"), gln_origen="9999999999918", gln_destino="glnws", n_remito="1234", n_factura="1234", vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"), desde_numero_serial=int(time.time()*10)-1, hasta_numero_serial=int(time.time()*10)+1, id_obra_social=None, id_evento=134, nro_asociado="1234", cantidad=None, numero_serial=None, codigo_transaccion=None, )) # Opciones principales: if '--cancela' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML("trazamed_cancela_err.xml") # cargo respuesta ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela")+1:]) elif '--cancela_parcial' in sys.argv: ws.SendCancelacTransaccParcial(*sys.argv[sys.argv.index("--cancela_parcial")+1:]) elif '--confirma' in sys.argv: if '--loadxml' in sys.argv: ws.LoadTestXML("trazamed_confirma.xml") # cargo respuesta ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******", p_ids_transac="1", f_operacion="31-12-2013") if not ok: raise RuntimeError(ws.Excepcion) ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:]) elif '--alerta' in sys.argv: ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:]) elif '--consulta' in sys.argv: if '--alertados' in sys.argv: ws.GetEnviosPropiosAlertados( *sys.argv[sys.argv.index("--alertados")+1:] ) elif '--movimientos' in sys.argv: ws.GetTransaccionesWS( *sys.argv[sys.argv.index("--movimientos")+1:] ) else: ws.GetTransaccionesNoConfirmadas( *sys.argv[sys.argv.index("--consulta")+1:] #usuario="pruebasws", password="******", #p_id_transaccion_global="1234", #id_agente_informador="1", #id_agente_origen="1", #id_agente_destino="1", #id_medicamento="1", #id_evento="1", #fecha_desde_op="01/01/2015", #fecha_hasta_op="31/12/2013", #fecha_desde_t="01/01/2013", #fecha_hasta_t="31/12/2013", #fecha_desde_v="01/04/2013", #fecha_hasta_v="30/04/2013", #n_factura=5, n_remito=6, #estado=1, #lote=88745, #numero_serial=894124788, ) print "CantPaginas", ws.CantPaginas print "HayError", ws.HayError #print "TransaccionPlainWS", ws.TransaccionPlainWS # parametros comunes de salida (columnas de la tabla): claves = [k for k, v, l in TRANSACCIONES] # extiendo la lista de resultado para el archivo de intercambio: transacciones.extend(ws.TransaccionPlainWS) # encabezado de la tabla: print "||", "||".join(["%s" % clave for clave in claves]), "||" # recorro los datos devueltos (TransaccionPlainWS): while ws.LeerTransaccion(): for clave in claves: print "||", ws.GetParametro(clave), # imprimo cada fila print "||" elif '--catalogo' in sys.argv: ret = ws.GetCatalogoElectronicoByGTIN( *sys.argv[sys.argv.index("--catalogo")+1:] ) for catalogo in ws.params_out.values(): print catalogo # imprimo cada fila elif '--stock' in sys.argv: ret = ws.GetConsultaStock( *sys.argv[sys.argv.index("--stock")+1:] ) print "\n".join([str(s) for s in ws.params_out.values()]) else: argv = [argv for argv in sys.argv if not argv.startswith("--")] if not medicamentos: if len(argv)>16: if '--dh' in sys.argv: ws.SendMedicamentosDHSerie(*argv[1:]) elif '--fraccion' in sys.argv: ws.SendMedicamentosFraccion(*argv[1:]) else: ws.SendMedicamentos(*argv[1:]) else: print "ERROR: no se indicaron todos los parámetros requeridos" elif medicamentos: try: usuario, password = argv[1:3] except: print "ADVERTENCIA: no se indico parámetros usuario y passoword" usuario = password = "******" for i, med in enumerate(medicamentos): print "Procesando registro", i del med['codigo_transaccion'] if med.get("cantidad"): del med["desde_numero_serial"] del med["hasta_numero_serial"] ws.SendMedicamentosFraccion(usuario, password, **med) elif med.get("desde_numero_serial"): del med["cantidad"] del med["numero_serial"] ws.SendMedicamentosDHSerie(usuario, password, **med) else: del med["cantidad"] del med["desde_numero_serial"] del med["hasta_numero_serial"] ws.SendMedicamentos(usuario, password, **med) med['codigo_transaccion'] = ws.CodigoTransaccion errores.extend(ws.errores) print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) else: print "ERROR: no se especificaron medicamentos a informar" if not medicamentos: print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % ( ws.Resultado, ws.CodigoTransaccion, '|'.join(ws.Errores or []), ) if ws.Excepcion: print ws.Traceback if '--grabar' in sys.argv: if '--dbf' in sys.argv: guardar_dbf(formatos, True, {}) elif '--json' in sys.argv: for formato in formatos: archivo = open(formato[0].lower() + ".json", "w") json.dump(formato[2], archivo, sort_keys=True, indent=4) archivo.close() else: for formato in formatos: archivo = open(formato[0].lower() + ".txt", "w") for it in formato[2]: archivo.write(escribir(it, formato[1])) archivo.close()
dominio_acoplado='ZZZ000') rec['mercaderias'] = [ dict(orden=1, tropa=1, cod_tipo_prod='2.13', kilos=10, unidades=1) ] rec['datos_autorizacion'] = None # dict(nro_remito=None, cod_autorizacion=None, fecha_emision=None, fecha_vencimiento=None) rec['contingencias'] = [dict(tipo=1, observacion="anulacion")] with open(ENTRADA, "w") as archivo: json.dump(rec, archivo, sort_keys=True, indent=4) if '--cargar' in sys.argv: with open(ENTRADA, "r") as archivo: rec = json.load(archivo) wsremcarne.CrearRemito(**rec) wsremcarne.AgregarViaje(**rec['viaje']) wsremcarne.AgregarVehiculo(**rec['viaje']['vehiculo']) for mercaderia in rec['mercaderias']: wsremcarne.AgregarMercaderia(**mercaderia) datos_aut = rec['datos_autorizacion'] if datos_aut: wsremcarne.AgregarDatosAutorizacion(**datos_aut) for contingencia in rec['contingencias']: wsremcarne.AgregarContingencias(**contingencia) if '--generar' in sys.argv: if '--testing' in sys.argv: wsremcarne.LoadTestXML( "tests/xml/wsremcarne.xml") # cargo respuesta