def selFuncion(ci, nOpcion=6): ''' Menu desplegado al suministrar una cedula o al encontrar la cedula de una parte de un nombre suministrado. Eliminados: ['Calcular cuota', 'cuota'], ['Cedula del socio', 'cedula'], ['Buscar cedula del socio', 'nombre'], ['Cheques', 'cheque'], ['Deposito por fecha', 'depositos'] ''' lNuevoMenu = COM.lMenu[nOpcion:(len(COM.lMenu) - 1)] + [[ 'Volver', '-11' ]] # lMenu sin las opciones generales + la opcion 'Volver'. sTitulo = str(ci) + ':' + COM.nombreSocio( COM.mNombre(ci)) # Titulo a desplegar con las opciones. while True: try: func = eval( FG.selOpcionMenu(lNuevoMenu, sTitulo) ) # Evaluar contenido de res['name']; el cual, debe ser una funcion conocida. except: return False while True: if isinstance(func, types.FunctionType): opc = func( ci) # Si la cadena evaluada es una funcion, ejecutela. if FG.esEntero(opc): opc = str(opc) if '' == opc or None == opc or not opc.isdigit() or ( opc.isdigit() and (0 > int(opc) or len(lNuevoMenu) <= int(opc))): break func = eval(lNuevoMenu[int(opc)][1]) else: return False
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 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 mCheque(lChe): st = CO.AMARI + COM.lFecha("Sinca", "Cheques") + ' (Descargado:' + CO.FIN +\ COM.lFecha('cheques.txt', '') + ')' + "\n" if '99' == lChe[0]: sDesc = 'TRA' elif 6 > len(lChe[1]): sDesc = 'CHQ' else: sDesc = 'DEP' st += ("Banco:%+10.9s (%-.6s [%s]); Est:%+7.6s\nBeneficiario: " "%-12.11s%-30.30s\nConcepto: %-31.30s\nFecha:%+11.10s Monto: " "%-15.14s") % (COM.mBanco(lChe[0]), lChe[1], sDesc, COM.mEstado(lChe[7]), FG.formateaNumero( lChe[2]), COM.extraeNombre(lChe[3]), lChe[5], lChe[4], FG.formateaNumero(lChe[6], 2)) opc = ES.imprime(st.rstrip(' \t\n\r')) return opc
def ubicacion(ci): '''Maneja la lista con los telefonos y correo electronico de cada socio.''' global lUb if 0 >= ci: return -9 st = CO.AMARI + COM.lFecha('Sinca', 'Ubicacion') + ' (Descargado:' + CO.FIN \ + COM.lFecha('ubicacion.txt', '') + ')' + "\n" nF = 0 nJustDerecha = 21 for l in lUb: if ci > int(l[0]): continue elif ci == int(l[0]): st += "%s%s:%-30.29s%s" % (CO.CYAN, FG.formateaNumero(ci), COM.nombreSocio( COM.mNombre(ci)), CO.FIN) if 1 < len(l) and '' != l[1]: st += "\n" st += CO.AZUL + "Telefono habitacion: ".rjust(nJustDerecha) + CO.FIN +\ FG.formateaNumeroTelefono(l[1]) if 2 < len(l) and '' != l[2]: st += "\n" st += CO.AZUL + "Telefono trabajo: ".rjust(nJustDerecha) + CO.FIN +\ FG.formateaNumeroTelefono(l[2]) if 3 < len(l) and '' != l[3]: st += "\n" st += CO.AZUL + "Celular: ".rjust(nJustDerecha) + CO.FIN +\ FG.formateaNumeroTelefono(l[3]) if 4 < len(l) and '' != l[4]: st += "\n" st += CO.AZUL + "Celular: ".rjust(nJustDerecha) + CO.FIN +\ FG.formateaNumeroTelefono(l[4]) if 5 < len(l) and '' != l[5]: if len(l[5].rstrip(' \t\n\r')) > ( CO.nCarLin - nJustDerecha - 1 ): # Cars a justificar derecha + 1 espacio despues ':'. nJustDerecha = CO.nCarLin - len(l[5].rstrip(' \t\n\r')) - 1 st += "\n" st += CO.AZUL + "Correo:".rjust(nJustDerecha) + CO.FIN + " %s" %\ l[5].rstrip(' \t\n\r') nF += 1 # Fin elif else: break # Fin for if 0 >= nF: st = COM.noCedula(ci) opc = ES.imprime(st) return opc
def resNominaN(lN=None): '''Maneja el resumen de todos los conceptos de IPASPUDO de la nomina recibida como parametro.''' global lNomN if None == lN: lN = lNomN st = CO.AMARI + COM.lFecha("Nomina", "Nomina") + ' (Descargado:' + CO.FIN +\ COM.lFecha('nomina.txt', '') + ')' + "\n" ftValFi = 0.00 ftValVa = 0.00 ftTotal = 0.00 bImpar = True sTitNomina = CO.AZUL + "CON".ljust(4) + 'DESCRIPCION'.ljust(25) +\ "VALOR FIJO".rjust(16) + "VALOR VARIABLE".rjust(16) +\ "T O T A L".rjust(16) + CO.FIN + "\n" st += sTitNomina for l in lN: if 8 > len(l) or 0.00 == float(l[7]): continue sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) # 0:Concepto, 1:Descripcion, 2:Cta credito, 3:Cta Debito, 4:Cta Interese, 5:Valor fijo, 6: Valor variable, 7:Total stl = "%s%.3s %-25.25s %15.15s %15.15s %15.15s%s" % ( sColor, l[0], l[1], FG.formateaNumero(l[5], 2).rstrip().rjust(15), FG.formateaNumero(l[6], 2).rstrip().rjust(15), FG.formateaNumero(l[7], 2).rstrip().rjust(15), CO.FIN) ftValFi += float(l[5]) ftValVa += float(l[6]) ftTotal += float(l[7]) st += stl + '\n' # Fin for stValFi = FG.formateaNumero(ftValFi, 2) stValVa = FG.formateaNumero(ftValVa, 2) stTotal = FG.formateaNumero(ftTotal, 2) stl = CO.AZUL + "T O T A L E S".rjust(29) + stValFi.rjust(16) + \ stValVa.rjust(16) + stTotal.rjust(16) + CO.FIN st += stl opc = ES.imprime(st.rstrip(' \t\n\r')) return opc
def prestamos(ci): '''Maneja la lista de conceptos de prestamos de un socio y muestra la informacion.''' global lPre if 0 >= ci: return -5 st = CO.AMARI + COM.lFecha("Sinca", "Prestamos") + ' (Descargado:' + \ CO.FIN + COM.lFecha('prestamos.txt', '') + ')' + "\n" nF = 0 bImpar = True nCarDesc = CO.nCarLin - 26 - 1 # Numero de caracteres (espacio total), donde se mostrara el campo. 26 es resto. maxLongCad = 30 # numero maximo de caracteres del campo especificado. if maxLongCad < nCarDesc: nCarDesc = maxLongCad # > longitud maxima de la cadena a mostrar en el campo. nCarMostrar = 23 + nCarDesc # Numero de caracteres, maximo, a mostrar por linea. sTitPrestamos = CO.AZUL + "CON " + CO.justIzqTituloCol('DESCRIPCION', \ nCarDesc) + " Saldo Cuota FeSol" if 31 <= (CO.nCarLin - nCarMostrar ): # 31 es la longitud de ' Saldo Saldo+Int Me #CtCan'. sTitPrestamos += ' Monto Sol Saldo+Int Me #CtCan' nCarMostrar += 31 bExtra = True else: bExtra = False sTitPrestamos += CO.FIN + "\n" for l in lPre: if 0 == nF and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('', '0', str(ci)): nF += 1 sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) # 0:Cedula,1:Concepto,2:monto solicitado,3:Monto total(Concedido + intereses);4:Saldo;5:Saldo total(Saldo + intereses);6:Cuota,7:Fecha inicial (mm/aa),8:ult actualizacion (mm),9:cuotas (pagadas/total) stl = sColor + l[1] + ' ' + \ COM.mConcepto(l[1])[0:nCarDesc].ljust(nCarDesc, " ") + ' ' + \ FG.formateaNumero(l[4]).rstrip().rjust(9) + \ FG.formateaNumero(l[6]).rstrip().rjust(7) + ' ' + \ l[7].rstrip().rjust(5) if bExtra: stl += ' ' + FG.formateaNumero(l[2]).rstrip().rjust(9) + ' ' + \ FG.formateaNumero(l[5]).rstrip().rjust(9) + ' ' + \ l[8].rstrip().rjust(2) + ' ' + l[9].rstrip().rjust(7) stl += CO.FIN if 1 == nF: stl = CO.CYAN + FG.formateaNumero(ci) + ':' + \ COM.nombreSocio(COM.mNombre(ci)) + CO.FIN + "\n" + \ sTitPrestamos + stl # if '0.00' != l[2].rstrip(): # Comparar, cuando agregar la linea. Solicitado = 0.00. Mes ult. act .vs. fecha. st += stl + '\n' else: break # Fin for if 0 >= nF: st = COM.noCedula(ci) opc = ES.imprime(st.rstrip(' \t\n\r')) return opc
def disponibilidad(ci): 'Maneja la lista de conceptos de un socio y muestra la informacion.' global lSi dConc = CO.dConceptos sNombre = COM.mNombre(ci) if 0 >= ci: return -4 st = CO.AMARI + COM.lFecha("Sinca", "Disponibilidad") + ' (Descargado:' + \ CO.FIN + COM.lFecha('disponibilidad.txt', '') + ')' + "\n" # 'Conta' se refiere al sistema de contabilidad. nF = 0 # Numero de registros de una misma persona (socio) for l in lSi: if 0 == nF and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('', '0', str(ci)): nF += 1 if l[1] in dConc: if '0' == l[1]: stl = CO.AZUL + dConc[l[1]].rstrip().rjust(20) + \ CO.FIN + ': ' + l[2].rstrip().ljust(12) elif l[1] in ('D', 'E', 'F'): stl = CO.AZUL if 55 <= CO.nCarLin: stl += ('NETO NOMINA ' + dConc[l[1]]).rstrip().rjust(20) else: stl += dConc[l[1]].rstrip().rjust(9) stl += CO.FIN + ': ' if (6 <= len(l)): stl += FG.formateaNumero(l[2]) + '-' + FG.formateaNumero(l[3]) + \ ' = ' + FG.formateaNumero(l[4], 2) + '(' + \ FG.formateaNumero(l[5]) + '%)' else: stl = CO.AZUL + dConc[l[1]].rstrip().rjust(20) + CO.FIN + ': ' + \ FG.formateaNumero(l[2], 2).rstrip().ljust(12) if 1 == nF: stl = CO.CYAN + FG.formateaNumero(ci) + ':' + \ COM.nombreSocio(sNombre) + CO.FIN + "\n" + stl # if 'B' == l[1]: disp = l[2].rstrip().rjust(12) else: stl = l[2].rstrip() + ' DESCONOCIDO (' + l[1] + ')' if '0.00' != l[2].rstrip() or 'A' == l[1]: st += stl + '\n' if 'C' == l[1] and 55 > CO.nCarLin: st += CO.CYAN + 'N E T O S'.rjust(int((CO.nCarLin-9)/2)+9) + '\n' + \ CO.FIN # 9 es la longitud de 'N E T O S' else: break # Fin for if 0 >= nF: st = COM.noCedula(ci) else: st += CO.AZUL + ('Dividendo ' + CO.anoDividendo).rjust(20) + CO.FIN + \ ': ' + FG.formateaNumero(COM.mDividendo(ci), 2).ljust(12) + '\n' # ES.alerta(droid, 'DISPONIBILIDAD', '%s: %12s' % (sNombre, FG.formateaNumero(disp, 2))) opc = ES.imprime(st.rstrip(' \t\n\r')) return opc
def nomina(ci=-1, bLN=True): '''Maneja la lista de conceptos de nomina de un socio y muestra la informacion.''' global lNom, lNomCNE if bLN: lN = lNom else: lN = lNomCNE if 0 >= ci: return -8 st = CO.AMARI + COM.lFecha("Nomina", "Nomina") + ' (Descargado:' + CO.FIN +\ COM.lFecha('nomina.txt', '') + ')' + "\n" nF = 0 ftAsig = 0.00 ftDed = 0.00 bImpar = True nCarDesc = CO.nCarLin - 23 - 1 # Numero de caracteres (espacio total), donde se mostrara el campo. 23 es resto. maxLongCad = 28 # numero maximo de caracteres del campo especificado. if maxLongCad < nCarDesc: nCarDesc = maxLongCad # > longitud maxima de la cadena a mostrar en el campo. nCarMostrar = 23 + nCarDesc # Numero de caracteres, maximo, a mostrar por linea. sTitNomina = CO.AZUL + "CON " + CO.justIzqTituloCol( 'DESCRIPCION', nCarDesc) + " ValorFijo ValorVariab" if 25 <= (CO.nCarLin - nCarMostrar): # 25 es la maxima longitud del 'saldo[cuota]'. sTitNomina += ' Saldo:[Cuota]' nCarMostrar += 25 nCarSaldo = 15 bSaldo = True else: nCarSaldo = 0 bSaldo = False sTitNomina += CO.FIN + "\n" for l in lN: if 0 == nF and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('', '0', str(ci)): nF += 1 sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) # 0:Cedula, 1:Concepto, 2:Valor fijo, 3: Valor variable, 4:Saldo, 5:Cuota stl = "%s%.3s %*.*s %.11s %.11s%s" % ( sColor, l[1], nCarDesc, nCarDesc, COM.mConcepto(l[1]).ljust( nCarDesc, " "), FG.formateaNumero( l[2], 2).rstrip().rjust(11), FG.formateaNumero( l[3], 2).rstrip().rjust(11), CO.FIN) if bSaldo: if (0.00 < float(l[4])): stl += "%s%.*s[%s]%s" % ( sColor, nCarSaldo, FG.formateaNumero( l[4], 2).rstrip().rjust(nCarSaldo), FG.formateaNumero(l[5], 2).rstrip(), CO.FIN) try: if (500 > int(l[1])): ftAsig += float(l[2]) + float(l[3]) else: ftDed += float(l[2]) + float(l[3]) except Exception as ex: print('Tipo: ' + type(ex), ', ex: ', ex) if 1 == nF: stl = CO.CYAN + FG.formateaNumero(ci) + ':' + \ COM.nombreSocio(COM.mNombre(ci)) + CO.FIN + "\n" + sTitNomina + stl st += stl + '\n' else: break # Fin for if 0 >= nF: st = COM.noCedula(ci) elif (0.00 != ftAsig) or (0.00 != ftDed): fNeto = ftAsig - ftDed stAsig = FG.formateaNumero(ftAsig, 2) stDed = FG.formateaNumero(ftDed, 2) sNeto = FG.formateaNumero(fNeto, 2) if bSaldo: sFormato = ("%sAsignaciones:%s%-*.*s; %sDeducciones:%s%-*.*s; " "%sNeto:%s %-*.*s") else: sFormato = "%sAs:%s%-*.*s;%sDs:%s%-*.*s;%sNeto:%s %-*.*s" stl = sFormato % (CO.AZUL, CO.FIN, len(stAsig), len(stAsig) + 1, stAsig, CO.AZUL, CO.FIN, len(stDed), len(stDed) + 1, stDed, CO.AZUL, CO.FIN, len(sNeto), len(sNeto) + 1, sNeto) st += stl opc = ES.imprime(st.rstrip(' \t\n\r')) return opc
# Funcion selFuncion esperar = 'Espere un momento, por favor...' if droid: droid.dialogCreateHorizontalProgress('IPASPUDO', esperar, 100) droid.dialogShow() droid.dialogSetCurrentProgress(15) else: print(esperar) AP.prepararListasDeTrabajo() ESF.prepararListasDeTrabajo() if droid: droid.dialogSetCurrentProgress(60) else: print('Listas listas!') COM.prepararDiccionariosDeTrabajo() if droid: droid.dialogSetCurrentProgress(90) else: print('Diccionarios listos!') ES.muestraInicio("IPASPUDO: J-30619229-8.") if droid: droid.dialogSetCurrentProgress(95) cig, sUXD, sCXD = leeValXDefecto() if droid: droid.dialogSetCurrentProgress(100) droid.dialogDismiss() nOp = 11 while True: sOpcion = selFuncionInicial(nOp)
def servifun(ci=-1): '''Maneja la lista de la carga de un socio en ServiFun y muestra la informacion.''' global lCgS if 0 >= ci: return -7 nF = 0 fC = 0 st = CO.AMARI + COM.lFecha("Sinca", "ServiFun") + ' (Descargado:' + CO.FIN +\ COM.lFecha('servifun.txt', '') + ')' + "\n" bImpar = True nCarMostrar, nCarNomb, maxCarLs = CO.carPorCampo(lCgS, 2, 23) # Max numero cars de una linea, max # caracteres del campo. if CO.bPantAmplia: # Verifica si la pantalla es amplia. nCarMostrar -= 12 # 12 = numero de caracteres aprox de disponibilidad y A/N. nCarNomb -= 12 maxCarLs -= 12 sParTi = 'PARENTE' sEsp = '' nCarMostrar, nCarPare, maxCarLs = CO.carPorCampo(lCgS, 3, nCarMostrar) else: sParTi = 'PAR' nCarPare = 3 sEsp = '' st += CO.AZUL + " CEDULA " + CO.justIzqTituloCol('NOMBRE DE LA CARGA', nCarNomb) + CO.justIzqTituloCol(sParTi, nCarPare) +\ sEsp + "FInsc" + " Ed" + CO.FIN + "\n" sFormato = '%s%10.10s %-*.*s %-*.*s %-5.5s%3d%s\n' # [0]Cedula; [1]Cedula carga;[2]Nombre(Nombre|Disponibilidad|A/N); [3]Parentesco;[4]Fecha ingreso a servifun for l in lCgS: if 0 == nF and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('','0',str(ci)): nF += 1 if '-' == l[3][1:2] and l[3][0:1] in ('A', 'N', 'S', 'T'): fC += CO.CO if 5 < len(l) and l[5].isdigit(): nEd = int(l[5]) if (l[3][0:1] in ('6', '7')) and (25 < nEd): fC += CO.CHM25 if (80 < nEd): fC += CO.CM80 elif (75 < nEd): fC += CO.CM75 elif (70 < nEd): fC += CO.CM70 else: nEd = -1 sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) st += sFormato % (sColor, FG.formateaNumero(l[1], 0), nCarNomb, nCarNomb, l[2].lstrip().split('|')[0], nCarPare, nCarPare, l[3], l[4], nEd, CO.FIN) else: break # Fin for if 0 >= nF: st = COM.noCedula(ci) else: if 1 == nF: fC += CO.CI sfC = FG.formateaNumero(fC, 2) sC = "igual a Bs. %*s" % (len(sfC), sfC) else: fC += CO.CCC sfC = FG.formateaNumero(fC, 2) sC = "mayor o igual a Bs. %*s" % (len(sfC), sfC) stl = "La cuota mensual es " + sC st += CO.CYAN + stl + CO.FIN opc = ES.imprime(st.rstrip(' \t\n\r')) return opc
def extension(ci=-1): '''Maneja la lista de la carga de un socio en la extension y muestra la informacion.''' global lCgE if 0 >= ci: return -6 st = CO.AMARI + COM.lFecha("Extension", "Extension") + ' (Descargado:' +\ CO.FIN + COM.lFecha('extension.txt', '') + ')' + "\n" nF = 0 # Numero de filas rC = 0.00 # Cuota nCarMostrar, nCarNomb, maxCarLs = CO.carPorCampo(lCgE, 2, 28) # Max numero cars de una linea, max # caracteres del campo. if CO.bPantAmplia: # Verifica si la pantalla es amplia. nCarMostrar -= 12 # 12 = numero de caracteres aprox de disponibilidad y A/N. nCarNomb -= 12 maxCarLs -= 12 sParTi = 'PARENTESCO' sCuota = ' Cuota' nCarMostrar, nCarPare, maxCarLs = CO.carPorCampo(lCgE, 3, nCarMostrar) else: sParTi = 'PAREN' nCarPare = 3 sCuota = ' Cta.' sTitExtension = CO.AZUL + " CEDULA " + CO.justIzqTituloCol('NOMBRE', nCarNomb) + CO.justIzqTituloCol(sParTi, nCarPare) +\ sCuota + ' AIng' + CO.FIN + "\n" if CO.bPantAmplia: sFormato = '%s%10.10s %-*.*s %-*.*s%8.8s %s%s\n' nCarPare += 3 iDec = 2 else: sFormato = '%s%10.10s %-*.*s %-*.*s%5.5s %s%s\n' nCarPare += 2 iDec = 0 bImpar = True #[0]Cedula; [1]Cedula carga;[2]Nombre(Nombre|Disponibilidad|A/N); [3]Parentesco; [4]#UT; [5]Costo poliza for l in lCgE: if (0 == nF) and ('' == l[0] or ci > int(l[0])): continue elif l[0] in ('','0',str(ci)): sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) try: if 0 == nF: if '1250' == l[4]: nSumaAseg = 500000 elif '500' == l[4]: nSumaAseg = 250000 else: nSumaAseg = 0 st += CO.CYAN + "SUMA ASEGURADA: " + l[4] + "UT = BsF. " +\ FG.formateaNumero(nSumaAseg) + CO.FIN + "\n" + sTitExtension nF += 1 rC += float(l[5]) if 0 < float(l[5]): if l[3].lstrip().split(' ')[0][0:3] in ['TIT', 'CON', 'tit', 'con']: sPar = l[3].lstrip().split(' ')[0][0:nCarPare-2] + '-' + l[3][-2:] else: sPar = l[3].lstrip().split(' ')[0][0:nCarPare] if 6 < len(l) and l[6].isdigit(): sAno = l[6] else: sAno = '----' st += sFormato % (sColor, FG.formateaNumero(l[1]), nCarNomb, nCarNomb, l[2].lstrip().split('|')[0], nCarPare, nCarPare, sPar, FG.formateaNumero(float(l[5])/12, iDec), sAno, CO.FIN) except Exception as ex: print('ex: ', ex) # Fin elif else: break # Fin for if 0 >= nF or 0.00 >= rC: st = COM.noCedula(ci) # ES.alerta(droid, 'EXTENSION', '%s: INACTIVO' % (sNombre)) else: frC = FG.formateaNumero(rC, 2) fmC = FG.formateaNumero(rC/12, 2) stl = "TOTAL Anual: %-*.*s (mensual: %-*.*s)" % (len(str(frC)), len(str(frC))+1, frC, len(fmC), len(str(fmC))+1, fmC) st += CO.CYAN + stl + CO.FIN opc = ES.imprime(st) return opc
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]