rework loan system to use f5 to change mode to avoid confusion

This commit is contained in:
WorldTeacher
2024-07-30 13:07:44 +02:00
parent f1a33e7ea8
commit e1658644ab
3 changed files with 226 additions and 171 deletions

View File

@@ -29,13 +29,9 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.setupUi(self)
self.setWindowTitle(f"Handbibliotheksleihsystem {config.institution_name}")
self.setWindowIcon(Icon("main").icon)
self.db = Database()
self.currentDate = QtCore.QDate.currentDate()
self.label_7.hide()
self.nextReturnDate.hide()
# add default loan duration to current date
loanDate = self.currentDate.addDays(config.default_loan_duration)
self.duedate.setDate(loanDate)
# hotkeys
self.actionRueckgabemodus.triggered.connect(self.changeMode)
self.actionNutzer.triggered.connect(self.showUser)
@@ -60,6 +56,9 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.input_userno.textChanged.connect(
lambda: self.validateInput(self.input_userno.text(), "int")
)
self.input_username.setEnabled(False)
self.input_userno.setEnabled(False)
self.duedate.setEnabled(False)
# TableWidget
# set header size to be width/number of columns
self.mediaOverview.horizontalHeader().setSectionResizeMode(
@@ -69,9 +68,16 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
# self.userdata.textChanged.connect(lambda: self.mode.setText("Ausleihe"))
# self.input_userno.
# variables
self.db = Database()
self.currentDate = QtCore.QDate.currentDate()
loanDate = self.currentDate.addDays(config.default_loan_duration)
self.activeUser = None
self.activeState = "Rückgabe"
self.duedate.setDate(loanDate)
# functions
self.activateReturnMode()
if backup.backup:
log.info("Backup enabled")
else:
@@ -102,17 +108,41 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
def changeMode(self):
log.info("Changing Mode")
dbg(f"Current mode: {self.mode.text()}")
self.mode.setText("Rückgabe")
dbg(f"Current mode: {self.activeState}")
self.input_username.clear()
self.input_userno.clear()
self.userdata.clear()
self.input_userno.clear()
self.btn_show_lentmedia.setText("")
self.input_file_ident.clear()
self.label_7.hide()
self.nextReturnDate.hide()
self.mediaOverview.setRowCount(0)
if self.activeState == "Rückgabe":
self.activateLoanMode()
else:
self.activateReturnMode()
def activateLoanMode(self):
dbg("Activating Loan Mode")
self.input_username.setEnabled(True)
self.input_userno.setEnabled(True)
self.duedate.setEnabled(True)
self.input_userno.setFocus()
# set mode background color to blue with rounded edges
# self.mode.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
self.mode.setStyleSheet("background-color: #1E90FF")
self.mode.setText("Ausleihe")
self.activeState = "Ausleihe"
def activateReturnMode(self):
dbg("Activating Return Mode")
self.input_username.setEnabled(False)
self.input_userno.setEnabled(False)
# set mode background color to orange
self.mode.setStyleSheet("background-color: #FFA500")
self.duedate.setEnabled(False)
self.activeState = "Rückgabe"
self.mode.setText("Rückgabe")
def showUser(self):
log.info(f"Showing User {self.activeUser}")
@@ -138,7 +168,7 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.input_username.setText(self.activeUser.username)
self.input_userno.setText(str(self.activeUser.id))
self.userdata.setText(self.activeUser.__repr__())
self.mode.setText("Ausleihe")
# self.mode.setText("Ausleihe")
def createUser(self):
log.info("Creating User")
@@ -151,6 +181,7 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.activeUser = data
# set user to active user
self.setUserData()
self.activateLoanMode()
self.input_file_ident.setFocus()
@@ -239,35 +270,15 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.input_file_ident.setEnabled(True)
return
book_id = self.db.insertMedia(media)
# self.db.insertLoan(
# userid=user_id,
# mediaid=book_id,
# loandate=self.currentDate.toString("yyyy-MM-dd"),
# duedate=self.duedate.date().toString("yyyy-MM-dd"),
# )
# self.mediaOverview.insertRow(0)
# self.mediaOverview.setItem(0, 0, QtWidgets.QTableWidgetItem(media.isbn))
# self.mediaOverview.setItem(
# 0, 1, QtWidgets.QTableWidgetItem(media.title)
# )
# self.mediaOverview.setItem(
# 0, 2, QtWidgets.QTableWidgetItem("Entliehen")
# )
# return
self.loanMedia(user_id, [book_id], media)
else:
newbook = NewBook()
newbook.exec()
if newbook.result() == 1:
media = newbook.book
book_id = self.db.insertMedia(media)
# self.db.insertLoan(
# userid=user_id,
# mediaid=book_id,
# loandate=self.currentDate.toString(),
# duedate=self.duedate.date().toString(),
# )
if book_id:
elif book_id:
if isinstance(book_id, list) and len(book_id) > 1:
# print("Multiple Books found")
# TODO: implement book selection dialog
@@ -302,28 +313,28 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.setStatusTipMessage("Neues Exemplar hinzugefügt")
# print(created_ids)
self.input_file_ident.setEnabled(True)
newentries = newentry.newIds
if newentries:
for entry in newentries:
book = self.db.getMedia(entry)
self.loanMedia(user_id, [entry], book)
dbg("inserted duplicated book into database")
return
else:
# print("Book not loaned, loaning now")
self.db.insertLoan(
user_id,
book_id[0],
self.currentDate.toString("yyyy-MM-dd"),
self.duedate.date().toString("yyyy-MM-dd"),
)
self.mediaOverview.insertRow(0)
self.mediaOverview.setItem(
0, 0, QtWidgets.QTableWidgetItem(media.isbn)
)
self.mediaOverview.setItem(
0, 1, QtWidgets.QTableWidgetItem(media.title)
)
self.mediaOverview.setItem(
0, 2, QtWidgets.QTableWidgetItem("Entliehen")
)
# else:
self.loanMedia(user_id, book_id, media)
def loanMedia(self, user_id, book_id, media):
self.db.insertLoan(
user_id,
book_id[0],
self.currentDate.toString("yyyy-MM-dd"),
self.duedate.date().toString("yyyy-MM-dd"),
)
self.mediaOverview.insertRow(0)
self.mediaOverview.setItem(0, 0, QtWidgets.QTableWidgetItem(media.signature))
self.mediaOverview.setItem(0, 1, QtWidgets.QTableWidgetItem(media.title))
self.mediaOverview.setItem(0, 2, QtWidgets.QTableWidgetItem("Entliehen"))
self.btn_show_lentmedia.setText(self.db.getActiveLoans(self.activeUser.id))
self.nextReturnDate.setText(
stringToDate(self.db.selectClosestReturnDate(self.activeUser.id)).toString(

View File

@@ -19,6 +19,22 @@ class Ui_MainWindow(object):
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.duedate = QtWidgets.QDateEdit(parent=self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.duedate.sizePolicy().hasHeightForWidth())
self.duedate.setSizePolicy(sizePolicy)
self.duedate.setMinimumSize(QtCore.QSize(130, 0))
self.duedate.setMaximumSize(QtCore.QSize(100, 16777215))
self.duedate.setBaseSize(QtCore.QSize(70, 0))
self.duedate.setObjectName("duedate")
self.horizontalLayout_4.addWidget(self.duedate)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_4.addItem(spacerItem)
self.gridLayout.addLayout(self.horizontalLayout_4, 5, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
@@ -36,8 +52,19 @@ class Ui_MainWindow(object):
self.label_5.setObjectName("label_5")
self.horizontalLayout.addWidget(self.label_5)
self.mode = QtWidgets.QLabel(parent=self.centralwidget)
self.mode.setFrameShape(QtWidgets.QFrame.Shape.Box)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.mode.sizePolicy().hasHeightForWidth())
self.mode.setSizePolicy(sizePolicy)
self.mode.setMinimumSize(QtCore.QSize(62, 0))
self.mode.setMaximumSize(QtCore.QSize(62, 16777215))
self.mode.setBaseSize(QtCore.QSize(62, 0))
self.mode.setAutoFillBackground(False)
self.mode.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
self.mode.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
self.mode.setLineWidth(2)
self.mode.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.mode.setObjectName("mode")
self.horizontalLayout.addWidget(self.mode)
self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
@@ -50,36 +77,20 @@ class Ui_MainWindow(object):
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)
self.horizontalLayout_3.addItem(spacerItem1)
self.btn_createNewUser = QtWidgets.QPushButton(parent=self.centralwidget)
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.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem)
self.btn_createNewUser = QtWidgets.QPushButton(parent=self.centralwidget)
self.btn_createNewUser.setObjectName("btn_createNewUser")
self.horizontalLayout_3.addWidget(self.btn_createNewUser)
self.gridLayout.addLayout(self.horizontalLayout_3, 0, 1, 1, 1)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.duedate = QtWidgets.QDateEdit(parent=self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.duedate.sizePolicy().hasHeightForWidth())
self.duedate.setSizePolicy(sizePolicy)
self.duedate.setMinimumSize(QtCore.QSize(130, 0))
self.duedate.setMaximumSize(QtCore.QSize(100, 16777215))
self.duedate.setBaseSize(QtCore.QSize(70, 0))
self.duedate.setObjectName("duedate")
self.horizontalLayout_4.addWidget(self.duedate)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_4.addItem(spacerItem1)
self.gridLayout.addLayout(self.horizontalLayout_4, 5, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout)
self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget)
self.groupBox.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
@@ -187,14 +198,14 @@ class Ui_MainWindow(object):
self.label_5.setText(_translate("MainWindow", "Modus"))
self.mode.setText(_translate("MainWindow", "Rückgabe"))
self.label.setText(_translate("MainWindow", "Matrikelnummer"))
self.label_2.setText(_translate("MainWindow", "Benutzername"))
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"))
self.label_7.setText(_translate("MainWindow", "Nächstes Rückgabedatum"))
item = self.mediaOverview.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "ISBN"))
item.setText(_translate("MainWindow", "Signatur"))
item = self.mediaOverview.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Titel"))
item = self.mediaOverview.horizontalHeaderItem(2)

View File

@@ -17,100 +17,6 @@
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,10,20">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Suchbegriff</string>
</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="QLabel" name="mode">
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
<property name="lineWidth">
<number>2</number>
</property>
<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="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Benutzername</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="input_userno"/>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_createNewUser">
<property name="text">
<string>Neuen Nutzer anlegen</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
@@ -156,6 +62,133 @@
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Suchbegriff</string>
</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="QLabel" name="mode">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>62</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>62</width>
<height>16777215</height>
</size>
</property>
<property name="baseSize">
<size>
<width>62</width>
<height>0</height>
</size>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>2</number>
</property>
<property name="text">
<string>Rückgabe</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</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>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_createNewUser">
<property name="text">
<string>Neuen Nutzer anlegen</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Benutzername</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="input_userno"/>
</item>
</layout>
</item>
<item>
@@ -237,7 +270,7 @@
</property>
<column>
<property name="text">
<string>ISBN</string>
<string>Signatur</string>
</property>
</column>
<column>