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

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)