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