ui to display all loans for all users

This commit is contained in:
WorldTeacher
2024-07-30 09:43:53 +02:00
parent 7a58dbc5ec
commit 4e04dd26a6

112
src/ui/loans.py Normal file
View File

@@ -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())