add option to add books manually, fix multiple user selection bug

This commit is contained in:
2025-01-30 10:42:52 +01:00
parent 5501cbf97c
commit 7171d2a4da
10 changed files with 169 additions and 100 deletions

1
icons/add.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="#e8eaed"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z"/></svg>

After

Width:  |  Height:  |  Size: 182 B

View File

@@ -20,3 +20,4 @@ icons:
history: history.svg
help: help.svg
support: support.svg
add: add.svg

View File

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

View File

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

25
src/ui/addBook.py Normal file
View File

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

View File

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

View File

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

View File

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

View File

@@ -2,6 +2,9 @@
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>

View File

@@ -17,6 +17,63 @@
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,10,20">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Benutzername</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="input_username"/>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="input_userno"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Matrikelnummer</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="input_file_ident"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Ausleihe bis</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_5">
<property name="font">
<font>
<pointsize>14</pointsize>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Modus</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mode">
<property name="text">
<string>Rückgabe</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
@@ -69,53 +126,6 @@
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Ausleihe bis</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_5">
<property name="font">
<font>
<pointsize>14</pointsize>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Modus</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mode">
<property name="text">
<string>Rückgabe</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Matrikelnummer</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="input_username"/>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="input_file_ident"/>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
@@ -140,16 +150,13 @@
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<item row="3" column="2">
<widget class="QToolButton" name="addBook">
<property name="text">
<string>Benutzername</string>
<string/>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="input_userno"/>
</item>
</layout>
</item>
<item>
@@ -281,8 +288,8 @@
<widget class="QMenu" name="menuHilfe">
<property name="geometry">
<rect>
<x>2484</x>
<y>209</y>
<x>2347</x>
<y>134</y>
<width>181</width>
<height>94</height>
</rect>