def __init__(self):
     self.malla = Malla()
     self.nota = Nota()
     self.salon = Salon()
     self.periodo = Periodo()
     self.profesor_curso = Profesor_curso()
     self.salir = False
Esempio n. 2
0
 def __init__(self):
     self.profesor = Profesor()
     self.curso = Curso()
     self.profesor_curso = Profesor_curso()
     self.salon = Salon()
     self.profesor_salon = Profesor_salon()
     self.salir = False
Esempio n. 3
0
 def __init__(self):
     self.alumno = Alumno()
     self.curso = Curso()
     self.profesor_curso = Profesor_curso()
     self.periodo = Periodo()
     self.nota = Nota()
     self.salir = False
Esempio n. 4
0
class Profesores_controller:
    def __init__(self):
        self.profesor = Profesor()
        self.curso = Curso()
        self.profesor_curso = Profesor_curso()
        self.salon = Salon()
        self.profesor_salon = Profesor_salon()
        self.salir = False

    def menu(self):
        while True:
            try:
                print('''
                ===================
                    Profesores
                ===================
                ''')
                menu = [
                    'Listar profesores', 'Buscar profesor', "Nuevo profesor",
                    "Salir"
                ]
                respuesta = Menu(menu).show()

                if respuesta == 1:
                    self.listar_profesores()
                elif respuesta == 2:
                    self.buscar_profesor()
                elif respuesta == 3:
                    self.insertar_profesor()
                else:
                    self.salir = True
                    break
            except Exception as e:
                print(f'{str(e)}')

    def listar_profesores(self):
        print('''
        ===========================
            Lista de Profesores
        ===========================
        ''')
        profesores = self.profesor.obtener_profesores('profesor_id')
        print(print_table(profesores, ['ID', 'Nombre', 'Edad', 'Correo']))
        input("\nPresione una tecla para continuar...")

    def buscar_profesor(self):
        print('''
        ===========================
            Buscar Profesor
        ===========================
        ''')
        try:
            id_profesor = input_data("Ingrese el ID del profesor >> ", "int")
            profesor = self.profesor.obtener_profesor(
                {'profesor_id': id_profesor})
            print(print_table(profesor, ['ID', 'Nombre', 'Edad', 'Correo']))

            if profesor:
                if pregunta(
                        f"¿Deseas dar mantenimiento al registro profesor '{profesor[1]}'?"
                ):
                    opciones = [
                        'Asignar curso', 'Asignar salon', 'Editar profesor',
                        'Eliminar profesor', 'Salir'
                    ]
                    respuesta = Menu(opciones).show()
                    if respuesta == 1:
                        self.asignar_curso(id_profesor, profesor)
                    elif respuesta == 2:
                        self.asignar_salon(id_profesor, profesor)
                    elif respuesta == 3:
                        self.editar_profesor(id_profesor)
                    elif respuesta == 4:
                        self.eliminar_profesor(id_profesor)
        except Exception as e:
            print(f'{str(e)}')
        input("\nPresione una tecla para continuar...")

    def insertar_profesor(self):
        nombre = input_data("Ingrese el nombre del profesor >> ")
        edad = input_data("Ingrese la edad del profesor >> ")
        correo = input_data("Ingrese el correo del profesor >> ")
        self.profesor.guardar_profesor({
            'nombres': nombre,
            'edad': edad,
            'correo': correo
        })
        print('''
        =================================
            Nuevo Profesor agregado !
        =================================
        ''')
        self.listar_profesores()

    def editar_profesor(self, id_profesor):
        nombre = input_data("Ingrese el nuevo nombre del profesor >> ")
        edad = input_data("Ingrese la nueva edad del profesor >> ")
        correo = input_data("Ingrese el nuevo correo del profesor >> ")
        self.profesor.modificar_profesor({'profesor_id': id_profesor}, {
            'nombres': nombre,
            'edad': edad,
            'correo': correo
        })
        print('''
        ==========================
            Profesor Editado !
        ==========================
        ''')

    def eliminar_profesor(self, id_profesor):
        self.profesor.eliminar_profesor({'profesor_id': id_profesor})
        print('''
        ===========================
            Profesor Eliminado !
        ===========================
        ''')

    def asignar_curso(self, id_profesor, profesor):
        print(f'\n Asignación de cursos para el profesor : {profesor[1]}')
        print('''
            ============================
                Curso disponibles
            ============================
        ''')
        cursos = self.curso.obtener_cursos('curso_id')
        cursos_disponibles = []

        if cursos:
            for curso in cursos:
                id_curso = curso[0]
                nombre_curso = curso[1]
                cursos_profesor = self.profesor_curso.buscar_profesor_cursos({
                    'id_profesor':
                    id_profesor,
                    'id_curso':
                    id_curso
                })
                if not cursos_profesor:
                    cursos_disponibles.append({
                        'id':
                        id_curso,
                        'Cursos disponibles':
                        nombre_curso
                    })

            print(print_table(cursos_disponibles))
            curso_seleccionado = input_data(
                f'\nSeleccione el ID del curso a asignar al profesor: {profesor[1]} >> ',
                'int')
            buscar_curso = self.curso.obtener_curso(
                {'curso_id': curso_seleccionado})
            if not buscar_curso:
                print('\nEste curso no existe !')
                return
            cursos_profesor = self.profesor_curso.buscar_profesor_cursos({
                'id_profesor':
                id_profesor,
                'id_curso':
                curso_seleccionado
            })
            if cursos_profesor:
                print('\nEste curso ya esta asignado al profesor !')
                return
            self.profesor_curso.guardar_profesor_curso({
                'id_profesor':
                id_profesor,
                'id_curso':
                curso_seleccionado
            })
            print('''
                ==============================
                    Nuevo curso asignado !
                ==============================
            ''')

    def asignar_salon(self, id_profesor, profesor):
        print(f'\n Asignación de salones para el profesor : {profesor[1]}')
        print('''
            ============================
                Salones disponibles
            ============================
        ''')
        salon = self.salon.obtener_salones('id_salon')
        salon_disponibles = []

        if salon:
            for salones in salon:
                id_salon = salones[0]
                grado_salon = salones[1]
                nombre_salon = salones[2]
                salon_profesor = self.profesor_salon.buscar_profesor_salones({
                    'id_profesor':
                    id_profesor,
                    'id_salon':
                    id_salon
                })
                if not salon_profesor:
                    salon_disponibles.append({
                        'id': id_salon,
                        'Salones disponibles': grado_salon,
                        'Nombre Salon': nombre_salon
                    })

            print(print_table(salon_disponibles))

            salon_seleccionado = input_data(
                f'\nSeleccione el ID del salon a asignar al profesor: {profesor[1]} >> ',
                'int')
            buscar_salon = self.salon.obtener_salon(
                {'id_salon': salon_seleccionado})
            if not buscar_salon:
                print('\nEste curso no existe !')
                return
            salon_profesor = self.profesor_salon.buscar_profesor_salones({
                'id_profesor':
                id_profesor,
                'id_salon':
                salon_seleccionado
            })
            if salon_profesor:
                print('\nEste curso ya esta asignado al profesor !')
                return
            self.profesor_salon.guardar_profesor_salon({
                'id_profesor':
                id_profesor,
                'id_salon':
                salon_seleccionado
            })
            print('''
                ==============================
                    Nuevo salon asignado !
                ==============================
            ''')
Esempio n. 5
0
class Habilitar_controller:
    def __init__(self):
        self.profesor = Profesor()
        self.curso = Curso()
        self.profesor_curso = Profesor_curso()
        self.periodo = Periodo()
        self.salon = Salon()
        self.malla = Malla()
        self.salir = False

    def menu(self):
        while True:
            try:
                print('''
                =======================
                    Habilitar Cursos
                =======================
                ''')
                menu = ["Habilitar salon", "Salir"]
                respuesta = Menu(menu).show()
                if respuesta == 1:
                    self.habilitar_salones()
                else:
                    self.salir = True
                    break
            except Exception as e:
                print(f'{str(e)}')


    def habilitar_salones(self):
        print('''
        =============================================
            Habilitar curso por salones y periodo
        =============================================
        ''')
        print('De la siguiente lista elija el periodo que se habilitara >>\n')
        periodos = self.periodo.obtener_periodos('id_periodo')
        print(print_table(periodos, ['ID', 'Nombre', 'Desde', 'Hasta']))
        id_periodo_elegido = input_data("\nEscriba el ID del periodo escolar >> ", "int")
        buscar_periodo = self.periodo.obtener_periodo({'id_periodo': id_periodo_elegido})
        if not buscar_periodo:
            print('\nEl periodo elegido no existe !')
            return
        print(f'\nElija el salon para el periodo: {buscar_periodo[1]} >> ')
        salones = self.salon.obtener_salones('id_salon')
        print(print_table(salones, ['ID', 'Nombre']))
        id_salon_elegido = input_data("\nEscriba el ID del salon >> ", "int")
        buscar_salon = self.salon.obtener_salon({'id_salon': id_salon_elegido})
        if not buscar_salon:
            print('\nEl salon elegido no existe !')
            return
        print(f'\nElija el curso a habilitar para el salon: {buscar_salon[1]} >> ')
        cursos_profesores = self.profesor_curso.obtener_profesor_cursos('id_profesor_curso')
        cursos_disponibles = []
        if cursos_profesores:
            for pro_cur in cursos_profesores:
                curso_id = pro_cur[2]
                profesor_id = pro_cur[1]
                id_profesor_curso = pro_cur[0]
                curso = self.curso.obtener_curso({'curso_id': curso_id})
                curso_nombre = curso[1]
                profesor = self.profesor.obtener_profesor({'profesor_id': profesor_id})
                profesor_nombre = profesor[1]
                mallas = self.malla.buscar_mallas({
                    'id_periodo': id_periodo_elegido,
                    'id_salon': id_salon_elegido,
                    'id_profesor_curso': id_profesor_curso
                })
                if not mallas:
                    cursos_disponibles.append({
                        'codigo': id_profesor_curso,
                        'curso': curso_nombre,
                        'profesor_asignado': profesor_nombre
                    })
                else:
                    for curso_disponible in cursos_disponibles:
                        if curso_disponible['curso'] == curso_nombre:
                            cursos_disponibles.remove(curso_disponible)

        print(print_table(cursos_disponibles))
        id_profesor_curso = input_data('\nEscriba el codigo del curso disponible >> ', 'int')
        buscar_profesor_curso = self.profesor_curso.obtener_profesor_curso({'id_profesor_curso': id_profesor_curso})
        if not buscar_profesor_curso:
            print('\nEl codigo escogido no existe como curso disponible')
            return
        mallas = self.malla.buscar_mallas({
            'id_periodo': id_periodo_elegido,
            'id_salon': id_salon_elegido
        })
        if mallas:
            for malla in mallas:
                pro_curso = self.profesor_curso.obtener_profesor_curso({'id_profesor_curso': malla[3]})
                if pro_curso[2] == buscar_profesor_curso[2]:
                    print('\nEste curso ya existe para el salon en el periodo escogido !')
                    return
        self.malla.guardar_malla({
            'id_periodo': id_periodo_elegido,
            'id_salon': id_salon_elegido,
            'id_profesor_curso': id_profesor_curso
        })
        print('''
        =============================================================
            Curso habilitado con exito para el salon y el periodo
        =============================================================
        ''')
        input('\nPresione una tecla para continuar...')
Esempio n. 6
0
class Malla_controller:
    def __init__(self):
        self.malla = Malla()
        self.periodo = Periodo()
        self.salon = Salon()
        self.profesor_curso = Profesor_curso()

    def menu(self):
        while True:
            try:
                print('''
                =============
                    Malla
                =============
                ''')
                menu = ['Listar malla', 'Buscar malla', "Nueva malla", "Salir"]
                respuesta = Menu(menu).show()

                if respuesta == 1:
                    self.listar_mallas()
                elif respuesta == 2:
                    self.buscar_malla()
                elif respuesta == 3:
                    self.insertar_malla()
                else:
                    self.salir = True
                    break
            except Exception as e:
                print(f'{str(e)}')

    def listar_mallas(self):
        print('''
        ========================
            Lista de Mallas
        ========================
        ''')
        mallas = self.malla.obtener_mallas('malla_id')
        print(
            print_table(mallas,
                        ['ID', 'ID Periodo', 'ID Salon', 'ID Profesor-Curso']))
        input("\nPresione una tecla para continuar...")

    def buscar_malla(self):
        print('''
        ===========================
            Buscar Malla
        ===========================
        ''')
        try:
            id_malla = input_data("Ingrese el ID de la malla >> ", "int")
            malla = self.malla.obtener_malla({'malla_id': id_malla})
            print(
                print_table(
                    malla,
                    ['ID', 'ID Periodo', 'ID Salon', 'ID Profesor-Cursor']))

            if malla:
                if pregunta("¿Deseas dar mantenimiento a la malla?"):
                    opciones = ['Editar malla', 'Eliminar malla', 'Salir']
                    respuesta = Menu(opciones).show()
                    if respuesta == 1:
                        self.editar_malla(id_malla)
                    elif respuesta == 2:
                        self.eliminar_malla(id_malla)
        except Exception as e:
            print(f'{str(e)}')
        input("\nPresione una tecla para continuar...")

    def editar_malla(self, id_malla):
        id_periodo = input_data("Ingrese el nuevo ID Periodo >> ")
        id_salon = input_data("Ingrese el nuevo ID Salon >> ")
        id_profesor_curso = input_data(
            "Ingrese el nuevo ID Profesor-Curso >> ")
        self.malla.modificar_malla({'malla_id': id_malla}, {
            'id_periodo': id_periodo,
            'id_salon': id_salon,
            'id_profesor_curso': id_profesor_curso
        })
        print('''
        ==========================
            Malla Editada !
        ==========================
        ''')

    def eliminar_malla(self, id_malla):
        self.malla.eliminar_malla({'malla_id': id_malla})
        print('''
        ===========================
            Malla Eliminada !
        ===========================
        ''')

    def listar_profesor_cursos(self):
        print('''
        ==================================================
            Lista de Asignaciones del Profesor a Curso
        ==================================================
        ''')
        profesor_cursos = self.profesor_curso.obtener_profesor_cursos(
            'profesor_curso_id')
        print(print_table(profesor_cursos, ['ID', 'ID Profesor', 'ID Curso']))

    def insertar_malla(self):
        self.listar_periodos()
        id_periodo = input_data(
            "Ingrese el ID del Periodo en el se habilitará la nueva malla >> ")
        self.listar_salones()
        id_salon = input_data(
            "Ingrese el ID del Salón al que asignara el curso con el respctivo profesor >> "
        )
        self.listar_profesor_cursos()
        id_profesor_curso = input_data(
            "Ingrese el ID del Profesor-Curso que asignará al Salón ya seleccionado >> "
        )
        self.malla.guardar_malla({
            'id_periodo': id_periodo,
            'id_salon': id_salon,
            'id_profesor_curso': id_profesor_curso
        })
        print('''
        =================================
            Nueva Malla Generada !
        =================================
        ''')
        self.listar_mallas()
Esempio n. 7
0
class Periodo_controller:
    def __init__(self):
        self.periodo = Periodo()
        self.profesor_curso = Profesor_curso()
        self.profesor = Profesor()
        self.malla = Malla()
        self.curso = Curso()
        self.salon = Salon()
        self.salir = False

    def menu(self):
        while True:
            try:
                print('''
                ===============
                    Periodos
                ===============
                ''')
                menu = [
                    'Listar periodos', 'Buscar periodo', "Nuevo periodo",
                    "Salir"
                ]
                respuesta = Menu(menu).show()

                if respuesta == 1:
                    self.listar_periodo()
                elif respuesta == 2:
                    self.buscar_periodo()
                elif respuesta == 3:
                    self.insertar_periodo()
                else:
                    self.salir = True
                    break
            except Exception as e:
                print(f'{str(e)}')

    def listar_periodo(self):
        print('''
        ========================
            Lista de Periodos
        ========================
        ''')
        periodo = self.periodo.obtener_periodos('id_periodo')
        print(
            print_table(periodo, ['ID', 'Periodo', 'Inicio', 'Fin', 'Estado']))
        input("\nPresione una tecla para continuar...")

    def buscar_periodo(self):
        print('''
        =====================
            Buscar Periodo
        =====================
        ''')
        try:
            id_periodo = input_data("Ingrese el ID del periodo >> ", "int")
            periodo = self.periodo.obtener_periodo({'id_periodo': id_periodo})
            print(
                print_table(periodo,
                            ['ID', 'Periodo', 'Inicio', 'Fin', 'Estado']))

            if periodo:
                if pregunta("¿Deseas dar mantenimiento a este periodo?"):
                    opciones = [
                        'Asignar una malla al periodo escolar',
                        'Editar periodo escolar', 'Eliminar periodo escolar',
                        'Aperturar periodo escolar', 'Cerrar periodo escolar',
                        'Salir'
                    ]
                    respuesta = Menu(opciones).show()
                    if respuesta == 1:
                        self.agregar_malla(id_periodo, periodo)
                    elif respuesta == 2:
                        self.editar_periodo(id_periodo)
                    elif respuesta == 3:
                        self.eliminar_periodo(id_periodo)
                    elif respuesta == 4:
                        self.aperturar_periodo(id_periodo)
                    elif respuesta == 5:
                        self.cerrar_periodo(id_periodo)
        except Exception as e:
            print(f'{str(e)}')
        input("\nPresione una tecla para continuar...")

    def insertar_periodo(self):
        nombre_periodo = input_data("Ingrese el nombre del periodo >> ")
        fecha_desde = input_data("Ingrese desde cuando inicia el periodo >> ")
        fecha_hasta = input_data(
            "Ingrese hasta cuando finaliza el periodo >> ")
        self.periodo.guardar_periodo({
            'nombre_periodo': nombre_periodo,
            'fecha_desde': fecha_desde,
            'fecha_hasta': fecha_hasta
        })
        print('''
        ==============================
            Nuevo Periodo agregado !
        ==============================
        ''')
        self.listar_periodo()

    def editar_periodo(self, id_periodo):
        nombre_periodo = input_data("Ingrese el nuevo nombre del periodo >> ")
        fecha_desde = input_data(
            "Ingrese desde cuando inicia el nuevo periodo >> ")
        fecha_hasta = input_data(
            "Ingrese hasta cuando finaliza el nuevo periodo >> ")
        self.periodo.modificar_periodo({'id_periodo': id_periodo}, {
            'nombre_periodo': nombre_periodo,
            'fecha_desde': fecha_desde,
            'fecha_hasta': fecha_hasta
        })
        print('''
        ========================
            Periodo Editado !
        ========================
        ''')

    def cerrar_periodo(self, id_periodo):
        periodo = self.periodo.obtener_periodo({'id_periodo': id_periodo})
        if pregunta(f'¿Seguro que desea cerrar el periodo {periodo[1]}?'):
            self.periodo.modificar_periodo({'id_periodo': id_periodo},
                                           {'estado_periodo': 'cerrado'})
            print('''
            ========================
                Periodo Editado !
            ========================
        ''')

    def aperturar_periodo(self, id_periodo):
        periodo = self.periodo.obtener_periodo({'id_periodo': id_periodo})
        if pregunta(f'¿Seguro que desea aperturar el periodo {periodo[1]}?'):
            self.periodo.modificar_periodo({'id_periodo': id_periodo},
                                           {'estado_periodo': 'aperturado'})
            print('''
            ========================
                Periodo Editado !
            ========================
        ''')

    def eliminar_periodo(self, id_periodo):
        self.periodo.eliminar_periodo({'id_periodo': id_periodo})
        print('''
        ========================
            Periodo Eliminado !
        ========================
        ''')

    def agregar_malla(self, id_periodo, periodo):
        print(
            f'\n Por favor elige el grado o salón para el que desea trabajar su malla curricular :'
        )
        salon_seleccionado = []
        salones_1 = self.salon.obtener_salones('id_salon')
        print(print_table(salones_1, ['ID', 'Salón', 'Nombre del Salon']))
        id_salon_seleccionado = input_data(
            "Seleccione el ID del salón a trabajar su malla: >> ", "int")
        salon_seleccionado = self.salon.obtener_salon(
            {'id_salon': id_salon_seleccionado})
        print(
            f'\n Creación de la malla curricular para el periodo : {periodo[1]} y salón: {salon_seleccionado[1]}'
        )
        print(f'''
            =======================================================
                Malla curricular del Salón: {salon_seleccionado[1]}
            =======================================================
        ''')
        #malla_periodo = self.malla.obtener_malla({'id_periodo': id_periodo,'id_salon': id_salon_seleccionado})
        malla_periodo = self.malla.obtener_malla({
            'id_periodo':
            id_periodo,
            'id_salon':
            id_salon_seleccionado
        })
        print(
            print_table(malla_periodo,
                        ['ID', 'ID_Periodo', 'ID_salon', 'ID_Profesor']))
        mallas_imprimir = []
        if malla_periodo:
            for v in malla_periodo:
                id_malla = v[0]
                id_periodo1 = v[1]
                id_salon1 = v[2]
                id_profesor_curso1 = v[3]
                nomb_periodo = self.periodo.obtener_periodo(
                    {'id_periodo': id_periodo1})
                if not nomb_periodo:
                    nomb_periodo = ''
                nomb_salon = self.salon.obtener_salon({'id_salon': id_salon1})
                if not nomb_salon:
                    nomb_salon = ''
                nomb_profesor_curso = self.profesor_curso.obtener_profesor_curso(
                    {'id_profesor_curso': id_profesor_curso1})
                if not nomb_profesor_curso:
                    nomb_profesor_curso = ''
                    break
                nombre_profe = self.profesor.obtener_profesor(
                    {'profesor_id': nomb_profesor_curso[1]})
                if not nombre_profe:
                    nombre_profe = ''
                nombre_curso1 = self.curso.obtener_curso(
                    {'curso_id': nomb_profesor_curso[2]})
                if not nombre_curso1:
                    nombre_curso1 = ''
                mallas_imprimir.append({
                    'id': id_malla,
                    'Periodo': nomb_periodo[1],
                    'Salon': nomb_salon[1],
                    'Profesor': nombre_profe[1],
                    'Curso': nombre_curso1[1],
                    'Codigo_curso_profe': id_profesor_curso1
                })
            print(print_table(mallas_imprimir))

            if pregunta(
                    f'¿Deseas ver la relación de cursos dictados por profesores?'
            ):
                curso_profe_1 = self.profesor_curso.obtener_profesor_cursos(
                    'id_profesor_curso')
                print(print_table(curso_profe_1, ['ID', 'Profesor', 'Curso']))

            else:
                curso_profe_1 = []
            id_curso_profe_seleccionado = input_data(
                "Seleccione el código profesor curso : >> ", "int")
            self.malla.guardar_malla({
                'id_periodo':
                id_periodo,
                'id_salon':
                id_salon_seleccionado,
                'id_profesor_curso':
                id_curso_profe_seleccionado
            })
            print('''
                ==============================
                    Malla agregada !
                ==============================
            ''')
Esempio n. 8
0
class Notas_controller:
    def __init__(self):
        self.profesor = Profesor()
        self.curso = Curso()
        self.profesor_curso = Profesor_curso()
        self.periodo = Periodo()
        self.salon = Salon()
        self.malla = Malla()
        self.nota = Nota()
        self.alumno = Alumno()
        self.salir = False

    def menu(self):
        while True:
            try:
                print('''
                ========================
                   Registro de Notas
                ========================
                ''')
                menu = ["Listado de notas", "Registrar notas", "Salir"]
                respuesta = Menu(menu).show()
                if respuesta == 1:
                    self.listar_notas()
                elif respuesta == 2:
                    self.registrar_notas()
                else:
                    self.salir = True
                    break
            except Exception as e:
                print(f'{str(e)}')

    def listar_notas(self):
        print('''
        ========================
            Listado de Notas
        ========================
        ''')
        notas = self.nota.obtener_notas('id_nota')
        lista_notas = []
        if notas:
            for nota in notas:
                buscar_alumno = self.alumno.obtener_alumno(
                    {'alumno_id': nota[1]})
                buscar_malla = self.malla.obtener_malla({'id_malla': nota[2]})
                nota_calificacion = nota[3]
                periodo = self.periodo.obtener_periodo(
                    {'id_periodo': buscar_malla[1]})
                salon = self.salon.obtener_salon({'id_salon': buscar_malla[2]})
                profesor_curso = self.profesor_curso.obtener_profesor_curso(
                    {'id_profesor_curso': buscar_malla[3]})
                curso = self.curso.obtener_curso(
                    {'curso_id': profesor_curso[2]})
                profesor = self.profesor.obtener_profesor(
                    {'profesor_id': profesor_curso[1]})
                lista_notas.append(
                    (nota[0], buscar_alumno[1], periodo[1], salon[1], curso[1],
                     profesor[1], nota_calificacion))
        print(
            print_table(lista_notas, [
                'ID', 'Alumno', 'Periodo Escolar', 'Salon', 'Curso',
                'Profesor', 'Nota'
            ]))
        input("\nPresione una tecla para continuar...")

    def registrar_notas(self):
        print('''
        ===================================================
            Registro de notas para los alumnos por salon
        ===================================================
        ''')
        print('Eliga el alumno que se le asignara una nota >> \n')
        alumnos = self.alumno.obtener_alumnos('alumno_id')
        print(print_table(alumnos, ['ID', 'Nombres', 'Edad', 'Correo']))
        id_alumno_elegido = input_data('\nEscriba el ID del alumno >> ', 'int')
        buscar_alumno = self.alumno.obtener_alumno(
            {'alumno_id': id_alumno_elegido})
        if not buscar_alumno:
            print('\nEl alumno elegido no existe !')
            return
        print(
            f'\nElija el curso y periodo a ser añadido a {buscar_alumno[1]} >> '
        )
        mallas = self.malla.obtener_mallas('id_malla')
        lista_mallas = []
        if mallas:
            for malla in mallas:
                periodo = self.periodo.obtener_periodo(
                    {'id_periodo': malla[1]})
                salon = self.salon.obtener_salon({'id_salon': malla[2]})
                profesor_curso = self.profesor_curso.obtener_profesor_curso(
                    {'id_profesor_curso': malla[3]})
                curso = self.curso.obtener_curso(
                    {'curso_id': profesor_curso[2]})
                profesor = self.profesor.obtener_profesor(
                    {'profesor_id': profesor_curso[1]})
                notas_agregadas = self.nota.buscar_notas({
                    'id_alumno': id_alumno_elegido,
                    'id_malla': malla[0]
                })
                if not notas_agregadas:
                    lista_mallas.append((malla[0], periodo[1], salon[1],
                                         curso[1], profesor[1]))

        print(
            print_table(
                lista_mallas,
                ['Codigo', 'Periodo Escolar', 'Salon', 'Curso', 'Profesor']))
        id_malla_elegida = input_data('\nEscriba el codigo de la malla >> ',
                                      'int')
        buscar_malla = self.malla.obtener_malla({'id_malla': id_malla_elegida})
        if not buscar_malla:
            print('\nEsta malla no existe !')
            return
        notas_alumnos = self.nota.buscar_notas({
            'id_alumno': id_alumno_elegido,
            'id_malla': id_malla_elegida
        })
        if notas_alumnos:
            print(
                f'\nYa existe una nota para el alumno {buscar_alumno[1]} en el curso seleccionado !'
            )
            return
        periodo = self.periodo.obtener_periodo({'id_periodo': buscar_malla[1]})
        salon = self.salon.obtener_salon({'id_salon': buscar_malla[2]})
        profesor_curso = self.profesor_curso.obtener_profesor_curso(
            {'id_profesor_curso': buscar_malla[3]})
        curso = self.curso.obtener_curso({'curso_id': profesor_curso[2]})
        profesor = self.profesor.obtener_profesor(
            {'profesor_id': profesor_curso[1]})
        while True:
            print(f'\nAlumno:   {buscar_alumno[1]}')
            print(f'Periodo:    {periodo[1]}')
            print(f'Salon:      {salon[1]}')
            print(f'Profesor:   {profesor[1]}')
            print(f'Curso:      {curso[1]}')
            nota_ingresada = input_data('\nNota: >> ', 'int')
            if nota_ingresada > 20:
                print("La nota ingresada debe ser menor a 20!")
            else:
                break
        self.nota.guardar_nota({
            'id_alumno': id_alumno_elegido,
            'id_malla': id_malla_elegida,
            'nota': nota_ingresada
        })
        print('''
        ==============================
            Se califico al alumno !
        ==============================
        ''')
        input("\nPresione una tecla para continuar...")
class Malla_curricular_controller:
    def __init__(self):
        self.malla = Malla()
        self.nota = Nota()
        self.salon = Salon()
        self.periodo = Periodo()
        self.profesor_curso = Profesor_curso()
        self.salir = False

    def menu(self):
        while True:
            try:
                print('''
                ========================
                    Malla Curricular
                ========================
                ''')
                menu = [
                    'Listar malla curricular', 'Buscar malla curricular',
                    'Nueva malla curricular', "Salir"
                ]
                respuesta = Menu(menu).show()

                if respuesta == 1:
                    self.listar_malla()
                elif respuesta == 2:
                    self.buscar_malla()
                elif respuesta == 3:
                    self.insertar_malla()
                else:
                    self.salir = True
                    break
            except Exception as e:
                print(f'{str(e)}')

    def listar_malla(self):
        print('''
        ==================================
            Lista de Malla Curricular
        ==================================
        ''')
        malla = self.malla.obtener_mallas('id_malla')
        print(
            print_table(
                malla,
                ['id_malla', 'id_periodo', 'id_salon', 'id_profesor_curso']))
        input("\nPresione una tecla para continuar...")

    def buscar_malla(self):
        print('''
        ==================================
            Buscar de Malla Curricular
        ==================================
        ''')
        try:
            id_malla = input_data("Ingrese el ID de la malla curricular >> ",
                                  "int")
            malla = self.malla.obtener_malla({'id_malla': id_malla})
            print(
                print_table(malla, [
                    'id_malla', 'id_periodo', 'id_salon', 'id_profesor_curso'
                ]))

            if malla:
                if pregunta(
                        "¿Deseas dar mantenimiento a la malla curricular?"):
                    opciones = ['Editar malla', 'Eliminar malla', 'Salir']
                    respuesta = Menu(opciones).show()
                    if respuesta == 1:
                        self.editar_malla(id_malla)
                    elif respuesta == 2:
                        self.eliminar_malla(id_malla)
        except Exception as e:
            print(f'{str(e)}')
        input("\nPresione una tecla para continuar...")

    def insertar_malla(self):
        print('''
        =========================
            Lista de Periodo
        =========================
        ''')
        periodo = self.periodo.obtener_periodos('id_periodo')
        print(
            print_table(
                periodo,
                ['id_periodo', 'nombre_periodo', 'Fecha_desde', 'Fecha_hasta'
                 ]))

        id_periodo = input_data("Ingrese el ID del periodo >> ", 'int')

        print('''
        ==========================
            Lista de Salones
        ==========================
        ''')
        salones = self.salon.obtener_salones('id_salon')
        print(print_table(salones, ['id_salon', 'nombre_salon']))

        id_salon = input_data("Ingrese la ID del salon >> ", 'int')

        print('''
        =================================
            Lista de Profesor Curso
        =================================
        ''')

        profesor_curso = self.profesor_curso.obtener_profesor_cursos(
            'id_profesor_curso')
        print(
            print_table(profesor_curso,
                        ['id_profesor_curso', 'id_profesor', 'id_curso']))

        id_profesor_curso = input_data("Ingrese el ID Curso Profesor >> ",
                                       'int')
        self.malla.guardar_malla({
            'id_periodo': id_periodo,
            'id_salon': id_salon,
            'id_profesor_curso': id_profesor_curso
        })
        print('''
        =================================
            Nueva Malla agregado !
        =================================
        ''')
        self.listar_malla()

    def editar_malla(self, id_malla):

        print('''
        =========================
            Lista de Periodo
        =========================
        ''')
        periodo = self.periodo.obtener_periodos('id_periodo')
        print(
            print_table(
                periodo,
                ['id_periodo', 'nombre_periodo', 'Fecha_desde', 'Fecha_hasta'
                 ]))

        id_periodo = input_data("Ingrese el ID del periodo >> ", 'int')

        print('''
        ==========================
            Lista de Salones
        ==========================
        ''')
        salones = self.salon.obtener_salones('id_salon')
        print(print_table(salones, ['id_salon', 'nombre_salon']))

        id_salon = input_data("Ingrese la ID del salon >> ", 'int')

        print('''
        =================================
            Lista de Profesor Curso
        =================================
        ''')

        profesor_curso = self.profesor_curso.obtener_profesor_cursos(
            'id_profesor_curso')
        print(
            print_table(profesor_curso,
                        ['id_profesor_curso', 'id_profesor', 'id_curso']))

        id_profesor_curso = input_data("Ingrese el ID Curso Profesor >> ",
                                       'int')
        self.malla.modificar_malla({'id_malla': id_malla}, {
            'id_periodo': id_periodo,
            'id_salon': id_salon,
            'id_profesor_curso': id_profesor_curso
        })
        print('''
        ==========================
            Malla Editada !
        ==========================
        ''')

    def eliminar_malla(self, id_malla):
        self.malla.eliminar_malla({'id_malla': id_malla})
        print('''
        ===========================
            Malla Eliminado !
        ===========================
        ''')