def concepto(ci=-1, bLN=True): '''Maneja la lista de los conceptos de un socio en Nomina y muestra el detalle de cualquiera de los conceptos.''' global lNom, lNomCNE if bLN: lN = lNom else: lN = lNomCNE sNombre = COM.mNombre(ci) if 0 >= ci: return -21 nF = 0 lCodigo = [] lConcepto = [] lDescripcion = [] for l in lN: if 0 == nF and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('', '0', str(ci)): lCodigo.append(l[1]) # Codigo del concepto lDescripcion.append( l[1] + ':' + COM.mConcepto(l[1])) # Descripcion del concepto lConcepto.append(l) # Lista del concepto nF += 1 else: break # Fin for if 0 >= nF: return None else: indice = ES.entradaConLista(droid, 'Conceptos', '', lDescripcion) if None == indice or 0 > indice: return None # if indice < len(lCodigo): detalleConcepto(ci, sNombre, lConcepto[indice], lDescripcion[indice].lstrip().split(':')[1]) if indice < len(lCodigo): return detalleConcepto(ci, sNombre, lConcepto[indice], COM.mConcepto(lCodigo[indice])) else: return None
def buscarArchivo(lFiles): if None == lFiles or 1 > len(lFiles): return None if 1 == len(lFiles): return (lFiles[0]) indice = ES.entradaConLista(droid, 'ARCHIVOS ENCONTRADOS', 'Seleccione nombre', lFiles) if None == indice or 0 > indice: return None return (lFiles[indice])
def servicio(ci=-1): '''Maneja la lista de la carga de un socio en ServiFun y muestra la cobertura a cualquiera de la carga.''' global lCgS, lPa if 0 >= ci: return -7 nF = 0 lCodigo = [] lParentesco = [] lNombre = [] for l in lCgS: if 0 == nF and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('','0',str(ci)): lPar = l[3].rstrip().split('-') # Parentesco: codigo-descripcion if 1 < len(lPar): lCod = lPar[0] else: lCod = '0' lCodigo.append(lCod) # Titular lNombre.append(l[2]) for lp in lPa: if lCod != lp[0]: continue # Codigo del parentesco lParentesco.append(lp[1]) nF += 1 else: break # Fin for if 0 >= nF: return None else: indice = ES.entradaConLista(droid, 'Parentesco', '', lParentesco) if None == indice or 0 > indice: return None if indice < len(lCodigo): return servicioEspecifico(lCodigo[indice], lNombre[indice]) else: return None
def prestamo(ci): '''Maneja la lista de los prestamos de un socio en Prestamos y muestra el detalle de cualquiera de los prestamos.''' global lPre sNombre = COM.mNombre(ci) if 0 >= ci: return -21 nF = 0 lCodigo = [] lPrestamo = [] lDescripcion = [] for l in lPre: if 0 == nF and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('', '0', str(ci)): lCodigo.append(l[1]) # Codigo del prestamo lDescripcion.append( l[1] + ':' + COM.mConcepto(l[1])) # Descripcion del prestamo lPrestamo.append(l) # Lista del prestamo nF += 1 else: break # Fin for if 0 >= nF: return None else: indice = ES.entradaConLista(droid, 'Prestamos', '', lDescripcion) if None == indice or 0 > indice: return None # if indice < len(lCodigo): detallePrestamo(ci, sNombre, lPrestamo[indice], lDescripcion[indice].lstrip().split(':')[1]) if indice < len(lCodigo): return detallePrestamo(ci, sNombre, lPrestamo[indice], COM.mConcepto(lCodigo[indice])) else: return None
def chequeXCedula(ci, llCh=None): 'Maneja la lista de cheques y muestra los cheques en transito de un socio.' global lCh if None == llCh: llCh = lCh if 0 >= ci: return -2 lCheq = [l for l in llCh if '' != l[2] and ci == int(l[2])] # Nueva lista de cheques. if not lCheq: ES.alerta( droid, 'CHEQUE x CEDULA', "No hay cheque en transito con cedula " "%s!" % FG.formateaNumero(ci)) return -2 nCheques = len(lCheq) if 1 == nCheques: return mCheque(lCheq[0]) # lCheq = map(creaOp, lCheq) # En vez de list 'comprehensions', como en lCheques. lCheqO = list( map(COM.creaOp, lCheq)) # En vez de list 'comprehensions', como en lCheques. indice = ES.entradaConLista(droid, 'CHEQUES ENCONTRADOS: ' + str(nCheques), 'Seleccione cheque', lCheqO) if None == indice or 0 > indice: return -2 mCheque(lCheq[indice])
def depositos(): '''Maneja la lista de cheques y muestra los depositos de una fecha especifica.''' global lCh sFecha = ES.entradaFechaLocal(droid) lDep = [ l for l in lCh if '' != l[2] and 6 <= len(l[1]) and sFecha == l[4] ] # Nueva lista de cheques. Solo depositos (# cheque > 100000) if not lDep: ES.alerta(droid, 'DEPOSITOS X FECHA', "No hay depositos en esa fecha %s!" % sFecha) return -3 nlDep = len(lDep) if 1 == nlDep: return mCheque(lDep[0]) # print("Numero de item en arreglo: %5d\n" % nlDep) # lCheq = map(creaOp, lDep) # En vez de list 'comprehensions', como en lCheques. lCheq = list( map(COM.creaOp, lDep)) # En vez de list 'comprehensions', como en lCheques. indice = ES.entradaConLista(droid, 'DEPOSITOS ENCONTRADOS: ' + str(nlDep), 'Seleccione deposito', lCheq) if None == indice or 0 > indice: return -3 mCheque(lDep[indice])
def buscarNombre(): global dPer nombre = ES.entradaNombre(droid, 'Nombre del socio') if None == nombre: return -10, None nombres = [] cedulas = [] try: for k, v in dPer.items(): if 0 <= v.lower().find(nombre.lower()): nombres.append(v) cedulas.append(k) except UnicodeError: pass if not nombres: ES.alerta(droid, nombre, "No hubo coincidencias!") return -10, None indice = ES.entradaConLista(droid, 'SOCIOS ENCONTRADOS', 'Seleccione socio(a)', nombres) if None == indice or 0 > indice: return -10, None return int(cedulas[indice]), nombres[indice]
'archsBanco.txt' ] def getNetworkIP(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.connect(('<broadcast>', 0)) return s.getsockname()[0] def obtenerIP(servidor): # Es la unica rutina que consegui para obtener mi IP. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((servidor, 80)) # servidor puede ser cualquiera, no es necesario usar el seleccionado. return s.getsockname()[0] # el IP es el primer elemento de la tupla devuelta. El 2do elemento parece ser una puerta. ES.muestraInicio("IPASPUDO: J-30619229-8.") ind = ES.entradaConLista(droid , 'Busqueda del servidor', 'Seleccione servidor', lSitios) # Busca el servidor. if (None == ind) or (ind == (len(lSitios)-1)) or (len(lSitios) <= ind) or \ (0 > ind): # Se asegura de tener el indice correcto. ES.muestraFin() sys.exit() IPServ = lIPs[ind] if ((ind == (len(lSitios)-2)) or ('' == IPServ)): IPServ = ES.entradaNombre(droid, 'IP del servidor', 'Introduzca IP del servidor', '192.168.0.') print("Obteniendo archivo desde %s (%s)." % (lSitios[ind], IPServ)) if droid: decip = droid.wifiGetConnectionInfo().result['ip_address'] hexip = hex(decip).split('x')[1] dirL = int(hexip, 16) miDirIP = socket.inet_ntoa(struct.pack("<L", dirL)) else:
def actualizar(): ind = ES.entradaConLista(droid, 'Busqueda del servidor',\ 'Seleccione servidor', lSitios) # Busca el servidor. if (None == ind) or (ind == (len(lSitios)-1)) or (len(lSitios) <= ind) or \ (0 > ind): # Se asegura de tener el indice correcto. return ES.muestraFin() sys.exit() IPServ = lIPs[ind] if ((ind == (len(lSitios) - 2)) or ('' == IPServ)): IPServ = ES.entradaNombre(droid, 'IP del servidor', 'Introduzca IP del servidor', IPServ[0:10]) print("Obteniendo archivo desde %s (%s)." % (lSitios[ind], IPServ)) if droid: decip = droid.wifiGetConnectionInfo().result['ip_address'] hexip = hex(decip).split('x')[1] dirL = int(hexip, 16) miDirIP = socket.inet_ntoa(struct.pack("<L", dirL)) else: miDirIP = obtenerIP( IPServ) # Esta rutina fue la unica que encontre para mi IP. print("Mi direccion IP es: %s" % miDirIP) try: if IPServ[0:IPServ.rindex('.')] != miDirIP[0:miDirIP.rindex( '.' )]: # Las tres primeras partes de ambos IPv4 deben ser iguales. print("El servidor seleccionado %s es errado." % IPServ) return ES.muestraFin() sys.exit() except ValueError: # La funcion rindex (busca indece desde el final de la cadena), no consigue el '.'. print("ERROR EXTRA#O DE RED") # Este error NUNCA deberia ocurrir. return ES.muestraFin() sys.exit() # Se trata de saber, cuando se actualizo por ultima vez un archivo. En el nuevo control.txt, # ademas de la informacion del sistema, tambien se guardara la fecha de descarga de cada archivo. # dControl = ES.cargaDicc("control.txt") # Diccionario de control, antes de recibir el nuevo. No implementado 27/08/2019. URL = "http://" + IPServ + ':8080/storage/' bImpar = True data = urlopen(URL + CONTROL, None, 10).read().decode( 'ISO-8859-1' ) # None, ningun parametro es enviado al servidor; 10, timeout. if None == data: print('ERROR. No hubo carga.') sys.exit() f = open(DIR + CONTROL, "w") if f: archivos = data.split('\n') fechaGrabado = archivos.pop(0) f.write('Datos grabados: ' + fechaGrabado) ahora = strftime("\nDatos descargados: %a, %d/%m/%Y %-l:%M:%S %p\n", localtime()) f.write(ahora) f.close() else: print('ERROR. No se pudo escribir en el archivo.') sys.exit() for nombreArchivo in archivos: # if nombreArchivo[5:6].isdigit(): continue # La primera linea es una fecha. El primer caracter es un digito. nombreArchivo = nombreArchivo.rstrip(' \t\n\r') if not nombreArchivo: continue sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE, CO.AZUL) print("%sLeyendo%s %s remoto." % (sColor, CO.FIN, nombreArchivo)) try: data = urlopen(URL + nombreArchivo, None, 10).read().decode( 'ISO-8859-1' ) # None, ningun parametro es enviado al servidor; 10, timeout. bLeido = True # No hubo error de lectura desde el servidor. except: print("%sERROR LEYENDO%s %s %sREMOTO.%s" % (CO.ROJO, CO.FIN, nombreArchivo, CO.ROJO, CO.FIN)) bLeido = False if bLeido: # Si no hubo error de lectura desde el servidor. try: f = open(DIR + nombreArchivo, "w") bAbierto = True # No hubo error al abrir para escribir en archivo local. except: print("%sERROR AL TRATAR DE ABRIR%s %s%s %sPARA ESCRITURA.%s" % \ (CO.ROJO, CO.FIN, DIR, nombreArchivo, CO.ROJO, CO.FIN)) bAbierto = False if bAbierto: # Si no hubo error al abrir para escribir en archivo local. print("%sEscribiendo%s %s local..." % (sColor, CO.FIN, nombreArchivo)) try: f.write(data) bEscrito = True # No hubo error escribiendo en el archivo local. except: print("%sERROR AL TRATAR DE ESCRIBIR%s %s." % (CO.ROJO, CO.FIN, nombreArchivo)) bEscrito = False finally: f.close() if bEscrito: print( "%s %sactualizado con%s %d lineas!" % (nombreArchivo, (CO.CYAN if 'heute.txt' == nombreArchivo else sColor), CO.FIN, ES.cLineas(nombreArchivo))) # Fin if bEscrito # Fin if bAbierto # Fin if bLeido # Fin for return ES.muestraFin() # Funcion actualizar
else: if bMovil: print("%sNombre de archivo de salida%s '%s' %serrado.%s" % \ (CO.ROJO, CO.FIN, nombArchSalCompleto, CO.ROJO, CO.FIN)) else: for linea in salida: print(linea.encode('utf-8')) sys.exit() #print(linUltValue) #print(nLineas) #print(linUltValue) print("Fin: %s%s%s" % (CO.AZUL, strftime("%Y/%m/%d %H:%M:%S"), CO.FIN)) if not bControlPersonal and 'nomina_' == prefijoNombArch: ind = ES.entradaConLista( droid, 'Desea preparar la creación' ' de controlpersonal', 'Seleccione', ['Si', 'No']) if not ((1 <= ind) or (0 > ind) or (None == ind)): # Se asegura de tener el indice correcto. ind = 0 if 0 == ind: crearControlPersonal = crearControlPersonal.replace(\ 'controlpersonal', 'controlpersonal_' + sufijoSalida) f.write(unicode(crearControlPersonal)) f.write(unicode('INSERT INTO controlpersonal' + '_' + sufijoSalida \ + ' VALUES\n')) partes = sufijoSalida.split('_') if 2 < len(partes): nExtra = partes[0].upper() + ' ' else: nExtra = '' ano = partes[len(partes) - 2] mes = partes[len(partes) - 1]
s.connect(('<broadcast>', 0)) return s.getsockname()[0] def obtenerIP(servidor): # Es la unica rutina que consegui para obtener mi IP. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect( (servidor, 80) ) # servidor puede ser cualquiera, no es necesario usar el seleccionado. return s.getsockname( )[0] # el IP es el primer elemento de la tupla devuelta. El 2do elemento parece ser una puerta. ES.muestraInicio("Century21 Puente Real: J-40589955-7.") ind = ES.entradaConLista(droid, 'Busqueda del servidor', 'Seleccione servidor', lSitios) # Busca el servidor. if (None == ind) or (ind == (len(lSitios)-1)) or (len(lSitios) <= ind) or \ (0 > ind): # Se asegura de tener el indice correcto. ES.muestraFin() sys.exit() IPServ = lIPs[ind] if ((ind == (len(lSitios) - 2)) or ('' == IPServ)): IPServ = ES.entradaNombre(droid, 'IP del servidor', 'Introduzca IP del servidor', IPServ[0:10]) print("Obteniendo archivo desde %s (%s)." % (lSitios[ind], IPServ)) if droid: decip = droid.wifiGetConnectionInfo().result['ip_address'] hexip = hex(decip).split('x')[1] dirL = int(hexip, 16) miDirIP = socket.inet_ntoa(struct.pack("<L", dirL)) else:
iMtoTot1 = 71 iMtoTot2 = 84 iNac = 0 iCI = 5 iNbr = 4 iCC = 1 iMto = 2 sLnDet = '1' iNoReg1 = 0 iNoReg2 = 0 sCodCta = BV.sCodCta f.close() (lTot, stc) = \ calcTotal(lista, nLnCtrl, sLnDet, iCI, iCC, iNac, sTPag, iMto, iNbr) st = cargarFilas(lTot, nroReg, iNoReg1, iNoReg2, fMtoTot, iMtoTot1, iMtoTot2, sNumLote, sRif, sFechaValor) st += stc ES.imprime(st.rstrip(' \t\n\r')) if bMovil: indice = ES.entradaConLista(droid, 'Que desea hacer', 'Que desea hacer', ['Otro archivo', 'Salir']) if None == indice or 0 > indice or 1 <= indice: break else: break # FIN Programa
print("%sNombre de archivo%s '%s' %serrado.%s" % (CO.ROJO, CO.FIN, nombArchivoCompleto, CO.ROJO, CO.FIN)) break # 0:Mov (6:retroact o 7:fijo); 1:CI; 2:Conc; 3:Saldo; 4:Cuota; # 5:Ctrl (1:Crea, 2:Mod, 3:eli); 6:Tipo (1:Saldo-cuota, 2:Cuota fija). lista = [(linea.rstrip()[0:1], linea.rstrip()[1:9], linea.rstrip()[10:13], float(linea.rstrip()[26:38]) / 100, float(linea.rstrip()[38:49]) / 100, linea.rstrip()[52:53], linea.rstrip()[76:77]) for linea in f] if f: f.close() if bInicio: diccTot = (0, 0.00, 0.00) dicc, dConc = poblarDicc(lista, dConc, sNuc, sConc, diccTot) diccTot = dicc['TOT'] st += mostrarConceptos(dicc, dConc, bInicio, sNuc) if bInicio: bInicio = False st += sLinTot if bMovil: ES.imprime(st.rstrip(' \t\n\r')) indice = ES.entradaConLista(droid, 'Que desea hacer', 'Que desea hacer', ['Otros movimientos', 'Salir']) if None == indice or 0 > indice or 1 <= indice: break else: print(st.rstrip(' \t\n\r')) break # FIN Principal
def lCheques(): global lCh lClas = COM.lClasCheques # lFuncionClas = [compaNumCh, compaCedula, compaNombre, compaMonto, compaEstado, compaFecha, compaConcepto] lBanco = [COM.mBanco(str(k)) for k in range(1, 24)] lNombreB = [ lBanco[i] for i in range(len(lBanco)) if lBanco[i] != str(i + 1) ] lCodigoB = [ str(i + 1) for i in range(len(lBanco)) if lBanco[i] != str(i + 1) ] ''' campos = [("Banco", 'combo', (lNombreB, 0)), # Mercantil por defecto ("Clasificacion",'combo', (lClas, 0))] # Clasificar u ordenar por numero de cheque. iCB, iClas = forma(campos) # Codigo del banco, Indice de clasificacion''' iCB = ES.entradaConLista(droid, 'BANCOS', 'Seleccione banco', lNombreB) if None == iCB or 0 > iCB: return None iClas = ES.entradaConLista(droid, 'CLASIFICACION', 'Clasificar', lClas) if None == iClas or 0 > iClas: return None lNvaCh = [l for l in lCh if ((lCodigoB[iCB] == l[0]) and (6 > len(l[1]))) ] # Nueva lista de cheques, solo los del banco. # l[1]: numero de cheque, si 6 digito es deposito. if not lNvaCh: ES.alerta(droid, 'CHEQUE EN TRANSITO', "No hay cheque en transito del banco %s!" % lNombreB[iCB]) return None nlNvaCh = len(lNvaCh) if 1 == nlNvaCh: return lNvaCh[0] # lNvaCh.sort(lFuncionClas[iClas]) lNvaCh.sort(key=itemgetter(iClas)) try: lCheq = [COM.creaOp(l) for l in lNvaCh if 8 >= len(l) ] # Solo las lineas que contengan 8 o mas campos except UnicodeError: ES.alerta(droid, 'lCheques: ' + str(nlNvaCh), "Hubo un error al tratar de crear opciones!") print >> fErr, l print >> fErr, len(lNvaCh) return None nCheques = len(lCheq) if (nCheques > CO.NMAXITEM): nInicial = int((nCheques / CO.NMAXITEM) + 1) ES.alerta( droid, 'lCheques', 'Son ' + str(nCheques) + ' cheques! Mostrare ' + str(nInicial) + ' listas!') for k in range( nInicial ): # Si el numero de cheques es grande mostrar varias listas de CO.NMAXITEM cada una. if (k + 1) * CO.NMAXITEM >= nCheques: iUltimo = nCheques lNueva = lCheq[k * CO.NMAXITEM:iUltimo] else: iUltimo = (k + 1) * CO.NMAXITEM lNueva = lCheq[k * CO.NMAXITEM:iUltimo] + ['Proxima lista'] ind = ES.entradaConLista( droid, str(nCheques) + ' CHEQUES. De ' + str((k * CO.NMAXITEM) + 1) + ' a ' + str(iUltimo), '', lNueva) if None == ind or 0 > ind: return None if CO.NMAXITEM > ind: # Si ind == CO.NMAXITEM, se selecciono la opcion 'Continuar'. indice = ind + (k * CO.NMAXITEM) break else: indice = ES.entradaConLista(droid, 'CHEQUES: ' + str(nCheques), 'Seleccione cheque', lCheq) if None == indice or 0 > indice: return None return lNvaCh[indice]