add updates

This commit is contained in:
WorldTeacher
2024-10-02 15:28:12 +02:00
parent f4bc3de357
commit 2836be7490
6 changed files with 149 additions and 41 deletions

View File

@@ -1,7 +1,9 @@
import os
import sys
import atexit
import datetime
from src import config
import webbrowser
from src import config, __email__
from src.logic import Database, Catalogue, Backup
from src.utils import stringToDate, Icon, Log
from src.utils import debugMessage as dbg
@@ -16,14 +18,18 @@ from .settings import Settings
from .newBook import NewBook
from .loans import LoanWindow
from .reportUi import ReportUi
from PyQt6 import QtCore, QtWidgets
from src.utils import launch_documentation
from PyQt6 import QtCore, QtWidgets, QtGui
from omegaconf import OmegaConf
from src.logic.documentation_thread import DocumentationThread
backup = Backup()
cat = Catalogue()
log = Log("main")
dbg(backup=config.database.do_backup, catalogue=config.catalogue)
def getShortcut(shortcuts, name):
shortcut = [cut for cut in shortcuts if cut["name"] == name][0]
return shortcut["current"]
class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
@@ -38,13 +44,21 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.actionRueckgabemodus.triggered.connect(self.changeMode)
self.actionNutzer.triggered.connect(self.showUser)
self.actionEinstellungen.triggered.connect(self.showSettings)
self.actionAusleihistorie.triggered.connect(self.showLoanHistory)
self.actionAusleihhistorie.triggered.connect(self.showLoanHistory)
self.actionBericht_erstellen.triggered.connect(self.generateReport)
self.actionDokumentation_ffnen.triggered.connect(self.openDocumentation)
self.actionBeenden.triggered.connect(self.shutdown)
def __mail():
webbrowser.open(f"mailto:{__email__}")
self.actionProblem_melden.triggered.connect(__mail)
#if close button is pressed call shutdown
self.closeEvent = self.shutdown
# Buttons
self.btn_show_lentmedia.clicked.connect(self.showUser)
self.btn_createNewUser.clicked.connect(self.createUser)
self.btn_createNewUser.setText("")
self.btn_createNewUser.setIcon(Icon("add_user").overwriteColor("#1E90FF"))
self.mode.clicked.connect(self.changeMode)
# LineEdits
self.input_userno.returnPressed.connect(
@@ -67,13 +81,15 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
QtWidgets.QHeaderView.ResizeMode.Stretch
)
self.input_file_ident.setFocus()
# self.userdata.textChanged.connect(lambda: self.mode.setText("Ausleihe"))
self.assignShortcuts()
# variables
self.db = Database()
self.currentDate = QtCore.QDate.currentDate()
loanDate = self.currentDate.addDays(config.loan_duration)
self.activeUser = None
self.activeState = "Rückgabe"
self.docu = DocumentationThread()
# self.docu.start()
self.duedate.setDate(loanDate)
# functions
@@ -84,6 +100,24 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
else:
log.warning("Backup disabled")
self.show()
def shutdown(self, *args):
#kill documentation thread
log.info("Shutting down")
self.docu.terminate()
sys.exit()
def assignShortcuts(self):
shortcuts = config.shortcuts
shortcuts = OmegaConf.to_container(shortcuts)
#convert to dictconfig
self.actionDokumentation_ffnen.setShortcut(getShortcut(shortcuts, "Hilfe"))
self.actionAusleihhistorie.setShortcut(getShortcut(shortcuts, "Ausleihhistorie"))
self.actionBericht_erstellen.setShortcut(getShortcut(shortcuts, "Bericht_erstellen"))
self.actionNutzer.setShortcut(getShortcut(shortcuts, "Nutzer"))
self.actionRueckgabemodus.setShortcut(getShortcut(shortcuts, "Rueckgabemodus"))
def generateReport(self):
log.info("Generating Report")
@@ -106,15 +140,53 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
log.info("Showing Settings")
settings = Settings()
settings.exec()
result = settings.result()
if result == 1:
#dialog to ask if program should be restarted
dialog = QtWidgets.QMessageBox()
dialog.setWindowTitle("Einstellungen geändert")
dialog.setIcon(QtWidgets.QMessageBox.Icon.Information)
dialog.setText("Einstellungen wurden geändert\nProgramm neu starten?")
dialog.setStandardButtons(
QtWidgets.QMessageBox.StandardButton.Yes
| QtWidgets.QMessageBox.StandardButton.No
)
dialog.setDefaultButton(QtWidgets.QMessageBox.StandardButton.No)
#translate buttons
yes = dialog.button(QtWidgets.QMessageBox.StandardButton.Yes)
yes.setText("Ja")
no = dialog.button(QtWidgets.QMessageBox.StandardButton.No)
no.setText("Nein")
dialog.exec()
result = dialog.result()
if result == QtWidgets.QMessageBox.StandardButton.Yes:
self.restart()
# reload settings
#print(config)
def openDocumentation(self):
log.info("Opening Documentation")
webbrowser.open("http://localhost:6543")
def restart(self):
#log restart
dbg("Restarting Program")
import os
python_executable = sys.executable
args = sys.argv[:]
args.insert(0, sys.executable)
os.execvp(python_executable, args)
def changeMode(self):
log.info("Changing Mode")
dbg(f"Current mode: {self.activeState}")
self.input_username.clear()
stayReturn = False
if self.userdata.toPlainText() != "":
if config.advanced_refresh and self.userdata.toPlainText() != "":
stayReturn = True
self.userdata.clear()
self.input_userno.clear()
@@ -138,9 +210,10 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.input_username.setEnabled(True)
self.input_userno.setEnabled(True)
self.duedate.setEnabled(True)
self.input_username.setPlaceholderText("")
self.input_userno.setPlaceholderText("")
self.input_userno.setFocus()
# set mode background color to blue with rounded edges
# self.mode.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
self.mode.setStyleSheet("background-color: #1E90FF")
self.mode.setText("Ausleihe")
self.activeState = "Ausleihe"
@@ -161,6 +234,8 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.mode.setText("Rückgabe")
self.input_file_ident.setEnabled(True)
self.input_file_ident.setPlaceholderText("Buchidentifikation eingeben")
self.input_username.setPlaceholderText("Bitte erst in den Ausleihmodus wechseln")
self.input_userno.setPlaceholderText("Bitte erst in den Ausleihmodus wechseln")
def showUser(self):
log.info(f"Showing User {self.activeUser}")
@@ -180,7 +255,7 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
)
# self.user_ui.setFields("John Doe", "123456789", "test@mail.com")
self.user_ui.show()
def setUserData(self):
log.info("Setting User Data")
self.input_username.setText(str(self.activeUser.username))
@@ -188,7 +263,6 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.userdata.setText(self.activeUser.__repr__())
today = QtCore.QDate.currentDate().toString("yyyy-MM-dd")
self.db.setUserActiveDate(self.activeUser.userid, today)
# self.mode.setText("Ausleihe")
def createUser(self):
log.info("Creating User")
@@ -260,7 +334,20 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
value = self.input_file_ident.text().strip()
log.debug(f"Handling Line Input {value}")
if self.mode.text() == "Rückgabe":
self.returnMedia(value)
if value in self.db.getMediaList():
self.returnMedia(value)
else:
# create warning dialog
log.info("Invalid Input")
dialog = QtWidgets.QMessageBox()
dialog.setWindowTitle("Ungültige Eingabe")
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
dialog.setWindowIcon(Icon("warning").overwriteColor("#EA3323"))
dialog.setText("Eingabe ist nicht in der Datenbank\nBitte prüfen und erneut eingeben")
dialog.exec()
self.input_file_ident.setFocus()
self.input_file_ident.clear()
return
else:
if not " " in value:
# create warning dialog
@@ -294,7 +381,7 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
self.input_file_ident.setEnabled(True)
return
book_id = self.db.insertMedia(media)
self.loanMedia(user_id, [book_id], media)
self.loanMedia(user_id, [book_id])
else:
newbook = NewBook()
newbook.exec()
@@ -410,6 +497,8 @@ class MainUI(QtWidgets.QMainWindow, Ui_MainWindow):
dbg("Book not found")
#print("Book not found")
#self.input_file_ident.setPlaceholderText(f"Buch {identifier} nicht gefunden")
def setStatusTipMessage(self, message):
dialog = QtWidgets.QMessageBox()
@@ -460,9 +549,21 @@ def launch(*argv):
options = [arg for arg in options if arg.startswith("--")]
#print("Launching Main UI")
#print(options)
QtCore.QLocale().setDefault(QtCore.QLocale(QtCore.QLocale.Language.German, QtCore.QLocale.Country.Germany))
SYSTEM_LANGUAGE = QtCore.QLocale().system().name()
print(SYSTEM_LANGUAGE)
# Load base QT translations from the normal place
app = QtWidgets.QApplication([])
main_ui = MainUI()
#translate ui to system language
if SYSTEM_LANGUAGE:
translator = QtCore.QTranslator()
#do not use ascii encoding
translator.load(f"qt_{SYSTEM_LANGUAGE}", "translations")
translator.load("app.qm", "translations")
app.installTranslator(translator)
atexit.register(exit_handler)
sys.exit(app.exec())
# sys.exit(app.exec())