From 7171d2a4da07978e3140f61be10d98ef8c7fde5b Mon Sep 17 00:00:00 2001 From: WorldTeacher Date: Thu, 30 Jan 2025 10:42:52 +0100 Subject: [PATCH] add option to add books manually, fix multiple user selection bug --- icons/add.svg | 1 + icons/icons.yaml | 3 +- src/logic/database.py | 4 +- src/schemas/user.py | 10 ++ src/ui/addBook.py | 25 +++++ src/ui/main_ui.py | 17 +++- src/ui/multiUserInfo.py | 13 ++- src/ui/sources/Ui_main_UserInterface.py | 76 +++++++-------- src/ui/sources/dialog_addBook.ui | 3 + src/ui/sources/main_UserInterface.ui | 117 +++++++++++++----------- 10 files changed, 169 insertions(+), 100 deletions(-) create mode 100644 icons/add.svg create mode 100644 src/ui/addBook.py diff --git a/icons/add.svg b/icons/add.svg new file mode 100644 index 0000000..6a0e78b --- /dev/null +++ b/icons/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/icons.yaml b/icons/icons.yaml index 2784f04..0cc6ae6 100644 --- a/icons/icons.yaml +++ b/icons/icons.yaml @@ -19,4 +19,5 @@ icons: quit: quit.svg history: history.svg help: help.svg - support: support.svg \ No newline at end of file + support: support.svg + add: add.svg \ No newline at end of file diff --git a/src/logic/database.py b/src/logic/database.py index 79300a4..a3984eb 100644 --- a/src/logic/database.py +++ b/src/logic/database.py @@ -311,7 +311,7 @@ class Database: self.close_connection(conn) def getActiveLoans(self, userid): - log.debug("id", str(userid)) + log.debug("id: {}", userid) conn = self.connect() cursor = conn.cursor() try: @@ -362,7 +362,7 @@ class Database: conn.commit() self.close_connection(conn) - def insertMedia(self, media): + def insertMedia(self, media: Book): log.debug(f"Inserting Media {media}") query = f"INSERT OR IGNORE INTO media (ppn, title, signature, isbn,link) VALUES ('{media.ppn}', '{media.title}', '{media.signature}', '{media.isbn}','{media.link}')" # , '{media.link}' log.info(f"Query: |{query}|") diff --git a/src/schemas/user.py b/src/schemas/user.py index f0596c3..58b954a 100644 --- a/src/schemas/user.py +++ b/src/schemas/user.py @@ -11,3 +11,13 @@ class User: def __repr__(self): return f"Name: {self.username}\nMatrikelnr.: {self.userid}\neMail: {self.email}" + + def match(self, testuser: "User"): + name = testuser.username + user_id = testuser.userid + email = testuser.email + + if name == self.username and email == self.email and user_id == self.userid: + return True + else: + return False \ No newline at end of file diff --git a/src/ui/addBook.py b/src/ui/addBook.py new file mode 100644 index 0000000..9a95ed6 --- /dev/null +++ b/src/ui/addBook.py @@ -0,0 +1,25 @@ +from .sources.Ui_dialog_addBook import Ui_Dialog +from PyQt6 import QtWidgets, QtCore, QtGui +from src.logic.database import Database +from src.schemas.book import Book + + +class addBook(QtWidgets.QDialog, Ui_Dialog): + def __init__(self): + super(addBook, self).__init__() + self.setupUi(self) + self.setWindowTitle("Buch hinzufügen") + self.setWindowIcon(QtGui.QIcon("icons/add.png")) + self.btn_save.clicked.connect(self.addBook) + self.btn_cancel.clicked.connect(self.close) + self.db = Database() + self.book_id = None + + def addBook(self): + title = self.book_title.text() + signature = self.book_signature.text() + book = Book(title=title, signature=signature) + id = self.db.insertMedia(book) + if id: + self.book_id = id + self.accept() diff --git a/src/ui/main_ui.py b/src/ui/main_ui.py index f90432b..e7af8cb 100644 --- a/src/ui/main_ui.py +++ b/src/ui/main_ui.py @@ -19,6 +19,7 @@ from .settings import Settings from .newBook import NewBook from .loans import LoanWindow from .reportUi import ReportUi +from .addBook import addBook backup = Backup() cat = Catalogue() @@ -59,6 +60,7 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow): self.btn_createNewUser.setText("") self.btn_createNewUser.setIcon(Icon("add_user").overwriteColor("#1E90FF")) self.mode.clicked.connect(self.changeMode) + self.addBook.clicked.connect(self.addBookAction) # LineEdits self.input_userno.returnPressed.connect( @@ -109,8 +111,19 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow): Icon("history", self.actionAusleihhistorie) Icon("help", self.actionDokumentation_ffnen) Icon("support", self.actionProblem_melden) + Icon("add", self.addBook) self.show() + def addBookAction(self): + add = addBook() + add.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal) + add.exec() + result = add.result() + book_id = add.book_id + if result == 1: + if self.activeUser: + self.loanMedia(self.activeUser.id, book_id) + # log.debug(f"UserID: {self.activeUser.id}, BookID: {book_id}") def shutdown(self, *args): # kill documentation thread log.info("Shutting down") @@ -332,9 +345,9 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow): self.activeUser = multi.userdata else: self.activeUser = user[0] - + log.debug("User: {}", self.activeUser) if self.activeUser is not None: - log.info(f"User found {self.activeUser}") + log.debug(self.activeUser.__dict__) self.setUserData() self.input_file_ident.setFocus() self.mode.setText("Ausleihe") diff --git a/src/ui/multiUserInfo.py b/src/ui/multiUserInfo.py index 4175eba..a2e1cd2 100644 --- a/src/ui/multiUserInfo.py +++ b/src/ui/multiUserInfo.py @@ -2,7 +2,7 @@ from .sources.Ui_dialog_multipleUserfound import Ui_Dialog from PyQt6 import QtCore, QtGui, QtWidgets from src.schemas import User from src.utils import Icon - +from src import log class MultiUserFound(QtWidgets.QDialog, Ui_Dialog): def __init__(self, users: list[User]): @@ -28,14 +28,19 @@ class MultiUserFound(QtWidgets.QDialog, Ui_Dialog): def selectUser(self, row, column): # print(row, column) - user = User( - userid=self.tableWidget.item(row, 0).text(), + selected_user = User( + userid=int(self.tableWidget.item(row, 0).text()), username=self.tableWidget.item(row, 1).text(), email=self.tableWidget.item(row, 2).text(), ) - self.userdata = user + # find the selecter in the self.users list + for user in self.users: + if user.match(selected_user): + self.userdata = user + break + log.debug("User selected: {}", self.userdata) def displayUsers(self): for user in self.users: self.tableWidget.insertRow(0) diff --git a/src/ui/sources/Ui_main_UserInterface.py b/src/ui/sources/Ui_main_UserInterface.py index cc7fe5b..db06c20 100644 --- a/src/ui/sources/Ui_main_UserInterface.py +++ b/src/ui/sources/Ui_main_UserInterface.py @@ -19,6 +19,38 @@ class Ui_MainWindow(object): self.verticalLayout.setObjectName("verticalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") + self.label_2 = QtWidgets.QLabel(parent=self.centralwidget) + self.label_2.setObjectName("label_2") + self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1) + self.input_username = QtWidgets.QLineEdit(parent=self.centralwidget) + self.input_username.setObjectName("input_username") + self.gridLayout.addWidget(self.input_username, 2, 1, 1, 1) + self.input_userno = QtWidgets.QLineEdit(parent=self.centralwidget) + self.input_userno.setObjectName("input_userno") + self.gridLayout.addWidget(self.input_userno, 1, 1, 1, 1) + self.label = QtWidgets.QLabel(parent=self.centralwidget) + self.label.setObjectName("label") + self.gridLayout.addWidget(self.label, 1, 0, 1, 1) + self.input_file_ident = QtWidgets.QLineEdit(parent=self.centralwidget) + self.input_file_ident.setObjectName("input_file_ident") + self.gridLayout.addWidget(self.input_file_ident, 3, 1, 1, 1) + self.label_6 = QtWidgets.QLabel(parent=self.centralwidget) + self.label_6.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter) + self.label_6.setObjectName("label_6") + self.gridLayout.addWidget(self.label_6, 5, 0, 1, 1) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.label_5 = QtWidgets.QLabel(parent=self.centralwidget) + font = QtGui.QFont() + font.setPointSize(14) + font.setBold(True) + self.label_5.setFont(font) + self.label_5.setObjectName("label_5") + self.horizontalLayout.addWidget(self.label_5) + self.mode = QtWidgets.QPushButton(parent=self.centralwidget) + self.mode.setObjectName("mode") + self.horizontalLayout.addWidget(self.mode) + self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.duedate = QtWidgets.QDateEdit(parent=self.centralwidget) @@ -38,32 +70,6 @@ class Ui_MainWindow(object): self.label_3 = QtWidgets.QLabel(parent=self.centralwidget) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1) - self.label_6 = QtWidgets.QLabel(parent=self.centralwidget) - self.label_6.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter) - self.label_6.setObjectName("label_6") - self.gridLayout.addWidget(self.label_6, 5, 0, 1, 1) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.label_5 = QtWidgets.QLabel(parent=self.centralwidget) - font = QtGui.QFont() - font.setPointSize(14) - font.setBold(True) - self.label_5.setFont(font) - self.label_5.setObjectName("label_5") - self.horizontalLayout.addWidget(self.label_5) - self.mode = QtWidgets.QPushButton(parent=self.centralwidget) - self.mode.setObjectName("mode") - self.horizontalLayout.addWidget(self.mode) - self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) - self.label = QtWidgets.QLabel(parent=self.centralwidget) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 1, 0, 1, 1) - self.input_username = QtWidgets.QLineEdit(parent=self.centralwidget) - self.input_username.setObjectName("input_username") - self.gridLayout.addWidget(self.input_username, 2, 1, 1, 1) - self.input_file_ident = QtWidgets.QLineEdit(parent=self.centralwidget) - self.input_file_ident.setObjectName("input_file_ident") - self.gridLayout.addWidget(self.input_file_ident, 3, 1, 1, 1) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) @@ -72,12 +78,10 @@ class Ui_MainWindow(object): self.btn_createNewUser.setObjectName("btn_createNewUser") self.horizontalLayout_3.addWidget(self.btn_createNewUser) self.gridLayout.addLayout(self.horizontalLayout_3, 0, 1, 1, 1) - self.label_2 = QtWidgets.QLabel(parent=self.centralwidget) - self.label_2.setObjectName("label_2") - self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1) - self.input_userno = QtWidgets.QLineEdit(parent=self.centralwidget) - self.input_userno.setObjectName("input_userno") - self.gridLayout.addWidget(self.input_userno, 1, 1, 1, 1) + self.addBook = QtWidgets.QToolButton(parent=self.centralwidget) + self.addBook.setText("") + self.addBook.setObjectName("addBook") + self.gridLayout.addWidget(self.addBook, 3, 2, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget) self.groupBox.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) @@ -143,7 +147,7 @@ class Ui_MainWindow(object): self.menuFenster = QtWidgets.QMenu(parent=self.menubar) self.menuFenster.setObjectName("menuFenster") self.menuHilfe = QtWidgets.QMenu(parent=self.menubar) - self.menuHilfe.setGeometry(QtCore.QRect(2484, 209, 181, 94)) + self.menuHilfe.setGeometry(QtCore.QRect(2347, 134, 181, 94)) self.menuHilfe.setObjectName("menuHilfe") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) @@ -188,13 +192,13 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.label_3.setText(_translate("MainWindow", "Signatur")) + self.label_2.setText(_translate("MainWindow", "Benutzername")) + self.label.setText(_translate("MainWindow", "Matrikelnummer")) self.label_6.setText(_translate("MainWindow", "Ausleihe bis")) self.label_5.setText(_translate("MainWindow", "Modus")) self.mode.setText(_translate("MainWindow", "Rückgabe")) - self.label.setText(_translate("MainWindow", "Matrikelnummer")) + self.label_3.setText(_translate("MainWindow", "Signatur")) self.btn_createNewUser.setText(_translate("MainWindow", "Neuen Nutzer anlegen")) - self.label_2.setText(_translate("MainWindow", "Benutzername")) self.groupBox.setTitle(_translate("MainWindow", "Nutzerdaten")) self.groupBox_2.setTitle(_translate("MainWindow", "Ausleihdaten")) self.label_4.setText(_translate("MainWindow", "Anzahl Ausleihen")) diff --git a/src/ui/sources/dialog_addBook.ui b/src/ui/sources/dialog_addBook.ui index cab6162..e9a5bc1 100644 --- a/src/ui/sources/dialog_addBook.ui +++ b/src/ui/sources/dialog_addBook.ui @@ -2,6 +2,9 @@ Dialog + + Qt::NonModal + 0 diff --git a/src/ui/sources/main_UserInterface.ui b/src/ui/sources/main_UserInterface.ui index a18b884..5e01a2c 100644 --- a/src/ui/sources/main_UserInterface.ui +++ b/src/ui/sources/main_UserInterface.ui @@ -17,6 +17,63 @@ + + + + Benutzername + + + + + + + + + + + + + Matrikelnummer + + + + + + + + + + Ausleihe bis + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + 14 + true + + + + Modus + + + + + + + Rückgabe + + + + + @@ -69,53 +126,6 @@ - - - - Ausleihe bis - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - 14 - true - - - - Modus - - - - - - - Rückgabe - - - - - - - - - Matrikelnummer - - - - - - - - - @@ -140,16 +150,13 @@ - - + + - Benutzername + - - - @@ -281,8 +288,8 @@ - 2484 - 209 + 2347 + 134 181 94