diff --git a/src/ui/main_ui.py b/src/ui/main_ui.py index 7882275..c1d3bb8 100644 --- a/src/ui/main_ui.py +++ b/src/ui/main_ui.py @@ -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( diff --git a/src/ui/sources/Ui_main_UserInterface.py b/src/ui/sources/Ui_main_UserInterface.py index c929a66..15ce2ca 100644 --- a/src/ui/sources/Ui_main_UserInterface.py +++ b/src/ui/sources/Ui_main_UserInterface.py @@ -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) diff --git a/src/ui/sources/main_UserInterface.ui b/src/ui/sources/main_UserInterface.ui index 32334b0..dca3a46 100644 --- a/src/ui/sources/main_UserInterface.ui +++ b/src/ui/sources/main_UserInterface.ui @@ -17,100 +17,6 @@ - - - - Suchbegriff - - - - - - - Ausleihe bis - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - 14 - true - - - - Modus - - - - - - - QFrame::Box - - - 2 - - - Rückgabe - - - - - - - - - Matrikelnummer - - - - - - - - - - - - - Benutzername - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Neuen Nutzer anlegen - - - - - @@ -156,6 +62,133 @@ + + + + Suchbegriff + + + + + + + Ausleihe bis + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + 14 + true + + + + Modus + + + + + + + + 0 + 0 + + + + + 62 + 0 + + + + + 62 + 16777215 + + + + + 62 + 0 + + + + false + + + QFrame::StyledPanel + + + QFrame::Sunken + + + 2 + + + Rückgabe + + + Qt::AlignCenter + + + + + + + + + Matrikelnummer + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Neuen Nutzer anlegen + + + + + + + + + Benutzername + + + + + + @@ -237,7 +270,7 @@ - ISBN + Signatur