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 history: history.svg
help: help.svg help: help.svg
support: support.svg support: support.svg
add: add.svg

View File

@@ -311,7 +311,7 @@ class Database:
self.close_connection(conn) self.close_connection(conn)
def getActiveLoans(self, userid): def getActiveLoans(self, userid):
log.debug("id", str(userid)) log.debug("id: {}", userid)
conn = self.connect() conn = self.connect()
cursor = conn.cursor() cursor = conn.cursor()
try: try:
@@ -362,7 +362,7 @@ class Database:
conn.commit() conn.commit()
self.close_connection(conn) self.close_connection(conn)
def insertMedia(self, media): def insertMedia(self, media: Book):
log.debug(f"Inserting Media {media}") 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}' 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}|") log.info(f"Query: |{query}|")

View File

@@ -11,3 +11,13 @@ class User:
def __repr__(self): def __repr__(self):
return f"Name: {self.username}\nMatrikelnr.: {self.userid}\neMail: {self.email}" 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 .newBook import NewBook
from .loans import LoanWindow from .loans import LoanWindow
from .reportUi import ReportUi from .reportUi import ReportUi
from .addBook import addBook
backup = Backup() backup = Backup()
cat = Catalogue() cat = Catalogue()
@@ -59,6 +60,7 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.btn_createNewUser.setText("") self.btn_createNewUser.setText("")
self.btn_createNewUser.setIcon(Icon("add_user").overwriteColor("#1E90FF")) self.btn_createNewUser.setIcon(Icon("add_user").overwriteColor("#1E90FF"))
self.mode.clicked.connect(self.changeMode) self.mode.clicked.connect(self.changeMode)
self.addBook.clicked.connect(self.addBookAction)
# LineEdits # LineEdits
self.input_userno.returnPressed.connect( self.input_userno.returnPressed.connect(
@@ -109,8 +111,19 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
Icon("history", self.actionAusleihhistorie) Icon("history", self.actionAusleihhistorie)
Icon("help", self.actionDokumentation_ffnen) Icon("help", self.actionDokumentation_ffnen)
Icon("support", self.actionProblem_melden) Icon("support", self.actionProblem_melden)
Icon("add", self.addBook)
self.show() 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): def shutdown(self, *args):
# kill documentation thread # kill documentation thread
log.info("Shutting down") log.info("Shutting down")
@@ -332,9 +345,9 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.activeUser = multi.userdata self.activeUser = multi.userdata
else: else:
self.activeUser = user[0] self.activeUser = user[0]
log.debug("User: {}", self.activeUser)
if self.activeUser is not None: if self.activeUser is not None:
log.info(f"User found {self.activeUser}") log.debug(self.activeUser.__dict__)
self.setUserData() self.setUserData()
self.input_file_ident.setFocus() self.input_file_ident.setFocus()
self.mode.setText("Ausleihe") 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 PyQt6 import QtCore, QtGui, QtWidgets
from src.schemas import User from src.schemas import User
from src.utils import Icon from src.utils import Icon
from src import log
class MultiUserFound(QtWidgets.QDialog, Ui_Dialog): class MultiUserFound(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, users: list[User]): def __init__(self, users: list[User]):
@@ -28,14 +28,19 @@ class MultiUserFound(QtWidgets.QDialog, Ui_Dialog):
def selectUser(self, row, column): def selectUser(self, row, column):
# print(row, column) # print(row, column)
user = User( selected_user = User(
userid=self.tableWidget.item(row, 0).text(), userid=int(self.tableWidget.item(row, 0).text()),
username=self.tableWidget.item(row, 1).text(), username=self.tableWidget.item(row, 1).text(),
email=self.tableWidget.item(row, 2).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): def displayUsers(self):
for user in self.users: for user in self.users:
self.tableWidget.insertRow(0) self.tableWidget.insertRow(0)

View File

@@ -19,6 +19,38 @@ class Ui_MainWindow(object):
self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout() self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout") 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 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.duedate = QtWidgets.QDateEdit(parent=self.centralwidget) 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 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_3.setObjectName("label_3") self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1) 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 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.horizontalLayout_3.setObjectName("horizontalLayout_3")
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) 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.btn_createNewUser.setObjectName("btn_createNewUser")
self.horizontalLayout_3.addWidget(self.btn_createNewUser) self.horizontalLayout_3.addWidget(self.btn_createNewUser)
self.gridLayout.addLayout(self.horizontalLayout_3, 0, 1, 1, 1) self.gridLayout.addLayout(self.horizontalLayout_3, 0, 1, 1, 1)
self.label_2 = QtWidgets.QLabel(parent=self.centralwidget) self.addBook = QtWidgets.QToolButton(parent=self.centralwidget)
self.label_2.setObjectName("label_2") self.addBook.setText("")
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1) self.addBook.setObjectName("addBook")
self.input_userno = QtWidgets.QLineEdit(parent=self.centralwidget) self.gridLayout.addWidget(self.addBook, 3, 2, 1, 1)
self.input_userno.setObjectName("input_userno")
self.gridLayout.addWidget(self.input_userno, 1, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout) self.verticalLayout.addLayout(self.gridLayout)
self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget) self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget)
self.groupBox.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) self.groupBox.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
@@ -143,7 +147,7 @@ class Ui_MainWindow(object):
self.menuFenster = QtWidgets.QMenu(parent=self.menubar) self.menuFenster = QtWidgets.QMenu(parent=self.menubar)
self.menuFenster.setObjectName("menuFenster") self.menuFenster.setObjectName("menuFenster")
self.menuHilfe = QtWidgets.QMenu(parent=self.menubar) 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") self.menuHilfe.setObjectName("menuHilfe")
MainWindow.setMenuBar(self.menubar) MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
@@ -188,13 +192,13 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow): def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 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_6.setText(_translate("MainWindow", "Ausleihe bis"))
self.label_5.setText(_translate("MainWindow", "Modus")) self.label_5.setText(_translate("MainWindow", "Modus"))
self.mode.setText(_translate("MainWindow", "Rückgabe")) 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.btn_createNewUser.setText(_translate("MainWindow", "Neuen Nutzer anlegen"))
self.label_2.setText(_translate("MainWindow", "Benutzername"))
self.groupBox.setTitle(_translate("MainWindow", "Nutzerdaten")) self.groupBox.setTitle(_translate("MainWindow", "Nutzerdaten"))
self.groupBox_2.setTitle(_translate("MainWindow", "Ausleihdaten")) self.groupBox_2.setTitle(_translate("MainWindow", "Ausleihdaten"))
self.label_4.setText(_translate("MainWindow", "Anzahl Ausleihen")) self.label_4.setText(_translate("MainWindow", "Anzahl Ausleihen"))

View File

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

View File

@@ -17,6 +17,63 @@
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,10,20"> <layout class="QVBoxLayout" name="verticalLayout" stretch="0,10,20">
<item> <item>
<layout class="QGridLayout" name="gridLayout"> <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"> <item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
@@ -69,53 +126,6 @@
</property> </property>
</widget> </widget>
</item> </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"> <item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3"> <layout class="QHBoxLayout" name="horizontalLayout_3">
<item> <item>
@@ -140,16 +150,13 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="2" column="0"> <item row="3" column="2">
<widget class="QLabel" name="label_2"> <widget class="QToolButton" name="addBook">
<property name="text"> <property name="text">
<string>Benutzername</string> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<widget class="QLineEdit" name="input_userno"/>
</item>
</layout> </layout>
</item> </item>
<item> <item>
@@ -281,8 +288,8 @@
<widget class="QMenu" name="menuHilfe"> <widget class="QMenu" name="menuHilfe">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>2484</x> <x>2347</x>
<y>209</y> <y>134</y>
<width>181</width> <width>181</width>
<height>94</height> <height>94</height>
</rect> </rect>