ui to display all loans for all users
This commit is contained in:
112
src/ui/loans.py
Normal file
112
src/ui/loans.py
Normal 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())
|
||||
Reference in New Issue
Block a user