from .sources.Ui_main_userData import Ui_MainWindow from PyQt6 import QtCore, QtGui, QtWidgets from src.logic import Database from src.schemas import User from .extendLoan import ExtendLoan from src.utils import stringToDate, Icon from src.utils import debugMessage as dbg TABLETOFIELDTRANSLATE = { "Titel": "title", "Signatur": "signature", } class UserUI(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self, user): super(UserUI, self).__init__() self.setupUi(self) self.setWindowTitle("Nutzerdaten") self.setWindowIcon(Icon("user").icon) self.db = Database() self.username = user.username self.userno = user.userid self.usermail = user.email self.user_id = user.id self.setFields() self.userMedia = [] self.loadMedia() # Buttons self.btn_userChange_save.clicked.connect(self.saveChanges) self.btn_userchange_cancel.clicked.connect(self.discardChanges) self.btn_extendSelectedMedia.clicked.connect(self.extendLoan) self.deleteUser.clicked.connect(self.userDelete) self.deleteUser.setIcon(Icon("delete").overwriteColor("red")) self.deleteUser.setEnabled(False) self.deleteUser.setToolTip("Nutzer löschen nicht möglich, solange Medien ausgeliehen sind") self.btn_extendSelectedMedia.setEnabled(False) # radioButtons self.radio_allLoanedMedia.clicked.connect(self.loadMedia) self.radio_currentlyLoaned.clicked.connect(self.loadMedia) self.radio_overdueLoans.clicked.connect(self.loadMedia) # frames self.frame.hide() if self.UserMediaTable.rowCount() == 0: self.btn_extendSelectedMedia.setEnabled(False) self.deleteUser.setEnabled( True) else: self.btn_extendSelectedMedia.setEnabled(True) # table self.UserMediaTable.horizontalHeader().setSectionResizeMode( QtWidgets.QHeaderView.ResizeMode.Stretch ) # if one or more rows is selected, enable btn self.UserMediaTable.itemSelectionChanged.connect(self.userTableAction) # LineEdits self.searchbox.textChanged.connect(self.limitResults) # self.frame.hide() self.name.textChanged.connect(self.showFrame) self.user_no.textChanged.connect(self.showFrame) self.mail.textChanged.connect(self.showFrame) self.show() def userDelete(self): self.db.deleteUser(self.user_id) dialog = QtWidgets.QMessageBox() dialog.setIcon(QtWidgets.QMessageBox.Icon.Information) dialog.setWindowIcon(Icon("delete").icon) dialog.setText("Nutzer wurde gelöscht") dialog.setWindowTitle("Nutzer gelöscht") dialog.exec() self.close() def extendLoan(self): extend = ExtendLoan(self.username, self.userMedia) extend.exec() if extend.result() == 1: extendDate = extend.extendDate.toString("yyyy-MM-dd") # #print columns of selected rows for item in self.UserMediaTable.selectedItems(): if item.column() == 1: signature = item.text() #print(signature) self.db.extendLoanDuration(signature, extendDate) self.userMedia = [] self.UserMediaTable.setRowCount(0) self.loadMedia() return def limitResults(self): limiter = self.searchbox.text().lower() searchfield = self.searchfilter.currentText() searchfield = TABLETOFIELDTRANSLATE[searchfield] # dbg(limiter=limiter, search=searchfield) self.UserMediaTable.setRowCount(0) for loan in self.userMedia: #print("looping loans") fielddata = eval(f"loan.{searchfield}") if isinstance(fielddata, str): fielddata = fielddata.lower() if limiter in fielddata: self.addBookToTable(loan) def userTableAction(self): if self.UserMediaTable.selectedItems(): # if any selected item has a value in column 5, disable btn for item in self.UserMediaTable.selectedItems(): if item.column() == 5 and item.text() != "": self.btn_extendSelectedMedia.setEnabled(False) return self.btn_extendSelectedMedia.setEnabled(True) else: self.btn_extendSelectedMedia.setEnabled(False) def showFrame(self): self.frame.show() def setFields(self): self.name.setText(self.username) self.user_no.setText(str(self.userno)) self.mail.setText(self.usermail) def saveChanges(self): username = self.name.text() userno = int(self.user_no.text()) usermail = self.mail.text() self.db.updateUser(username, userno, usermail) self.username = username self.userno = userno self.usermail = usermail self.frame.hide() self.discardChanges() pass def discardChanges(self): self.setFields() self.frame.hide() def loadMedia(self): mode = ( "all" if self.radio_allLoanedMedia.isChecked() else "current" if self.radio_currentlyLoaned.isChecked() else "overdue" ) #print(mode) if self.userMedia == []: books = self.db.getAllMedia(self.user_id) for book in books: self.userMedia.append(book) #print(self.userMedia) self.UserMediaTable.setRowCount(0) for book in self.userMedia: # fromdate = stringToDate(book.loan_from) todate = stringToDate(book.loan_to) if mode == "current": # book not returned if book.returned == 1: continue elif mode == "overdue": # book not returned and todays date is greater than todate dbg(book=book) if book.returned_date is not None: continue # if todate is greater than current date, continue if todate > QtCore.QDate.currentDate(): continue self.addBookToTable(book) #print(book.title) def addBookToTable(self, book): self.UserMediaTable.insertRow(0) # item0 = isbn # item1 = signature # item2 = title # item3 = loan date # item4 = return date # item5 = returned_date self.UserMediaTable.setItem( 0, 0, QtWidgets.QTableWidgetItem(book.isbn if book.isbn != "None" else ""), ) self.UserMediaTable.setItem(0, 1, QtWidgets.QTableWidgetItem(book.signature)) self.UserMediaTable.setItem(0, 2, QtWidgets.QTableWidgetItem(book.title)) self.UserMediaTable.setItem( 0, 3, QtWidgets.QTableWidgetItem( stringToDate(book.loan_from).toString("dd.MM.yyyy") ), ) self.UserMediaTable.setItem( 0, 4, QtWidgets.QTableWidgetItem( stringToDate(book.loan_to).toString("dd.MM.yyyy") ), ) self.UserMediaTable.setItem( 0, 5, QtWidgets.QTableWidgetItem( "" if book.returned_date is None else stringToDate(book.returned_date).toString("dd.MM.yyyy") ), ) def launch(): import sys app = QtWidgets.QApplication(sys.argv) window = UserUI("Test", "3613899476", "sdf@f.de") window.show() sys.exit(app.exec())