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 import Database, Catalogue, Backup from src.utils import stringToDate from src.schemas import User, Book from PyQt6 import QtCore, QtGui, QtWidgets import sys import atexit backup = Backup() class MainUI(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): 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.setRowCount(0) self.btn_show_lentmedia.setText("") self.input_file_ident.clear() self.nextReturnDate.hide() self.label_7.hide() def showUser(self): 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: print("User found", self.activeUser) 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) if retdate: 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) self.setStatusTip("") self.input_file_ident.clear() self.input_file_ident.setEnabled(False) user_id = self.activeUser.id cat = Catalogue() media = cat.get_book(identifier) print(media) 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") self.input_file_ident.setEnabled(True) 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") ) else: book_id = self.db.insertMedia(media) self.db.insertLoan( userid=user_id, mediaid=book_id, loandate=self.currentDate.toString(), duedate=self.duedate.date().toString(), ) self.btn_show_lentmedia.setText(self.db.getActiveLoans(self.activeUser.id)) self.nextReturnDate.setText( stringToDate(self.db.selectClosestReturnDate(self.activeUser.id)) ) self.nextReturnDate.show() self.label_7.show() self.input_file_ident.setEnabled(True) 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.currentDate.toString()) 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): value = value.strip() if value.isnumeric(): self.mediaAdd(value) else: if len(value) <= 2: self.callShortcut(value) else: self.mediaAdd(value) def exit_handler(): print("Exiting") state = backup.createBackup() # create dialog to show state app = QtWidgets.QApplication(sys.argv) dialog = QtWidgets.QMessageBox() if state == True: dialog.setText("Backup created successfully") else: dialog.setText("Backup creation failed") dialog.exec() def launch(): app = QtWidgets.QApplication(sys.argv) main_ui = MainUI() atexit.register(exit_handler) sys.exit(app.exec()) # sys.exit(app.exec())