UI: changes to new edition UIs

This commit is contained in:
2025-10-07 14:11:57 +02:00
parent e061c1f5a9
commit 713dbc1a1d
6 changed files with 173 additions and 26 deletions

View File

@@ -4,9 +4,8 @@ import loguru
from PySide6 import QtCore, QtWidgets
from src import LOG_DIR
from src.backend.database import Database
from src.backend.catalogue import Catalogue
from src.backend.database import Database
from src.ui.dialogs.mail import Mail_Dialog
from .dialog_sources.order_neweditions_ui import Ui_Dialog
@@ -33,8 +32,9 @@ class NewEditionDialog(QtWidgets.QDialog, Ui_Dialog):
def populateTable(self):
for book in self.books:
signature = book.signature
if signature is None or signature == "None":
signature = self.catalogue.get_signature(book.ppn)
# if signature is None or signature == "None" and book.ppn is not None:
# signature = self.catalogue.get_signature(f"kid:{book.ppn}")
# book.signature = signature
link_label = QtWidgets.QLabel()
link = (
book.link
@@ -52,8 +52,10 @@ class NewEditionDialog(QtWidgets.QDialog, Ui_Dialog):
self.tableWidget.insertRow(0)
# first column is checkbox for ordering
checkbox = QtWidgets.QCheckBox()
checkbox.setChecked(False)
checked = True if not book.signature else False
if book.library_location is not None:
checked = True if "hb" in book.library_location else checked
checkbox.setChecked(checked)
self.tableWidget.setCellWidget(0, 0, checkbox)
self.tableWidget.setItem(
0,
@@ -63,12 +65,17 @@ class NewEditionDialog(QtWidgets.QDialog, Ui_Dialog):
),
)
self.tableWidget.setItem(0, 2, QtWidgets.QTableWidgetItem(book.title))
self.tableWidget.setItem(
0, 3, QtWidgets.QTableWidgetItem(",".join(book.isbn))
isbn = (
book.isbn[0]
if isinstance(book.isbn, list) and len(book.isbn) > 0
else book.isbn
)
self.tableWidget.setItem(0, 3, QtWidgets.QTableWidgetItem(isbn))
self.tableWidget.setItem(0, 4, QtWidgets.QTableWidgetItem(book.author))
self.tableWidget.setItem(0, 5, QtWidgets.QTableWidgetItem(book.edition))
self.tableWidget.setItem(0, 6, QtWidgets.QTableWidgetItem(book.library_location))
self.tableWidget.setItem(
0, 6, QtWidgets.QTableWidgetItem(book.library_location)
)
self.tableWidget.setCellWidget(0, 7, link_label)
def orderBooks(self):
@@ -82,11 +89,12 @@ class NewEditionDialog(QtWidgets.QDialog, Ui_Dialog):
if book.link != "SWB"
else f"https://www.lehmanns.de/search/quick?mediatype_id=&q={book.isbn[0]}"
)
print(f"Bestelle Neuauflage für {book.title} ({book.edition})")
# print(f"Bestelle Neuauflage für {book.title} ({book.edition})")
book.isbn = [book.isbn] if isinstance(book.isbn, str) else book.isbn
ordered_books.append(book)
# Process ordered_books as needed
# editionId = self.db.getNewEditionId(book)
# self.db.setOrdered(editionId)
# Process ordered_books as needed
editionId = self.db.getNewEditionId(book)
self.db.setOrdered(editionId)
self.mail = Mail_Dialog(
app_id=self.mail_data.get("app_nr"),

View File

@@ -20,6 +20,8 @@ from .widget_sources.new_edition_check_ui import Ui_Dialog as Ui_NewEditionCheck
cat = Catalogue()
LEHMANNS_LINK = "https://www.lehmanns.de/search/quick?mediatype_id=&q={}"
class NewEditionCheckSelector(QtWidgets.QDialog, Ui_NewEditionCheckSelector):
def __init__(self, parent=None):
@@ -55,41 +57,82 @@ class NewEditionCheckFoundResult(QtWidgets.QDialog, Ui_NewEditionCheckFoundResul
self.line_pages.setText(self.book.pages if self.book.pages else "")
self.line_author.setText(self.book.author if self.book.author else "")
link = self.book.link if self.book.link else ""
text = "Lehmanns" if self.book.link else "Kein Link gefunden"
if self.book.link != "SWB":
link = f"<a href='{link}'>Lehmanns</a>"
link = f"<a href='{link}'>{text}</a>"
self.line_source.setText(link)
self.line_source.setOpenExternalLinks(True)
self.line_source.setTextFormat(Qt.TextFormat.RichText)
self.line_source.setTextInteractionFlags(
Qt.TextInteractionFlag.TextBrowserInteraction
)
self.line_isbn.textChanged.connect(self.update_book)
self.line_author.textChanged.connect(self.update_book)
self.line_title.textChanged.connect(self.update_book)
self.line_ppn.textChanged.connect(self.update_book)
self.line_signature.textChanged.connect(self.update_book)
self.line_edition.textChanged.connect(self.update_book)
self.line_publisher.textChanged.connect(self.update_book)
self.line_year.textChanged.connect(self.update_book)
self.line_pages.textChanged.connect(self.update_book)
self.line_isbn.setText(
", ".join(self.book.isbn)
if isinstance(self.book.isbn, list)
else self.book.isbn
)
if (
self.book.link == "SWB"
and self.book.signature is not None
and self.book.signature != ""
):
if self.book.signature is not None and self.book.signature != "":
self.in_library.setText(
"Diese Neuauflage ist bereits in der Bibliothek vorhanden."
f"Diese Neuauflage ist bereits in der Bibliothek vorhanden.\nStandort: {self.book.library_location}"
)
self.book.link == f"https://www.lehmanns.de/search/quick?mediatype_id=&q={self.book.isbn[0]}"
isbn = (
self.book.isbn[0]
if isinstance(self.book.isbn, list) and len(self.book.isbn) > 0
else self.book.title
)
self.book.link = LEHMANNS_LINK.format(self.line_isbn.text())
if (
self.book.link == "SWB"
and self.book.signature is not None
self.book.signature is not None
and self.book.signature != ""
and self.book.library_location not in (0, "0", None)
):
self.in_library.setText(
f"Diese Neuauflage ist bereits in der Bibliothek vorhanden, und an diesem Standort: {self.book.library_location}."
)
f"https://www.lehmanns.de/search/quick?mediatype_id=&q={self.book.isbn[0]}"
isbn = (
str(self.book.isbn[0])
if isinstance(self.book.isbn, list)
else str(self.book.isbn)
)
self.book.link = LEHMANNS_LINK.format(isbn)
pass
def update_book(self):
print("update book")
# for each line edit, get the value and assign it to the book on the corresponding attribute
for line_edit, attr in [
(self.line_ppn, "ppn"),
(self.line_title, "title"),
(self.line_signature, "signature"),
(self.line_edition, "edition"),
(self.line_publisher, "publisher"),
(self.line_year, "year"),
(self.line_pages, "pages"),
(self.line_author, "author"),
(self.line_isbn, "isbn"),
]:
value = line_edit.text()
if value == "":
value = None
setattr(self.book, attr, value)
print("set", attr, "to", value)
if attr == "isbn" and value is not None:
self.line_source.setText(
f"<a href='{LEHMANNS_LINK.format(self.line_isbn.text())}'>Lehmanns</a>"
)
class NewEditionCheckBook(QtWidgets.QDialog, Ui_NewEditionCheckBook):
def __init__(self, book: BookData, responses: List[BookData], parent=None):
@@ -124,6 +167,27 @@ class NewEditionCheckBook(QtWidgets.QDialog, Ui_NewEditionCheckBook):
NewEditionCheckFoundResult(parent=self, book=response)
)
self.label_book_index.setText(f"1 / {self.stackedWidget.count()}")
link = f"<a href='{self.book.link}'>Katalog</a>"
self.label_source_local.setText(link)
self.label_source_local.setOpenExternalLinks(True)
self.label_source_local.setTextFormat(Qt.TextFormat.RichText)
self.label_source_local.setTextInteractionFlags(
Qt.TextInteractionFlag.TextBrowserInteraction
)
isbn = (
str(self.book.isbn[0])
if isinstance(self.book.isbn, list) and len(self.book.isbn) > 0
else f"{self.book.title}+{self.book.author}"
)
self.label_source_external.setText(
f"<a href='{LEHMANNS_LINK.format(isbn)}'>Lehmanns</a>"
)
self.label_source_external.setOpenExternalLinks(True)
self.label_source_external.setTextFormat(Qt.TextFormat.RichText)
self.label_source_external.setTextInteractionFlags(
Qt.TextInteractionFlag.TextBrowserInteraction
)
self.btn_next.clicked.connect(self.next)
self.btn_prev.clicked.connect(self.previous)
if self.stackedWidget.count() <= 1:
@@ -216,3 +280,10 @@ class NewEditionChecker(QtWidgets.QDialog, Ui_NewEditionCheck):
super().accept()
# print("accepted", len(accepted_books), "new editions")
self.accepted_books = accepted_books
def launch(results: List[tuple[BookData, List[BookData]]]):
app = QtWidgets.QApplication([])
widget = NewEditionChecker(results)
widget.show()
app.exec()

View File

@@ -149,6 +149,37 @@
<item row="8" column="1">
<widget class="QLineEdit" name="line_isbn"/>
</item>
<item row="9" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_source_local">
<property name="text">
<string/>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_source_external">
<property name="text">
<string/>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Quelle</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1">

View File

@@ -147,6 +147,28 @@ class Ui_Dialog(object):
self.formLayout_2.setWidget(8, QFormLayout.ItemRole.FieldRole, self.line_isbn)
self.horizontalLayout_3 = QHBoxLayout()
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.label_source_local = QLabel(Dialog)
self.label_source_local.setObjectName(u"label_source_local")
self.label_source_local.setOpenExternalLinks(True)
self.horizontalLayout_3.addWidget(self.label_source_local)
self.label_source_external = QLabel(Dialog)
self.label_source_external.setObjectName(u"label_source_external")
self.label_source_external.setOpenExternalLinks(True)
self.horizontalLayout_3.addWidget(self.label_source_external)
self.formLayout_2.setLayout(9, QFormLayout.ItemRole.FieldRole, self.horizontalLayout_3)
self.label_12 = QLabel(Dialog)
self.label_12.setObjectName(u"label_12")
self.formLayout_2.setWidget(9, QFormLayout.ItemRole.LabelRole, self.label_12)
self.gridLayout.addLayout(self.formLayout_2, 1, 0, 1, 1)
@@ -196,6 +218,9 @@ class Ui_Dialog(object):
self.label_7.setText(QCoreApplication.translate("Dialog", u"Seiten", None))
self.label_8.setText(QCoreApplication.translate("Dialog", u"Autor", None))
self.label_11.setText(QCoreApplication.translate("Dialog", u"ISBN", None))
self.label_source_local.setText("")
self.label_source_external.setText("")
self.label_12.setText(QCoreApplication.translate("Dialog", u"Quelle", None))
self.btn_prev.setText(QCoreApplication.translate("Dialog", u"Previous", None))
self.btn_next.setText(QCoreApplication.translate("Dialog", u"Next", None))
# retranslateUi

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>400</width>
<height>312</height>
<height>346</height>
</rect>
</property>
<property name="windowTitle">
@@ -113,12 +113,21 @@
</item>
<item row="10" column="1">
<widget class="QLabel" name="line_source">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string/>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse</set>
</property>
</widget>
</item>
<item row="8" column="0">

View File

@@ -23,7 +23,7 @@ class Ui_Dialog(object):
def setupUi(self, Dialog):
if not Dialog.objectName():
Dialog.setObjectName(u"Dialog")
Dialog.resize(400, 312)
Dialog.resize(400, 346)
self.formLayout = QFormLayout(Dialog)
self.formLayout.setObjectName(u"formLayout")
self.label = QLabel(Dialog)
@@ -112,7 +112,10 @@ class Ui_Dialog(object):
self.line_source = QLabel(Dialog)
self.line_source.setObjectName(u"line_source")
self.line_source.setFocusPolicy(Qt.NoFocus)
self.line_source.setTextFormat(Qt.PlainText)
self.line_source.setOpenExternalLinks(True)
self.line_source.setTextInteractionFlags(Qt.LinksAccessibleByMouse)
self.formLayout.setWidget(10, QFormLayout.ItemRole.FieldRole, self.line_source)