172 lines
5.5 KiB
Python
172 lines
5.5 KiB
Python
from .sources.Ui_main_Loans import Ui_MainWindow
|
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
|
from src import log
|
|
from .user import UserUI
|
|
from src.logic import Database
|
|
from src.utils import stringToDate, Icon
|
|
from icecream import ic
|
|
|
|
TABLETOFIELDTRANSLATE = {
|
|
"Titel": "book.title",
|
|
"Signatur": "book.signature",
|
|
"Nutzer": "user_name",
|
|
}
|
|
|
|
|
|
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)
|
|
self.searchbar.returnPressed.connect(self.selfpass)
|
|
|
|
# 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)
|
|
log.info("Loan history window opened")
|
|
self.show()
|
|
|
|
def selfpass(self):
|
|
pass
|
|
|
|
def insertRow(self, data):
|
|
log.debug(f"Inserting row: {data}")
|
|
|
|
retdate = ""
|
|
if data.returned_date != "":
|
|
retdate = stringToDate(data.returned_date).toString("dd.MM.yyyy")
|
|
ic(retdate)
|
|
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(self.db.getUser(data.user_id).username)),
|
|
)
|
|
self.loanTable.setItem(
|
|
0,
|
|
4,
|
|
QtWidgets.QTableWidgetItem(
|
|
stringToDate(data.loan_date).toString("dd.MM.yyyy")
|
|
),
|
|
)
|
|
self.loanTable.setItem(
|
|
0,
|
|
5,
|
|
QtWidgets.QTableWidgetItem(
|
|
stringToDate(data.return_date).toString("dd.MM.yyyy")
|
|
),
|
|
)
|
|
self.loanTable.setItem(0, 6, QtWidgets.QTableWidgetItem(retdate))
|
|
book = data.book
|
|
book.loan_to = data.return_date
|
|
book.load_from = data.loan_date
|
|
book.returned = data.returned
|
|
match self.check_book(book):
|
|
case "overdue":
|
|
for i in range(7):
|
|
self.loanTable.item(0, i).setBackground(
|
|
QtGui.QColor(255, 0, 0, 100)
|
|
)
|
|
case "ok":
|
|
for i in range(7):
|
|
self.loanTable.item(0, i).setBackground(
|
|
QtGui.QColor(105, 255, 51, 100)
|
|
)
|
|
case "returned":
|
|
for i in range(7):
|
|
self.loanTable.item(0, i).setBackground(
|
|
QtGui.QColor(102, 153, 153, 100)
|
|
)
|
|
|
|
def check_book(self, book):
|
|
today = QtCore.QDate.currentDate().toString("yyyy-MM-dd")
|
|
returnDate = stringToDate(book.loan_to).toString("yyyy-MM-dd")
|
|
returned = book.returned
|
|
if returned == 1:
|
|
return "returned"
|
|
else:
|
|
if returnDate < today:
|
|
return "overdue"
|
|
else:
|
|
return "ok"
|
|
|
|
def loadLoans(self):
|
|
loans = self.db.getAllLoans()
|
|
for loan in loans:
|
|
self.insertRow(loan)
|
|
|
|
return loans
|
|
|
|
def filterResults(self):
|
|
mode = (
|
|
"all"
|
|
if self.radio_all.isChecked()
|
|
else "current"
|
|
if self.radio_current.isChecked()
|
|
else "overdue"
|
|
)
|
|
log.debug("Switching mode to {}", mode)
|
|
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()
|
|
limiter = str(limiter)
|
|
searchfield = self.searchFields.currentText()
|
|
searchfield = TABLETOFIELDTRANSLATE[searchfield]
|
|
log.debug(f"Searching for: {limiter} in {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_name = self.loanTable.item(row, 3).text()
|
|
user = self.db.getUserId(user_name)
|
|
self.user = UserUI(user)
|
|
self.user.show()
|
|
|
|
|
|
def launch():
|
|
import sys
|
|
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
main_ui = LoanWindow()
|
|
# atexit.register(exit_handler)
|
|
sys.exit(app.exec())
|