コード例 #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
ファイル: prestamos.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: verificarAutor.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: Menu.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: gestionUsuarios.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: gestionLibros.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: prestamos.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: AgregarLibro.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: agregarAutor.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: gestionUsuarios.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: gestionLibros.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: gestionUsuarios.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: prestamos.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: gestionLibros.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: gestionLibros.py プロジェクト: djpg98/CEIC_Libros
    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
ファイル: prestamos.py プロジェクト: djpg98/CEIC_Libros
    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")