#!/usr/bin/python

#-------------------------------------------------------------------------------------------------------
#
#                            Pycemen
#
#-------------------------------------------------------------------------------------------------------

#    Tom�s Javier Robles Prado
#    [email protected]
#    http://users.servicios.retecal.es/tjavier
#

#-------------------------------------------------------------------------------------------------------
#    Este programa es Software Libre. Puede ser modificado a su antojo
# seg�n la licencia GPL en su versi�n actual y posteriores. Para m�s
# informaci�n sobre esta licencia visite:
#         http://www.opensource.org/licenses/gpl-license.php
#-------------------------------------------------------------------------------------------------------

#Programa de acceso a la BBDD cementerio
#Cada rutina de introducci�n de datos es guardada en un fichero de log

import pg

RUTA = '/home/bbdd/pycem.dat'
EXITO = 1
BLANCO = ' '
COMILLA = "\'"
COMA = ','

def guardarLinea(linea):
    """Guarda en RUTA una l�nea"""
    try:
        f=file(RUTA,'a')
        f.write(linea +'\n')
        f.close()
        return EXITO
    except:
        print "No se ha podido escribir en el fichero"
        return -1

def conectarBD():
    """Rutina de conexi�n a la BBDD"""
    #Conectamos a la BD
    try:
        db = pg.DB('cementerio','localhost')
        return db
    except:
        print "Error en la conexi�n"
        return -1

def compruebaNULL(var):
    """Comprueba si el valor dado es NULL"""
    if var == "":
        return "NULL"
    else:
        return var
        
def corrigeNULL(sql):
    """Cambia los posibles 'NULL' por NULL"""
    return sql.replace("\'NULL\'","NULL")
    
def ejecutaSQL(sql,db):
    """Ejecuta un comando sql en la base db"""
    db.query(sql)

def calculaIDTumba():
    """Realiza una consulta para averiguar n�mero de tumba"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT ID_Tumba
                           FROM tumba
                           ORDER BY ID_tumba desc;""")
        return (cons.getresult()[0][0] + 1)
    else:
        return -1

def calculaIDSector():
    """Realiza una consulta para averiguar n�mero de sector"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT ID_Sector
                           FROM Sector
                           ORDER BY ID_Sector desc;""")
        return (cons.getresult()[0][0] + 1)
    else:
        return -1

def calculaIDFamiliar():
    """Realiza una consulta para averiguar n�mero de familiar"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT ID_Familia
                           FROM Familiar
                           ORDER BY ID_Familia desc;""")
        return (cons.getresult()[0][0] + 1)
    else:
        return -1

def imprimeSectores():
    """Realiza una consulta y devuelve los sectores posibles"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT ID_Sector, Nombre
                           FROM Sector
                           ORDER BY ID_Sector;""")
        for x in cons.getresult():
            print str(x[0]) + '\t' + x[1]
        
        db.close()
        return cons
    else:
        print "Error en la consulta"
        return -1

def imprimeAdministrativos():
    """Realiza una consulta y devuelve los administrativos posibles"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT DNI, Nombre, Apellidos
                           FROM Administrativo
                           ORDER BY Apellidos;""")
        for x in cons.getresult():
            print str(x[0]) + '\t' + x[1]+ '\t' + x[2]
        
        db.close()
        return cons
    else:
        print "Error en la consulta"
        return -1

def imprimeEnterradores():
    """Realiza una consulta y devuelve los enterradores posibles"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT DNI, Nombre, Apellidos
                           FROM Enterrador
                           ORDER BY Apellidos;""")
        for x in cons.getresult():
            print str(x[0]) + '\t' + x[1]+ '\t' + x[2]
        
        db.close()
        return cons
    else:
        print "Error en la consulta"
        return -1
    

def imprimeFamiliares():
    """Realiza una consulta y devuelve los familiares posibles"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT ID_Familia, Nombre , Apellidos
                           FROM Familiar
                           ORDER BY Apellidos;""")
        for x in cons.getresult():
            print str(x[0]) + '\t' + x[1] + '\t' + x[2]
        
        db.close()
        return cons
    else:
        print "Error en la consulta"
        return -1


def imprimeNichos():
    """Realiza una consulta y devuelve los nichos posibles"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT id_nicho, altura
                           FROM nicho
                           ORDER BY id_nicho;""")
        for x in cons.getresult():
            print str(x[0]) + '\t' + str(x[1])
        
        db.close()
        return cons
    else:
        print "Error en la consulta"
        return -1

def imprimeNichosLibres():
    """Realiza una consulta y devuelve los nichos libres"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT id_nicho, inscripcion
                           FROM nicho
                           ORDER BY id_nicho;""")
        db.close()
        
        for x in cons.getresult():
            if (contarMuertosEnTumba((x[0])) == 0):
                print "Nicho " + str(x[0]) + " libre. Inscripci�n: ",
                if x[1] is None:
                    print 'Ninguna'
                else:
                    print x[1]
                
        return cons
    else:
        print "Error en la consulta"
        return -1

def imprimePanteones():
    """Realiza una consulta y devuelve los panteones posibles"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT id_panteon, id_familia
                           FROM panteon
                           ORDER BY id_panteon;""")
        print "ID_Panteon"+'\t'+"ID_Familia"
        for x in cons.getresult():
            print str(x[0]) + '\t' + str(x[1])  
        
        db.close()
        return cons
    else:
        print "Error en la consulta"
        return -1

def imprimeFosas():
    """Realiza una consulta y devuelve los panteones posibles"""
    db = conectarBD()
    if (db != -1):
        cons = db.query("""SELECT id_fosa
                           FROM fosacomun
                           ORDER BY id_fosa;""")
        
        for x in cons.getresult():
            print str(x[0])
        
        db.close()
        return cons
    else:
        print "Error en la consulta"
        return -1
        
def contarMuertosEnTumba(tumba):
    """Cuenta el n�mero de muertos que hay en la tumba"""
    db = conectarBD()
    if (db != -1):
        sql = "SELECT tumba FROM fallecido WHERE tumba=" +str(tumba) +";"
        cons = db.query(sql)
        return cons.ntuples()
    
    else:
        print "Error en la consulta"
        return -1
    
    
def capacidad(tumba, tipo):
    """Devuelve la capacidad de un pante�n o fosa com�n"""
    db = conectarBD()
    if (db != -1):
        if tipo == 'panteon':
            sql ="SELECT capacidad FROM panteon WHERE id_panteon="+str(tumba)+";"
        elif tipo == 'fosacomun':
            sql ="SELECT capacidad FROM fosacomun WHERE id_fosa="+str(tumba)+";"
        cons = db.query(sql)
        return cons.getresult()[0][0]
    else:
        print "Error en la consulta"
        return -1

def perteneceFamilia(panteon, familia):
    """Devuelve 1 si el pante�n pertenece a la familia, 0 en otro caso"""
    db = conectarBD()
    if (db != -1):
        sql = "SELECT id_panteon FROM panteon WHERE id_panteon="+str(panteon)+" and id_Familia="+str(familia)+";"
        cons = db.query(sql)
        if cons.getresult == []:
            #No pertenece a la familia
            return 0
        else:
            return 1
    else:
        print "Error en la consulta"
        return -1
        
def datosEnterrAdminis(tabla):
    """Recoge los datos de un enterrador y devuelve una sentencia SQL"""
    
    nombre    = compruebaNULL(raw_input("Nombre     ---> "))
    apellidos = compruebaNULL(raw_input("Apellidos  ---> "))
    direccion = compruebaNULL(raw_input("Direcci�n  ---> "))
    telefono  = compruebaNULL(raw_input("Tel�fono   ---> "))
    telf_movil= compruebaNULL(raw_input("Tel. M�vil ---> "))
    antiguedad= compruebaNULL(raw_input("Antig�edad ---> "))
    salario   = compruebaNULL(raw_input("Salario    ---> "))
    dni       = compruebaNULL(raw_input("DNI        ---> "))
    
    sql = "insert into " + tabla + " values (" + COMILLA + nombre + COMILLA + BLANCO +COMA + COMILLA +apellidos + COMILLA +  BLANCO +COMA+ COMILLA +direccion + COMILLA + BLANCO +COMA+ COMILLA +telefono + COMILLA + BLANCO +COMA+ COMILLA +telf_movil  + COMILLA + BLANCO +COMA+ antiguedad + BLANCO +COMA+ salario + BLANCO +COMA+COMILLA + dni + COMILLA +");"
    return corrigeNULL(sql)



def datosJardinero():
    """Recoge los datos de un jardinero y devuelve una sentencia SQL"""
    
    nombre    = compruebaNULL(raw_input("Nombre     ---> "))
    apellidos = compruebaNULL(raw_input("Apellidos  ---> "))
    direccion = compruebaNULL(raw_input("Direcci�n  ---> "))
    telefono  = compruebaNULL(raw_input("Tel�fono   ---> "))
    telf_movil= compruebaNULL(raw_input("Tel. M�vil ---> "))
    antiguedad= compruebaNULL(raw_input("Antig�edad ---> "))
    salario   = compruebaNULL(raw_input("Salario    ---> "))
    
    correcto = 0
    cons = imprimeSectores()
    while not(correcto):
        sector = compruebaNULL(raw_input("Sector     ---> "))
        for x in cons.getresult():
            if sector == str(x[0]):
                correcto = 1
        if not (correcto):
            print "Valor incorrecto de sector"
        
    dni       = compruebaNULL(raw_input("DNI        ---> "))
    
    sql = "insert into Jardinero values (" + COMILLA + nombre + COMILLA + BLANCO +COMA + COMILLA +apellidos + COMILLA +  BLANCO +COMA+ COMILLA +direccion + COMILLA + BLANCO +COMA+ COMILLA +telefono + COMILLA + BLANCO +COMA+ COMILLA +telf_movil  + COMILLA + BLANCO +COMA+ antiguedad + BLANCO +COMA+ salario + BLANCO +COMA + sector + COMA + BLANCO + COMILLA + dni + COMILLA +");"
    return corrigeNULL(sql)



def datosTumba():
    """Recoge los datos de una tumba y devuelve una sentencia SQL"""
    
    id_tumba = calculaIDTumba()
    if (id_tumba == -1):
        print "Error en el c�lculo de ID_Tumba"
        return -1
        
    print "ID_Tumba     ---> ", id_tumba
    
    correcto = 0
    cons = imprimeSectores()
    while not(correcto):
        sector = compruebaNULL(raw_input("Sector     ---> "))
        for x in cons.getresult():
            if sector == str(x[0]):
                correcto = 1
        if not (correcto):
            print "Valor incorrecto de sector"    
    
    correcto = 0
    while not (correcto):
        tipo = compruebaNULL(raw_input("Tipo       ---> "))
        if (tipo.lower() == 'nicho'):
            tipo = "Nicho"
            nic_inscripcion = compruebaNULL(raw_input("Inscripci�n     ---> "))
            nic_altura    =   compruebaNULL(raw_input("Altura          ---> "))
            sqlEspec = "insert into Nicho Values (" + str(nic_altura) + COMA + str(id_tumba) + COMA + COMILLA + nic_inscripcion + COMILLA + ");"
            correcto = 1
        elif ((tipo.lower() == 'pante�n') or (tipo.lower() == 'panteon')):
            tipo = "Pante�n"
            
            
            aux = 0
            print "Seleccione Identificador familiar"
            cons = imprimeFamiliares()
            while not(aux):
                pan_familia = compruebaNULL(raw_input("Familia     ---> "))
                for x in cons.getresult():
                    if (str(pan_familia) == str(x[0])):
                        aux = 1
                if not (aux):
                    print "Valor incorrecto de familia"
            
            
            pan_inscripcion = compruebaNULL(raw_input("Inscripci�n     ---> "))
            pan_capacidad = compruebaNULL(raw_input("Capacidad     ---> "))
            sqlEspec = "insert into Panteon Values (" + str(id_tumba) + COMA + str(pan_familia) + COMA + str(pan_capacidad) + COMA + COMILLA +pan_inscripcion+COMILLA+");"
            correcto = 1
        elif ((tipo.lower() == 'fosa com�n') or (tipo.lower() == 'fosa comun')):
            tipo = "Fosa Com�n"
            fos_capacidad = compruebaNULL(raw_input("Capacidad     ---> "))
            sqlEspec = "insert into FosaComun Values (" + str(id_tumba) + COMA + str(fos_capacidad) +");"
            correcto = 1
            
        else:
            print "Valor incorrecto de tipo de tumba"
    
    
    sqlTumba = "insert into Tumba Values (" + str(id_tumba) +COMA + BLANCO +COMILLA+ tipo+COMILLA+ BLANCO + COMA + str(sector) +");"
    
    return corrigeNULL(sqlTumba) ,corrigeNULL(sqlEspec)
    
def datosFactura():
    """Recoge los datos de una factura y devuelve una sentencia SQL"""
    
    
    cantidad   = compruebaNULL(raw_input("Cantidad    ---> "))
    fecha      = compruebaNULL(raw_input("Fecha       ---> "))
    
    aux = 0
    print "Seleccione Identificador familiar"
    cons = imprimeFamiliares()
    
    while not(aux):
        familia = compruebaNULL(raw_input("Familia         ---> "))
        for x in cons.getresult():
            if (str(familia) == str(x[0])):
                aux = 1
        if not (aux):
            print "Valor incorrecto de familia"
    
    aux = 0
    print "Seleccione Identificador de Administrativo"
    cons = imprimeAdministrativos()
    while not(aux):
        administrativo = compruebaNULL(raw_input("Administrativo     ---> "))
        for x in cons.getresult():
            if (str(administrativo) == str(x[0])):
                aux = 1
        if not (aux):
            print "Valor incorrecto de administrativo"
    
    sql = "insert into Factura values ("+cantidad + COMA + COMILLA+fecha+COMILLA + COMA + str(familia) + COMA + COMILLA+administrativo+COMILLA+");"
    
    return corrigeNULL(sql)
    
def datosSector():
    """Recoge los datos de un sector y devuelve una sentencia SQL"""
    id_sector = calculaIDSector()
    if (id_sector == -1):
        print "Error en el c�lculo de ID_Sector"
        return -1
    print "ID_Sector     ---> ", id_sector
    nombre      = compruebaNULL(raw_input("Nombre       ---> "))
    superficie  = compruebaNULL(raw_input("Superficie   ---> "))
    capacidad   = compruebaNULL(raw_input("Capacidad    ---> "))
    
    sql = "insert into Sector values ("+str(id_sector)+COMA+COMILLA+nombre+COMILLA+COMA+str(superficie)+COMA+str(capacidad)+");"
    return corrigeNULL(sql)
    



def datosFamiliar():
    """Recoge los datos de un familiar y devuelve una sentencia SQL"""
    id_familia = calculaIDFamiliar()
    if (id_familia == -1):
        print "Error en el c�lculo de ID_Familia"
        return -1
    print "ID_Familia ---> ", id_familia
    nombre    = compruebaNULL(raw_input("Nombre     ---> "))
    apellidos = compruebaNULL(raw_input("Apellidos  ---> "))
    direccion = compruebaNULL(raw_input("Direcci�n  ---> "))
    telefono  = compruebaNULL(raw_input("Tel�fono   ---> "))
    
    
    sql = "insert into Familiar values (" + COMILLA + nombre + COMILLA + BLANCO +COMA + COMILLA +apellidos + COMILLA +  BLANCO +COMA+ COMILLA +telefono + COMILLA + BLANCO +COMA+ COMILLA +direccion + COMILLA + BLANCO +COMA+ str(id_familia) +");"
    
    return corrigeNULL(sql)

def datosFallecido():
    """Recoge los datos de un fallecido y devuelve una sentencia sql"""
    
    nombre    = compruebaNULL(raw_input("Nombre           ---> "))
    apellidos = compruebaNULL(raw_input("Apellidos        ---> "))
    fecha_nac = compruebaNULL(raw_input("Fecha Nacimiento ---> "))
    fecha_mue = compruebaNULL(raw_input("Fecha Defunci�n  ---> "))
    dni       = compruebaNULL(raw_input("DNI              ---> "))
    
    aux = 0
    print "Seleccione Identificador de Enterrador"
    cons = imprimeEnterradores()
    while not(aux):
        enterrador = compruebaNULL(raw_input("Enterrador     ---> "))
        for x in cons.getresult():
            if (str(enterrador) == str(x[0])):
                aux = 1
        if not (aux):
            print "Valor incorrecto de enterrador"
    
    tipo = raw_input("Tipo de Tumba ---> ")        
    if (tipo.lower() == 'nicho'):
        #Formalizar Factura
        
        print "Seleccione Identificador de Familia"
        cons = imprimeFamiliares()
        sel = raw_input("�Desea a�adir nueva familia? (S/N) ")
        
        cor = 0
        while not(cor):
            if (sel.lower() == 'n'):
            
                aux = 0
                while not(aux):
                    familia = compruebaNULL(raw_input("Familia         ---> "))
                    for x in cons.getresult():
                        if (str(familia) == str(x[0])):
                            aux = 1
                            cor = 1
                    if not (aux):
                        print "Valor incorrecto de familia"
        
            if (sel.lower() == 's'):
                anadirFamiliar()
                cor = 1
        
        if anadirFactura() != EXITO:
            print "Ha ocurrido un error"
            return -1
        
        aux=0
        cons = imprimeNichosLibres()
        while not (aux):
            tumba = compruebaNULL(raw_input("Nicho     ---> "))
            for x in cons.getresult():
                if (str(tumba) == str(x[0])):
                    #Valor correcto. Comprobemos si est� ocupado
                    if (contarMuertosEnTumba(tumba) > 0):
                        print "Nicho ocupado, seleccione otro"
                    else:
                        aux = 1
    
    elif ((tipo.lower() == 'pante�n') or (tipo.lower() == 'panteon')):
        
        #Formalizar Factura
        
        print "Seleccione Identificador de Familia"
        cons = imprimeFamiliares()
        sel = raw_input("�Desea a�adir nueva familia? (S/N) ")
        
        cor = 0
        while not(cor):
            if (sel.lower() == 'n'):
                cor=1
                
        
            elif (sel.lower() == 's'):
                anadirFamiliar()
                cor = 1
        
        if anadirFactura() != EXITO:
            print "Ha ocurrido un error"
            return -1
        
        aux=0        
        cons = imprimePanteones()
        while not (aux):
            tumba = compruebaNULL(raw_input("Pante�n     ---> "))
            for x in cons.getresult():
                if (str(tumba) == str(x[0])):
                    #Valor correcto. Comprobemos si pertenece a la familia
                    paux = 0
                    cons2 = imprimeFamiliares()
                    while not(paux):
                        familia = compruebaNULL(raw_input("Familia         ---> "))
                        for x in cons2.getresult():
                            if (str(familia) == str(x[0])):
                                paux = 1
                                cor = 1
                        if not (paux):
                            print "Valor incorrecto de familia"
                            
                    if (perteneceFamilia(tumba,familia)==1):
                        if (contarMuertosEnTumba(tumba) == capacidad(tumba, 'panteon')):
                            print "Pante�n ocupado, seleccione otro"
                        else:
                            aux = 1
                    else:
                        print "No tiene acceso a este pante�n"
        
        
        
    elif ((tipo.lower() == 'fosa com�n') or (tipo.lower() == 'fosa comun')):
        aux = 0
        familia=compruebaNULL('')
        cons=imprimeFosas()
        while not (aux):
            tumba = compruebaNULL(raw_input("Fosa Com�n     ---> "))
            for x in cons.getresult():
                if (str(tumba) == str(x[0])):
                    #Valor correcto, comprobemos si est� lleno
                    if (contarMuertosEnTumba(tumba) == capacidad(tumba, 'fosacomun')):
                        print "Fosa completa, seleccione otra"
                    else:
                        aux = 1
                    
                    
                    
                    
    sql= "insert into Fallecido values ("+COMILLA+nombre+COMILLA+ COMA +COMILLA+apellidos+COMILLA+ COMA + COMILLA+fecha_nac+COMILLA+ COMA + COMILLA+ fecha_mue+COMILLA +COMA+ COMILLA+enterrador+COMILLA + COMA+ str(familia)+COMA+str(tumba)+COMA+dni+");"
            
    return corrigeNULL(sql)                
    

def anadirTumba():
    """A�ade una tumba a la BD"""
    limpiarPantalla()
    db = conectarBD()
    if (db != -1):
        try:
            sqlTumba, sqlEspec = datosTumba()
            guardarLinea(sqlTumba)
            guardarLinea(sqlEspec)
            ejecutaSQL(sqlTumba,db)
            ejecutaSQL(sqlEspec,db)
            db.close()
            raw_input ("""Presione INTRO para continuar""")
            return EXITO
        except:
            print """Errores a�adiendo Tumbas"""
            try:
                db.close()
            except:
                pass
            raw_input ("""Presione INTRO para continuar""")
            return -2
    else:
        return -1
    
    
def anadirFamiliar():
    """A�ade un familiar a la BD"""
    limpiarPantalla()
    db = conectarBD()
    if (db != -1):
        try:
            sql = datosFamiliar()
            guardarLinea(sql)
            ejecutaSQL(sql,db)
            db.close()
            raw_input ("""Presione INTRO para continuar""")
            return EXITO
        except:
            print """Errores a�adiendo Familiar"""
            try:
                db.close()
            except:
                pass
            raw_input ("""Presione INTRO para continuar""")
            return -2
    else:
        return -1    
        
def anadirSector():
    """A�ade un Sector a la BD"""
    limpiarPantalla()
    db = conectarBD()
    if (db != -1):
        try:
            sql = datosSector()
            guardarLinea(sql)
            ejecutaSQL(sql,db)
            db.close()
            raw_input ("""Presione INTRO para continuar""")
            return EXITO
        except:
            print """Errores a�adiendo Sector"""
            try:
                db.close()
            except:
                pass
            raw_input ("""Presione INTRO para continuar""")
            return -2
    else:
        return -1    

def anadirEnterrAdminis(tipo):
    """A�ade un Enterrador/Administrativo a la BD"""
    limpiarPantalla()
    print """A�adiendo """ + tipo
    db = conectarBD()
    if (db != -1):
        try:
            sql = datosEnterrAdminis(tipo)
            guardarLinea(sql)
            ejecutaSQL(sql,db)
            db.close()
            raw_input ("""Presione INTRO para continuar""")
            return EXITO
        except:
            print """Errores a�adiendo """ + tipo
            try:
                db.close()
            except:
                pass
            raw_input ("""Presione INTRO para continuar""")
            return -2
    else:
        return -1

def anadirJardinero():
    """A�ade un Jardinero a la BD"""
    #Conexi�n a la BBDD
    limpiarPantalla()
    print """A�adiendo Jardinero"""
    db = conectarBD()
    if (db != -1):
        try:
            sql = datosJardinero()
            guardarLinea(sql)
            ejecutaSQL(sql,db)
            db.close()
            raw_input ("""Presione INTRO para continuar""")
            return EXITO
        except:
            print """Errores a�adiendo Jardinero"""
            try:
                db.close()
            except:
                pass
            raw_input ("""Presione INTRO para continuar""")
            return -2
    else:
        return -1

def anadirFactura():
    """A�ade una Factura a la BD"""
    limpiarPantalla()
    print """A�adiendo Factura"""
    db = conectarBD()
    if (db != -1):
        try:
            sql = datosFactura()
            guardarLinea(sql)
            ejecutaSQL(sql,db)
            db.close()
            raw_input ("""Presione INTRO para continuar""")
            return EXITO
        except:
            print """Errores a�adiendo Factura"""
            try:
                db.close()
            except:
                pass
            raw_input ("""Presione INTRO para continuar""")
            return -2
    else:
        return -1


def anadirFallecido():
    """A�ade un Fallecido a la BD"""
    limpiarPantalla()
    print """A�adiendo Fallecido"""
    db = conectarBD()
    if (db != -1):
        try:
            sql = datosFallecido()
            guardarLinea(sql)
            ejecutaSQL(sql,db)
            db.close()
            raw_input ("""Presione INTRO para continuar""")
            return EXITO
        except:
            print """Errores a�adiendo Fallecido"""
            try:
                db.close()
            except:
                pass
            raw_input ("""Presione INTRO para continuar""")
            return -2
    else:
        return -1
def limpiarPantalla():
    for x in range(50):
        print '\n'

def anadirDatos():
    def MenuAnadirDatos():
        limpiarPantalla()
        titulo  = '- A�adir Datos -'
        opcion1 = '1.- A�adir Enterradores'
        opcion2 = '2.- A�adir Administrativos'
        opcion3 = '3.- A�adir Jardineros'
        opcion4 = '4.- A�adir Tumbas'
        opcion5 = '5.- A�adir Sectores'
        opcion6 = '6.- A�adir Familiar'
        opcion7 = '7.- A�adir Facturas'
        opcion8 = '8.- A�adir Fallecidos'
        opcion0 = '0.- Salir'
        for x in range(30):
            print '-',
        print '\n\n\n'
        print opcion1.center(60)
        print opcion2.center(60)
        print opcion3.center(60)
        print opcion4.center(60)
        print opcion5.center(60)
        print opcion6.center(60)
        print opcion7.center(60)
        print opcion8.center(60)
        print
        print opcion0.center(60)
        print '\n\n\n'
        opc = raw_input ('Seleccione una opci�n >>> ')
        #while (opc!='0'):
        if (opc=='1'):
            anadirEnterrAdminis('Enterrador')
            MenuAnadirDatos()
        elif (opc=='2'):
            anadirEnterrAdminis('Administrativo')
            MenuAnadirDatos()
        elif (opc=='3'):
            anadirJardinero()
            MenuAnadirDatos()
        elif (opc =='4'):
            anadirTumba()
            MenuAnadirDatos()
        elif (opc =='5'):
            anadirSector()
            MenuAnadirDatos()
        elif (opc =='6'):
            anadirFamiliar()
            MenuAnadirDatos()    
        elif (opc =='7'):
            anadirFactura()
            MenuAnadirDatos()    
        elif (opc =='8'):
            anadirFallecido()
            MenuAnadirDatos()
        elif (opc=='0'):
            #MenuAnadirDatos()
            return EXITO
        else:
            MenuAnadirDatos()    

    MenuAnadirDatos()


def Menu():
    """Dibuja Men� principal"""
    limpiarPantalla()
    titulo = 'PyCemen'
    opcion1= '1.- A�adir datos'
    opcion0= '0.- Salir'
    for x in range(30):
        print '-',
    print '\n'
    print titulo.center(60)
            
    for x in range(30):
        print '-',
    print '\n\n\n'
    print opcion1.center(60)
    print opcion0.center(60)
    print '\n\n\n'
    opc = raw_input ('Seleccione una opci�n >>> ')
    #while (opc !='0'):
    if (opc=='1'):
        anadirDatos()
        Menu()
    elif (opc=='0'):
        return EXITO
    else:
        Menu()
    
    

def run():
    """Rutina principal"""
    
    Menu()
    
            


if __name__=='__main__':
    run()