Пример #1
0
    def realizarSancion(self):

        if (self.sancion.value() == 0):
            ErrorPrompt("Error", "Las sanciones deben durar al menos 1 dia!")
            return
        if (self.sancion_books.value() == 7):
            ErrorPrompt(
                "Error",
                "La cantidad de libro por prestamo durante la sanción debe ser menor a 7!"
            )
            return

        self.query = QSqlQuery()
        queryText = "UPDATE Estudiante SET days_blocked = '" + str(
            self.sancion.value()) + "', num_books_per_loan = '" + str(
                self.sancion_books.value(
                )) + "', start_blocked_time = '" + str(
                    datetime.date.today()) + "' WHERE carnet = '" + str(
                        self.currentStudent) + "';"
        success = self.query.exec_(queryText)

        if (not success):
            ErrorPrompt("Error", "No se pudo realizar la sanción.")
            return

        self.button_finalizar.setEnabled(True)
        InfoPrompt("Éxito", "La sanción ha sido impuesta con éxito!")
        # Actualizamos las tablas
        self.updateDebtTabla()
        self.updateSancionTable()
Пример #2
0
    def confirmDelete(self):
        if (int(self.table.item(7, 0).text()) != 0):
            ErrorPrompt(
                "Error en la eliminación",
                "El estudiante posee libros sin devolver, no se puede eliminar"
            )
        else:
            queryText = "DELETE FROM Estudiante WHERE carnet = \'" + self.table.item(
                0, 0).text() + "\' RETURNING carnet"
            self.query = QSqlQuery()
            self.query.exec_(queryText)

            if self.query.first():
                InfoPrompt("Eliminación exitosa",
                           "El estudiante ha sido eliminado del sistema")
                self.search.setEnabled(True)
                self.confirm.setEnabled(False)
                self.deleteCancel.setEnabled(False)
                self.confirm.hide()
                self.deleteCancel.hide()
                self.table.clear()
                self.carnet.setText("")
            else:
                ErrorPrompt("Error en la eliminación",
                            "El estudiante no pudo ser eliminado")
                self.confirm.hide()
                self.deleteCancel.hide()
Пример #3
0
    def renovarPrestamo(self):
        titles = ""
        self.query = QSqlQuery()
        start_date = str(datetime.datetime.now())
        hours = start_date.split()

        self.query = QSqlQuery()
        self.queryTitle = QSqlQuery()
        self.queryMail = QSqlQuery()
        self.queryMail.exec_("SELECT email FROM Estudiante WHERE carnet = \'" +
                             self.currentStudent + "\'")
        if self.queryMail.first():
            address = str(self.queryMail.value(0))
        else:
            ErrorPrompt(
                "Error",
                "No se pudo realizar la renovación. Estudiante no tiene email")
            return

        i = 0
        while (i != self.tabla_libros_prestamos.rowCount()):
            if (self.tabla_libros_prestamos.item(i, 0).text() != ""):
                self.query.exec_(
                    "SELECT loan_duration FROM Book WHERE book_id = '" +
                    self.tabla_libros_prestamos.item(i, 0).text() + "';")
                if (self.query.first()):
                    return_date = str(
                        datetime.date.today() + datetime.timedelta(
                            days=(self.query.value(0)))) + " " + str(hours[1])
                    self.query.exec_(
                        "UPDATE Loan SET estimated_return_time = '" +
                        return_date + "' WHERE book_id = '" +
                        self.tabla_libros_prestamos.item(i, 0).text() +
                        "' AND carnet = '" + str(self.currentStudent) + "';")
                    self.renovarToLog(
                        self.currentStudent,
                        self.tabla_libros_prestamos.item(i, 0).text(),
                        return_date)
                    self.queryTitle.exec_(
                        "SELECT title FROM Book WHERE book_id = " +
                        str(self.tabla_libros_prestamos.item(i, 0).text()))
                    if self.queryTitle.first():
                        titles += str(self.queryTitle.value(0))
                    else:
                        titles += str(
                            self.tabla_libros_prestamos.item(i, 0).text())
                    titles += "\n"
                    i += 1
                else:
                    ErrorPrompt("Error",
                                "Ocurrió un error renovando el préstamo")
            else:
                break

        self.sendConfirmEmail(address, "Renovación", titles, return_date)
        InfoPrompt("Éxito", "El préstamo se renovó con éxito!")
        self.updateActiveLoanTable()
Пример #4
0
    def anadir(self):
        fields = [self.ingresarNombre.text(), self.ingresarApellido.text()]

        author_id = int(self.query[0][0]) + 1
        correct = check_name(str(fields[0]), 1) and check_name(
            str(fields[1]), 0) and check_quantity(str(author_id))

        if not correct:
            return

        self.query = QSqlQuery()
        self.query.prepare(
            "INSERT INTO Author(first_name, last_name, author_id) VALUES(:first_name, :last_name, :author_id) RETURNING author_id"
        )
        self.query.bindValue(0, fields[0])
        self.query.bindValue(1, fields[1])
        self.query.bindValue(2, int(fields[2]))

        self.query.exec_()

        if self.query.first():
            InfoPrompt(
                "Éxito",
                "La información del autor ha sido agregada exitosamente")
            self.table.llenarAutores()
        else:
            ErrorPrompt("Fracaso", "El autor no fue agregado al sistema")
Пример #5
0
    def emailStudent(self, receiver, text):
        port = 465  # For SSL
        smtp_server = "smtp.gmail.com"
        sender_email = "*****@*****.**"
        receiver_email = receiver
        password = "******"
        msg = MIMEMultipart()
        msg['Subject'] = "Notificación"
        msg['From'] = sender_email
        msg['To'] = receiver_email
        content = text
        content = MIMEText(content)
        msg.attach(content)

        try:
            context = ssl.create_default_context()
            with smtplib.SMTP_SSL(smtp_server, port,
                                  context=context) as server:
                server.login(sender_email, password)
                server.sendmail(sender_email, receiver_email,
                                content.as_string().encode("utf8"))
        except:
            ErrorPrompt(
                "Error",
                "No se pudo mandar email de notificación. Vuelva a intentar más tarde"
            )
Пример #6
0
    def consultaAux(self, inputUser):
        queryText = "SELECT username, first_name, last_name, email, permission_mask, last_login,\
            creation_date FROM CEIC_User WHERE username = '******';"
        self.query = QSqlQuery()
        self.query.exec_(queryText)

        if self.query.first():
            self.currentUser = inputUser
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers
                                       | QAbstractItemView.DoubleClicked)
            for i in range(self.table.rowCount()):
                if (i < 4):
                    self.table.item(i, 0).setText(str(self.query.value(i)))
                elif i == 4:
                    if int(self.query.value(i)) == 0:
                        self.table.cellWidget(i, 0).setCurrentIndex(0)
                    else:
                        self.table.cellWidget(i, 0).setCurrentIndex(1)
                    self.old_perm_mask = str(
                        self.table.cellWidget(4, 0).currentText())
                else:
                    auxiliar = QDateTime.toString(self.query.value(i)).split()
                    self.table.item(i, 0).setText(
                        str(auxiliar[0] + ' ' + auxiliar[2] + ' ' +
                            auxiliar[1] + ' ' + auxiliar[4] + ' ' +
                            auxiliar[3]))

            self.modificar.setEnabled(True)
            self.eliminar.setEnabled(True)
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        else:
            ErrorPrompt(
                "Error",
                "El usuario no existe, ingrese otro nombre de usuario ")
Пример #7
0
    def saveUpdate(self):
        fields = self.table.getFields()
        correct = verification_books(fields, 7)

        if not correct:
            return

        values = self.table.getValues()
        queryText = "UPDATE Book SET " + values + " WHERE book_id = '" + self.table.item(
            0, 0).text() + "' returning book_id"
        self.query = QSqlQuery()
        self.query.exec_(queryText)

        if self.query.first():
            InfoPrompt(
                "Actualización completada",
                "La información del libro ha sido actualizada exitosamente")
            self.search.setEnabled(True)
            self.author.setEnabled(True)
            self.eliminar.setEnabled(True)
            self.modificar.setEnabled(True)
            self.guardar.setEnabled(False)
            self.cancel.setEnabled(False)
            self.guardar.hide()
            self.cancel.hide()
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        else:
            ErrorPrompt("Error",
                        "La información del libro no pudo ser modificada")
            self.author.setEnabled(True)
            self.guardar.hide()
            self.cancel.hide()
Пример #8
0
    def sendConfirmEmail(self, receiver, subject, text, return_date):
        port = 465  # For SSL
        smtp_server = "smtp.gmail.com"
        sender_email = "*****@*****.**"
        receiver_email = receiver
        password = "******"
        msg = MIMEMultipart()
        msg['Subject'] = subject
        msg['From'] = sender_email
        msg['To'] = receiver_email
        if subject == "Préstamo":
            content = "Hola:\n\nHas pedido prestado(s) el(los) siguinte(s) libro(s): \n\n"
            content += text
            content += "Fecha de devolución: "
            content += return_date.split(".")[0]
        else:
            content = "Hola:\n\nHas renovado el préstamo de: \n\n"
            content += text
            content += "Fecha de devolución: "
            content += return_date.split(".")[0]

        content = MIMEText(content)
        msg.attach(content)

        try:
            context = ssl.create_default_context()
            with smtplib.SMTP_SSL(smtp_server, port,
                                  context=context) as server:
                server.login(sender_email, password)
                server.sendmail(sender_email, receiver_email,
                                content.as_string().encode("utf8"))
        except:
            ErrorPrompt("Error", "No se pudo enviar el correo de confimación")
Пример #9
0
    def AgregarLibro(self):
        global autores
        fields = [self.IDInput.text(), self.titleBookInput.text(), autores, self.ISBNInput.text(),\
            self.quantityInput.text()]

        correct = verification_books(fields, 5)

        if not correct:
            return

        self.query = QSqlQuery()
        self.query.prepare("INSERT INTO Book(book_id, title, authors, isbn, quantity, quantity_lent) VALUES(:ID, :title, \
            :authors, :ISBN, :quantity, '0') RETURNING book_id")
        self.query.bindValue(0, int(fields[0]))
        self.query.bindValue(1, fields[1])
        self.query.bindValue(2, fields[2])
        self.query.bindValue(3, fields[3])
        self.query.bindValue(4, int(fields[4]))

        self.query.exec_()

        if self.query.first():
            InfoPrompt("Éxito", "La información del libro ha sido agregada exitosamente")
        else:
            ErrorPrompt("Fracaso", "El libro no fue agregado al sistema")

        for i in range(int(fields[4])):
            self.query.exec_("INSERT INTO Book_copy (copy_id, book_id) VALUES('" + str(i+1) + "', '" + str(fields[0]) + "');")
Пример #10
0
    def agregarEstudiante(self):
        fields = [self.carnetInput.text(), self.fnameInput.text(), self.lnameInput.text(), self.CIInput.text(),\
            self.phoneInput.text(), self.emailInput.text()]

        correct = verification_estudiantes(fields, 6)

        if not correct:
            return

        self.query = QSqlQuery()
        self.query.prepare(
            "INSERT INTO Estudiante(carnet, first_name, last_name, CI, phone, email) VALUES(:carnet, :fname, \
            :lname, :CI, :phone, :email ) RETURNING carnet")
        self.query.bindValue(0, fields[0])
        self.query.bindValue(1, fields[1])
        self.query.bindValue(2, fields[2])
        self.query.bindValue(3, int(fields[3]))
        self.query.bindValue(4, int(fields[4]))
        self.query.bindValue(5, fields[5])

        self.query.exec_()

        if self.query.first():
            InfoPrompt(
                "Éxito",
                "La información del estudiante ha sido agregada exitosamente")
            self.clean()
        else:
            ErrorPrompt("Fracaso", "El estudiante no fue agregado al sistema")
Пример #11
0
    def buscarEstudiante(self, carnetBuscado):
        if(check_carnet(carnetBuscado)):
            queryText = "SELECT * FROM Estudiante WHERE carnet = '" + carnetBuscado + "';"
            self.query = QSqlQuery()
            self.query.exec_(queryText)

            if self.query.first():
                self.currentStudent = carnetBuscado
                self.nombre.setText(str(self.query.value(1)))
                self.apellido.setText(str(self.query.value(2)))
                self.deuda.setText(str(self.query.value(9)))
                if(float(self.deuda.text()) != 0.0):
                    self.tipo.setEnabled(True)
                    self.monto.setReadOnly(False)              
                    self.banco.setReadOnly(False)
                    self.codigo.setReadOnly(False)
                    self.button_aplicar.setEnabled(True)
                else:
                    self.tipo.setEnabled(False)
                    self.monto.setReadOnly(True)
                    self.monto.setText("")          
                    self.banco.setReadOnly(True)
                    self.banco.setText("")          
                    self.codigo.setReadOnly(True)
                    self.codigo.setText("")     
                    self.button_aplicar.setEnabled(False)
            else:
                ErrorPrompt("Error", "No se encontró un Estudiante con ese carnet")
Пример #12
0
    def buscarEstudiante(self, carnetBuscado):
        if (check_carnet(carnetBuscado)):
            queryText = "SELECT * FROM Estudiante WHERE carnet = '" + carnetBuscado + "';"
            self.query = QSqlQuery()
            self.query.exec_(queryText)

            if self.query.first():
                self.currentStudent = carnetBuscado
                self.nombre.setText(str(self.query.value(1)))
                self.apellido.setText(str(self.query.value(2)))
                self.sancion.setValue(int(self.query.value(6)))
                self.sancion_books.setValue(int(self.query.value(7)))
                self.deuda.setText(str(self.query.value(9)))

                self.sancion.setReadOnly(False)
                self.sancion.setStyleSheet(
                    "QSpinBox\n{\n border: 1px solid #C9C9C9;\n border-radius: 3px;\n background-color: white;\n}"
                )
                self.sancion_books.setReadOnly(False)
                self.sancion_books.setStyleSheet(
                    "QSpinBox\n{\n border: 1px solid #C9C9C9;\n border-radius: 3px;\n background-color: white;\n}"
                )

                self.button_aplicar.setEnabled(True)
                if (self.query.value(6) >= 1):
                    self.button_finalizar.setEnabled(True)
                else:
                    self.button_finalizar.setEnabled(False)
            else:
                ErrorPrompt("Error",
                            "No se encontró un Estudiante con ese carnet")

        # Actualizamos las tablas
        self.updateDebtTabla()
        self.updateSancionTable()
Пример #13
0
    def changePasswordForm(self, username, codigo):

        if (self.code.text() != codigo):
            ErrorPrompt("Error", "Código Erroneo!")
            return

        self.labelInfo.setText("Ingrese la Nueva Contraseña")
        self.labelInfo.move(77, 20)

        self.code.setText("")
        self.code.setPlaceholderText("Nueva Contraseña")
        self.code.setEchoMode(QLineEdit.Password)
        self.code.setFixedHeight(40)
        self.code.move(72, 90)

        self.repeat_password.setText("")
        self.repeat_password.setPlaceholderText("Repetir Contraseña")
        self.repeat_password.setEchoMode(QLineEdit.Password)
        self.repeat_password.setFixedHeight(40)
        self.repeat_password.move(72, 140)

        # Conexion
        self.code.returnPressed.connect(lambda: self.changePassword(username))
        self.repeat_password.returnPressed.connect(
            lambda: self.changePassword(username))
Пример #14
0
    def anadir(self):
        fields = [self.nombreInput.text(), self.apellidoInput.text()]

        correct = check_name(fields[0], 1) and check_name(fields[1], 0)

        if not correct:
            return

        self.query = QSqlQuery()
        self.query.prepare(
            "INSERT INTO Author(first_name, last_name) VALUES(:first_name, :last_name) RETURNING author_id"
        )
        self.query.bindValue(0, fields[0])
        self.query.bindValue(1, fields[1])

        self.query.exec_()

        if self.query.first():
            InfoPrompt(
                "Éxito",
                "La información del autor ha sido agregada exitosamente")
            self.close()
        else:
            ErrorPrompt("Fracaso", "El autor no fue agregado al sistema")

        self.close()
Пример #15
0
    def changePassword(self, username):

        if (self.code.text() != self.repeat_password.text()):
            ErrorPrompt("Error", "Las contraseñas no coinciden!")
            return

        self.query = QSqlQuery()
        success = self.query.exec_("UPDATE CEIC_User SET password_ = crypt('" +
                                   str(self.code.text()) +
                                   "', gen_salt('bf', 8)) WHERE username = '******';")

        if (success):
            InfoPrompt("Success", "La contraseña ha sido modificada!")
        else:
            ErrorPrompt("Error", "Error Desconocido")
        self.close()
Пример #16
0
def check_username(username):
    if len(username) < 33:
        return True
    else:
        ErrorPrompt(
            "Error",
            "Nombre de usuario inválido, verifique la longitud del mismo")
        return False
Пример #17
0
    def consulta(self):
        inputUser = self.User.text()

        if (check_username(inputUser)):
            self.consultaAux(inputUser)
        else:
            ErrorPrompt("Error de usuario",
                        "El username no sigue el patrón correspondiente")
Пример #18
0
    def consulta(self):
        inputCarnet = self.carnet.text()

        if (self.carnetPattern.match(inputCarnet) is None):
            ErrorPrompt("Error de formato",
                        "Error: Ese no es el formato de un carnet")
            return

        self.consultaAux(inputCarnet)
Пример #19
0
    def actualizarMontoDeuda(self):
        self.query = QSqlQuery()

        if(self.act_deuda.text() == ""):
            self.query.exec_("SELECT monto_deuda FROM Deuda WHERE id = 0;")
            if(self.query.first()):
                self.montoDeuda = float(self.query.value(0))
                self.act_deuda.setText(str(self.montoDeuda))
            else:
                ErrorPrompt("Error", "No se pudo actualizar el monto de deuda agregada por día.")
        else:
            if(check_debt(self.act_deuda.text())):
                success = self.query.exec_("UPDATE Deuda SET monto_deuda = '" + self.act_deuda.text() + "' WHERE id = 0;")
                if(success):
                    self.montoDeuda = float(self.act_deuda.text())
                    InfoPrompt("Éxito", "El monto de deuda agregada por día se ha actualizado!")
                else:
                    ErrorPrompt("Error", "No se pudo actualizar el monto de deuda agregada por día.")
Пример #20
0
    def consulta(self):
        inputTitulo = self.titulo.text()

        if (self.libroPattern.match(inputTitulo) is None):
            ErrorPrompt("Error de formato",
                        "Error: Ese no es el formato del título de un libro")
            return

        self.consultaAux(inputTitulo)
Пример #21
0
    def saveUpdate(self, loggedUser):
        fields = self.table.getFields()
        self.query = QSqlQuery()

        if (self.old_perm_mask != fields[4]):
            Input = QInputDialog()
            input_logged_user_password = Input.getText(self,
                                                       "Ingresar Contraseña",
                                                       "Contraseña:")
            queryText = "SELECT * FROM CEIC_User WHERE username = '******' and password_ = crypt(\'" + input_logged_user_password[
                0] + "\', password_);"
            self.query.exec_(queryText)
            if (not self.query.first()):
                ErrorPrompt("Error", "Contraseña Inválida!")
                return

        correct = verification_users(fields, 5)
        if not correct:
            return

        values = self.table.getValues()
        queryText = "UPDATE CEIC_User SET " + values + " WHERE username = '******' returning username"
        self.query.exec_(queryText)

        if self.query.first():
            InfoPrompt(
                "Actualización completada",
                "La información del usuario ha sido actualizada exitosamente")
            self.search.setEnabled(True)
            self.eliminar.setEnabled(True)
            self.modificar.setEnabled(True)
            self.guardar.setEnabled(False)
            self.cancel.setEnabled(False)
            self.guardar.hide()
            self.cancel.hide()
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
            self.table.cellWidget(4, 0).setEnabled(False)
        else:
            ErrorPrompt("Error",
                        "La información del usuario no pudo ser modificada")
Пример #22
0
    def finalizarPrestamo(self, Username):
        self.query = QSqlQuery()
        success = self.query.exec_("DELETE FROM Loan WHERE carnet='" +
                                   str(self.currentStudent) + "';")

        self.queryMail = QSqlQuery()
        self.queryMail.exec_("SELECT email FROM Estudiante WHERE carnet = \'" +
                             self.currentStudent + "\'")
        if self.queryMail.first():
            address = str(self.queryMail.value(0))
        else:
            ErrorPrompt("Error", "Estudiante no tiene email")
            return

        if (success):
            i = 0
            # Actualizamos la cantidad prestada de cada libro
            while (i != self.tabla_libros_prestamos.rowCount()):
                if (self.tabla_libros_prestamos.item(i, 0).text() != ""):
                    self.query.exec_(
                        "UPDATE Book SET quantity_lent = quantity_lent - 1 WHERE book_id='"
                        + str(self.tabla_libros_prestamos.item(i, 0).text()) +
                        "';")
                    self.query.exec_(
                        "UPDATE Estudiante SET current_books = current_books - 1 WHERE carnet='"
                        + str(self.currentStudent) + "';")
                    self.finalizarToLog(
                        self.currentStudent, Username,
                        str(self.tabla_libros_prestamos.item(i, 0).text()))
                    i += 1
                else:
                    break
        else:
            ErrorPrompt("Error",
                        "No se pudo marcar el préstamo como finalizado")
            return
        self.booksReturnesEmail(address, "Finalización de préstamo")
        InfoPrompt("Éxito", "Se marcó el préstamo como finalizado!")
        self.updateActiveLoanTable()
        self.buscarEstudiante(self.currentStudent)
Пример #23
0
    def updateBooksPerLoan(self):
        self.query = QSqlQuery()

        success = self.query.exec_(
            "UPDATE Books_per_loan SET monto_libro_per_loan = '" +
            str(self.books_per_loan.value()) + "' WHERE id = 0;")
        if (success):
            InfoPrompt("Éxito", "Máximo de libros por prestamo actualizado!")
        else:
            ErrorPrompt(
                "Error",
                "No se pudo actualizar la cantidad máxima de libros por prestamo"
            )
Пример #24
0
    def pagarDeuda(self, Username):

        debt = check_debt(self.monto.text()) # Variable debt permite no hacer el llamado dos veces al remover el nested if
        if(debt and (float(self.deuda.text()) < float(self.monto.text()))):
            ErrorPrompt("Error", "El monto a pagar sobrepasa el monto de la deuda.")
            return
        elif (not debt):
            return

        self.query = QSqlQuery()
        if(self.tipo.currentIndex() == 0 and ((self.banco.text() == "") or (self.codigo.text() == ""))):
            ErrorPrompt("Error", "Los campos de banco o código de transferencia no fueron llenados.")
            return
        deuda_restante = float(self.deuda.text()) - float(self.monto.text())
        success_deuda = self.query.exec_("UPDATE Estudiante SET book_debt = '"+  str(deuda_restante) + "' WHERE carnet = '" + self.currentStudent + "';")

        # Si se logro pagar la deuda, se registra el pago si es transferencia. Si es en efectivo, no se hace nada.
        if(success_deuda and self.tipo.currentIndex() == 0):
            success_transf = self.query.exec_("INSERT INTO Transferencias(username, cliente, monto, banco, codigo) VALUES('" + Username +"', '" + self.currentStudent + "', '" + self.monto.text() + "', '" + self.banco.text() + "', '" + self.codigo.text() + "');")
            if(success_transf):
                InfoPrompt("Éxito", "Se ingresó con éxito el pago de la multa!")
                self.updateTablaTransf()
                self.button_aplicar.setEnabled(False)
                self.deuda.setText(str(deuda_restante))
                self.monto.setText("")  
                self.banco.setText("") 
                self.codigo.setText("") 
            else:
                ErrorPrompt("Error", "Ocurrió un error procesando los datos de la transferencia.")
        elif(success_deuda):
            self.button_aplicar.setEnabled(False)
            self.monto.setText("")     
            self.deuda.setText(str(deuda_restante))
            InfoPrompt("Éxito", "Se ingresó con éxito el pago de la multa!")
            
        # Si se pago la deuda completa, se elimina de los deudores
        if(deuda_restante == 0):
            self.updateDebtTabla()
Пример #25
0
    def confirmDelete(self):
        if (int(self.table.item(5, 0).text()) != 0):
            ErrorPrompt(
                "Error en la eliminación",
                "Una copia del libro está siendo prestada a un estudiante, no se puede eliminar"
            )
        else:
            queryText = "DELETE FROM Book_copy WHERE book_id = " + self.table.item(
                0, 0).text() + " RETURNING book_id"
            self.query = QSqlQuery()
            self.query.exec_(queryText)
            queryText = "DELETE FROM WrittenBy WHERE book_id = " + self.table.item(
                0, 0).text() + " RETURNING book_id"
            self.query = QSqlQuery()
            self.query.exec_(queryText)
            queryText = "DELETE FROM Book WHERE book_id = " + self.table.item(
                0, 0).text() + " RETURNING book_id"
            self.query = QSqlQuery()
            self.query.exec_(queryText)

            if self.query.first():
                InfoPrompt("Eliminación exitosa",
                           "El libro ha sido eliminado del sistema")
                self.search.setEnabled(True)
                self.author.setEnabled(True)
                self.confirm.setEnabled(False)
                self.deleteCancel.setEnabled(False)
                self.confirm.hide()
                self.deleteCancel.hide()
                self.table.clear()
                self.titulo.setText("")
            else:
                ErrorPrompt("Error en la eliminación",
                            "El libro no pudo ser eliminado")
                self.author.setEnabled(True)
                self.confirm.hide()
                self.deleteCancel.hide()
Пример #26
0
    def finalizarSancion(self, carnet, prompt):
        self.query = QSqlQuery()
        queryText = "UPDATE Estudiante SET days_blocked = '0', num_books_per_loan = '7', start_blocked_time = NULL WHERE carnet = '" + str(
            carnet) + "';"
        success = self.query.exec_(queryText)

        if (not success and prompt):
            ErrorPrompt("Error", "No se pudo finalizar la sanción.")
            return
        elif (success and prompt):
            self.button_finalizar.setEnabled(False)
            self.sancion.setValue(0)
            self.sancion_books.setValue(7)
            InfoPrompt("Éxito", "La sanción ha sido finalizada con éxito!")
            # Actualizamos las tablas
            self.updateDebtTabla()
            self.updateSancionTable()
Пример #27
0
    def deleteRequest(self):
        if (self.permission != 1):
            ErrorPrompt(
                "Se necesitan permisos adicionales",
                "Usted no dispone de los permisos necesarios para esta acción")
            return

        ConfirmPrompt(
            "Eliminación de estudiante",
            "Se ha solicitado eliminar estudiante. Marque botón de eliminación para\
            confirmar")
        self.search.setEnabled(False)
        self.modificar.setEnabled(False)
        self.eliminar.setEnabled(False)
        self.confirm.setEnabled(True)
        self.deleteCancel.setEnabled(True)
        self.confirm.show()
        self.deleteCancel.show()
Пример #28
0
    def consultaAux(self, tituloBuscado):
        queryText = "SELECT * FROM Book WHERE title = '" + tituloBuscado + "';"
        self.query = QSqlQuery()
        self.query.exec_(queryText)

        if self.query.first():
            self.currentBook = tituloBuscado
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers
                                       | QAbstractItemView.DoubleClicked)
            for i in range(self.table.rowCount()):
                if (i == 4):
                    self.noCopy = int(self.query.value(i))
                self.table.item(i, 0).setText(str(self.query.value(i)))

            self.modificar.setEnabled(True)
            self.eliminar.setEnabled(True)
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        else:
            ErrorPrompt("Error de búsqueda", "Error: Libro no encontrado")
Пример #29
0
    def consultaAux(self, carnetBuscado):
        queryText = "SELECT carnet, first_name, last_name, CI, phone, email, days_blocked, current_books, book_debt FROM Estudiante WHERE carnet = '" + carnetBuscado + "';"
        self.query = QSqlQuery()
        self.query.exec_(queryText)

        if self.query.first():
            self.currentStudent = carnetBuscado
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers
                                       | QAbstractItemView.DoubleClicked)
            for i in range(self.table.rowCount() - 1):
                if (i < 8):
                    self.table.item(i, 0).setText(str(self.query.value(i)))
                else:
                    self.table.item(i, 0).setText(
                        str(round(self.query.value(i), 2)))
            self.table.item(9, 0).setText(
                str(round(self.query.value(i) / 18500, 2)))
            self.table.item(9, 0).setFlags(Qt.ItemIsEnabled)
            self.modificar.setEnabled(True)
            self.eliminar.setEnabled(True)
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        else:
            ErrorPrompt("ENE Piso 3", "Error ENE_Piso3: Estudiante Not Found")
Пример #30
0
    def booksReturnesEmail(self, receiver, subject):
        port = 465  # For SSL
        smtp_server = "smtp.gmail.com"
        sender_email = "*****@*****.**"
        receiver_email = receiver
        password = "******"
        msg = MIMEMultipart()
        msg['Subject'] = subject
        msg['From'] = sender_email
        msg['To'] = receiver_email
        content = "Hola:\n\nHas finalizado tu préstamo de libros"
        content = MIMEText(content)
        msg.attach(content)

        try:
            context = ssl.create_default_context()
            with smtplib.SMTP_SSL(smtp_server, port,
                                  context=context) as server:
                server.login(sender_email, password)
                server.sendmail(sender_email, receiver_email,
                                content.as_string().encode("utf8"))
        except:
            ErrorPrompt("Error", "No se pudo mandar email de confirmación")