Feat: add delete edition dialog with fuzzy search

This commit is contained in:
2025-10-10 09:10:06 +02:00
parent 3cc6e793d2
commit 560d8285b5
9 changed files with 936 additions and 513 deletions

1
icons/trash.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg>

After

Width:  |  Height:  |  Size: 319 B

View File

@@ -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:
"""

View File

@@ -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

View File

@@ -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()

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1001</width>
<height>649</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Medium suchen</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="placeholderText">
<string>Titel/Signatursuche</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string/>
</property>
</column>
<column>
<property name="text">
<string>Apparat</string>
</property>
</column>
<column>
<property name="text">
<string>Signatur</string>
</property>
</column>
<column>
<property name="text">
<string>Titel</string>
</property>
</column>
<column>
<property name="text">
<string>Auflage</string>
</property>
</column>
<column>
<property name="text">
<string>ISBN</string>
</property>
</column>
<column>
<property name="text">
<string>ID</string>
</property>
</column>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="reset_btn">
<property name="text">
<string>Zurücksetzen</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="delete_btn">
<property name="text">
<string>Löschen</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancel_btn">
<property name="text">
<string>Abbrechen</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -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

View File

@@ -251,263 +251,37 @@
<x>0</x>
<y>180</y>
<width>1412</width>
<height>511</height>
<height>531</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item row="11" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="chkbx_show_del_media">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>WIP - Broken</string>
</property>
<property name="text">
<string>gel. Medien anzeigen</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkbx_show_only_wit_neweditions">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>WIP - Broken</string>
</property>
<property name="text">
<string>Nur Titel mit Neuauflagen anzeigen</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_reserve">
<property name="toolTip">
<string>Dieser Knopf prüft alle Werke, die mit einem roten X vermerkt sind. Sollten diese inzwischen im Apparat sein, wird dies aktualisiert</string>
</property>
<property name="text">
<string>Medien mit ❌ im Apparat?</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="add_layout">
<item>
<widget class="QLabel" name="label_info">
<property name="text">
<string>Medien werden hinzugefügt</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="progress_label">
<property name="text">
<string>Medium x/y</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="avail_layout">
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>Medien werden geprüft</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_eta">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="avail_status">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="automation_add_selected_books">
<property name="text">
<string>Ausgewählte als verfügbar markieren</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="9" column="0">
<widget class="QTableWidget" name="tableWidget_apparat_media">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1259</width>
<height>0</height>
</size>
</property>
<widget class="QPushButton" name="add_medium">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Buchtitel</string>
<string>Medien hinzufügen</string>
</property>
<property name="toolTip">
<string>Es kann sein, dass der Buchtitel leer ist, dies kommt vor, wenn der Titel nicht passend formatiert ist</string>
</property>
</column>
<column>
<property name="text">
<string>Signatur</string>
</property>
</column>
<column>
<property name="text">
<string>Auflage</string>
</property>
</column>
<column>
<property name="text">
<string>Autor</string>
</property>
</column>
<column>
<property name="text">
<string>im Apparat?</string>
</property>
<property name="toolTip">
<string>Diese Angabe ist nicht zuverlässig. Ist das ❌ vorhanden, kann das Medium im Apparat sein, aber aufgrund eines Bugs nicht gefunden worden</string>
</property>
</column>
<column>
<property name="text">
<string>Vorgemerkt</string>
</property>
</column>
<column>
<property name="text">
<string>Link</string>
</property>
</column>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="font">
@@ -1101,23 +875,7 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="prof_id_adis">
<property name="font">
<font>
<pointsize>9</pointsize>
<bold>false</bold>
</font>
</property>
<property name="inputMethodHints">
<set>Qt::ImhPreferNumbers</set>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="2" column="0">
<widget class="QLabel" name="label_13">
<property name="font">
<font>
@@ -1133,7 +891,7 @@
</property>
</widget>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="QLineEdit" name="apparat_id_adis">
<property name="font">
<font>
@@ -1146,6 +904,22 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="prof_id_adis">
<property name="font">
<font>
<pointsize>9</pointsize>
<bold>false</bold>
</font>
</property>
<property name="inputMethodHints">
<set>Qt::ImhPreferNumbers</set>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QLineEdit" name="sem_year">
@@ -1587,23 +1361,247 @@ Einige Angaben müssen ggf angepasst werden</string>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QPushButton" name="add_medium">
<property name="geometry">
<rect>
<x>3</x>
<y>695</y>
<width>121</width>
<item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</rect>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="chkbx_show_only_wit_neweditions">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>WIP - Broken</string>
</property>
<property name="text">
<string>Nur Titel mit Neuauflagen anzeigen</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_reserve">
<property name="toolTip">
<string>Dieser Knopf prüft alle Werke, die mit einem roten X vermerkt sind. Sollten diese inzwischen im Apparat sein, wird dies aktualisiert</string>
</property>
<property name="text">
<string>Medien mit ❌ im Apparat?</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="add_layout">
<item>
<widget class="QLabel" name="label_info">
<property name="text">
<string>Medien werden hinzugefügt</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="progress_label">
<property name="text">
<string>Medium x/y</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="avail_layout">
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>Medien werden geprüft</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_eta">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="avail_status">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="automation_add_selected_books">
<property name="text">
<string>Ausgewählte als verfügbar markieren</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="9" column="0">
<widget class="QTableWidget" name="tableWidget_apparat_media">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1259</width>
<height>0</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string>Medien hinzufügen</string>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Buchtitel</string>
</property>
<property name="toolTip">
<string>Es kann sein, dass der Buchtitel leer ist, dies kommt vor, wenn der Titel nicht passend formatiert ist</string>
</property>
</column>
<column>
<property name="text">
<string>Signatur</string>
</property>
</column>
<column>
<property name="text">
<string>Auflage</string>
</property>
</column>
<column>
<property name="text">
<string>Autor</string>
</property>
</column>
<column>
<property name="text">
<string>im Apparat?</string>
</property>
<property name="toolTip">
<string>Diese Angabe ist nicht zuverlässig. Ist das ❌ vorhanden, kann das Medium im Apparat sein, aber aufgrund eines Bugs nicht gefunden worden</string>
</property>
</column>
<column>
<property name="text">
<string>Vorgemerkt</string>
</property>
</column>
<column>
<property name="text">
<string>Link</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QWidget" name="search_statistics">
@@ -1966,6 +1964,7 @@ Einige Angaben müssen ggf angepasst werden</string>
<string>Bearbeiten</string>
</property>
<addaction name="actionEinstellungen"/>
<addaction name="actionMedien_loeschen"/>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
@@ -2020,6 +2019,11 @@ Einige Angaben müssen ggf angepasst werden</string>
<string>F1</string>
</property>
</action>
<action name="actionMedien_loeschen">
<property name="text">
<string>Medien löschen</string>
</property>
</action>
</widget>
<tabstops>
<tabstop>drpdwn_app_nr</tabstop>
@@ -2038,10 +2042,8 @@ Einige Angaben müssen ggf angepasst werden</string>
<tabstop>check_send_mail</tabstop>
<tabstop>btn_apparat_save</tabstop>
<tabstop>btn_apparat_apply</tabstop>
<tabstop>chkbx_show_del_media</tabstop>
<tabstop>btn_reserve</tabstop>
<tabstop>select_action_box</tabstop>
<tabstop>prof_id_adis</tabstop>
<tabstop>apparat_id_adis</tabstop>
<tabstop>automation_add_selected_books</tabstop>
<tabstop>saveandcreate</tabstop>

View File

@@ -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))

View File

@@ -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)