From 923bfa8533ee79ce53e7780624d51ae614ab1442 Mon Sep 17 00:00:00 2001 From: WorldTeacher <41587052+WorldTeacher@users.noreply.github.com> Date: Mon, 15 Jul 2024 12:37:51 +0200 Subject: [PATCH] main ui class and functions --- src/ui/main_ui.py | 231 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 226 insertions(+), 5 deletions(-) diff --git a/src/ui/main_ui.py b/src/ui/main_ui.py index 2c99b2e..a7a2977 100644 --- a/src/ui/main_ui.py +++ b/src/ui/main_ui.py @@ -1,7 +1,13 @@ +import ast from .sources.Ui_main_UserInterface import Ui_MainWindow from .user import UserUI +from .createUser import CreateUser +from .multiUserInfo import MultiUserFound +from .newentry import NewEntry from src import config -from src.logic.database import Database +from src.logic import Database, Catalogue +from src.utils.stringtodate import stringToDate +from src.schemas import User, Book from PyQt6 import QtCore, QtGui, QtWidgets import sys @@ -11,17 +17,232 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow): super(MainUI, self).__init__() self.setupUi(self) self.db = Database() - + self.currentDate = QtCore.QDate.currentDate() + self.label_7.hide() + self.nextReturnDate.hide() + self.activeUser = None + # 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) - #Buttons self.btn_show_lentmedia.clicked.connect(self.showUser) + + # LineEdits + self.input_userno.returnPressed.connect( + lambda: self.checkUser("id", self.input_userno.text()) + ) + self.input_username.returnPressed.connect( + lambda: self.checkUser("username", self.input_username.text()) + ) + self.input_file_ident.returnPressed.connect(self.addMedia) + self.input_userno.setValidator(QtGui.QIntValidator()) + + # TableWidget + # set header size to be width/number of columns + self.mediaOverview.horizontalHeader().setSectionResizeMode( + QtWidgets.QHeaderView.ResizeMode.Stretch + ) + # self.input_userno. + self.show() + def changeMode(self): + current = self.mode.text() + if current == "Ausleihe": + self.mode.setText("Rückgabe") + self.input_username.clear() + self.input_userno.clear() + self.userdata.clear() + self.btn_show_lentmedia.setText("") + self.label_7.hide() + self.nextReturnDate.hide() + if current == "Rückgabe": + self.input_username.clear() + self.input_userno.clear() + self.userdata.clear() + self.mediaOverview.clearContents() + self.btn_show_lentmedia.setText("") + self.input_file_ident.clear() + self.nextReturnDate.hide() + self.label_7.hide() + def showUser(self): - self.user_ui = UserUI("","","") - self.user_ui.setFields("John Doe", "123456789", "test@mail.com") + if self.activeUser is None: + # create warning dialog + return + + self.user_ui = UserUI( + self.activeUser.username, self.activeUser.id, self.activeUser.email + ) + # self.user_ui.setFields("John Doe", "123456789", "test@mail.com") self.user_ui.show() + + def setUserData(self): + self.input_username.setText(self.activeUser.username) + self.input_userno.setText(str(self.activeUser.id)) + self.userdata.setText(self.activeUser.__repr__()) + + def checkUser(self, fieldname, data): + print("Checking User", fieldname, data) + # set fieldname as key and data as variable + user = self.db.checkUserExists(fieldname, data) + if not user: + user = CreateUser(fieldname, data) + user.exec() + userid = user.userid + if userid: + data = self.db.getUser(userid) + self.activeUser = data + else: + if len(user) > 1: + multi = MultiUserFound(user) + multi.exec() + self.activeUser = multi.userdata + else: + self.activeUser = user[0] + + if self.activeUser is not None: + self.setUserData() + self.input_file_ident.setFocus() + self.mode.setText("Ausleihe") + self.btn_show_lentmedia.setText(self.db.getActiveLoans(self.activeUser.id)) + retdate = self.db.selectClosestReturnDate(self.activeUser.id) + date = stringToDate(retdate) + self.nextReturnDate.setText(date) + self.nextReturnDate.show() + self.label_7.show() + + def moveToLine(self, line): + line.setFocus() + + def mediaAdd(self, identifier): + print("Adding Media", identifier) + user_id = self.activeUser.id + cat = Catalogue() + media = cat.get_book(identifier) + + book_id = self.db.checkMediaExists(media) + print(book_id) + if book_id: + if len(book_id) > 1: + print("Multiple Books found") + return + else: + # check if book is already loaned + loaned = self.db.checkLoanState(book_id[0]) + if loaned: + print("Book already loaned") + self.setStatusTip("Book already loaned") + return + else: + print("Book not loaned, loaning now") + self.db.insertLoan( + user_id, + book_id[0], + self.currentDate.toString(), + self.duedate.date().toString(), + ) + 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") + ) + + # print(media) + # if media: + # print(book_id, type(book_id)) + # loaned = self.db.checkLoanState(book_id) + # print(loaned) + # if self.db.checkMediaExists(media): + # print("Book already exists", book_id) + # else: + # book_id = self.db.insertMedia(media) + # print(book_id) + # self.db.insertLoan( + # self.activeUser.id, + # book_id, + # self.currentDate.toString(), + # self.duedate.date().toString(), + # ) + + # 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")) + + # # add media to database + # # check if book present in database + # print(self.db.getActiveLoans(self.activeUser.id)) + # self.btn_show_lentmedia.setText(self.db.getActiveLoans(self.activeUser.id)) + + def callShortcut(self, shortcut): + print("Calling Shortcut", shortcut) + # check if actions have shortcut key and call them + sysem_shortcuts = None + print(sysem_shortcuts) + + def addMedia(self): + mode = self.mode.text() + value = self.input_file_ident.text() + # if vaule is string, call shortcut, else mediaAdd + if mode == "Rückgabe": + self.returnMedia(value) + else: + self.lendMedia(value) + + def returnMedia(self, identifier): + print("Returning Media", identifier) + # get book id from database + identifier = Book( + isbn=identifier, title=identifier, signature=identifier, ppn=identifier + ) + book_id = self.db.checkMediaExists(identifier) + print(book_id) + if book_id: + # check if book is already loaned + loaned = self.db.checkLoanState(book_id[0]) + if loaned: + print("Book already loaned, returning now") + user = self.db.getUserByLoan(book_id[0]) + # set userdata in lineedits + self.activeUser = user + self.setUserData() + book = self.db.returnMedia(book_id[0]) + self.mediaOverview.insertRow(0) + self.mediaOverview.setItem(0, 0, QtWidgets.QTableWidgetItem(book.isbn)) + self.mediaOverview.setItem(0, 1, QtWidgets.QTableWidgetItem(book.title)) + self.mediaOverview.setItem( + 0, 2, QtWidgets.QTableWidgetItem("Zurückgegeben") + ) + self.input_file_ident.clear() + self.btn_show_lentmedia.setText( + self.db.getActiveLoans(self.activeUser.id) + ) + # + else: + print("Book not loaned") + else: + print("Book not found") + + def lendMedia(self, value): + if value.isnumeric(): + self.mediaAdd(value) + else: + if len(value) <= 2: + self.callShortcut(value) + else: + self.mediaAdd(value) + + def launch(): app = QtWidgets.QApplication(sys.argv) main_ui = MainUI()