#-*- coding: utf-8 -*-
import datetime, re, os, sys
def clear_screen():
os.system("cls") if(os.name=='nt') else os.system("clear")
if not os.path.isdir("cuentas"):
respuesta = raw_input("""
No están las carpetas necesarias para el correcto
Funcionamiento del programa
¿Desea crerlas? (s/n): """).lower()
if respuesta=="s":
try:
os.mkdir("cuentas")
os.mkdir("cuentas_pagadas")
raw_input("Se crearon los archivos necesarios, presiona una enter para ir al programa.")
except:
print "Error al crear los archivos necesarios."
sys.exit(1)
else:
print "No se instalará el programa."
sys.exit(1)
else:
pass
separar_fecha = str(datetime.datetime.now()).split(" ")[0]
parsear_fecha = separar_fecha.split("-")
fecha_normal = " %s/%s/%s"%(parsear_fecha[2], parsear_fecha[1], parsear_fecha[0])
clear_screen()
class cuentas:
def extraer_cuentas(self):
return os.listdir("cuentas/")
def verificar_fechas(self):
try:
for cuenta in self.extraer_cuentas():
ver_pagos = open("cuentas/%s"%cuenta,"r")
for dato, valor in re.findall("(.*):(.*)",ver_pagos.read()):
if "Vence" in dato:
if valor==fecha_normal:
print """
¡ALERTA!
La cuenta de %s vence hoy!
"""%cuenta.capitalize()
ver_pagos.close()
except:
print "No se encontraron cuentas"
def __init__(self):
self.verificar_fechas()
def ver_cuentas(self):
global todos_lospagos
todos_lospagos = []
try:
for ver_cuenta in self.extraer_cuentas():
ver_pagos = open("cuentas/%s"%ver_cuenta,"r")
todos_lospagos.append(ver_pagos.read()+"\n----")
ver_pagos.close()
return True
except:
return False
def agregar_pago(self, tipo, valor, fecha):
clear_screen()
try:
escribir_nuevo = open("cuentas/%s"%tipo,"w")
escribir_nuevo.write("""Tipo de cuenta : %s
Monto a cancelar: %s
Vence el día : %s
Estado : No pagada"""%(tipo, valor, fecha))
escribir_nuevo.close()
return True
except:
return False
def cuenta_pagada(self, cuenta, estado, conservar):
if estado == "s":
if conservar == "s":
try:
cuenta_r = open("cuentas/%s"%cuenta,"r")
cuenta_w = open("cuentas_pagadas/%s"%cuenta,"w")
cuenta_w.write(cuenta_r.read().replace("No pagada", "Pagada"))
cuenta_w.close()
cuenta_r.close()
os.remove("cuentas/%s"%cuenta)
return True
except:
return False
else:
try:
os.remove("cuentas/%s"%cuenta)
return True
except:
return False
else:
return False
def dinero_encuentas(self):
try:
global suma
suma = 0
for h in os.listdir("cuentas_pagadas"):
for valor in re.findall("Monto a cancelar: (.*)",open("cuentas_pagadas/%s"%h,"r").read()):
suma+=int(valor)
return True
except:
return False
pago = cuentas()
while True:
print """
¡ Bienvenido al gestor de pago de cuentas !
La fecha de hoy es%s"""%fecha_normal
try:
opcion_principal = input("""
1.- Ver cuentas.
2.- Agregar/Editar una cuenta.
3.- Informar pago de cuenta.
4.- Ver cuentas pagadas.
5.- Calcular cuanto he pagado en cuentas.
6.- Eliminar una cuenta pagada.
7.- Salir.
Ingresa una opción: """)
if opcion_principal == 7:
break
elif opcion_principal == 1:
clear_screen()
if len(os.listdir("cuentas"))>0:
if pago.ver_cuentas():
pago.verificar_fechas()
print "Cuentas registradas:"
for out in todos_lospagos:
print out
else:
print "Error inesperado."
else:
print "No hay cuentas registradas."
elif opcion_principal == 2:
clear_screen()
print "Si la cuenta ya existe, será reescrita con nuevos datos."
try:
print "Rellene los siguientes campos por favor. Si desea volver al menú presione \"q\" y ENTER."
tipo_c = raw_input("Nombre de la cuenta: ").capitalize()
if tipo_c != "Q":
valor_c = raw_input("¿Cuanto debe pagar?: ")
fecha_pago = raw_input("Fecha de pago(dd/mm/aa):")
v_d = fecha_pago.split("/")
v_f = fecha_normal.split("/")
if len(v_d[0])==2 and len(v_d[1])==2 and len(v_d[2])==4:
if v_d[2]>v_f[2] or v_d[2]==v_f[2] and not v_d[1]<=v_f[1]:
if v_d[1] and v_f[1]:
if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
print "Se agregó la cuenta correctamente."
else:
print "No se pudo agregar la cuenta, intentalo de nuevo."
elif v_d[1]==v_f[1] and v_d[0]>=v_f[0]:
if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
print "Se agregó la cuenta correctamente."
else:
print "No se pudo agregar la cuenta, intentalo de nuevo."
else:
print "La fecha no es válida o ya pasó..."
else:
print "Fecha mal ingresada."
else:
clear_screen()
pass
except:
print "Ingrese datos válidos."
elif opcion_principal == 3:
clear_screen()
if len(os.listdir("cuentas"))>0:
print "Si usted decide no conservar registro de la cuenta, esta\nno será considerada en la opción 5"
print "\nCuentas aún no pagadas:\n------"
print "\n".join(os.listdir("cuentas"))
cuenta = raw_input("------\nCuenta:").capitalize()
estado = raw_input("¿Pagada?(s/n): ").lower()
conservar = raw_input("¿Conservar registro?(s/n): ").lower()
if pago.cuenta_pagada(cuenta, estado, conservar):
print "Realizado con éxito"
else:
print "Ocurrió un problema."
else:
print "No hay cuentas registradas."
elif opcion_principal == 4:
clear_screen()
if len(os.listdir("cuentas_pagadas"))>0:
try:
for h in os.listdir("cuentas_pagadas"):
print open("cuentas_pagadas/%s"%h,"r").read()
print "----"
except:
print "No se pueden ver las cuentas pagadas."
else:
print "No has pagado ni una cuenta aún."
elif opcion_principal == 5:
clear_screen()
if len(os.listdir("cuentas_pagadas"))>0:
if pago.dinero_encuentas():
print "El dinero que has pagado en cuentas es de:",suma
else:
print "No has pagado ni una cuenta aún."
elif opcion_principal == 6:
clear_screen()
cuentas_totales = os.listdir("cuentas_pagadas")
if len(cuentas_totales)>0:
print "Lista de las cuentas ya canceladas:"
for listar_cuentas in cuentas_totales:
print "* "+listar_cuentas
eliminar_cuenta = raw_input("¿Que cuenta ya cancelada desea eliminar?: ").capitalize()
if eliminar_cuenta in cuentas_totales:
try:
clear_screen()
os.remove("cuentas_pagadas/%s"%eliminar_cuenta)
print "Cuenta eliminada Correctamente"
except:
clear_screen()
print "No se pudo eliminar la cuenta."
else:
clear_screen()
print "No existe la cuenta solicitada."
else:
print "No hay cuentas pagadas."
except:
print "La opción ingresada no es un número."