From 560d8285b5581b2fb6af90a49f2e5ef1efdab3b8 Mon Sep 17 00:00:00 2001 From: WorldTeacher Date: Fri, 10 Oct 2025 09:10:06 +0200 Subject: [PATCH] Feat: add delete edition dialog with fuzzy search --- icons/trash.svg | 1 + src/backend/database.py | 28 +- src/ui/dialogs/__init__.py | 2 + src/ui/dialogs/deletedialog.py | 129 +++++ src/ui/dialogs/dialog_sources/deletedialog.ui | 138 +++++ .../dialogs/dialog_sources/deletedialog_ui.py | 122 ++++ src/ui/semesterapparat_ui.ui | 542 +++++++++--------- src/ui/semesterapparat_ui_ui.py | 443 +++++++------- src/ui/userInterface.py | 44 +- 9 files changed, 936 insertions(+), 513 deletions(-) create mode 100644 icons/trash.svg create mode 100644 src/ui/dialogs/deletedialog.py create mode 100644 src/ui/dialogs/dialog_sources/deletedialog.ui create mode 100644 src/ui/dialogs/dialog_sources/deletedialog_ui.py diff --git a/icons/trash.svg b/icons/trash.svg new file mode 100644 index 0000000..07f045b --- /dev/null +++ b/icons/trash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/database.py b/src/backend/database.py index a49e083..99a945a 100644 --- a/src/backend/database.py +++ b/src/backend/database.py @@ -544,7 +544,15 @@ class Database: ret_result.append(data) return ret_result - def getAllBooks(self): + def getAllBooks(self) -> list[dict[str, Union[int, BookData]]]: + """ + Get all books in the database that are not set as deleted + + Returns + ------- + list[dict[str, Union[int, BookData]]] + A list of dictionaries containing the id and the metadata of the book + """ # return all books in the database qdata = self.query_db("SELECT id,bookdata FROM media WHERE deleted=0") ret_result: list[dict[str, Any]] = [] @@ -558,6 +566,14 @@ class Database: ret_result.append(data) return ret_result + def getApparatNrByBookId(self, book_id): + appNr = self.query_db( + "SELECT appnr FROM semesterapparat WHERE id IN (SELECT app_id FROM media WHERE id=?)", + (book_id,), + one=True, + ) + return appNr[0] if appNr else None + def getBooksByProfId( self, prof_id: int, deleted: int = 0 ) -> list[dict[str, Union[int, BookData]]]: @@ -611,6 +627,16 @@ class Database: """ self.query_db("UPDATE media SET deleted=1 WHERE id=?", (book_id,)) + def deleteBooks(self, ids: list[int]): + """ + Delete multiple books from the database + + Args: + ids (list[int]): A list of book ids to be deleted + """ + query = f"UPDATE media SET deleted=1 WHERE id IN ({','.join(['?'] * len(ids))})" + self.query_db(query, tuple(ids)) + # File Interactions def getBlob(self, filename: str, app_id: Union[str, int]) -> bytes: """ diff --git a/src/ui/dialogs/__init__.py b/src/ui/dialogs/__init__.py index f08323f..a4c3242 100644 --- a/src/ui/dialogs/__init__.py +++ b/src/ui/dialogs/__init__.py @@ -14,10 +14,12 @@ __all__ = [ "DocumentPrintDialog", "NewEditionDialog", "Settings", + "DeleteDialog", ] from .about import About from .app_ext import ApparatExtendDialog from .bookdata import BookDataUI +from .deletedialog import DeleteDialog from .docuprint import DocumentPrintDialog from .elsa_add_entry import ElsaAddEntry from .elsa_gen_confirm import ElsaGenConfirm diff --git a/src/ui/dialogs/deletedialog.py b/src/ui/dialogs/deletedialog.py new file mode 100644 index 0000000..03d2e43 --- /dev/null +++ b/src/ui/dialogs/deletedialog.py @@ -0,0 +1,129 @@ +from typing import Any + +from PySide6 import QtCore, QtWidgets + +from src import Icon +from src.backend.database import Database + +from .dialog_sources.deletedialog_ui import Ui_Dialog + + +class DeleteDialog(QtWidgets.QDialog, Ui_Dialog): + def __init__(self): + super().__init__() + self.setupUi(self) + self.setWindowTitle("Medien löschen") + self.setWindowIcon(Icon("trash").icon) + self.reset_btn.clicked.connect(self.reset_selection) + self.cancel_btn.clicked.connect(self.close) + self.delete_btn.clicked.connect(self.delete_selected) + + self.db = Database() + self.books = self.setBooks() + self.lineEdit.textChanged.connect(self.populate_books) + self.populate_books() + + def delete_selected(self): + to_delete = [] + for row in range(self.tableWidget.rowCount()): + checkbox = self.tableWidget.cellWidget(row, 0) + if checkbox is not None and checkbox.isChecked(): + book_id_item = self.tableWidget.item(row, 6) + if book_id_item is not None: + book_id = int(book_id_item.text()) + to_delete.append(book_id) + if to_delete: + self.db.deleteBooks(to_delete) + self.accept() + + def reset_selection(self): + for row in range(self.tableWidget.rowCount()): + checkbox = self.tableWidget.cellWidget(row, 0) + if checkbox is not None: + checkbox.setChecked(False) + + def setBooks(self) -> list[dict[str, Any]]: + result: list[dict[str, Any]] = [] + books = self.db.getAllBooks() + for book in books: + title = book["bookdata"].title + signature = book["bookdata"].signature + edition = book["bookdata"].edition + appnr = self.db.getApparatNrByBookId(book["id"]) + result.append( + { + "id": book["id"], + "appnr": appnr, + "title": title, + "signature": signature, + "edition": edition, + } + ) + return result + + def populate_books(self): + searchterm = self.lineEdit.text().lower() + self.tableWidget.setRowCount(0) + for book in self.books: + checkbox = QtWidgets.QCheckBox() + app_nr = book["appnr"] + title = book["title"] + signature = book["signature"] + edition = book["edition"] if book["edition"] else "" + + if searchterm in title.lower() or searchterm in signature.lower(): + self.tableWidget.insertRow(self.tableWidget.rowCount()) + self.tableWidget.setCellWidget( + self.tableWidget.rowCount() - 1, 0, checkbox + ) + self.tableWidget.setItem( + self.tableWidget.rowCount() - 1, + 1, + QtWidgets.QTableWidgetItem(str(app_nr)), + ) + self.tableWidget.setItem( + self.tableWidget.rowCount() - 1, + 2, + QtWidgets.QTableWidgetItem(signature), + ) + self.tableWidget.setItem( + self.tableWidget.rowCount() - 1, + 3, + QtWidgets.QTableWidgetItem(title), + ) + self.tableWidget.setItem( + self.tableWidget.rowCount() - 1, + 4, + QtWidgets.QTableWidgetItem(edition), + ) + self.tableWidget.setItem( + self.tableWidget.rowCount() - 1, + 5, + QtWidgets.QTableWidgetItem(""), + ) + self.tableWidget.setItem( + self.tableWidget.rowCount() - 1, + 6, + QtWidgets.QTableWidgetItem(str(book["id"])), + ) + else: + continue + # set column signature to be 10px wider than the longest entry + self.tableWidget.setColumnWidth(1, 100) + self.tableWidget.setColumnWidth(2, 150) + self.tableWidget.setColumnWidth(3, 150) + self.tableWidget.setColumnWidth(4, 100) + + self.tableWidget.setColumnWidth(0, 50) + # horizontal header 0 should be centered + self.tableWidget.horizontalHeader().setDefaultAlignment( + QtCore.Qt.AlignmentFlag.AlignCenter + ) + + +def launch(): + app = QtWidgets.QApplication.instance() + if app is None: + app = QtWidgets.QApplication([]) + dialog = DeleteDialog() + dialog.exec() diff --git a/src/ui/dialogs/dialog_sources/deletedialog.ui b/src/ui/dialogs/dialog_sources/deletedialog.ui new file mode 100644 index 0000000..8670475 --- /dev/null +++ b/src/ui/dialogs/dialog_sources/deletedialog.ui @@ -0,0 +1,138 @@ + + + Dialog + + + + 0 + 0 + 1001 + 649 + + + + Dialog + + + + + + + + Medium suchen + + + + + + + Titel/Signatursuche + + + + + + + + + true + + + true + + + + + + + + + Apparat + + + + + Signatur + + + + + Titel + + + + + Auflage + + + + + ISBN + + + + + ID + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Zurücksetzen + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Löschen + + + + + + + Abbrechen + + + + + + + + + + diff --git a/src/ui/dialogs/dialog_sources/deletedialog_ui.py b/src/ui/dialogs/dialog_sources/deletedialog_ui.py new file mode 100644 index 0000000..878a448 --- /dev/null +++ b/src/ui/dialogs/dialog_sources/deletedialog_ui.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'deletedialog.ui' +## +## Created by: Qt User Interface Compiler version 6.9.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QApplication, QDialog, QHBoxLayout, QHeaderView, + QLabel, QLineEdit, QPushButton, QSizePolicy, + QSpacerItem, QTableWidget, QTableWidgetItem, QVBoxLayout, + QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(1001, 649) + self.verticalLayout = QVBoxLayout(Dialog) + self.verticalLayout.setObjectName(u"verticalLayout") + self.horizontalLayout = QHBoxLayout() + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.label = QLabel(Dialog) + self.label.setObjectName(u"label") + + self.horizontalLayout.addWidget(self.label) + + self.lineEdit = QLineEdit(Dialog) + self.lineEdit.setObjectName(u"lineEdit") + + self.horizontalLayout.addWidget(self.lineEdit) + + + self.verticalLayout.addLayout(self.horizontalLayout) + + self.tableWidget = QTableWidget(Dialog) + if (self.tableWidget.columnCount() < 7): + self.tableWidget.setColumnCount(7) + __qtablewidgetitem = QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(0, __qtablewidgetitem) + __qtablewidgetitem1 = QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(1, __qtablewidgetitem1) + __qtablewidgetitem2 = QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(2, __qtablewidgetitem2) + __qtablewidgetitem3 = QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(3, __qtablewidgetitem3) + __qtablewidgetitem4 = QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(4, __qtablewidgetitem4) + __qtablewidgetitem5 = QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(5, __qtablewidgetitem5) + __qtablewidgetitem6 = QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(6, __qtablewidgetitem6) + self.tableWidget.setObjectName(u"tableWidget") + self.tableWidget.setAlternatingRowColors(True) + self.tableWidget.horizontalHeader().setStretchLastSection(True) + + self.verticalLayout.addWidget(self.tableWidget) + + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalSpacer_2 = QSpacerItem(20, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_2.addItem(self.horizontalSpacer_2) + + self.reset_btn = QPushButton(Dialog) + self.reset_btn.setObjectName(u"reset_btn") + + self.horizontalLayout_2.addWidget(self.reset_btn) + + self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_2.addItem(self.horizontalSpacer) + + self.delete_btn = QPushButton(Dialog) + self.delete_btn.setObjectName(u"delete_btn") + + self.horizontalLayout_2.addWidget(self.delete_btn) + + self.cancel_btn = QPushButton(Dialog) + self.cancel_btn.setObjectName(u"cancel_btn") + + self.horizontalLayout_2.addWidget(self.cancel_btn) + + + self.verticalLayout.addLayout(self.horizontalLayout_2) + + + self.retranslateUi(Dialog) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) + self.label.setText(QCoreApplication.translate("Dialog", u"Medium suchen", None)) + self.lineEdit.setPlaceholderText(QCoreApplication.translate("Dialog", u"Titel/Signatursuche", None)) + ___qtablewidgetitem = self.tableWidget.horizontalHeaderItem(1) + ___qtablewidgetitem.setText(QCoreApplication.translate("Dialog", u"Apparat", None)); + ___qtablewidgetitem1 = self.tableWidget.horizontalHeaderItem(2) + ___qtablewidgetitem1.setText(QCoreApplication.translate("Dialog", u"Signatur", None)); + ___qtablewidgetitem2 = self.tableWidget.horizontalHeaderItem(3) + ___qtablewidgetitem2.setText(QCoreApplication.translate("Dialog", u"Titel", None)); + ___qtablewidgetitem3 = self.tableWidget.horizontalHeaderItem(4) + ___qtablewidgetitem3.setText(QCoreApplication.translate("Dialog", u"Auflage", None)); + ___qtablewidgetitem4 = self.tableWidget.horizontalHeaderItem(5) + ___qtablewidgetitem4.setText(QCoreApplication.translate("Dialog", u"ISBN", None)); + ___qtablewidgetitem5 = self.tableWidget.horizontalHeaderItem(6) + ___qtablewidgetitem5.setText(QCoreApplication.translate("Dialog", u"ID", None)); + self.reset_btn.setText(QCoreApplication.translate("Dialog", u"Zur\u00fccksetzen", None)) + self.delete_btn.setText(QCoreApplication.translate("Dialog", u"L\u00f6schen", None)) + self.cancel_btn.setText(QCoreApplication.translate("Dialog", u"Abbrechen", None)) + # retranslateUi + diff --git a/src/ui/semesterapparat_ui.ui b/src/ui/semesterapparat_ui.ui index 76f210e..615f845 100644 --- a/src/ui/semesterapparat_ui.ui +++ b/src/ui/semesterapparat_ui.ui @@ -251,169 +251,24 @@ 0 180 1412 - 511 + 531 - - + + - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - false - - - WIP - Broken + + + Qt::NoFocus - gel. Medien anzeigen + Medien hinzufügen - - - false - - - WIP - Broken - - - Nur Titel mit Neuauflagen anzeigen - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - Dieser Knopf prüft alle Werke, die mit einem roten X vermerkt sind. Sollten diese inzwischen im Apparat sein, wird dies aktualisiert - - - Medien mit ❌ im Apparat? - - - - - - - - - Medien werden hinzugefügt - - - - - - - Qt::Vertical - - - - - - - Medium x/y - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - - - Medien werden geprüft - - - - - - - 24 - - - - - - - - - - - - - - - - Qt::Vertical - - - - - - - TextLabel - - - - - - - Ausgewählte als verfügbar markieren - - - - - + Qt::Horizontal @@ -427,87 +282,6 @@ - - - - - 0 - 0 - - - - - 1259 - 0 - - - - Qt::NoFocus - - - Qt::CustomContextMenu - - - QAbstractScrollArea::AdjustToContents - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::SelectRows - - - true - - - true - - - - Buchtitel - - - Es kann sein, dass der Buchtitel leer ist, dies kommt vor, wenn der Titel nicht passend formatiert ist - - - - - Signatur - - - - - Auflage - - - - - Autor - - - - - im Apparat? - - - Diese Angabe ist nicht zuverlässig. Ist das ❌ vorhanden, kann das Medium im Apparat sein, aber aufgrund eines Bugs nicht gefunden worden - - - - - Vorgemerkt - - - - - Link - - - - @@ -1101,23 +875,7 @@ - - - - - 9 - false - - - - Qt::ImhPreferNumbers - - - - - - - + @@ -1133,7 +891,7 @@ - + @@ -1146,6 +904,22 @@ + + + + + 9 + false + + + + Qt::ImhPreferNumbers + + + + + + @@ -1587,24 +1361,248 @@ Einige Angaben müssen ggf angepasst werden + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + false + + + WIP - Broken + + + Nur Titel mit Neuauflagen anzeigen + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + Dieser Knopf prüft alle Werke, die mit einem roten X vermerkt sind. Sollten diese inzwischen im Apparat sein, wird dies aktualisiert + + + Medien mit ❌ im Apparat? + + + + + + + + + Medien werden hinzugefügt + + + + + + + Qt::Vertical + + + + + + + Medium x/y + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + + Medien werden geprüft + + + + + + + 24 + + + + + + + + + + + + + + + + Qt::Vertical + + + + + + + TextLabel + + + + + + + Ausgewählte als verfügbar markieren + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + + 1259 + 0 + + + + Qt::NoFocus + + + Qt::CustomContextMenu + + + QAbstractScrollArea::AdjustToContents + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::SelectRows + + + true + + + true + + + + Buchtitel + + + Es kann sein, dass der Buchtitel leer ist, dies kommt vor, wenn der Titel nicht passend formatiert ist + + + + + Signatur + + + + + Auflage + + + + + Autor + + + + + im Apparat? + + + Diese Angabe ist nicht zuverlässig. Ist das ❌ vorhanden, kann das Medium im Apparat sein, aber aufgrund eines Bugs nicht gefunden worden + + + + + Vorgemerkt + + + + + Link + + + + - - - - 3 - 695 - 121 - 20 - - - - Qt::NoFocus - - - Medien hinzufügen - - @@ -1966,6 +1964,7 @@ Einige Angaben müssen ggf angepasst werden Bearbeiten + @@ -2020,6 +2019,11 @@ Einige Angaben müssen ggf angepasst werden F1 + + + Medien löschen + + drpdwn_app_nr @@ -2038,10 +2042,8 @@ Einige Angaben müssen ggf angepasst werden check_send_mail btn_apparat_save btn_apparat_apply - chkbx_show_del_media btn_reserve select_action_box - prof_id_adis apparat_id_adis automation_add_selected_books saveandcreate diff --git a/src/ui/semesterapparat_ui_ui.py b/src/ui/semesterapparat_ui_ui.py index e62f60c..be2d9e9 100644 --- a/src/ui/semesterapparat_ui_ui.py +++ b/src/ui/semesterapparat_ui_ui.py @@ -54,6 +54,8 @@ class Ui_MainWindow(object): self.actionAbout.setMenuRole(QAction.AboutRole) self.actionDokumentation = QAction(MainWindow) self.actionDokumentation.setObjectName(u"actionDokumentation") + self.actionMedien_loeschen = QAction(MainWindow) + self.actionMedien_loeschen.setObjectName(u"actionMedien_loeschen") self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) @@ -157,142 +159,24 @@ class Ui_MainWindow(object): self.gridLayoutWidget_2 = QWidget(self.createApparat) self.gridLayoutWidget_2.setObjectName(u"gridLayoutWidget_2") self.gridLayoutWidget_2.setEnabled(True) - self.gridLayoutWidget_2.setGeometry(QRect(0, 180, 1412, 511)) + self.gridLayoutWidget_2.setGeometry(QRect(0, 180, 1412, 531)) self.gridLayout_2 = QGridLayout(self.gridLayoutWidget_2) self.gridLayout_2.setObjectName(u"gridLayout_2") self.gridLayout_2.setContentsMargins(0, 0, 0, 0) - self.horizontalLayout_5 = QHBoxLayout() - self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") - self.horizontalSpacer = QSpacerItem(20, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + self.horizontalLayout_3 = QHBoxLayout() + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.add_medium = QPushButton(self.gridLayoutWidget_2) + self.add_medium.setObjectName(u"add_medium") + self.add_medium.setFocusPolicy(Qt.NoFocus) - self.horizontalLayout_5.addItem(self.horizontalSpacer) + self.horizontalLayout_3.addWidget(self.add_medium) - self.chkbx_show_del_media = QCheckBox(self.gridLayoutWidget_2) - self.chkbx_show_del_media.setObjectName(u"chkbx_show_del_media") - self.chkbx_show_del_media.setEnabled(False) + self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) - self.horizontalLayout_5.addWidget(self.chkbx_show_del_media) - - self.chkbx_show_only_wit_neweditions = QCheckBox(self.gridLayoutWidget_2) - self.chkbx_show_only_wit_neweditions.setObjectName(u"chkbx_show_only_wit_neweditions") - self.chkbx_show_only_wit_neweditions.setEnabled(False) - - self.horizontalLayout_5.addWidget(self.chkbx_show_only_wit_neweditions) - - self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_5.addItem(self.horizontalSpacer_3) - - self.btn_reserve = QPushButton(self.gridLayoutWidget_2) - self.btn_reserve.setObjectName(u"btn_reserve") - - self.horizontalLayout_5.addWidget(self.btn_reserve) - - self.add_layout = QHBoxLayout() - self.add_layout.setObjectName(u"add_layout") - self.label_info = QLabel(self.gridLayoutWidget_2) - self.label_info.setObjectName(u"label_info") - - self.add_layout.addWidget(self.label_info) - - self.line_2 = QFrame(self.gridLayoutWidget_2) - self.line_2.setObjectName(u"line_2") - self.line_2.setFrameShape(QFrame.Shape.VLine) - self.line_2.setFrameShadow(QFrame.Shadow.Sunken) - - self.add_layout.addWidget(self.line_2) - - self.progress_label = QLabel(self.gridLayoutWidget_2) - self.progress_label.setObjectName(u"progress_label") - - self.add_layout.addWidget(self.progress_label) + self.horizontalLayout_3.addItem(self.horizontalSpacer_5) - self.horizontalLayout_5.addLayout(self.add_layout) - - self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_5.addItem(self.horizontalSpacer_4) - - self.avail_layout = QHBoxLayout() - self.avail_layout.setObjectName(u"avail_layout") - self.label_20 = QLabel(self.gridLayoutWidget_2) - self.label_20.setObjectName(u"label_20") - - self.avail_layout.addWidget(self.label_20) - - self.progressBar = QProgressBar(self.gridLayoutWidget_2) - self.progressBar.setObjectName(u"progressBar") - self.progressBar.setValue(24) - - self.avail_layout.addWidget(self.progressBar) - - self.label_eta = QLabel(self.gridLayoutWidget_2) - self.label_eta.setObjectName(u"label_eta") - - self.avail_layout.addWidget(self.label_eta) - - - self.horizontalLayout_5.addLayout(self.avail_layout) - - self.line_3 = QFrame(self.gridLayoutWidget_2) - self.line_3.setObjectName(u"line_3") - self.line_3.setFrameShape(QFrame.Shape.VLine) - self.line_3.setFrameShadow(QFrame.Shadow.Sunken) - - self.horizontalLayout_5.addWidget(self.line_3) - - self.avail_status = QLabel(self.gridLayoutWidget_2) - self.avail_status.setObjectName(u"avail_status") - - self.horizontalLayout_5.addWidget(self.avail_status) - - self.automation_add_selected_books = QPushButton(self.gridLayoutWidget_2) - self.automation_add_selected_books.setObjectName(u"automation_add_selected_books") - - self.horizontalLayout_5.addWidget(self.automation_add_selected_books) - - self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_5.addItem(self.horizontalSpacer_2) - - - self.gridLayout_2.addLayout(self.horizontalLayout_5, 4, 0, 1, 1) - - self.tableWidget_apparat_media = QTableWidget(self.gridLayoutWidget_2) - if (self.tableWidget_apparat_media.columnCount() < 7): - self.tableWidget_apparat_media.setColumnCount(7) - __qtablewidgetitem6 = QTableWidgetItem() - self.tableWidget_apparat_media.setHorizontalHeaderItem(0, __qtablewidgetitem6) - __qtablewidgetitem7 = QTableWidgetItem() - self.tableWidget_apparat_media.setHorizontalHeaderItem(1, __qtablewidgetitem7) - __qtablewidgetitem8 = QTableWidgetItem() - self.tableWidget_apparat_media.setHorizontalHeaderItem(2, __qtablewidgetitem8) - __qtablewidgetitem9 = QTableWidgetItem() - self.tableWidget_apparat_media.setHorizontalHeaderItem(3, __qtablewidgetitem9) - __qtablewidgetitem10 = QTableWidgetItem() - self.tableWidget_apparat_media.setHorizontalHeaderItem(4, __qtablewidgetitem10) - __qtablewidgetitem11 = QTableWidgetItem() - self.tableWidget_apparat_media.setHorizontalHeaderItem(5, __qtablewidgetitem11) - __qtablewidgetitem12 = QTableWidgetItem() - self.tableWidget_apparat_media.setHorizontalHeaderItem(6, __qtablewidgetitem12) - self.tableWidget_apparat_media.setObjectName(u"tableWidget_apparat_media") - sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Expanding) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.tableWidget_apparat_media.sizePolicy().hasHeightForWidth()) - self.tableWidget_apparat_media.setSizePolicy(sizePolicy2) - self.tableWidget_apparat_media.setMinimumSize(QSize(1259, 0)) - self.tableWidget_apparat_media.setFocusPolicy(Qt.NoFocus) - self.tableWidget_apparat_media.setContextMenuPolicy(Qt.CustomContextMenu) - self.tableWidget_apparat_media.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents) - self.tableWidget_apparat_media.setEditTriggers(QAbstractItemView.NoEditTriggers) - self.tableWidget_apparat_media.setAlternatingRowColors(True) - self.tableWidget_apparat_media.setSelectionBehavior(QAbstractItemView.SelectRows) - self.tableWidget_apparat_media.setSortingEnabled(True) - self.tableWidget_apparat_media.horizontalHeader().setCascadingSectionResizes(True) - - self.gridLayout_2.addWidget(self.tableWidget_apparat_media, 9, 0, 1, 1) + self.gridLayout_2.addLayout(self.horizontalLayout_3, 11, 0, 1, 1) self.label = QLabel(self.gridLayoutWidget_2) self.label.setObjectName(u"label") @@ -306,11 +190,11 @@ class Ui_MainWindow(object): self.app_group_box = QGroupBox(self.gridLayoutWidget_2) self.app_group_box.setObjectName(u"app_group_box") self.app_group_box.setEnabled(True) - sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy3.setHorizontalStretch(0) - sizePolicy3.setVerticalStretch(0) - sizePolicy3.setHeightForWidth(self.app_group_box.sizePolicy().hasHeightForWidth()) - self.app_group_box.setSizePolicy(sizePolicy3) + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.app_group_box.sizePolicy().hasHeightForWidth()) + self.app_group_box.setSizePolicy(sizePolicy2) self.app_group_box.setMinimumSize(QSize(0, 210)) font1 = QFont() font1.setPointSize(12) @@ -325,17 +209,17 @@ class Ui_MainWindow(object): font2 = QFont() font2.setFamilies([u"Arial"]) font2.setPointSize(8) - __qtablewidgetitem13 = QTableWidgetItem() - __qtablewidgetitem13.setFont(font2); - self.document_list.setHorizontalHeaderItem(0, __qtablewidgetitem13) - __qtablewidgetitem14 = QTableWidgetItem() - __qtablewidgetitem14.setFont(font2); - self.document_list.setHorizontalHeaderItem(1, __qtablewidgetitem14) - __qtablewidgetitem15 = QTableWidgetItem() - __qtablewidgetitem15.setFont(font2); - self.document_list.setHorizontalHeaderItem(2, __qtablewidgetitem15) - __qtablewidgetitem16 = QTableWidgetItem() - self.document_list.setHorizontalHeaderItem(3, __qtablewidgetitem16) + __qtablewidgetitem6 = QTableWidgetItem() + __qtablewidgetitem6.setFont(font2); + self.document_list.setHorizontalHeaderItem(0, __qtablewidgetitem6) + __qtablewidgetitem7 = QTableWidgetItem() + __qtablewidgetitem7.setFont(font2); + self.document_list.setHorizontalHeaderItem(1, __qtablewidgetitem7) + __qtablewidgetitem8 = QTableWidgetItem() + __qtablewidgetitem8.setFont(font2); + self.document_list.setHorizontalHeaderItem(2, __qtablewidgetitem8) + __qtablewidgetitem9 = QTableWidgetItem() + self.document_list.setHorizontalHeaderItem(3, __qtablewidgetitem9) self.document_list.setObjectName(u"document_list") self.document_list.setGeometry(QRect(780, 20, 321, 181)) font3 = QFont() @@ -473,25 +357,25 @@ class Ui_MainWindow(object): self.formLayout_3.setWidget(0, QFormLayout.ItemRole.LabelRole, self.label_12) - self.prof_id_adis = QLineEdit(self.formLayoutWidget_2) - self.prof_id_adis.setObjectName(u"prof_id_adis") - self.prof_id_adis.setFont(font4) - self.prof_id_adis.setInputMethodHints(Qt.ImhPreferNumbers) - - self.formLayout_3.setWidget(0, QFormLayout.ItemRole.FieldRole, self.prof_id_adis) - self.label_13 = QLabel(self.formLayoutWidget_2) self.label_13.setObjectName(u"label_13") self.label_13.setFont(font4) - self.formLayout_3.setWidget(1, QFormLayout.ItemRole.LabelRole, self.label_13) + self.formLayout_3.setWidget(2, QFormLayout.ItemRole.LabelRole, self.label_13) self.apparat_id_adis = QLineEdit(self.formLayoutWidget_2) self.apparat_id_adis.setObjectName(u"apparat_id_adis") self.apparat_id_adis.setFont(font4) self.apparat_id_adis.setInputMethodHints(Qt.ImhPreferNumbers) - self.formLayout_3.setWidget(1, QFormLayout.ItemRole.FieldRole, self.apparat_id_adis) + self.formLayout_3.setWidget(2, QFormLayout.ItemRole.FieldRole, self.apparat_id_adis) + + self.prof_id_adis = QLineEdit(self.formLayoutWidget_2) + self.prof_id_adis.setObjectName(u"prof_id_adis") + self.prof_id_adis.setFont(font4) + self.prof_id_adis.setInputMethodHints(Qt.ImhPreferNumbers) + + self.formLayout_3.setWidget(1, QFormLayout.ItemRole.FieldRole, self.prof_id_adis) self.sem_year = QLineEdit(self.app_group_box) self.sem_year.setObjectName(u"sem_year") @@ -578,35 +462,35 @@ class Ui_MainWindow(object): self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) self.btn_add_document = QPushButton(self.verticalLayoutWidget_3) self.btn_add_document.setObjectName(u"btn_add_document") - sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.MinimumExpanding) - sizePolicy4.setHorizontalStretch(0) - sizePolicy4.setVerticalStretch(0) - sizePolicy4.setHeightForWidth(self.btn_add_document.sizePolicy().hasHeightForWidth()) - self.btn_add_document.setSizePolicy(sizePolicy4) + sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.MinimumExpanding) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(0) + sizePolicy3.setHeightForWidth(self.btn_add_document.sizePolicy().hasHeightForWidth()) + self.btn_add_document.setSizePolicy(sizePolicy3) self.btn_add_document.setFont(font4) self.verticalLayout_8.addWidget(self.btn_add_document) self.btn_open_document = QPushButton(self.verticalLayoutWidget_3) self.btn_open_document.setObjectName(u"btn_open_document") - sizePolicy4.setHeightForWidth(self.btn_open_document.sizePolicy().hasHeightForWidth()) - self.btn_open_document.setSizePolicy(sizePolicy4) + sizePolicy3.setHeightForWidth(self.btn_open_document.sizePolicy().hasHeightForWidth()) + self.btn_open_document.setSizePolicy(sizePolicy3) self.btn_open_document.setFont(font4) self.verticalLayout_8.addWidget(self.btn_open_document) self.check_file = QPushButton(self.verticalLayoutWidget_3) self.check_file.setObjectName(u"check_file") - sizePolicy4.setHeightForWidth(self.check_file.sizePolicy().hasHeightForWidth()) - self.check_file.setSizePolicy(sizePolicy4) + sizePolicy3.setHeightForWidth(self.check_file.sizePolicy().hasHeightForWidth()) + self.check_file.setSizePolicy(sizePolicy3) self.check_file.setFont(font4) self.verticalLayout_8.addWidget(self.check_file) self.btn_extract_data_from_document = QPushButton(self.verticalLayoutWidget_3) self.btn_extract_data_from_document.setObjectName(u"btn_extract_data_from_document") - sizePolicy4.setHeightForWidth(self.btn_extract_data_from_document.sizePolicy().hasHeightForWidth()) - self.btn_extract_data_from_document.setSizePolicy(sizePolicy4) + sizePolicy3.setHeightForWidth(self.btn_extract_data_from_document.sizePolicy().hasHeightForWidth()) + self.btn_extract_data_from_document.setSizePolicy(sizePolicy3) self.btn_extract_data_from_document.setFont(font4) self.verticalLayout_8.addWidget(self.btn_extract_data_from_document) @@ -618,10 +502,133 @@ class Ui_MainWindow(object): self.gridLayout_2.addWidget(self.app_group_box, 1, 0, 1, 1) - self.add_medium = QPushButton(self.createApparat) - self.add_medium.setObjectName(u"add_medium") - self.add_medium.setGeometry(QRect(3, 695, 121, 20)) - self.add_medium.setFocusPolicy(Qt.NoFocus) + self.horizontalLayout_5 = QHBoxLayout() + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.horizontalSpacer = QSpacerItem(20, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer) + + self.chkbx_show_only_wit_neweditions = QCheckBox(self.gridLayoutWidget_2) + self.chkbx_show_only_wit_neweditions.setObjectName(u"chkbx_show_only_wit_neweditions") + self.chkbx_show_only_wit_neweditions.setEnabled(False) + + self.horizontalLayout_5.addWidget(self.chkbx_show_only_wit_neweditions) + + self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_3) + + self.btn_reserve = QPushButton(self.gridLayoutWidget_2) + self.btn_reserve.setObjectName(u"btn_reserve") + + self.horizontalLayout_5.addWidget(self.btn_reserve) + + self.add_layout = QHBoxLayout() + self.add_layout.setObjectName(u"add_layout") + self.label_info = QLabel(self.gridLayoutWidget_2) + self.label_info.setObjectName(u"label_info") + + self.add_layout.addWidget(self.label_info) + + self.line_2 = QFrame(self.gridLayoutWidget_2) + self.line_2.setObjectName(u"line_2") + self.line_2.setFrameShape(QFrame.Shape.VLine) + self.line_2.setFrameShadow(QFrame.Shadow.Sunken) + + self.add_layout.addWidget(self.line_2) + + self.progress_label = QLabel(self.gridLayoutWidget_2) + self.progress_label.setObjectName(u"progress_label") + + self.add_layout.addWidget(self.progress_label) + + + self.horizontalLayout_5.addLayout(self.add_layout) + + self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_4) + + self.avail_layout = QHBoxLayout() + self.avail_layout.setObjectName(u"avail_layout") + self.label_20 = QLabel(self.gridLayoutWidget_2) + self.label_20.setObjectName(u"label_20") + + self.avail_layout.addWidget(self.label_20) + + self.progressBar = QProgressBar(self.gridLayoutWidget_2) + self.progressBar.setObjectName(u"progressBar") + self.progressBar.setValue(24) + + self.avail_layout.addWidget(self.progressBar) + + self.label_eta = QLabel(self.gridLayoutWidget_2) + self.label_eta.setObjectName(u"label_eta") + + self.avail_layout.addWidget(self.label_eta) + + + self.horizontalLayout_5.addLayout(self.avail_layout) + + self.line_3 = QFrame(self.gridLayoutWidget_2) + self.line_3.setObjectName(u"line_3") + self.line_3.setFrameShape(QFrame.Shape.VLine) + self.line_3.setFrameShadow(QFrame.Shadow.Sunken) + + self.horizontalLayout_5.addWidget(self.line_3) + + self.avail_status = QLabel(self.gridLayoutWidget_2) + self.avail_status.setObjectName(u"avail_status") + + self.horizontalLayout_5.addWidget(self.avail_status) + + self.automation_add_selected_books = QPushButton(self.gridLayoutWidget_2) + self.automation_add_selected_books.setObjectName(u"automation_add_selected_books") + + self.horizontalLayout_5.addWidget(self.automation_add_selected_books) + + self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_2) + + + self.gridLayout_2.addLayout(self.horizontalLayout_5, 4, 0, 1, 1) + + self.tableWidget_apparat_media = QTableWidget(self.gridLayoutWidget_2) + if (self.tableWidget_apparat_media.columnCount() < 7): + self.tableWidget_apparat_media.setColumnCount(7) + __qtablewidgetitem10 = QTableWidgetItem() + self.tableWidget_apparat_media.setHorizontalHeaderItem(0, __qtablewidgetitem10) + __qtablewidgetitem11 = QTableWidgetItem() + self.tableWidget_apparat_media.setHorizontalHeaderItem(1, __qtablewidgetitem11) + __qtablewidgetitem12 = QTableWidgetItem() + self.tableWidget_apparat_media.setHorizontalHeaderItem(2, __qtablewidgetitem12) + __qtablewidgetitem13 = QTableWidgetItem() + self.tableWidget_apparat_media.setHorizontalHeaderItem(3, __qtablewidgetitem13) + __qtablewidgetitem14 = QTableWidgetItem() + self.tableWidget_apparat_media.setHorizontalHeaderItem(4, __qtablewidgetitem14) + __qtablewidgetitem15 = QTableWidgetItem() + self.tableWidget_apparat_media.setHorizontalHeaderItem(5, __qtablewidgetitem15) + __qtablewidgetitem16 = QTableWidgetItem() + self.tableWidget_apparat_media.setHorizontalHeaderItem(6, __qtablewidgetitem16) + self.tableWidget_apparat_media.setObjectName(u"tableWidget_apparat_media") + sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Expanding) + sizePolicy4.setHorizontalStretch(0) + sizePolicy4.setVerticalStretch(0) + sizePolicy4.setHeightForWidth(self.tableWidget_apparat_media.sizePolicy().hasHeightForWidth()) + self.tableWidget_apparat_media.setSizePolicy(sizePolicy4) + self.tableWidget_apparat_media.setMinimumSize(QSize(1259, 0)) + self.tableWidget_apparat_media.setFocusPolicy(Qt.NoFocus) + self.tableWidget_apparat_media.setContextMenuPolicy(Qt.CustomContextMenu) + self.tableWidget_apparat_media.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents) + self.tableWidget_apparat_media.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.tableWidget_apparat_media.setAlternatingRowColors(True) + self.tableWidget_apparat_media.setSelectionBehavior(QAbstractItemView.SelectRows) + self.tableWidget_apparat_media.setSortingEnabled(True) + self.tableWidget_apparat_media.horizontalHeader().setCascadingSectionResizes(True) + + self.gridLayout_2.addWidget(self.tableWidget_apparat_media, 9, 0, 1, 1) + self.tabWidget.addTab(self.createApparat, "") self.search_statistics = QWidget() self.search_statistics.setObjectName(u"search_statistics") @@ -827,11 +834,9 @@ class Ui_MainWindow(object): QWidget.setTabOrder(self.check_file, self.check_send_mail) QWidget.setTabOrder(self.check_send_mail, self.btn_apparat_save) QWidget.setTabOrder(self.btn_apparat_save, self.btn_apparat_apply) - QWidget.setTabOrder(self.btn_apparat_apply, self.chkbx_show_del_media) - QWidget.setTabOrder(self.chkbx_show_del_media, self.btn_reserve) + QWidget.setTabOrder(self.btn_apparat_apply, self.btn_reserve) QWidget.setTabOrder(self.btn_reserve, self.select_action_box) - QWidget.setTabOrder(self.select_action_box, self.prof_id_adis) - QWidget.setTabOrder(self.prof_id_adis, self.apparat_id_adis) + QWidget.setTabOrder(self.select_action_box, self.apparat_id_adis) QWidget.setTabOrder(self.apparat_id_adis, self.automation_add_selected_books) QWidget.setTabOrder(self.automation_add_selected_books, self.saveandcreate) @@ -840,6 +845,7 @@ class Ui_MainWindow(object): self.menubar.addAction(self.menuHelp.menuAction()) self.menuDatei.addAction(self.actionBeenden) self.menuEinstellungen.addAction(self.actionEinstellungen) + self.menuEinstellungen.addAction(self.actionMedien_loeschen) self.menuHelp.addAction(self.actionAbout) self.menuHelp.addAction(self.actionDokumentation) @@ -869,6 +875,7 @@ class Ui_MainWindow(object): #if QT_CONFIG(shortcut) self.actionDokumentation.setShortcut(QCoreApplication.translate("MainWindow", u"F1", None)) #endif // QT_CONFIG(shortcut) + self.actionMedien_loeschen.setText(QCoreApplication.translate("MainWindow", u"Medien l\u00f6schen", None)) #if QT_CONFIG(tooltip) self.create_document.setToolTip(QCoreApplication.translate("MainWindow", u"Erstellt die \u00dcbersicht, welche am Regal ausgeh\u00e4ngt werden kann", None)) #endif // QT_CONFIG(tooltip) @@ -887,54 +894,17 @@ class Ui_MainWindow(object): ___qtablewidgetitem4.setText(QCoreApplication.translate("MainWindow", u"Dauerapparat", None)); ___qtablewidgetitem5 = self.tableWidget_apparate.horizontalHeaderItem(5) ___qtablewidgetitem5.setText(QCoreApplication.translate("MainWindow", u"KontoNr", None)); -#if QT_CONFIG(tooltip) - self.chkbx_show_del_media.setToolTip(QCoreApplication.translate("MainWindow", u"WIP - Broken", None)) -#endif // QT_CONFIG(tooltip) - self.chkbx_show_del_media.setText(QCoreApplication.translate("MainWindow", u"gel. Medien anzeigen", None)) -#if QT_CONFIG(tooltip) - self.chkbx_show_only_wit_neweditions.setToolTip(QCoreApplication.translate("MainWindow", u"WIP - Broken", None)) -#endif // QT_CONFIG(tooltip) - self.chkbx_show_only_wit_neweditions.setText(QCoreApplication.translate("MainWindow", u"Nur Titel mit Neuauflagen anzeigen", None)) -#if QT_CONFIG(tooltip) - self.btn_reserve.setToolTip(QCoreApplication.translate("MainWindow", u"Dieser Knopf pr\u00fcft alle Werke, die mit einem roten X vermerkt sind. Sollten diese inzwischen im Apparat sein, wird dies aktualisiert", None)) -#endif // QT_CONFIG(tooltip) - self.btn_reserve.setText(QCoreApplication.translate("MainWindow", u"Medien mit \u274c im Apparat?", None)) - self.label_info.setText(QCoreApplication.translate("MainWindow", u"Medien werden hinzugef\u00fcgt", None)) - self.progress_label.setText(QCoreApplication.translate("MainWindow", u"Medium x/y", None)) - self.label_20.setText(QCoreApplication.translate("MainWindow", u"Medien werden gepr\u00fcft", None)) - self.label_eta.setText("") - self.avail_status.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None)) - self.automation_add_selected_books.setText(QCoreApplication.translate("MainWindow", u"Ausgew\u00e4hlte als verf\u00fcgbar markieren", None)) - ___qtablewidgetitem6 = self.tableWidget_apparat_media.horizontalHeaderItem(0) - ___qtablewidgetitem6.setText(QCoreApplication.translate("MainWindow", u"Buchtitel", None)); -#if QT_CONFIG(tooltip) - ___qtablewidgetitem6.setToolTip(QCoreApplication.translate("MainWindow", u"Es kann sein, dass der Buchtitel leer ist, dies kommt vor, wenn der Titel nicht passend formatiert ist", None)); -#endif // QT_CONFIG(tooltip) - ___qtablewidgetitem7 = self.tableWidget_apparat_media.horizontalHeaderItem(1) - ___qtablewidgetitem7.setText(QCoreApplication.translate("MainWindow", u"Signatur", None)); - ___qtablewidgetitem8 = self.tableWidget_apparat_media.horizontalHeaderItem(2) - ___qtablewidgetitem8.setText(QCoreApplication.translate("MainWindow", u"Auflage", None)); - ___qtablewidgetitem9 = self.tableWidget_apparat_media.horizontalHeaderItem(3) - ___qtablewidgetitem9.setText(QCoreApplication.translate("MainWindow", u"Autor", None)); - ___qtablewidgetitem10 = self.tableWidget_apparat_media.horizontalHeaderItem(4) - ___qtablewidgetitem10.setText(QCoreApplication.translate("MainWindow", u"im Apparat?", None)); -#if QT_CONFIG(tooltip) - ___qtablewidgetitem10.setToolTip(QCoreApplication.translate("MainWindow", u"Diese Angabe ist nicht zuverl\u00e4ssig. Ist das \u274c vorhanden, kann das Medium im Apparat sein, aber aufgrund eines Bugs nicht gefunden worden", None)); -#endif // QT_CONFIG(tooltip) - ___qtablewidgetitem11 = self.tableWidget_apparat_media.horizontalHeaderItem(5) - ___qtablewidgetitem11.setText(QCoreApplication.translate("MainWindow", u"Vorgemerkt", None)); - ___qtablewidgetitem12 = self.tableWidget_apparat_media.horizontalHeaderItem(6) - ___qtablewidgetitem12.setText(QCoreApplication.translate("MainWindow", u"Link", None)); + self.add_medium.setText(QCoreApplication.translate("MainWindow", u"Medien hinzuf\u00fcgen", None)) self.label.setText(QCoreApplication.translate("MainWindow", u" Medienliste", None)) self.app_group_box.setTitle(QCoreApplication.translate("MainWindow", u"SemesterApparatsdetails", None)) - ___qtablewidgetitem13 = self.document_list.horizontalHeaderItem(0) - ___qtablewidgetitem13.setText(QCoreApplication.translate("MainWindow", u"Dokumentname", None)); - ___qtablewidgetitem14 = self.document_list.horizontalHeaderItem(1) - ___qtablewidgetitem14.setText(QCoreApplication.translate("MainWindow", u"Dateityp", None)); - ___qtablewidgetitem15 = self.document_list.horizontalHeaderItem(2) - ___qtablewidgetitem15.setText(QCoreApplication.translate("MainWindow", u"Neu?", None)); - ___qtablewidgetitem16 = self.document_list.horizontalHeaderItem(3) - ___qtablewidgetitem16.setText(QCoreApplication.translate("MainWindow", u"path", None)); + ___qtablewidgetitem6 = self.document_list.horizontalHeaderItem(0) + ___qtablewidgetitem6.setText(QCoreApplication.translate("MainWindow", u"Dokumentname", None)); + ___qtablewidgetitem7 = self.document_list.horizontalHeaderItem(1) + ___qtablewidgetitem7.setText(QCoreApplication.translate("MainWindow", u"Dateityp", None)); + ___qtablewidgetitem8 = self.document_list.horizontalHeaderItem(2) + ___qtablewidgetitem8.setText(QCoreApplication.translate("MainWindow", u"Neu?", None)); + ___qtablewidgetitem9 = self.document_list.horizontalHeaderItem(3) + ___qtablewidgetitem9.setText(QCoreApplication.translate("MainWindow", u"path", None)); self.appname_mand.setText(QCoreApplication.translate("MainWindow", u"*", None)) self.profname_mand.setText(QCoreApplication.translate("MainWindow", u"*", None)) self.fach_mand.setText(QCoreApplication.translate("MainWindow", u"*", None)) @@ -959,8 +929,8 @@ class Ui_MainWindow(object): self.label_10.setText(QCoreApplication.translate("MainWindow", u"Fach", None)) self.prof_mail.setPlaceholderText("") self.label_12.setText(QCoreApplication.translate("MainWindow", u"Prof-ID-aDIS", None)) - self.prof_id_adis.setText("") self.label_13.setText(QCoreApplication.translate("MainWindow", u"Apparat-ID-aDIS", None)) + self.prof_id_adis.setText("") self.sem_year.setPlaceholderText(QCoreApplication.translate("MainWindow", u"2023", None)) self.check_send_mail.setText(QCoreApplication.translate("MainWindow", u"Mail senden", None)) self.sem_winter.setText(QCoreApplication.translate("MainWindow", u"Winter", None)) @@ -997,7 +967,40 @@ class Ui_MainWindow(object): #endif // QT_CONFIG(tooltip) self.btn_extract_data_from_document.setText(QCoreApplication.translate("MainWindow", u"Daten aus Dokument\n" "\u00fcbernehmen", None)) - self.add_medium.setText(QCoreApplication.translate("MainWindow", u"Medien hinzuf\u00fcgen", None)) +#if QT_CONFIG(tooltip) + self.chkbx_show_only_wit_neweditions.setToolTip(QCoreApplication.translate("MainWindow", u"WIP - Broken", None)) +#endif // QT_CONFIG(tooltip) + self.chkbx_show_only_wit_neweditions.setText(QCoreApplication.translate("MainWindow", u"Nur Titel mit Neuauflagen anzeigen", None)) +#if QT_CONFIG(tooltip) + self.btn_reserve.setToolTip(QCoreApplication.translate("MainWindow", u"Dieser Knopf pr\u00fcft alle Werke, die mit einem roten X vermerkt sind. Sollten diese inzwischen im Apparat sein, wird dies aktualisiert", None)) +#endif // QT_CONFIG(tooltip) + self.btn_reserve.setText(QCoreApplication.translate("MainWindow", u"Medien mit \u274c im Apparat?", None)) + self.label_info.setText(QCoreApplication.translate("MainWindow", u"Medien werden hinzugef\u00fcgt", None)) + self.progress_label.setText(QCoreApplication.translate("MainWindow", u"Medium x/y", None)) + self.label_20.setText(QCoreApplication.translate("MainWindow", u"Medien werden gepr\u00fcft", None)) + self.label_eta.setText("") + self.avail_status.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None)) + self.automation_add_selected_books.setText(QCoreApplication.translate("MainWindow", u"Ausgew\u00e4hlte als verf\u00fcgbar markieren", None)) + ___qtablewidgetitem10 = self.tableWidget_apparat_media.horizontalHeaderItem(0) + ___qtablewidgetitem10.setText(QCoreApplication.translate("MainWindow", u"Buchtitel", None)); +#if QT_CONFIG(tooltip) + ___qtablewidgetitem10.setToolTip(QCoreApplication.translate("MainWindow", u"Es kann sein, dass der Buchtitel leer ist, dies kommt vor, wenn der Titel nicht passend formatiert ist", None)); +#endif // QT_CONFIG(tooltip) + ___qtablewidgetitem11 = self.tableWidget_apparat_media.horizontalHeaderItem(1) + ___qtablewidgetitem11.setText(QCoreApplication.translate("MainWindow", u"Signatur", None)); + ___qtablewidgetitem12 = self.tableWidget_apparat_media.horizontalHeaderItem(2) + ___qtablewidgetitem12.setText(QCoreApplication.translate("MainWindow", u"Auflage", None)); + ___qtablewidgetitem13 = self.tableWidget_apparat_media.horizontalHeaderItem(3) + ___qtablewidgetitem13.setText(QCoreApplication.translate("MainWindow", u"Autor", None)); + ___qtablewidgetitem14 = self.tableWidget_apparat_media.horizontalHeaderItem(4) + ___qtablewidgetitem14.setText(QCoreApplication.translate("MainWindow", u"im Apparat?", None)); +#if QT_CONFIG(tooltip) + ___qtablewidgetitem14.setToolTip(QCoreApplication.translate("MainWindow", u"Diese Angabe ist nicht zuverl\u00e4ssig. Ist das \u274c vorhanden, kann das Medium im Apparat sein, aber aufgrund eines Bugs nicht gefunden worden", None)); +#endif // QT_CONFIG(tooltip) + ___qtablewidgetitem15 = self.tableWidget_apparat_media.horizontalHeaderItem(5) + ___qtablewidgetitem15.setText(QCoreApplication.translate("MainWindow", u"Vorgemerkt", None)); + ___qtablewidgetitem16 = self.tableWidget_apparat_media.horizontalHeaderItem(6) + ___qtablewidgetitem16.setText(QCoreApplication.translate("MainWindow", u"Link", None)); self.tabWidget.setTabText(self.tabWidget.indexOf(self.createApparat), QCoreApplication.translate("MainWindow", u"Anlegen", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.search_statistics), QCoreApplication.translate("MainWindow", u"Suchen / Statistik", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.elsatab), QCoreApplication.translate("MainWindow", u"ELSA", None)) diff --git a/src/ui/userInterface.py b/src/ui/userInterface.py index 5c4ef19..a5c0b8f 100644 --- a/src/ui/userInterface.py +++ b/src/ui/userInterface.py @@ -5,18 +5,16 @@ import sys import tempfile import time import webbrowser -from datetime import datetime from pathlib import Path from typing import Any, List, Optional, Tuple, Union -import loguru from natsort import natsorted from PySide6 import QtCore, QtGui, QtWidgets from PySide6.QtCore import QThread from PySide6.QtGui import QRegularExpressionValidator from PySide6.QtMultimedia import QAudioOutput, QMediaPlayer -from src import LOG_DIR, Icon +from src import Icon from src.backend import ( AvailChecker, BookGrabber, @@ -39,11 +37,13 @@ from src.logic import ( pdf_to_semap, word_to_semap, ) +from src.shared.logging import log from src.ui import Ui_Semesterapparat from src.ui.dialogs import ( About, ApparatExtendDialog, BookDataUI, + DeleteDialog, DocumentPrintDialog, LoginDialog, Mail_Dialog, @@ -69,16 +69,6 @@ from src.ui.widgets import ( UserCreate, ) -log = loguru.logger -log.remove() -log.add(sys.stdout, level="INFO") -log.add(f"{LOG_DIR}/application.log", rotation="3 MB", retention="10 days") - -log.add( - f"{LOG_DIR}/{datetime.now().strftime('%Y-%m-%d')}.log", - rotation="1 day", - retention="1 month", -) log.success("UI started") valid_input = (0, 0, 0, 0, 0, 0) @@ -92,7 +82,9 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.setupUi(MainWindow) # type:ignore self.MainWindow = MainWindow # type:ignore # set the window title - MainWindow.setWindowTitle("Semesterapparatsmanagement") # type:ignore + MainWindow.setWindowTitle( + f"Semesterapparatsmanagement Semester: {Semester().value}" + ) # type:ignore MainWindow.setWindowIcon(Icon("logo").icon) # type:ignore self.db = Database() @@ -135,6 +127,8 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): Icon("offAction", self.actionBeenden) self.actionBeenden.triggered.connect(self.quit) # type:ignore self.actionAbout.triggered.connect(self.open_about) # type:ignore + self.actionMedien_loeschen.triggered.connect(self.open_delete_dialog) + self.actionMedien_loeschen.setIcon(Icon("trash").icon) # set validators self.sem_sommer.clicked.connect(lambda: self.toggleButton(self.sem_winter)) # type:ignore @@ -191,11 +185,11 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.app_fach.currentTextChanged.connect(self.validate_app_fach) # type:ignore self.sem_year.textChanged.connect(self.validate_semester) # type:ignore self.check_eternal_app.stateChanged.connect(self.validate_semester) # type:ignore - self.chkbx_show_del_media.stateChanged.connect(self.update_app_media_list) # type:ignore + # self.chkbx_show_del_media.stateChanged.connect(self.update_app_media_list) # type:ignore self.progress_label.setText("Bitte warten...") # Set visibility/enabled state of certain entries - self.chkbx_show_del_media.setEnabled(False) + # self.chkbx_show_del_media.setEnabled(False) self.label_info.hide() self.app_group_box.setEnabled(False) self.line_2.hide() @@ -207,7 +201,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.progressBar.hide() self.progressBar.setMinimum(0) self.avail_status.hide() - self.chkbx_show_del_media.hide() + # self.chkbx_show_del_media.hide() self.chkbx_show_only_wit_neweditions.hide() self.automation_add_selected_books.hide() # self.btn_del_select_apparats.setEnabled(False) @@ -288,6 +282,12 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.document_list.installEventFilter(self) self.document_list.viewport().installEventFilter(self) + def open_delete_dialog(self): + # this will open a dialog to select and delete multiple entries. by default, all books will be loaded, and a search bar can be used to fuzzy search the books and select books. on a button press, the selected books will be deleted from the apparat(s) they are part in + # raise NotImplementedError("This feature is not yet implemented.") + dialog = DeleteDialog() + dialog.exec() + def eventFilter(self, obj, event): # Only handle events for document_list and its viewport if obj in (self.document_list, self.document_list.viewport()): @@ -564,7 +564,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.update_app_media_list() self.cancel_active_selection.click() self.check_send_mail.show() - self.chkbx_show_del_media.show() + # self.chkbx_show_del_media.show() self.cancel_active_selection.setEnabled(False) self.add_medium.setEnabled(False) # update apparat table @@ -731,12 +731,12 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.sem_winter.setEnabled(False) self.sem_year.setEnabled(False) self.document_list.setRowCount(0) - self.chkbx_show_del_media.setEnabled(True) + # self.chkbx_show_del_media.setEnabled(True) appdata = self.db.getApparatData(appnr, appname) self.populate_frame(appdata) self.btn_apparat_save.hide() self.btn_reserve.show() - self.chkbx_show_del_media.show() + # self.chkbx_show_del_media.show() self.drpdwn_app_nr.setDisabled(True) self.update_app_media_list() @@ -773,7 +773,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.sem_year.setEnabled(True) self.sem_sommer.setEnabled(True) self.sem_winter.setEnabled(True) - self.chkbx_show_del_media.setEnabled(True) + # self.chkbx_show_del_media.setEnabled(True) self.drpdwn_app_nr.setEnabled(True) self.app_fach.setEnabled(True) self.check_send_mail.show() @@ -919,7 +919,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat): self.document_list.setRowCount(0) self.app_group_box.setEnabled(False) self.app_fach.setCurrentText("") - self.chkbx_show_del_media.hide() + # self.chkbx_show_del_media.hide() self.check_send_mail.hide() self.btn_reserve.hide() self.check_eternal_app.setEnabled(False)