예제 #1
0
class ShowDataWindow(Toplevel):
    def __init__(self, parent, **kw):
        Toplevel.__init__(self, parent, **kw)
        self.parent = parent
        self.title("Bảng thống kê mặt hàng")
        self.geometry("600x400")
        self.data = Database()
        self.drawDialog()
        self.linkAccelerator()

        self.protocol("WM_DELETE_WINDOW", self.quitDialog)

    def linkAccelerator(self):
        self.bind_all("<Control-n>", self.onAddItem)
        self.bind_all("<Control-r>", self.onRefresh)

    def drawDialog(self):
        listItem = self.data.getItemList()
        self.table = Notebook(self)

        for item in listItem:
            self.onAddToTab(item)

        self.table.pack(side=LEFT, fill=BOTH, expand=True, padx=5, pady=5)

    def onAddToTab(self, item):
        treeType = TreeType(self.table, item, self)
        self.table.add(treeType, text=item.name)
        self.table.pack()

    def quitDialog(self):
        self.parent.linkAccelerator()
        self.destroy()

    def onRefresh(self, event=None):
        self.table.destroy()
        self.drawDialog()

    def onAddItem(self, event=None):
        if event != None:
            print("Ctrl+N")
        NewItemDialog(self)
예제 #2
0
class MainApplication(Tk):

    first_evaluating = True

    def __init__(self, *args, **kwargs):
        '''
        Establace las configuraciones de la ventana principal
        '''
        self.root = Tk()
        self.root.title("Sistema de Gestión de Alumnos")
        self.root.geometry("1010x585")
        self.root.resizable(0, 0)

        # Ejecuta la función de actualizar las tablas
        # cuando la ventana principal obtiene el foco
        self.root.bind("<FocusIn>", self.update_tablas)

        self.hay_cursos = False

        self.create_widgets()

        # Le otorga el foco a la ventana principal
        self.root.deiconify()
        # La mantiene en ejecución
        self.root.mainloop()

    def create_widgets(self):
        '''
        Crea todos los componentes de la ventana principal
        '''
        #### TABS ####
        tabController = Notebook(self.root)
        tabController.grid(column=0, row=0)

        self.frameInicio = Frame(tabController, padding=(10, 10))
        tabController.add(self.frameInicio, text="Inicio")

        self.frameCursantes = Frame(tabController, padding=(10, 10))
        tabController.add(self.frameCursantes, text="Alumnos")

        self.frameDocentes = Frame(tabController, padding=(10, 10))
        tabController.add(self.frameDocentes, text="Docentes")

        self.frameCursos = Frame(tabController, padding=(10, 10))
        tabController.add(self.frameCursos, text="Cursos")

        lbl_curso = Label(self.frameInicio,
                          text="Seleccione el curso:",
                          width=35)
        lbl_curso.grid(row=0, column=0, columnspan=35, padx=(400, 0))

        self.id_curso = StringVar()
        self.cb_curso = Combobox(self.frameInicio,
                                 textvariable=self.id_curso,
                                 width=20,
                                 state="readonly")
        self.cb_curso.grid(row=1, column=0, columnspan=20, padx=(400, 0))
        self.cb_curso.bind("<<ComboboxSelected>>", self.selection_changed)

        self.create_tab_alumnos()
        self.create_tab_cursos()
        self.create_tab_docentes()
        self.update_tablas()

    def create_tab_alumnos(self):
        #### TAB ALUMNOS ####
        formCreateCursante = FormCreateCursante()
        btn_nuevoCursante = Button(self.frameCursantes,
                                   text="[+] Nuevo estudiante",
                                   command=formCreateCursante.show)
        btn_nuevoCursante.grid(row=0, column=0, columnspan=30, pady=(5, 10))

        tablaCursantesFrame = Frame(self.frameCursantes,
                                    relief="groove",
                                    padding=(5, 5))
        tablaCursantesFrame.grid(row=1, column=0, columnspan=980)

        self.tablaCursantes = Tabla(tablaCursantesFrame, FormDetailsCursante())

    def create_tab_docentes(self):
        #### TAB DOCENTES ####
        formCreateDocente = FormCreateDocente()
        btn_nuevoDocente = Button(self.frameDocentes,
                                  text="[+] Nuevo docente",
                                  command=formCreateDocente.show)
        btn_nuevoDocente.grid(row=0, column=0, columnspan=30, pady=(5, 10))

        tablaDocentesFrame = Frame(self.frameDocentes,
                                   relief="groove",
                                   padding=(5, 5))
        tablaDocentesFrame.grid(row=1, column=0, columnspan=980)

        self.tablaDocentes = Tabla(tablaDocentesFrame,
                                   FormDetailsDocente(),
                                   columns_width={
                                       "dni": 15,
                                       "telefono": 15,
                                       "titulo": 30
                                   })

    def create_tab_cursos(self):
        #### TAB CURSOS ####
        formCreateCurso = FormCreateCurso()
        btn_nuevoCurso = Button(self.frameCursos,
                                text="[+] Nuevo curso",
                                command=formCreateCurso.show)
        btn_nuevoCurso.grid(row=0, column=0, columnspan=30, pady=(5, 10))

        tablaCursosFrame = Frame(self.frameCursos,
                                 relief="groove",
                                 padding=(5, 5))
        tablaCursosFrame.grid(row=1, column=0, columnspan=970)

        self.tablaCursos = Tabla(tablaCursosFrame,
                                 FormDetailsCurso(),
                                 columns_width={"nombre": 40})

    def create_tab_inicio(self):
        #### TAB INICIO ####
        self.tabFrameCurso = Notebook(self.frameInicio)
        self.tabFrameCurso.grid(row=2, column=0, columnspan=970)

        frameInscriptos = Frame(self.tabFrameCurso, padding=(10, 10))
        self.tabFrameCurso.add(frameInscriptos, text="Inscriptos")

        frameCurDoc = Frame(self.tabFrameCurso, padding=(10, 10))
        self.tabFrameCurso.add(frameCurDoc, text="Docentes")

        frameAsiastencias = Frame(self.tabFrameCurso, padding=(10, 10))
        self.tabFrameCurso.add(frameAsiastencias, text="Asistencias")

        self.formAddAlumno = FormInscriptos("add")
        self.formRemoveAlumno = FormInscriptos("remove")
        self.formRemoveAlumno.id_curso = self.id_curso.get()

        btn_add_cursante = Button(
            frameInscriptos,
            text="[+] Agregar",
            width=15,
            command=lambda: self.formAddAlumno.show(self.id_curso.get()))
        btn_add_cursante.grid(row=0, column=0, columnspan=15)

        btn_remove_cursante = Button(
            frameInscriptos,
            text="[-] Remover",
            width=15,
            command=lambda: self.formRemoveAlumno.show(self.id_curso.get()))
        btn_remove_cursante.grid(row=0, column=16, columnspan=15)

        frameTablaInscriptos = Frame(frameInscriptos,
                                     relief="groove",
                                     padding=(5, 5))
        self.tablaInscriptos = Tabla(frameTablaInscriptos,
                                     self.formRemoveAlumno,
                                     btn=False,
                                     height=400)
        frameTablaInscriptos.grid(row=1, column=0, columnspan=150, pady=10)

        btn_certificate = Button(frameInscriptos,
                                 text="Generar certificados",
                                 width=25,
                                 command=lambda: self.generate_certificate())
        btn_certificate.grid(row=0, column=126, columnspan=25)

        self.formAddDocente = FormDocentesCurso("add")
        self.formRemoveDocente = FormDocentesCurso("remove")
        self.formRemoveDocente.id_curso = self.id_curso.get()

        btn_add_doc = Button(
            frameCurDoc,
            text="[+] Agregar",
            width=15,
            command=lambda: self.formAddDocente.show(self.id_curso.get()))
        btn_add_doc.grid(row=0, column=0, columnspan=15)

        btn_remove_doc = Button(
            frameCurDoc,
            text="[-] Remover",
            width=15,
            command=lambda: self.formRemoveDocente.show(self.id_curso.get()))
        btn_remove_doc.grid(row=0, column=16, columnspan=15)

        frameTablaDocentesMiembro = Frame(frameCurDoc,
                                          relief="groove",
                                          padding=(5, 5))
        self.tablaDocentesMiembro = Tabla(frameTablaDocentesMiembro,
                                          self.formRemoveDocente,
                                          btn=False,
                                          height=400)
        frameTablaDocentesMiembro.grid(row=1,
                                       column=0,
                                       columnspan=150,
                                       pady=10)

        self.formAsistencias = FormAsistencias()
        self.formAsistencias.id_curso = self.id_curso.get()

        btn_asistencia = Button(
            frameAsiastencias,
            text="Cargar asistencias",
            width=25,
            command=lambda: self.formAsistencias.show(self.id_curso.get()))
        btn_asistencia.grid(row=0, column=0, columnspan=25)

        frameTablaAsistencias = Frame(frameAsiastencias,
                                      relief="groove",
                                      padding=(5, 5))
        self.tablaAsistencias = Tabla(frameTablaAsistencias,
                                      self.formAsistencias,
                                      btn=False,
                                      height=400)
        frameTablaAsistencias.grid(row=1, column=0, columnspan=150, pady=10)

    def selection_changed(self, *args):
        '''
        Actualiza el ID del curso que se seleccionó en el combobox.
        '''

        self.formRemoveDocente.id_curso = self.id_curso.get()
        self.formRemoveAlumno.id_curso = self.id_curso.get()
        self.formAsistencias.id_curso = self.id_curso.get()

    def update_tablas(self, *args):
        '''
        Le indica a cada tabla que chequee si es
        necesario actualizar la información visual o
        que la actualice directamente dependiendo el caso
        '''

        if Curso.modified or MainApplication.first_evaluating:
            MainApplication.first_evaluating = False
            values = [dict(item)["codigo"] for item in Curso.get_all()["data"]]
            self.cb_curso.config(values=(values if values else "--"))
            self.cb_curso.current(
                self.cb_curso.current() if self.cb_curso.current() > 0 else 0)

            if values:
                if not self.hay_cursos:
                    self.hay_cursos = True
                    self.create_tab_inicio()
                self.selection_changed()

            else:
                if self.hay_cursos:
                    self.hay_cursos = False
                    self.tabFrameCurso.destroy()

        self.tablaCursos.check_update()
        self.tablaCursantes.check_update()
        self.tablaDocentes.check_update()

        if self.hay_cursos:
            self.tablaDocentesMiembro.update_table()
            self.tablaInscriptos.update_table()
            self.tablaAsistencias.update_table()

    def generate_certificate(self):
        data = Curso.get_data_certificados(self.id_curso.get())

        for inscripto in data["asistieron"]:
            info = {
                "name": inscripto["nombre"].upper(),
                "dni": inscripto["dni"],
                "teachers": data["docentes"].upper(),
                "course": data["curso"].upper(),
                "dates": data["fechas"]
            }
            generar_pdf(info)

        cant_asist = len(data["asistieron"])
        mb.showinfo(
            "Información",
            f"Se generó correctamente el certificado\na los {cant_asist} que asistieron al curso."
        )