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()
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()
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]) + "');")
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()
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")
def update(self): #Permito modificar la tabla self.table.setEditTriggers(QAbstractItemView.NoEditTriggers | QAbstractItemView.DoubleClicked) self.table.item(0, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Carnet" self.table.item(6, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Dias bloqueado" self.table.item(7, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled ) # No deja modificar la fila "Libros prestdos actaulmente" self.table.item(8, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Deuda Bs." self.table.item(9, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Deuda USD." self.search.setEnabled(False) self.eliminar.setEnabled(False) self.modificar.setEnabled(False) self.guardar.setEnabled(True) self.cancel.setEnabled(True) self.guardar.show() self.cancel.show() InfoPrompt("Modificación activada", "Se ha activado el modo modificación")
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")
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()
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()
def cancelUpdate(self): InfoPrompt("Modificación cancelada", "Los cambios hechos no fueron guardados") self.consultaAux(self.currentStudent) 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)
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" )
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()
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()
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()
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.")
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")
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)
def update(self): #Permito modificar la tabla self.table.setEditTriggers(QAbstractItemView.NoEditTriggers | QAbstractItemView.DoubleClicked) self.table.cellWidget(4, 0).setEnabled(True) self.table.item(0, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Username" self.table.item(5, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Ultima conexion" self.table.item(6, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Fecha de creacion" self.search.setEnabled(False) self.eliminar.setEnabled(False) self.modificar.setEnabled(False) self.guardar.setEnabled(True) self.cancel.setEnabled(True) self.guardar.show() self.cancel.show() InfoPrompt("Modificación activada", "Se ha activado el modo modificación")
def saveUpdate(self): fields = self.table.getFields() correct = verification_estudiantes(fields, 9) if not correct: return self.query = QSqlQuery() self.query.prepare( "UPDATE Estudiante SET carnet = :ncarnet, first_name = :fn, last_name = :ln, CI = :nCI, phone = :nphone,\ email = :nemail, days_blocked = :days, current_books = :cb, book_debt = :bookD WHERE carnet = \'" + self.table.item(0, 0).text() + "\' returning carnet") for i in range(9): self.query.bindValue(i, self.table.item(i, 0).text()) self.query.exec_() if self.query.first(): InfoPrompt( "Actualización completada", "La información del estudiante ha sido actualizada exitosamente" ) self.table.item(9, 0).setText( str(round(float(self.table.item(8, 0).text()) / 18500, 2))) self.search.setEnabled(True) self.eliminar.setEnabled(True) self.modificar.setEnabled(True) self.guardar.setEnabled(False) self.cancel.setEnabled(False) self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) else: ErrorPrompt( "Error", "Alguno de los siguientes campos fue mal llenado: Carnet, CI o Libros prestados actualmente" ) self.guardar.hide() self.cancel.hide()
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()
def update(self, perm_mask): # Permito modificar la tabla self.table.setEditTriggers(QAbstractItemView.NoEditTriggers | QAbstractItemView.DoubleClicked) self.table.item(0, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "ID" self.table.item(5, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) # No deja modificar la fila "Cantidad prestada" if (perm_mask == 0): self.table.item(6, 0).setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled ) # No deja modificar la fila "Duracion de prestamo" si el usuario no es Admin self.search.setEnabled(False) self.author.setEnabled(False) self.eliminar.setEnabled(False) self.modificar.setEnabled(False) self.guardar.setEnabled(True) self.cancel.setEnabled(True) self.guardar.show() self.cancel.show() InfoPrompt("Modificación activada", "Se ha activado el modo modificación")
def agregarUsuario(self): if (self.contraseñaInput.text() == "" or self.confirmContraseñaInput.text() == ""): ErrorPrompt("Error", "No puede dejar el campo de contraseñas en blanco") return if (self.contraseñaInput.text() == self.confirmContraseñaInput.text()): if (self.permisosInput.isChecked()): fields = [ self.userInput.text(), self.nombreInput.text(), self.apellidoInput.text(), self.emailInput.text(), "Administrador" ] else: fields = [ self.userInput.text(), self.nombreInput.text(), self.apellidoInput.text(), self.emailInput.text(), "Usuario" ] correct = verification_users(fields, 5) if not correct: return ultima_conexion = str(datetime.datetime.now()) fecha_de_creacion = str(datetime.datetime.now()) if (fields[4] == "Administrador"): fields[4] = 1 elif (fields[4] == "Usuario"): fields[4] = 0 puede = 1 queryText2 = "SELECT * FROM CEIC_User WHERE username = '******';" self.query2 = QSqlQuery() self.query2.exec_(queryText2) if self.query2.first(): puede = 0 if puede == 1: self.query = QSqlQuery() self.query.prepare( "INSERT INTO CEIC_User (username, password_, first_name, last_name, email, permission_mask, last_login, creation_date) VALUES(:username, :password, \ :fname, :lname, :email, :permisos, :last_login, :creation_date ) RETURNING username" ) self.query.bindValue(0, fields[0]) self.query.bindValue(1, bcrypt.hash(self.contraseñaInput.text())) self.query.bindValue(2, fields[1]) self.query.bindValue(3, fields[2]) self.query.bindValue(4, fields[3]) self.query.bindValue(5, fields[4]) self.query.bindValue(":last_login", ultima_conexion) self.query.bindValue(":creation_date", fecha_de_creacion) self.query.exec_() if self.query.first(): InfoPrompt( "Éxito", "La información del usuario ha sido agregada exitosamente." ) else: ErrorPrompt("Fracaso", "El usuario no fue agregado al sistema.") else: ErrorPrompt( "Error", "El nombre de usuario coincide con uno ya existente, por favor ingrese otro nombre." ) else: ErrorPrompt("Error", "Las contraseñas no coinciden.")
def seleccion(self): global autores autores = autores + self.authorsInput.currentText()+ " , " InfoPrompt("Éxito", "Su autor ha sido seleccionado exitosamente") self.authorsInput.removeItem(self.authorsInput.currentIndex())
def realizarPrestamo(self, Username): titles = "" if (self.tabla_libros_prestamos.item(0, 0).text() == ""): ErrorPrompt("Error", "Debe agregar libros para realizar un prestamo") return 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 el préstamo. Estudiante no tiene email") return start_date = str(datetime.datetime.now()) hours = start_date.split() i = 0 while (i != self.tabla_libros_prestamos.rowCount()): if (self.tabla_libros_prestamos.item(i, 0).text() != ""): queryText = "INSERT INTO Loan (carnet, lender, start_time, book_id, copy_id, estimated_return_time) VALUES ('" + self.currentStudent + "', '" + Username + "', '" + start_date + "', " self.query.exec_( "SELECT loan_duration FROM Book WHERE book_id = '" + self.tabla_libros_prestamos.item(i, 0).text() + "';") # Aqui completamos el queryText con la informacion faltante y restamos la cantidad de copias de cada libro en el diccionario if (self.query.first()): return_date = str( datetime.date.today() + datetime.timedelta( days=(self.query.value(0)))) + " " + str(hours[1]) queryText = queryText + "'" + str( self.tabla_libros_prestamos.item(i, 0).text() ) + "', '" + str(self.Libros_prestamo[str( self.tabla_libros_prestamos.item( i, 1).text())]) + "', '" + return_date + "');" self.Libros_prestamo[str( self.tabla_libros_prestamos.item(i, 1).text())] -= 1 # Se actualiza la cantidad de copias prestadas del libro 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) + "';") # Se realiza la insercion a la tabla Loan, es decir, se realiza el prestamo self.query.exec_(queryText) self.prestamoToLog( self.currentStudent, Username, self.tabla_libros_prestamos.item(i, 0).text(), start_date, 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", "No se pudo realizar el préstamo") return else: break self.sendConfirmEmail(address, "Préstamo", titles, return_date) InfoPrompt("Éxito", "Se realizó el préstamo!") self.libro.setText("") self.updateActiveLoanTable() self.buscarEstudiante(self.currentStudent)