def lstXEstatus(): global lPro est = COM.selEstatus() if ('v' == est): return -1 nvaLst = [] for l in lPro: if (est != l['estatus']): continue nvaLst.append(l) # for l in lPro nV = tLados = 0 tPrecios = tPrVeReal = tNetos = 0.00 bImpar = True st = CO.CYAN + COM.dEst[est] + CO.FIN + '\n' st += titulo("Neto ofic.", 11) for l in nvaLst: sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) st += detalles(l, sColor, True, 'ingNeOf', 11) nV += 1 tLados += l['lados'] tPrecios += l['precio'] tPrVeReal += l['prVeRe'] tNetos += l['ingNeOf'] # for l in nvaLst st += CO.AMARI + 'TOTALES:'.ljust(45) +\ FG.formateaNumero(tLados).rjust(3) +\ FG.formateaNumero(tPrecios).rjust(11) +\ FG.formateaNumero(tPrVeReal).rjust(14) +\ FG.formateaNumero(tNetos, 2).rjust(11) + CO.FIN + "\n" st += FG.formateaNumero(len(nvaLst)) + ' negociaciones' return ES.imprime(st.rstrip(' \t\n\r'))
def mostrarConceptos(dicc, dConc): lconc = [] i = 0 iMax = '000' for ld in dicc.items(): lconc.insert(i, ld[0]) if ld[0].isdigit() and ld[0] > iMax: iMax = ld[0] # Concepto con el maximo valor, para saber donde subrayar. i += 1 lconc.sort() bImpar = True st = "%s%s%3s %-20.20s %6.6s %15.15s %15.15s %15.15s %6.6s%s\n" % \ (CO.SUBRAYADO, CO.AMARI, 'CLV', 'DESCRIPCION', '#SOCI', 'VALOR FIJO', 'VALOR VARIABLE', 'TOTALES', 'PORCEN', CO.FIN) for v in lconc: if not ((0.00 == dicc[v][1]) and (0.00 == dicc[v][2]) and \ (0.00 == dicc[v][3])): if 'AHO' == v and dicc['AHO'][3] == dicc['TOT'][3]: continue if v.isdigit(): if iMax > v: subrayar = '' else: subrayar = CO.SUBRAYADO else: subrayar = '' if ('TOT' == v): sColor = CO.VERDE elif v in ('AHO', 'OTR', 'PRE', 'PR0', 'PR1'): sColor = CO.PURPURA else: sColor, bImpar = ES.colorLinea(bImpar, CO.AZUL, CO.CYAN) fPorc = 100.00*dicc[v][3]/dicc['TOT'][3] st += "%s%s%3s %-20.20s %6.6s %15.15s %15.15s %15.15s %6.6s%s\n" %\ (subrayar, sColor, v, dConc.get(v, {'des':'NO TENGO DESCRIPCION'})['des'], FG.formateaNumero(dicc[v][0]), FG.formateaNumero(dicc[v][1], 2), FG.formateaNumero(dicc[v][2], 2), FG.formateaNumero(dicc[v][3], 2), FG.formateaNumero(fPorc, 2), CO.FIN) return st
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 detTotales(cad, lados, pvr, cap, cer, lCap, lCer, bImpar, tam=20, color=False): if (0 == lados) and (0 == cap) and (0 == cer) and (0 == lCap) and\ (0 == lCer): return bImpar, '' (sColor, bImpar) = (color, not bImpar) if (color) else\ ES.colorLinea(bImpar, CO.VERDE) return bImpar, sColor + cad[0:tam-1].ljust(tam) +\ FG.formateaNumero(lados).rjust(4) +\ FG.formateaNumero(pvr, 2).rjust(14) +\ FG.formateaNumero(cap+cer, 2).rjust(12) +\ (FG.formateaNumero(cap, 2) + '(' +\ FG.formateaNumero(lCap) + ')').rjust(15) +\ (FG.formateaNumero(cer, 2) + '(' +\ FG.formateaNumero(lCer) + ')').rjust(15) + CO.FIN + "\n"
def lstXAsesor(): global lPro id = FG.selOpcionMenu(ASE.lNAs + [['Volver', -2]], 'Asesor') if (0 > id): return id nvaLst = [] for l in lPro: if not (isinstance(l['asCapId'], int)) or \ not (isinstance(l['asCerId'], int)) or \ ((id != l['asCapId']) and (id != l['asCerId'])): continue nvaLst.append(l) # for l in lPro tPrecios = tPrVeReal = tCap = tCer = 0.00 nF = nV = tLados = 0 bImpar = True st = CO.CYAN + ASE.lAse[id-1]['name'] + CO.FIN + '\n' st += titulo("Comision", 10) for l in nvaLst: sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) st += detalles(l, sColor, True, 'capPrbr', 'asCapId', 'cerPrbr', 'asCerId', id, 10) if (l['estatus'] not in ('P', 'C')): continue nV += 1 tLados += l['lados'] tPrecios += l['precio'] tPrVeReal += l['prVeRe'] if (id == l['asCapId']): try: tCap += float(l['capPrbr']) except: pass if (id == l['asCerId']): try: tCer += float(l['cerPrbr']) except: pass # Fin for st += CO.AMARI + 'TOTALES:'.ljust(45) +\ FG.formateaNumero(tLados).rjust(3) +\ FG.formateaNumero(tPrecios).rjust(11) +\ FG.formateaNumero(tPrVeReal).rjust(14) +\ FG.formateaNumero(tCap+tCer, 2).rjust(10) + CO.FIN + "\n" st += CO.AMARI + FG.formateaNumero(len(nvaLst)) +\ ' negociaciones [' + FG.formateaNumero(nV) + ' validas]. ' +\ 'Total captado: ' + FG.formateaNumero(tCap, 2) +\ ' y cerrado: ' + FG.formateaNumero(tCer, 2) + CO.FIN return ES.imprime(st.rstrip(' \t\n\r'))
def mostrarConceptos(dicc, dConc): lconc = [] i = 0 sMax = '000-0-0-0' for ld in dicc.items( ): # el metodo items(), devuelve una lista de dicc's (llave, valor) tupla pares lconc.insert(i, ld[0]) if ld[0][0:3].isdigit() and ld[0] > sMax: sMax = ld[ 0] # Concepto con el maximo valor, para saber donde subrayar. i += 1 lconc.sort() bImpar = True st = "%s%s%9s %-20.20s %6.6s %15.15s %15.15s %6.6s%s\n" % \ (CO.SUBRAYADO, CO.AMARI, 'CLAVE', 'DESCRIPCION', '#MOVI', ' Saldo', ' Cuota', 'PORCEN', CO.FIN) for v in lconc: if not ((0.00 == dicc[v][1]) and (0.00 == dicc[v][2])) or ('3' == v[6:7]): if v[0:3].isdigit() and v[4:5].isdigit() and v[6:7].isdigit() and \ v[8:].isdigit(): if sMax == v: subrayar = CO.SUBRAYADO else: subrayar = '' else: subrayar = '' if ('TOT' == v): sColor = CO.VERDE elif ('AHO' == v): sColor = CO.PURPURA elif ('ELI' == v): sColor = CO.ROJO elif ('OTR' == v): sColor = CO.PURPURA else: sColor, bImpar = ES.colorLinea(bImpar, CO.AZUL, CO.CYAN) if 0 == dicc['TOT'][1]: fPorc = 0.00 else: fPorc = 100.00 * dicc[v][1] / dicc['TOT'][1] sConc = v[0:3] if '3' == v[6:7]: sObs = CO.ROJO + 'Eli' elif '2' == v[6:7]: sObs = 'Mod' elif '1' == v[6:7]: sObs = 'Cre' else: sObs = '' st += "%s%s%9s %-20.20s %6.6s %15.15s %15.15s %6.6s %s%s\n" % ( subrayar, sColor, v, dConc.get(sConc, {'des': 'NO TENGO DESCRIPCION'})['des'], FG.formateaNumero(dicc[v][0]), FG.formateaNumero( dicc[v][1], 2), FG.formateaNumero(dicc[v][2], 2), FG.formateaNumero(fPorc, 2), sObs, CO.FIN) return st
def cumpleanos(mostrar=True): from datetime import date global lAse hoy = date.today() proxDia, proxMes, proxAno, enUnMes = calcProxMes() bImpar = True titulo = CO.CYAN + 'Proximos cumpleaneros' + CO.FIN + '\n' st = '' indices = [] # lClas = sorted(lAse, key = lambda k: k['fecha_nacimiento']) # Problemas con valures null. lClas = sorted(lAse, key = lambda k: (k['fecha_nacimiento'][5:10] \ if k['fecha_nacimiento'] else '')) for l in lClas: if not l['fecNac']: continue fecNac = l['fecNac'] anoNac, mesNac, diaNac, dSemNac =\ FG.descomponeFecha(l['fecNac']) fecCump = date(proxAno, mesNac, diaNac) diaSem = CO.semana[fecCump.weekday()] if fecCump == hoy: indices.append([l['id'], l['name'], fecCump]) if mostrar: st += CO.AMARI + l['name'] + ': ' + 'HOY, ' + diaSem + ' ' +\ fecNac[0:2] + ' de ' + CO.meses[mesNac] + CO.FIN + '\n' # FIN if mostrar elif hoy < fecCump <= enUnMes: if mostrar: sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) st += sColor + l['name'] + ': ' + diaSem + ' ' +\ fecNac[0:2] + ' de ' + CO.meses[mesNac] + CO.FIN + '\n' # FIN if mostrar # FIN if fecCump == hoy # FIN for l in lClas if mostrar: if (st): st = titulo + st else: st = CO.CYAN + 'No hay cumpleaneros proximamente.' +\ CO.FIN + '\n' return ES.imprime(st.rstrip(' \t\n\r')) else: return indices
def ganYperXmes(): 'Lee los datos de ganancias y perdidas por mes y los despliega' global lGyPxM # st = AMARI + lFecha("Sinca", "GanyPerxMes") + ' (Descargado:' + FIN + lFecha('egyp.txt', '') + ')' + "\n" nF = 0 bImpar = True sTitPrestamos = CO.AZUL + "MES" + "Ingresos".rjust(15) + "FACTOR".rjust(7) +\ "Egresos".rjust(15) + "FACTOR".rjust(7) + "Resultado".rjust(15) +\ "FACTOR".rjust(8) + CO.FIN + "\n" st = sTitPrestamos rTotIng = float(lGyPxM[len(lGyPxM)-1][1]) rTotEgr = float(lGyPxM[len(lGyPxM)-1][2]) for l in lGyPxM: nF += 1 sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) # 0:Mes,1:Ingresos,2:Egresos,3:Resultado if 0.00 != rTotIng: fcti = float(l[1])/rTotIng else: fcti = 0.00 if 0.00 != rTotEgr: fcte = float(l[2])/rTotEgr else: fcte = 0.00 if 0.00 != float(l[1]): fct = float(l[2])/float(l[1]) else: fct = 0.00 if 13 > int(l[0]): sMes = str(l[0]) else: sMes = 'TO' if 1 >= abs(fct): sColorFactor = '' else: sColorFactor = CO.FIN + CO.ROJO st += sColor + sMes.rjust(2) + ' ' +\ FG.formateaNumero(l[1], 2).rstrip().rjust(15) +\ FG.formateaNumero(fcti, 3).rstrip().rjust(7) +\ FG.formateaNumero(l[2], 2).rstrip().rjust(15) +\ FG.formateaNumero(fcte, 3).rstrip().rjust(7) +\ FG.formateaNumero(l[3], 2).rstrip().rjust(15) +\ sColorFactor +\ FG.formateaNumero(fct, 3).rstrip().rjust(8) +\ CO.FIN + "\n" # Fin for ES.imprime(st.rstrip(' \t\n\r'))
def lstXMes(): agno, mes = COM.selMes(lTMe) if ('v' == agno): return -1 nvaLst = [] for l in lPro: if ('00' == mes) and (("" == l['fecRes']) or ("" == l['fecFir'])): nvaLst.append(l) continue if (("" != l['fecFir']) and (10 == len(l['fecFir'])) and\ (agno == l['fecFir'][-4:]) and (mes == l['fecFir'][3:5])) or\ (("" != l['fecRes']) and (10 == len(l['fecRes'])) and\ (agno == l['fecRes'][-4:]) and (mes == l['fecRes'][3:5])): nvaLst.append(l) # for l in lPro nV = tLados = 0 tPrecios = tPrVeReal = tNetos = 0.00 bImpar = True st = CO.CYAN + agno + ' ' + CO.meses[int(mes)] + CO.FIN + '\n' st += titulo("Neto ofic.", 11) for l in nvaLst: sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) st += detalles(l, sColor, True, 'ingNeOf', 11) if (l['estatus'] in ('P', 'C')): nV += 1 tLados += l['lados'] tPrecios += l['precio'] tPrVeReal += l['prVeRe'] tNetos += l['ingNeOf'] # for l in nvaLst st += CO.AMARI + 'TOTALES:'.ljust(45) +\ FG.formateaNumero(tLados).rjust(3) +\ FG.formateaNumero(tPrecios).rjust(11) +\ FG.formateaNumero(tPrVeReal).rjust(14) +\ FG.formateaNumero(tNetos, 2).rjust(11) + CO.FIN + "\n" st += CO.AMARI + FG.formateaNumero(len(nvaLst)) + ' negociaciones ['\ + FG.formateaNumero(nV) + ' validas].' + CO.FIN return ES.imprime(st.rstrip(' \t\n\r'))
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 todasPropiedades(bCaidas=True): '''Lee los datos de propiedades y los despliega fila['id']: numero incremental. fila['codigo']: Codigo casa nacional. fila['fecRes']: fecha de reserva. fila['fecFir']: fecha de firma. fila['negoc']: Negociacion: Venta o Alquiler. fila['nombre']: Nombre de la propiedad. fila['estatus']: Status. fila['moneda']: Moneda. fila['precio']: Precio. ''' global lPro nV = tLados = 0 tPrecios = tPrVeReal = tNetos = 0.00 bImpar = True st = titulo("Neto ofic.", 11) for l in lPro: if (l['estatus'] in ('P', 'C')): nV += 1 tLados += l['lados'] tPrecios += l['precio'] tPrVeReal += l['prVeRe'] tNetos += l['ingNeOf'] sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) st += detalles(l, sColor, bCaidas, 'ingNeOf', 11) # Fin for st += CO.AMARI + 'TOTALES:'.ljust(45) +\ FG.formateaNumero(tLados).rjust(3) +\ FG.formateaNumero(tPrecios).rjust(11) +\ FG.formateaNumero(tPrVeReal).rjust(14) +\ FG.formateaNumero(tNetos, 2).rjust(11) + CO.FIN + "\n" st += FG.formateaNumero(len(lPro)) + ' negociaciones [' + \ FG.formateaNumero(nV) + ' validas].' return ES.imprime(st.rstrip(' \t\n\r'))
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
def asesor(bImp=True): global droid global lNAs id = FG.selOpcionMenu(lNAs + [['Volver', -2]], 'Asesor') if (0 > id): return id if __name__ != '__main__': # No se ha creado la lista de Propiedades lPro. No he podido. resp = ES.siNo(droid, 'propiedades', 'Desea mostrar las propiedades' ' de '+ lAse[id-1]['name'], False) tCap = tCer = 0.00 nF = nV = tLados = 0 bImpar = True if ('S' == resp): st = PRO.titulo('Comision', 11) for l in PRO.lPro: if (40 < len(l)): if not (isinstance(l['asCapId'], int)) or\ not (isinstance(l['asCerId'], int)): continue if (id != l['asCapId']) and (id != l['asCerId']): continue if (l['estatus'] in ('P', 'C')) and (id == l['asCapId']): try: tCap += float(l['capPrbr']) except: pass if (l['estatus'] in ('P', 'C')) and (id == l['asCerId']): try: tCer += float(l['cerPrbr']) except: pass nF += 1 if (l['estatus'] in ('P', 'C')): nV += 1 tLados += l['lados'] # if ('S' == resp): sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE) st += PRO.detalles(l, sColor, True, 'capPrbr', 'asCapId', 'cerPrbr', 'asCerId', id, 11) # Fin for st += CO.AMARI + 'Tiene ' + FG.formateaNumero(nF) +\ ' negociaciones [' + FG.formateaNumero(nV) + ' validas].' +\ CO.FIN + '\n' # Fin if ('S' == resp): else: st = '' # Fin if __name__ != '__main__': if bImp: if __name__ == '__main__': sMsj = ("%sID:%s %2d\n") % (CO.AZUL, CO.FIN, id) else: sMsj = '' ind = id - 1 dic = lAse[ind] for ll in dMsj: if not dMsj[ll]: continue if 'tCap' == ll: break # De aqui en adelante no son 'propiedades' (variables) del asesor. if 'pvrCaptador' == ll and __name__ != '__main__': # No se ha creado la lista de Propiedades lPro. No he podido. if (0 < nF): sMsj += st # Si la respuesta sobre las propiedades fue 'Si', Despliega las propiedades donde ha participado el asesor. if ll in ('tCap', 'tCer', 'tCapCer'): continue # Solo para verificar valores. sMsj += COM.prepLnMsj(dMsj, dic, ll) if not bMovil and __name__ != '__main__': dic = {'tCap':tCap, 'tCer':tCer, 'tCaptCer':tCap+tCer} sMsj += COM.prepLnMsj(dMsj, dic, 'tCap', 'n', '22', 2) sMsj += COM.prepLnMsj(dMsj, dic, 'tCer', 'n', '22', 2) sMsj += COM.prepLnMsj(dMsj, dic, 'tCaptCer', 'n', '12', 2) opc = ES.imprime(sMsj.rstrip(' \t\n\r')) return opc, ind
try: f = open(DIR + 'control.txt', "r") data = f.read() lControl = [linea.strip().split(';') for linea in data.rstrip().split('\n')] except: lControl = [['0', nombArch] for nombArch in lDATA] dControl = {linea[1].strip():[linea[0].strip(), linea[0].strip()] for linea in lControl if FG.esEntero(linea[0].strip())} lBancosHoy = None # La lista de bancos de hoy esta vacia al principio. for DATA in lDATA: if 'control.txt' != DATA: (timeAnterior, timeNuevo) = dControl.get(DATA, ['0', '-1']) else: timeAnterior = timeNuevo = 0 segsDiferencia = int(timeNuevo) - int(timeAnterior) sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE, CO.AZUL) print("%sLeyendo%s %s remoto. Local modificado hace: %d seg del remoto" % (sColor, CO.FIN, DATA, segsDiferencia)) if 'control.txt' != DATA and 0 >= segsDiferencia: if 0 == segsDiferencia: print("%s, %slocal; ya esta actualizado con%s %d lineas! El %s" % \ (DATA, sColor, CO.FIN, ES.cLineas(DATA), ctime(int(timeAnterior)))) continue elif 'archsBanco.txt' != DATA: print("%s %sno está en el archivo de control!%s" % (DATA, CO.ROJO, CO.FIN)) try: data = urlopen(URL + DATA, 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:
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
bImpar = False for v in lCed: iL += 1 if '' == v or '' == v.strip() or None == v or not v or \ not v.lstrip('0').isdigit(): print('Linea: ' + str(iL) + ', v: ' + v) break try: if dicc[v][2].isdigit() and dicc[v][3].isdigit(): # Linea corta if 0 == (iL%100): print("%8d %30.30s Nuc==>> %s Cta==>> %s" % \ (int(dicc[v][0]), dicc[v][1], dicc[v][2], dicc[v][3])) nC += 1 elif dicc[v][4].isdigit() and dicc[v][5].isdigit(): # Linea larga if sCed: if sCed.lstrip('0') == v.lstrip('0'): sColor, bImpar = ES.colorLinea(bImpar, CO.AZUL, CO.CYAN) print("%s%5d: %8d %30.30s Nuc==>> %s Cta==>> %s%s" % (sColor, iL, int(dicc[v][0]), dicc[v][1], dicc[v][4], dicc[v][5], CO.FIN)) elif 0 == (iL%500): sColor, bImpar = ES.colorLinea(bImpar, CO.AZUL, CO.CYAN) print("%s%5d: %8d %30.30s Nuc==>> %s Cta==>> %s%s" % (sColor, iL, int(dicc[v][0]), dicc[v][1], dicc[v][4], dicc[v][5], CO.FIN)) nL += 1 else: print(("%sERROR: (Linea:%d{Corta:%d/Larga:%d})%s;%s(%d):%25.25s\n" "Nucleo: {Corta:%s|Larga:%s}; Cuenta: {Corta:%s|Larga:%s}") % \ (CO.ROJO, iL, nC, nL, CO.FIN, dicc[v][0], len(dicc[v][0]), dicc[v][1], dicc[v][2], dicc[v][4], dicc[v][3], dicc[v][5])) break except: print(CO.ROJO + 'PROBABLEMENTE HAY UN ERROR (Linea:' + str(iL) + \
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