From f799a01e145b931db410de8f29c91c289acc2613 Mon Sep 17 00:00:00 2001 From: WorldTeacher <41587052+WorldTeacher@users.noreply.github.com> Date: Tue, 18 Jun 2024 14:13:12 +0200 Subject: [PATCH] changes + bugfix change logger code add functionality to detect correct deletable semaps based on semester data --- src/ui/widgets/searchPage.py | 70 ++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 14 deletions(-) diff --git a/src/ui/widgets/searchPage.py b/src/ui/widgets/searchPage.py index 9a2fd78..42e92f2 100644 --- a/src/ui/widgets/searchPage.py +++ b/src/ui/widgets/searchPage.py @@ -22,6 +22,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): def __init__(self): self.logger = MyLogger("SearchStatisticPage") + self.logger.log_info("SearchStatisticPage started") super().__init__() self.setupUi(self) self.book_search_result.horizontalHeader().setSectionResizeMode( @@ -46,6 +47,8 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): self.tableWidget.resizeColumnsToContents() self.tableWidget.resizeRowsToContents() self.db = Database() + self.box_appnrs.addItems(str(i) for i in self.db.getUnavailableApparatNumbers()) + self.populate_tab() def restore_apparat(self): @@ -148,11 +151,13 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): for i in range(rows): self.statistics_table.setRowHeight(i, rowheight) + def __table_or_graph(self): + return self.tabWidget_3.currentIndex() + def gridchange(self): print("gridchange") if self.check_deletable.isChecked(): self.box_semester.setEnabled(False) - self.box_semester.clear() self.box_appnrs.setEnabled(False) self.box_appnrs.clear() self.box_person.setEnabled(False) @@ -163,6 +168,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): self.box_erstellsemester.clear() self.box_dauerapp.setEnabled(False) self.box_dauerapp.clear() + self.populate_tab(self.__table_or_graph()) else: self.box_semester.setEnabled(True) self.box_appnrs.setEnabled(True) @@ -172,6 +178,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): self.box_dauerapp.setEnabled(True) def populate_tab(self, table_or_graph=0): + self.logger.log_info("populate_tab started") # add default values to the dropdowns self.box_appnrs.clear() self.box_appnrs.addItem("") @@ -201,6 +208,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): self.box_fach.addItems(subject[1] for subject in self.db.getSubjects()) semester = self.db.getSemersters() self.box_erstellsemester.addItems(semester) + self.box_semester.addItems(semester) self.statistics_table.setRowCount(0) # set data for table and graph in tab 2 tableWidget_3 @@ -233,9 +241,9 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): # place the graph into tabWidget_3 self.tabWidget_3.addTab(graph, "Graph") self.tabWidget_3.setCurrentIndex(table_or_graph) + self.logger.log_info("populate_tab finished") def delete_selected_apparats(self): - table_or_graph = self.tabWidget_3.currentIndex() # get all selected apparats selected_apparats = [] selected_apparat_rows = [] @@ -245,6 +253,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): selected_apparat_rows.append(i) # delete all selected apparats # print(selected_apparats) + self.logger.log_info(f"Deleting apparats: {selected_apparats}") for apparat in selected_apparats: self.db.deleteApparat(apparat, generateSemesterByDate()) for row in selected_apparat_rows: @@ -252,11 +261,12 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): for j in range(5): self.tableWidget.item(row, j).setBackground(QtGui.QColor(235, 74, 71)) # refresh the table - self.populate_tab(table_or_graph) + self.populate_tab(self.__table_or_graph()) self.btn_del_select_apparats.setEnabled(False) def statistics(self): """Generate the statistics based on the selected filters.""" + active_semseter = generateSemesterByDate() self.db_err_message.setText("") self.btn_del_select_apparats.setEnabled(True) self.btn_notify_for_deletion.setEnabled(True) @@ -284,7 +294,9 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): "dauer": ( "1" if self.box_dauerapp.currentText() == "Ja" - else "0" if self.box_dauerapp.currentText() == "Nein" else None + else "0" + if self.box_dauerapp.currentText() == "Nein" + else None ), "endsemester": ( self.box_semester.currentText() @@ -292,7 +304,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): else None ), "deletable": "True" if self.check_deletable.isChecked() else None, - "deletesemester": generateSemesterByDate(), + "deletesemester": active_semseter, } params = { key: value for key, value in params.items() if value is not None @@ -300,27 +312,52 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): params = { key: value for key, value in params.items() if value != "Alle" } # remove empty lines to prevent errors + print(params) result = self.db.statistic_request(**params) # add QTableWidgetItems to the table - self.tableWidget.setRowCount(len(result)) + # self.tableWidget.setRowCount(len(result)) if len(result) == 0: self.db_err_message.setText("Keine Ergebnisse gefunden") return - for i in range(len(result)): + data = [] + sem_year = active_semseter.split(" ")[1] + sem_time = active_semseter.split(" ")[0] + if sem_time == "WiSe": + sem_year = int(sem_year.split("/")[0]) + else: + sem_year = int(sem_year) + print(sem_year) + for entry in result: + if "deletable" in params.keys(): + entry_sem_time = entry[5].split(" ")[0] + entry_sem_year = entry[5].split(" ")[1] + if entry_sem_time == "SoSe": + entry_sem_year = int(entry_sem_year) + if (entry_sem_year < sem_year) or ( + sem_time == "WiSe" and entry_sem_year == sem_year + ): + data.append(entry) + else: + entry_sem_year = int(entry_sem_year.split("/")[0]) + if entry_sem_year < sem_year: + data.append(entry) + else: + data.append(entry) + self.tableWidget.setRowCount(len(data)) + for i in range(len(data)): + print("adding", data[i][1]) # set the items 0 = clickable checkbox, 1 = appname, 2 = profname, 3 = fach self.tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem("")) - self.tableWidget.setItem(i, 1, QtWidgets.QTableWidgetItem(result[i][1])) - self.tableWidget.setItem( - i, 2, QtWidgets.QTableWidgetItem(str(result[i][4])) - ) - self.tableWidget.setItem(i, 3, QtWidgets.QTableWidgetItem(result[i][2])) - self.tableWidget.setItem(i, 4, QtWidgets.QTableWidgetItem(result[i][3])) + self.tableWidget.setItem(i, 1, QtWidgets.QTableWidgetItem(data[i][1])) + self.tableWidget.setItem(i, 2, QtWidgets.QTableWidgetItem(str(data[i][4]))) + self.tableWidget.setItem(i, 3, QtWidgets.QTableWidgetItem(data[i][2])) + self.tableWidget.setItem(i, 4, QtWidgets.QTableWidgetItem(data[i][3])) # replace the 0 with a checkbox checkbox = QtWidgets.QCheckBox() checkbox.setChecked(False) self.tableWidget.setCellWidget(i, 0, checkbox) # if i[9] is 1, set the background of the row to red - if int(result[i][9]) == 1: + if int(data[i][9]) == 1: for j in range(5): self.tableWidget.item(i, j).setBackground(QtGui.QColor(235, 74, 71)) # disable the checkbox @@ -329,6 +366,11 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog): self.tableWidget.cellWidget(i, 0).setToolTip( "Dieser Semesterapparat kann nicht gelöscht werden, da er bereits gelöscht wurde" ) + # # remove empty rows + for row in range(self.tableWidget.rowCount()): + print(row, self.tableWidget.item(row, 1)) + if self.tableWidget.item(row, 1) is None: + self.tableWidget.removeRow(row) def display_detailed_data(self): selected_semester = self.statistics_table.item(