main ui class and functions

This commit is contained in:
WorldTeacher
2024-07-15 12:37:51 +02:00
parent c914552384
commit 923bfa8533

View File

@@ -1,7 +1,13 @@
import ast
from .sources.Ui_main_UserInterface import Ui_MainWindow from .sources.Ui_main_UserInterface import Ui_MainWindow
from .user import UserUI from .user import UserUI
from .createUser import CreateUser
from .multiUserInfo import MultiUserFound
from .newentry import NewEntry
from src import config from src import config
from src.logic.database import Database from src.logic import Database, Catalogue
from src.utils.stringtodate import stringToDate
from src.schemas import User, Book
from PyQt6 import QtCore, QtGui, QtWidgets from PyQt6 import QtCore, QtGui, QtWidgets
import sys import sys
@@ -11,17 +17,232 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
super(MainUI, self).__init__() super(MainUI, self).__init__()
self.setupUi(self) self.setupUi(self)
self.db = Database() self.db = Database()
self.currentDate = QtCore.QDate.currentDate()
self.label_7.hide()
self.nextReturnDate.hide()
self.activeUser = None
# add default loan duration to current date
loanDate = self.currentDate.addDays(config.default_loan_duration)
self.duedate.setDate(loanDate)
# hotkeys
self.actionRueckgabemodus.triggered.connect(self.changeMode)
self.actionNutzer.triggered.connect(self.showUser)
#Buttons #Buttons
self.btn_show_lentmedia.clicked.connect(self.showUser) self.btn_show_lentmedia.clicked.connect(self.showUser)
# LineEdits
self.input_userno.returnPressed.connect(
lambda: self.checkUser("id", self.input_userno.text())
)
self.input_username.returnPressed.connect(
lambda: self.checkUser("username", self.input_username.text())
)
self.input_file_ident.returnPressed.connect(self.addMedia)
self.input_userno.setValidator(QtGui.QIntValidator())
# TableWidget
# set header size to be width/number of columns
self.mediaOverview.horizontalHeader().setSectionResizeMode(
QtWidgets.QHeaderView.ResizeMode.Stretch
)
# self.input_userno.
self.show() self.show()
def changeMode(self):
current = self.mode.text()
if current == "Ausleihe":
self.mode.setText("Rückgabe")
self.input_username.clear()
self.input_userno.clear()
self.userdata.clear()
self.btn_show_lentmedia.setText("")
self.label_7.hide()
self.nextReturnDate.hide()
if current == "Rückgabe":
self.input_username.clear()
self.input_userno.clear()
self.userdata.clear()
self.mediaOverview.clearContents()
self.btn_show_lentmedia.setText("")
self.input_file_ident.clear()
self.nextReturnDate.hide()
self.label_7.hide()
def showUser(self): def showUser(self):
self.user_ui = UserUI("","","") if self.activeUser is None:
self.user_ui.setFields("John Doe", "123456789", "test@mail.com") # create warning dialog
return
self.user_ui = UserUI(
self.activeUser.username, self.activeUser.id, self.activeUser.email
)
# self.user_ui.setFields("John Doe", "123456789", "test@mail.com")
self.user_ui.show() self.user_ui.show()
def setUserData(self):
self.input_username.setText(self.activeUser.username)
self.input_userno.setText(str(self.activeUser.id))
self.userdata.setText(self.activeUser.__repr__())
def checkUser(self, fieldname, data):
print("Checking User", fieldname, data)
# set fieldname as key and data as variable
user = self.db.checkUserExists(fieldname, data)
if not user:
user = CreateUser(fieldname, data)
user.exec()
userid = user.userid
if userid:
data = self.db.getUser(userid)
self.activeUser = data
else:
if len(user) > 1:
multi = MultiUserFound(user)
multi.exec()
self.activeUser = multi.userdata
else:
self.activeUser = user[0]
if self.activeUser is not None:
self.setUserData()
self.input_file_ident.setFocus()
self.mode.setText("Ausleihe")
self.btn_show_lentmedia.setText(self.db.getActiveLoans(self.activeUser.id))
retdate = self.db.selectClosestReturnDate(self.activeUser.id)
date = stringToDate(retdate)
self.nextReturnDate.setText(date)
self.nextReturnDate.show()
self.label_7.show()
def moveToLine(self, line):
line.setFocus()
def mediaAdd(self, identifier):
print("Adding Media", identifier)
user_id = self.activeUser.id
cat = Catalogue()
media = cat.get_book(identifier)
book_id = self.db.checkMediaExists(media)
print(book_id)
if book_id:
if len(book_id) > 1:
print("Multiple Books found")
return
else:
# check if book is already loaned
loaned = self.db.checkLoanState(book_id[0])
if loaned:
print("Book already loaned")
self.setStatusTip("Book already loaned")
return
else:
print("Book not loaned, loaning now")
self.db.insertLoan(
user_id,
book_id[0],
self.currentDate.toString(),
self.duedate.date().toString(),
)
self.mediaOverview.insertRow(0)
self.mediaOverview.setItem(
0, 0, QtWidgets.QTableWidgetItem(media.isbn)
)
self.mediaOverview.setItem(
0, 1, QtWidgets.QTableWidgetItem(media.title)
)
self.mediaOverview.setItem(
0, 2, QtWidgets.QTableWidgetItem("Entliehen")
)
# print(media)
# if media:
# print(book_id, type(book_id))
# loaned = self.db.checkLoanState(book_id)
# print(loaned)
# if self.db.checkMediaExists(media):
# print("Book already exists", book_id)
# else:
# book_id = self.db.insertMedia(media)
# print(book_id)
# self.db.insertLoan(
# self.activeUser.id,
# book_id,
# self.currentDate.toString(),
# self.duedate.date().toString(),
# )
# self.mediaOverview.insertRow(0)
# self.mediaOverview.setItem(0, 0, QtWidgets.QTableWidgetItem(media.isbn))
# self.mediaOverview.setItem(0, 1, QtWidgets.QTableWidgetItem(media.title))
# self.mediaOverview.setItem(0, 2, QtWidgets.QTableWidgetItem("Entliehen"))
# # add media to database
# # check if book present in database
# print(self.db.getActiveLoans(self.activeUser.id))
# self.btn_show_lentmedia.setText(self.db.getActiveLoans(self.activeUser.id))
def callShortcut(self, shortcut):
print("Calling Shortcut", shortcut)
# check if actions have shortcut key and call them
sysem_shortcuts = None
print(sysem_shortcuts)
def addMedia(self):
mode = self.mode.text()
value = self.input_file_ident.text()
# if vaule is string, call shortcut, else mediaAdd
if mode == "Rückgabe":
self.returnMedia(value)
else:
self.lendMedia(value)
def returnMedia(self, identifier):
print("Returning Media", identifier)
# get book id from database
identifier = Book(
isbn=identifier, title=identifier, signature=identifier, ppn=identifier
)
book_id = self.db.checkMediaExists(identifier)
print(book_id)
if book_id:
# check if book is already loaned
loaned = self.db.checkLoanState(book_id[0])
if loaned:
print("Book already loaned, returning now")
user = self.db.getUserByLoan(book_id[0])
# set userdata in lineedits
self.activeUser = user
self.setUserData()
book = self.db.returnMedia(book_id[0])
self.mediaOverview.insertRow(0)
self.mediaOverview.setItem(0, 0, QtWidgets.QTableWidgetItem(book.isbn))
self.mediaOverview.setItem(0, 1, QtWidgets.QTableWidgetItem(book.title))
self.mediaOverview.setItem(
0, 2, QtWidgets.QTableWidgetItem("Zurückgegeben")
)
self.input_file_ident.clear()
self.btn_show_lentmedia.setText(
self.db.getActiveLoans(self.activeUser.id)
)
#
else:
print("Book not loaned")
else:
print("Book not found")
def lendMedia(self, value):
if value.isnumeric():
self.mediaAdd(value)
else:
if len(value) <= 2:
self.callShortcut(value)
else:
self.mediaAdd(value)
def launch(): def launch():
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
main_ui = MainUI() main_ui = MainUI()