diff --git a/src/ui/loans.py b/src/ui/loans.py new file mode 100644 index 0000000..3032699 --- /dev/null +++ b/src/ui/loans.py @@ -0,0 +1,112 @@ +from .sources.Ui_main_Loans import Ui_MainWindow +from PyQt6 import QtCore, QtGui, QtWidgets +from .user import UserUI +from src.logic import Database +from src.utils import stringToDate, Icon +from src.utils import debugMessage as dbg +from icecream import ic + +TABLETOFIELDTRANSLATE = { + "Titel": "book.title", + "Signatur": "book.signature", + "Nutzer": "user_id", +} + + +class LoanWindow(QtWidgets.QMainWindow, Ui_MainWindow): + def __init__(self): + super(LoanWindow, self).__init__() + self.setupUi(self) + self.setWindowTitle("Ausleihhistorie") + self.setWindowIcon(Icon("borrow").icon) + self.loanTable.horizontalHeader().setSectionResizeMode( + QtWidgets.QHeaderView.ResizeMode.Stretch + ) + self.db = Database() + self.loans = [] + self.loadLoans() + + # lineedits + self.searchbar.textChanged.connect(self.limitResults) + + # radio buttons + self.radio_all.clicked.connect(self.filterResults) + self.radio_current.clicked.connect(self.filterResults) + self.radio_overdue.clicked.connect(self.filterResults) + + # table + self.loanTable.doubleClicked.connect(self.showUser) + self.show() + + def insertRow(self, data): + dbg(contents=data) + self.loanTable.insertRow(0) + self.loanTable.setItem(0, 0, QtWidgets.QTableWidgetItem(data.book.isbn)) + self.loanTable.setItem(0, 1, QtWidgets.QTableWidgetItem(data.book.signature)) + self.loanTable.setItem(0, 2, QtWidgets.QTableWidgetItem(data.book.title)) + self.loanTable.setItem(0, 3, QtWidgets.QTableWidgetItem(str(data.user_id))) + self.loanTable.setItem(0, 4, QtWidgets.QTableWidgetItem(data.loan_date)) + self.loanTable.setItem(0, 5, QtWidgets.QTableWidgetItem(data.return_date)) + self.loanTable.setItem(0, 6, QtWidgets.QTableWidgetItem(data.returned_date)) + + def loadLoans(self): + loans = self.db.getAllLoans() + for loan in loans: + self.insertRow(loan) + self.loans = loans + + def filterResults(self): + mode = ( + "all" + if self.radio_all.isChecked() + else "current" + if self.radio_current.isChecked() + else "overdue" + ) + self.loanTable.setRowCount(0) + today = QtCore.QDate.currentDate() + for loan in self.loans: + # convert string to Qdate + date = loan.return_date + qdate = stringToDate(date) + # current mode + if mode == "current": + if loan.returned == 1: + continue + elif mode == "overdue": + if loan.returned_date != "": + continue + else: + if qdate > today: + continue + self.insertRow(loan) + + def limitResults(self): + limiter = self.searchbar.text().lower() + searchfield = self.searchFields.currentText() + searchfield = TABLETOFIELDTRANSLATE[searchfield] + # dbg(limiter=limiter, search=searchfield) + self.loanTable.setRowCount(0) + for loan in self.loans: + fielddata = eval(f"loan.{searchfield}") + if isinstance(fielddata, str): + fielddata = fielddata.lower() + if limiter in fielddata: + self.insertRow(loan) + + def showUser(self): + row = self.loanTable.currentRow() + user_id = self.loanTable.item(row, 3).text() + user_id = int(user_id) + user = self.db.getUser(user_id) + self.user = UserUI(user.username, user.id, user.email) + self.user.show() + + +def launch(): + import sys + + app = QtWidgets.QApplication(sys.argv) + main_ui = LoanWindow() + # atexit.register(exit_handler) + sys.exit(app.exec())