def __init__(self): super(Ui, self).__init__() # Call the inherited classes __init__ method uic.loadUi(join(dirname(__file__), 'UI/login.ui'), self) # Load the .ui file self.show() # Show the GUI self.loginButton.setStyleSheet( "QPushButton#loginButton{ color: white; background-color: #222628; } QPushButton#loginButton::hover{ background-color: #4e5152;} QPushButton#loginButton::pressed{background-color: black;}" ) self.db_import.triggered.connect(self.import_db) self.db_import.setShortcut(QtGui.QKeySequence("Ctrl+i")) self.loginButton.clicked.connect(self.login_button_clicked) self.user.returnPressed.connect(self.login_button_clicked) self.passwd.returnPressed.connect(self.login_button_clicked) if (not file_exists(CONFIG_FILE_PATH)): create_properties() sql_con = sqlite.sqlite_connector() # Agafem el connector de SQLite if (len(sql_con.get_users()) == 0): if comprobation_message( 'Primer inicio', 'No existe ninguna base de datos, la que había ha sido eliminada o no hay usuarios. ¿Quieres crear el primero?' ): # If OK is clicked in the button self.create_user_window = create_user.Create_user( first_user=True) else: if comprobation_message( 'Primer inicio', '¿Quieres importar una base de datos?'): import_db(self)
def save_edit(self): self.set_editable_text(False) # Desactivem l'edició sql_con = sqlite.sqlite_connector() if (len(self.dni.text()) < 9): # Major que 9 no pot ser perque està controlat a l'interfície QtWidgets.QMessageBox.critical(self, 'ERROR', "Introduce un DNI válido.") if(self.nom.text() == ""): QtWidgets.QMessageBox.critical(self, 'ERROR', "Es obligatorio introducir un nombre.") elif(self.dni_letters[int(self.dni.text()[:-1]) % 23] != self.dni.text()[-1]): QtWidgets.QMessageBox.critical(self, 'ERROR', "Letra del DNI errónea") else: try: sql_con.edit_patient(self.dni.text(), self.nom.text(), self.cognom.text(), self.medicos.currentText(), self.direccio.text(), self.telefon.text(), self.mail.text(), self.sip.text(), self.altura.text(), self.pes.text(), self.naiximent.text(), self.hombre.isChecked(), self.diagnostic.text(), self.fase.currentIndex(), self.imc.text(), self.grasa.text(), self.medicacio.toPlainText(), photo_to_blob(self.fotoCara.pixmap()), photo_to_blob(self.fotoCuerpo.pixmap())) QtWidgets.QMessageBox.information(self, 'Paciente modificado', "¡El paciente ha sido modificado con éxito!") self.newPatientButton.show() self.guardarButton.hide() self.cancelarButton.hide() except sqlite.sqlite3.IntegrityError: QtWidgets.QMessageBox.critical(self, 'ERROR', "Ya existe un paciente con este DNI") finally: sql_con.close()
def add_patient(self): sql_con = sqlite.sqlite_connector() if (len(self.dni.text()) < 9): # Major que 9 no pot ser perque està controlat a l'interfície QtWidgets.QMessageBox.critical(self, 'ERROR', "Introduce un DNI válido.") elif(self.dni_letters[int(self.dni.text()[:-1]) % 23] != self.dni.text()[-1]): QtWidgets.QMessageBox.critical(self, 'ERROR', "Letra del DNI errónea") elif(self.nom.text() == ""): QtWidgets.QMessageBox.critical(self, 'ERROR', "Es obligatorio introducir un nombre.") elif(not self.check_mail): QtWidgets.QMessageBox.critical(self, 'ERROR', "El e-mail no és correcto.") else: try: sql_con.add_patient(self.dni.text(), self.nom.text(), self.cognom.text(), self.medicos.currentText(), self.direccio.text(), self.telefon.text(), self.mail.text(), self.sip.text(), self.altura.text(), self.pes.text(), self.naiximent.text(), self.hombre.isChecked(), self.diagnostic.text(), self.fase.currentIndex(), self.imc.text(), self.grasa.text(), self.medicacio.toPlainText(), photo_to_blob(self.fotoCara.pixmap()), photo_to_blob(self.fotoCuerpo.pixmap())) QtWidgets.QMessageBox.information(self, 'Paciente añadido', "¡El paciente ha sido añadido con éxito!") if comprobation_message('Añadir otro paciente', '¿Quieres añadir otro paciente?'): # If OK is clicked in the button self.dni.setText("") self.nom.setText("") self.cognom.setText("") else: self.close() except sqlite.sqlite3.IntegrityError as e: QtWidgets.QMessageBox.critical(self, 'ERROR', "Ya existe un paciente con este DNI") print(e) finally: sql_con.close()
def check_patients_without_doctor(self): sql_con = sqlite.sqlite_connector() patients_without_doctor = sql_con.get_patients_no_doctor() sql_con.close() for patient in patients_without_doctor: if comprobation_message('Paciente sin médico', 'El paciente '+patient[1]+" "+patient[2]+' ('+patient[0]+'), no tiene ningún médico asignado ya que el que tenía se ha eliminado. ¿Quieres añadirle un nuevo médico ahora?'): self.new_window = edit_patient.Edit_patient(patient[0], True)
def show_patients(self): sql_con = sqlite.sqlite_connector() patients = sql_con.get_patient_names(self.current_user) for patient in patients: self.patients_dni.append(patient[2]) # Guardem el DNI de l'usuari self.model.appendRow(QtGui.QStandardItem(patient[0]+" "+patient[1])) sql_con.close()
def save_data(self): """ Desa tots els canvis """ sql_con = sqlite.sqlite_connector() times = [float(self.tiempoTotal_min.text()), float(self.tiempoTotal_max.text()), float(self.seg1_min.text()), float(self.seg1_max.text()), float(self.seg2_min.text()), float(self.seg2_max.text()), float(self.seg3_min.text()), float(self.seg3_max.text())] sql_con.set_new_segments_time(times)
def load_data(self): self.set_editable_text(False) self.cancelarButton.hide() self.guardarButton.hide() self.newPatientButton.show() sql_con = sqlite.sqlite_connector() data = sql_con.get_patient_data(self.patient_dni) sql_con.close() self.dni.setText(data[0]) self.nom.setText(data[1]) self.cognom.setText(data[2]) self.direccio.setText(data[4]) self.telefon.setText(str(data[5])) self.mail.setText(data[6]) self.sip.setText(str(data[7])) self.altura.setText(str(data[8])) self.pes.setText(str(data[9])) self.naiximent.setDate(QtCore.QDate.fromString(data[10], "dd/MM/yyyy")) if (data[11] != 'M'): self.mujer.setChecked(True) self.diagnostic.setDate(QtCore.QDate.fromString( data[12], "dd/MM/yyyy")) self.fase.setCurrentIndex(data[13]) self.imc.setText(str(data[14])) self.grasa.setText(str(data[15])) self.medicacio.setText(data[16]) self.fotoCara.setPixmap(self.blob_to_pixmap(data[17])) self.fotoCuerpo.setPixmap(self.blob_to_pixmap(data[18]))
def delete_patient(self): if comprobation_message('Comprobación', '¿Estás seguro de querer eliminar al paciente '+self.patient_item.text()+' (DNI: '+self.patients_dni[self.model.indexFromItem(self.patient_item).row()]+')?'): sql_con = sqlite.sqlite_connector() sql_con.delete_patient(self.patients_dni[self.model.indexFromItem(self.patient_item).row()]) sql_con.close() QtWidgets.QMessageBox.information(self, 'Confirmación', "El paciente ha sido eliminado con éxito.") self.refresh_list() self.borrarPaciente.hide()
def refresh_table(self): sql_con = sqlite.sqlite_connector() self.patient_info.setText( "Paciente: " + sql_con.get_patient_name(self.doctor, self.patient_dni)) self.model = TableModel(sql_con.get_patient_times(self.patient_dni)) sql_con.close() self.info_table.setModel(self.model) self.info_table.clicked.connect(self.on_table_click)
def load_doctors(combobox, doctor): sql_con = sqlite.sqlite_connector() doctors = sql_con.get_users() sql_con.close() for i in range(0, len(doctors)): combobox.addItem(doctors[i][0]) if(doctor == doctors[i][0]): combobox.setCurrentIndex(i) return combobox
def fill_combo(self): """ Funció que plena el QComboBox amb tots els pacients del metge actual """ sql_con = sqlite.sqlite_connector() # Arrepleguem la connexió a SQLite patients = sql_con.get_patient_names(self.current_user) # Arrepleguem una matriu amb les dades de tots els pacients del metge actual sql_con.close() # Tanquem la connexió una vegada recuperades les dades for patient in patients: self.patients_dni.append(patient[2]) # Ens guardem els DNI de tots els pacients de forma interna self.comboPatients.addItem(patient[0]+" "+patient[1]) # Afegim el nom i cognom al QComboBox
def delete_test(self): if self.current_index != -1: sql_con = sqlite.sqlite_connector() sql_con.delete_test(self.model.getData()[self.current_index][0], self.patient_dni) self.current_index = -1 self.delete_selected_test.setEnabled(False) self.times_changed.emit() self.refresh_table() else: print("Error muffled by delete_test function in chrono.py.")
def save_times(self): """ Aquesta funció crida al controlador de la DB per guardar una llista de temps al pacient actual """ sql_con = sqlite.sqlite_connector() # Creem la connexió sql_con.save_lap_times(self.lap_times, self.current_patient, self.observations.toPlainText()) # Guardem els temps en l'usuari actual sql_con.close() # Tanquem la connexió self.saveIcon.hide() # Amaguem l'icona de guardar ja que ja s'ha guardat self.observations.setText("") #Borrem el text de les observacions self.show_patient_graph() # Afegim aquest ultim temps a la gràfica self.saved_message_thread.start() # Escomencem el thread que mostrarà que el temps ha sigut guardat
def show_patient_graph(self): """ Mostra/Carrega la gràfica del pacient """ sql_con = sqlite.sqlite_connector() # Arrepleguem el connector a la BD total_times = sql_con.get_patient_total_times( self.current_patient ) # Arrepleguem en forma de llista tots els temps dels pacients seg1_times = sql_con.get_patient_segment_times(self.current_patient, "lap1") seg2_times = sql_con.get_patient_segment_times(self.current_patient, "lap2") seg3_times = sql_con.get_patient_segment_times(self.current_patient, "lap3") dates = sql_con.get_patient_dates( self.current_patient ) # Arrepleguem els díes en els que es van realitzar les proves (Son llistes paral.leles) sql_con.close() # Tanquem la connexió self.graph.clear() # Esborrem tot el que hi ha en el gràfic self.graph.addLegend() # Inicialitzem la llegenda self.graph.plot(dates, total_times, name="Total", pen=pg.mkPen(color=(162, 173, 194), width=4), symbol='o', symbolSize=10, symbolBrush=(0, 0, 0)) # Mostrem les dades self.graph.plot(dates, seg1_times, name="Segmento 1", pen=pg.mkPen(color=(255, 0, 0), width=4), symbol='o', symbolSize=5, symbolBrush=(0, 0, 0)) self.graph.plot(dates, seg2_times, name="Segmento 2", pen=pg.mkPen(color=(255, 255, 0), width=4), symbol='o', symbolSize=5, symbolBrush=(0, 0, 0)) self.graph.plot(dates, seg3_times, name="Segmento 3", pen=pg.mkPen(color=(255, 0, 255), width=4), symbol='o', symbolSize=5, symbolBrush=(0, 0, 0))
def change_pass(self): sql_con = sqlite.sqlite_connector() acces_granted = sql_con.is_admin(self.current_user) if (not acces_granted): # Si no és admin i no és ell mateix last_passwd, ok = QtWidgets.QInputDialog.getText( self, 'Identifícate', 'Introduzca su contraseña actual, ' + self.dni, QtWidgets.QLineEdit.Password) if ok: if (not sql_con.login( self.dni, last_passwd)): # SI L'AUTENTICACIÓ NO ÉS CORRECT QtWidgets.QMessageBox.critical(self, 'ERROR', "Contraseña incorrecta.") sql_con.close() return else: acces_granted = True else: sql_con.close() return valid_password = False while (not valid_password): passwd, ok = QtWidgets.QInputDialog.getText( self, 'Cambio de contraseña para usuario ' + self.dni, 'Introduzca la nueva contraseña: (8 carácteres o más)', QtWidgets.QLineEdit.Password) if ok: if (len(passwd) < 8): QtWidgets.QMessageBox.critical( self, 'ERROR', "La contraseña debe ser de 8 carácteres o más") else: check_passwd, ok2 = QtWidgets.QInputDialog.getText( self, 'Cambio de contraseña para usuario ' + self.dni, 'Repite la contraseña: ', QtWidgets.QLineEdit.Password) if ok2: if (check_passwd != passwd): QtWidgets.QMessageBox.critical( self, 'ERROR', "Las contraseñas no coinciden") else: valid_password = True else: sql_con.close() return sql_con.change_password(self.dni, passwd) QtWidgets.QMessageBox.information( self, 'Contraseña actualizada', "¡La contraseña ha sido actualizada con éxito!") sql_con.close()
def show_times(self): sql_con = sqlite.sqlite_connector() self.seg1_max.setText(str(sql_con.get_segment_time("seg1_max_time"))) self.seg1_min.setText(str(sql_con.get_segment_time("seg1_min_time"))) self.seg2_max.setText(str(sql_con.get_segment_time("seg2_max_time"))) self.seg2_min.setText(str(sql_con.get_segment_time("seg2_min_time"))) self.seg3_max.setText(str(sql_con.get_segment_time("seg3_max_time"))) self.seg3_min.setText(str(sql_con.get_segment_time("seg3_min_time"))) self.tiempoTotal_max.setText(str(sql_con.get_segment_time("total_max_time"))) self.tiempoTotal_min.setText(str(sql_con.get_segment_time("total_min_time"))) sql_con.close()
def manage_user(self, index): self.dni = self.model.itemFromIndex(index).text() sql_con = sqlite.sqlite_connector() if (sql_con.is_admin(self.current_user) or self.dni == self.current_user): self.changePass.show() else: self.changePass.hide() if (sql_con.is_admin(self.current_user)): self.deleteUser.show() else: self.deleteUser.hide() sql_con.close()
def create_user(self): dni = self.user.text() passwd = self.passwd.text() if (len(dni) < 9 ): # Major que 9 no pot ser perque està controlat a l'interfície QtWidgets.QMessageBox.critical(self, 'ERROR', "El DNI debe ser de 9 dígitos.") elif (self.dni_letters[int(dni[:-1]) % 23] != dni[-1]): QtWidgets.QMessageBox.critical(self, 'ERROR', "Letra del DNI errónea") elif (len(passwd) < 8): QtWidgets.QMessageBox.critical( self, 'ERROR', "La contraseña no puede ser menor a 8 carácteres.") elif (passwd != self.repeat_pass.text()): QtWidgets.QMessageBox.critical(self, 'ERROR', "Las contraseñas no coinciden.") else: try: sql_con = sqlite.sqlite_connector() if (self.first_user): sql_con.create_initial_table() # Creem les taules inicials sql_con.create_user(dni, passwd, self.adminCheck.isChecked()) QtWidgets.QMessageBox.information( self, 'Usuario añadido', "¡El usuario ha sido añadido con éxito!") if comprobation_message('Añadir otro usuario', '¿Quieres añadir otro usuario?' ): # If OK is clicked in the button self.user.setText("") self.passwd.setText("") self.repeat_pass.setText("") try: self.adminCheck.toggled.disconnect(self.set_true) except TypeError: pass else: self.close() except sqlite.sqlite3.IntegrityError: QtWidgets.QMessageBox.critical( self, 'ERROR', "Ya existe un usuario con este DNI") finally: self.user.setText("") self.passwd.setText("") self.repeat_pass.setText("")
def __init__(self, current_user, current_patient): super(Patient_info, self).__init__() # Call the inherited classes __init__ method uic.loadUi("test"+path_separator+'UI'+path_separator+'patient_info.ui', self) # Load the .ui file self.show() # Show the GUI self.patient_info.setAlignment(QtCore.Qt.AlignCenter) self.patient_dni = current_patient doctor = current_user sql_con = sqlite.sqlite_connector() self.patient_info.setText("Paciente: "+sql_con.get_patient_name(doctor, self.patient_dni)) self.model = TableModel(sql_con.get_patient_times(self.patient_dni)) sql_con.close() self.info_table.setModel(self.model) self.info_table.clicked.connect(self.editar)
def login_button_clicked(self): """ L'acció a realitzar una vegada s'apreta el botó de login """ sql_con = sqlite.sqlite_connector() # Agafem el connector de SQLite if (sql_con.get_con() == None): # Si el conector retorna "None" QtWidgets.QMessageBox.critical( self, 'Error', "No existe ninguna base de datos. Prueba importando una con Ctrl+i o reiniciando la aplicación para crear un nuevo usuario." ) # Mostrem un missatge emergent d'error else: # Si no retorna "None" significa que ha establit connexió, per tant la BD ja està creada if (sql_con.login( self.user.text(), self.passwd.text())): # Si les credencials son correctes sql_con.close() # Tanquem la connexió self.load_new_window() # Anem carregant la nova finestra else: # Si les credencials son incorrectes QtWidgets.QMessageBox.critical( self, 'Error de autentificación', "DNI i/o contraseña incorrecta." ) # Mostrem un missatge emergent d'error
def delete_user(self): if self.current_user == self.dni: # Arreglar aço QtWidgets.QMessageBox.critical( self, 'ERROR', "No puedes eliminar tu propio usuario.") else: if comprobation_message( 'Comprobación', '¿Estás seguro de querer eliminar al usuario ' + self.dni + '?'): sql_con = sqlite.sqlite_connector() if (sql_con.delete_user(self.dni)): QtWidgets.QMessageBox.information( self, 'Confirmación', "El usuario ha sido eliminado con éxito.") self.refresh_list() else: QtWidgets.QMessageBox.critical( self, 'ERROR', "El usuario no puede eliminarse porque es el único administrador." ) sql_con.close()
def get_lap_type(lap, time, seg_id=-1): sql_con = sqlite.sqlite_connector() if (lap == -1): # -1 és temps total minTotalTime = sql_con.get_segment_time("total_min_time", seg_id) maxTotalTime = sql_con.get_segment_time("total_max_time", seg_id) if (time < minTotalTime): return "Leve" elif (time > maxTotalTime): return "Grave" else: return "Moderado" elif (lap == 0): minTime = sql_con.get_segment_time("seg1_min_time", seg_id) maxTime = sql_con.get_segment_time("seg1_max_time", seg_id) if (time < minTime): return "Leve" elif (time > maxTime): return "Grave" else: return "Moderado" elif (lap == 1): minTime = sql_con.get_segment_time("seg2_min_time", seg_id) maxTime = sql_con.get_segment_time("seg2_max_time", seg_id) if (time < minTime): return "Leve" elif (time > maxTime): return "Grave" else: return "Moderado" else: minTime = sql_con.get_segment_time("seg3_min_time", seg_id) maxTime = sql_con.get_segment_time("seg3_max_time", seg_id) if (time < minTime): return "Leve" elif (time > maxTime): return "Grave" else: return "Moderado"
def edit(self): sql_con = sqlite.sqlite_connector() sql_con.edit_observations(self.patient,self.textEditObservaciones.toPlainText(),self.date) sql_con.close() self.hide()
def show_users(self): users = sqlite.sqlite_connector().get_users() for user in users: row = QtGui.QStandardItem(user[0]) self.model.appendRow(row)
def __init__(self): super(Users_management, self).__init__() # Call the inherited classes __init__ method uic.loadUi("test" + path_separator + 'UI' + path_separator + 'users.ui', self) # Load the .ui file self.show() # Show the GUI self.deleteUser.clicked.connect(self.delete_user) self.changePass.clicked.connect(self.change_pass) self.newUser.clicked.connect(self.create_user) self.refreshList.clicked.connect(self.refresh_list) self.pacientesIcon.clicked.connect(self.open_patients_menu) self.settingsIcon.clicked.connect(self.open_settings) config = load_properties() self.current_user = config.get('UsersSection', 'currentUser') self.model = QtGui.QStandardItemModel() self.usersList.setModel(self.model) self.usersList.clicked.connect(self.manage_user) self.refresh_list() self.dni = "" sql_con = sqlite.sqlite_connector() if (sql_con.is_admin(self.current_user)): self.newUser.show() else: self.newUser.hide() sql_con.close() self.cronIcon.clicked.connect(self.return_to_chrono) self.changePass.setStyleSheet( "QPushButton#changePass{ border: 2px solid #717987; font-weight: bold; color: white; background-color: #a2adc2; } QPushButton#changePass::hover{ background-color: #BDC5D4;} QPushButton#changePass::pressed{background-color: #717987;}" ) self.deleteUser.setStyleSheet( "QPushButton#deleteUser{ border: 2px solid #717987; font-weight: bold; color: white; background-color: #a2adc2; } QPushButton#deleteUser::hover{ background-color: #BDC5D4;} QPushButton#deleteUser::pressed{background-color: #717987;}" ) self.newUser.setStyleSheet( "QPushButton#newUser{ border: 2px solid #717987; font-weight: bold; color: white; background-color: #a2adc2; } QPushButton#newUser::hover{ background-color: #BDC5D4;} QPushButton#newUser::pressed{background-color: #717987;}" ) self.refreshList.setStyleSheet( "QPushButton#refreshList{ border: 2px solid #717987; font-weight: bold; color: white; background-color: #a2adc2; } QPushButton#refreshList::hover{ background-color: #BDC5D4;} QPushButton#refreshList::pressed{background-color: #717987;}" ) self.centralwidget.setStyleSheet( "QWidget#centralwidget{ background-color: #fdfdff}") self.barraLateral.setStyleSheet( "QWidget#barraLateral{ background-color: #555860; }") self.cronIcon.setStyleSheet( "QPushButton#cronIcon::hover{ border: none; background-color: #a2adc2;} QPushButton#cronIcon::pressed{background-color: #222628;}" ) self.users.setStyleSheet( "QPushButton#users::hover{ border: none; background-color: #a2adc2;} QPushButton#users::pressed{background-color: #222628;}" ) self.pacientesIcon.setStyleSheet( "QPushButton#pacientesIcon::hover{ border: none; background-color: #a2adc2;} QPushButton#pacientesIcon::pressed{background-color: #222628;}" ) self.settingsIcon.setStyleSheet( "QPushButton#settingsIcon::hover{ border: none; background-color: #a2adc2;} QPushButton#settingsIcon::pressed{background-color: #222628;}" )