diff --git a/src/ui/userInterface.py b/src/ui/userInterface.py index 8886c24..f43dc32 100644 --- a/src/ui/userInterface.py +++ b/src/ui/userInterface.py @@ -13,6 +13,7 @@ from omegaconf import OmegaConf from PyQt6 import QtCore, QtGui, QtWidgets from PyQt6.QtCore import QDate, QThread from PyQt6.QtGui import QRegularExpressionValidator +import yaml from src import Icon from src.backend import ( @@ -32,7 +33,6 @@ from src.logic import ( BookGrabber, MyLogger, csv_to_list, - custom_sort, elsa_word_to_csv, word_docx_to_csv, ) @@ -325,6 +325,13 @@ class Ui(Ui_Semesterapparat): self.db.createElsaApparat(date, prof, semester) self.cancel_elsa_creation() + self.refresh_elsa_table() + + def refresh_elsa_table(self): + self.elsa_table.setRowCount(0) + elsa_apparats = self.db.getElsaApparats() + for apparat in elsa_apparats: + self.insert_elsa_into_table(apparat) def insert_elsa_into_table(self, apparat): self.elsa_table.insertRow(0) @@ -859,9 +866,8 @@ class Ui(Ui_Semesterapparat): self.chkbx_show_del_media.show() self.cancel_active_selection.setEnabled(False) - def confirm_popup(self, message: str): - popup = popus_confirm() - popup.setupUi() + def confirm_popup(self, message: str, title: str): + popup = popus_confirm(title=title) popup.textEdit.setReadOnly(True) popup.textEdit.setText(message) @@ -1104,7 +1110,7 @@ class Ui(Ui_Semesterapparat): def btn_add_medium(self): if not self.app_group_box.isEnabled(): - self.confirm_popup("Bitte erst einen Apparat auswählen!") + self.confirm_popup("Bitte erst einen Apparat auswählen!", title="Fehler") return def __new_ui(): @@ -1130,10 +1136,11 @@ class Ui(Ui_Semesterapparat): # check if app_id is in database if not self.db.checkApparatExists(app_id): # create apparat - self.btn_save_apparat() + self.btn_save_apparat(False) # create a thread that updates the progress label after each medium + self.bookGrabber = BookGrabber( - mode=mode, app_id=app_id, prof_id=prof_id, data=data + mode=mode, prof_id=prof_id, app_id=app_id, data=data ) self.bookGrabber.finished.connect(self.bookGrabber.deleteLater) self.bookGrabber.finished.connect(self.hide_progress_label) @@ -1141,6 +1148,10 @@ class Ui(Ui_Semesterapparat): self.bookGrabber.updateSignal.connect(self.update_progress_label) self.bookGrabber.start() + while self.bookGrabber.isRunning(): + print("waiting for thread to finish") + QtWidgets.QApplication.processEvents() + self.__clear_fields() else: return @@ -1324,7 +1335,6 @@ class Ui(Ui_Semesterapparat): print("Add document") picker = FilePicker() files = picker.pick_files() - for file in files: print(file) filename = file.split("/")[-1] @@ -1353,7 +1363,7 @@ class Ui(Ui_Semesterapparat): self.dokument_list.currentRow(), 1 ).text() except AttributeError: - self.confirm_popup("Bitte erst ein Dokument auswählen!") + self.confirm_popup("Bitte erst ein Dokument auswählen!", title="Fehler") return if not _selected_doc_location == "Database": path = Path(_selected_doc_location) @@ -1426,7 +1436,9 @@ class Ui(Ui_Semesterapparat): print(file) if file_type == "pdf": # Todo: implement parser here - self.confirm_popup("PDF Dateien werden nochnicht unterstützt!") + self.confirm_popup( + "PDF Dateien werden nochnicht unterstützt!", title="Fehler" + ) return if file_type == "csv": signatures = csv_to_list(file) @@ -1477,10 +1489,12 @@ class Ui(Ui_Semesterapparat): # check if apparat in database # if app_id not in database, create apparat + created = False if not self.db.checkApparatExistsById(app_id): # create apparat print("Creating apparat") - self.btn_save_apparat() + self.btn_save_apparat(False) + created = True if self.dokument_list.rowCount() == 0: print("No file selected") self.tableWidget_apparate.setEnabled(True) @@ -1503,10 +1517,13 @@ class Ui(Ui_Semesterapparat): if file_location == "Database": file = recreateFile(file_name, app_id, file_type, open=False) else: - self.add_files() + if not created: + self.add_files() if file_type == "pdf": # Todo: implement parser here - self.confirm_popup("PDF Dateien werden noch nicht unterstützt!") + self.confirm_popup( + "PDF Dateien werden noch nicht unterstützt!", title="Fehler" + ) return if file_type == "csv": signatures = csv_to_list(file) @@ -1525,59 +1542,57 @@ class Ui(Ui_Semesterapparat): self.autoGrabber = BookGrabber( mode="ARRAY", app_id=app_id, prof_id=prof_id, data=signatures ) - # grabber.mode = "ARRAY" - # grabber.data = signatures - # grabber.app_id = app_id - # grabber.prof_id = prof_id - # grabber.moveToThread(thread) self.label_info.show() self.progress_label.show() self.line_2.show() # grabber.finished.connect(thread.quit) self.autoGrabber.finished.connect(self.autoGrabber.deleteLater) self.autoGrabber.finished.connect(self.hide_progress_label) - self.autoGrabber.finished.connect(self.update_app_media_list) self.autoGrabber.finished.connect(self.unlock_apparate) self.autoGrabber.updateSignal.connect(self.update_progress_label) # worker.finished.connect(worker.deleteLater) self.autoGrabber.start() - # self.thread = thread - # kill grabber after completion - # self.grabbers.append(grabber) - + while self.autoGrabber.isRunning(): + QtWidgets.QApplication.processEvents() + # end of thread + # self.autoGrabber.exit() + self.update_app_media_list() + self.__clear_fields() + self.btn_cancel_active_selection() def unlock_apparate(self): self.tableWidget_apparate.setEnabled(True) self.tableWidget_apparate.setToolTip("") - def btn_save_apparat(self): - def __clear_fields(): - self.drpdwn_app_nr.clear() - self.prof_title.clear() - self.drpdwn_prof_name.clearMask() - self.app_name.clear() - self.prof_mail.clear() - self.prof_tel_nr.clear() - self.app_fach.setCurrentText("") - self.app_name.clear() - self.sem_year.clear() - self.dokument_list.setRowCount(0) - self.sem_winter.setChecked(False) - self.sem_sommer.setChecked(False) - self.check_eternal_app.setChecked(False) - self.prof_id_adis.clear() - self.prof_id_adis.clear() - self.apparat_id_adis.clear() - self.drpdwn_prof_name.clear() - self.tableWidget_apparat_media.setRowCount(0) - self.app_group_box.setEnabled(False) - self.groupBox_2.hide() - self.groupBox.hide() - self.check_send_mail.setChecked(False) - self.cancel_active_selection.setEnabled(False) + def __clear_fields(self): + self.drpdwn_app_nr.setCurrentText("") + self.prof_title.clear() + self.drpdwn_prof_name.clearMask() + self.drpdwn_prof_name.setCurrentText("") + self.app_name.clear() + self.prof_mail.clear() + self.prof_tel_nr.clear() + self.app_fach.setCurrentText("") + self.app_name.clear() + self.sem_year.clear() + self.dokument_list.setRowCount(0) + self.sem_winter.setChecked(False) + self.sem_sommer.setChecked(False) + self.check_eternal_app.setChecked(False) + self.prof_id_adis.clear() + self.prof_id_adis.clear() + self.apparat_id_adis.clear() + self.drpdwn_prof_name.clear() + self.tableWidget_apparat_media.setRowCount(0) + self.app_group_box.setEnabled(False) + self.groupBox_2.hide() + self.groupBox.hide() + self.check_send_mail.setChecked(False) + self.cancel_active_selection.setEnabled(False) + def btn_save_apparat(self, clear_fields=True): if not self.validate_fields(): - self.confirm_popup("Bitte alle Pflichtfelder ausfüllen!") + self.confirm_popup("Bitte alle Pflichtfelder ausfüllen!", title="Fehler") return appd = ApparatData() appd.appnr = self.active_apparat @@ -1601,7 +1616,7 @@ class Ui(Ui_Semesterapparat): pass self.db.createApparat(appd) # if self.dokument_list.rowCount() > 0: - self.add_files() + # self.add_files() appdata = self.db.getAllAparats() # merge self.appdata and appdata, remove duplicates self.apparats = list(set(self.apparats + appdata)) @@ -1614,7 +1629,8 @@ class Ui(Ui_Semesterapparat): self.contact_prof( apparat=appd.appnr, mail="Information zum Semesterapparat" ) - __clear_fields() + if clear_fields: + self.__clear_fields() def send_mail_preview(self): pass @@ -1837,7 +1853,7 @@ class Ui(Ui_Semesterapparat): signature=signature, ) message = f'Soll das Medium "{self.tableWidget_apparat_media.item(self.tableWidget_apparat_media.currentRow(),0).text()}" wirklich gelöscht werden?' - state = self.confirm_popup(message) + state = self.confirm_popup(message, title="Löschen?") print(state) if state == 1: self.db.deleteBook(book_id) @@ -1853,7 +1869,7 @@ class Ui(Ui_Semesterapparat): rows.append(row) print(rows) message = f"Sollen die {len(rows)} Medien wirklich gelöscht werden?" - state = self.confirm_popup(message) + state = self.confirm_popup(message, title="Löschen?") if state == 1: for _ in rows: signature = self.tableWidget_apparat_media.item(_, 1).text() @@ -1891,7 +1907,9 @@ class Ui(Ui_Semesterapparat): print(apparat) if self.active_apparat == "": if apparat is False: - self.confirm_popup("Bitte erst einen Apparat auswählen!") + self.confirm_popup( + "Bitte erst einen Apparat auswählen!", title="Apparat auswählen" + ) return else: # TODO: stuff