225 lines
7.6 KiB
Python
225 lines
7.6 KiB
Python
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()) |