main ui class and functions
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user