feat: add documentation, changeable shortcuts

This commit is contained in:
WorldTeacher
2024-10-02 11:19:50 +02:00
parent c7309e047b
commit e7bcce328b
36 changed files with 318 additions and 10 deletions

15
docs/Ausleihhistorie.md Normal file
View File

@@ -0,0 +1,15 @@
# Ausleihhistorie
![Oberfläche](images/loanhistory.png)
!!! info
Die Ausleihhistorie kann vom Ausleihsystem immer aufgerufen werden. Dazu kann man entweder das Menu öffnen (Fenster -> Ausleihhistorie) oder den festgelegten Shortcut verwenden.
# Bedienung
Hier werden alle Medien angezeigt.
Über die Filter kann man gezielt
- alle Ausleihen
- aktuell entliehene Medien
- überzogene Medien
anzeigen.
Zudem kann man mithilfe der Eingabezeile unter den Filteroptionen gezielt nach einem Titel, Nutzer oder einer Signatur gesucht werden.

47
docs/Ausleihsystem.md Normal file
View File

@@ -0,0 +1,47 @@
# Ausleihsystem
## Oberfläche
![Nutzeroberfläche ohne Bewerkungen](images/main_marked%20areas.png)
Die Oberfläche kann generell in drei Bereiche unterteilt werden:
- Konto und Ausleihe
- Nutzerdaten
- Historie
### Konto und Ausleihe
Hier werden die Kontodaten und die Ausleihen angezeigt.
Der Bereich beschränkt sich auf folgende Inhalte:
![Kontobereich](images/main_ktoarea.png)
Hier werden folgende Daten angezeigt
- Modus: entweder "Ausleihe" oder "Rückgabe" (1)
- Matrikelnummer: die Matrikelnummer des Nutzers, um das Konto zu öffnen (3)
- Benutzername: der Benutzername des Nutzers (3)
- Signatur: die Signatur des Mediums, welches entliehen oder zurückgegeben wird (4)
- Ausleihe bis: bis wann das Medium ausgeliehen wird, Zeitraum wird in den Einstellungen angepasst
- Nutzer anlegen: ein Knopf, um einen neuen Nutzer anzulegen (2)
### Nutzerdaten
Hier werden die Nutzerdaten angezeigt. Vorraussetzung ist, dass ein Nutzer angelegt und geöffnet wurde, oder dass ein Medium zurückgegeben wurde.
Dieser Bereich beschränkt sich auf folgende Inhalte:
![Nutzerdaten](images/main_userdata.png)
- Das Feld Nutzerdaten (6)beinhaltet
- Namen
- Matrikelnummer
- E-Mail
- Das Feld Ausleihdaten beinhaltet:
- Anzahl Ausleihen (5) : ein klickbares Feld, welches die Anzahl der Ausleihen anzeigt. Beim Klick wird die Übersicht des aktiven Nutzers angezeigt.
- Nächstes Rückgabedatum (wird angezeigt wenn ein Nutzer (mehr als) eine Ausleihe hat und ein Medium zurückgegeben wurde oder ein Nutzer geöffnet wird)
### Historie (7)
Das Feld der Historie listet alle Medien auf, die im aktiven Prozess ausgeliehen oder zurückgegeben wurden.

27
docs/Bericht erstellen.md Normal file
View File

@@ -0,0 +1,27 @@
# Bericht erstellen
![Bericht erstellen](images/generateReport.png)
## Information
Diese Oberfläche kann immer von der [Hauptoberfläche](Ausleihsystem.md) geöffnet werden. Hierzu entweder
`Fenster -> Bericht erstellen` oder den Shortcut F7 verwenden
## Bericht generieren
Um einen Bericht zu erstellen, müssen folgende Kriterien erfüllt sein:
- Zeitspanne festgelegt (Entweder über den Slider, oder über die Woche / Monat / Jahr Knöpfe)
- Datenformat ausgewählt
Nachdem diese Kriterien erfüllt sind, kann der Bericht über den Knopf `Bericht erstellen` erstellt werden. Der Bericht wird erstellt, bei größeren Datensätzen kann es länger dauern, eine Fortschrittsanzeige gibt an, wie weit der Prozess ist.
Wurde der Bericht erfolgreich erstellt, sieht die Oberfläche wie folgt aus:
![Bericht erstellt](images/generatedReport.png)
Über einen Klick auf `Report` wird die entsprechende Datei geöffnet.
!!! info
Text öffnet das Notepad, Excel öffnet Excel

21
docs/Einstellungen.md Normal file
View File

@@ -0,0 +1,21 @@
# Einstellungen
![Einstellungen](images/settings.png)
## Bedienung
Hier werden die Einstellungen geändert. Sobald ein Wert geändert wird, ist es möglich die Einstellungen rückgängig zu machen, oder die Änderungen zu speichern.
## Besonderheiten
Der Knopf neben Speicherort, Datenbankname, Sicherungspfad und Speicherpfad kann verwendet werden, um den Pfad gezielt zu setzen.
Beim Datenbanknamen wird allerdings nur der Name der Datenbank übernommen
## Hinweis
Einige Aktionen (bspw. Änderungen der Shortcuts) erfordern einen Neustart der Anwendung. Dies wird beim Speichern der Einstellungen mit folgendem Dialog dargestelt:
![restart](images/restart.png)
Im Anschluss an diesen Dialog erscheint ein neuer Dialog:
![restart Application](images/settings_changed_restart.png)

18
docs/Nutzer anlegen.md Normal file
View File

@@ -0,0 +1,18 @@
# Nutzer anlegen
![Nutzer erstellen](images/add_user.png)
## Information
Diese Oberfläche kann nur geöffnet werden, wenn die [Hauptoberfläche](Ausleihsystem.md) geöffnet ist. Hierzu muss bei dieser auf folgenden Knopf gedrückt werden:
![create user](images/createUser.png)
## Bedienung
Um einen Nutzer anzulegen, müssen alle Angaben korrekt ausgefüllt sein.
### Limitierungen
Folgende Regeln sind zwingend einzuhalten:
- Nachname, Vorname muss mit `, ` getrennt sein
- Matrikelnummer darf nicht länger als 20 Zeichen sein und nur Nummern enthalten
- Mail muss einem validen Schema entsprechen (s. Bild)
Nachdem alle Kriterien erfüllt sind, kann der Knopf `Save` angeklickt werden. Der Nutzer wird gespeichert und in der [Hauptoberfläche](Ausleihsystem.md) geöffnet.

31
docs/Nutzeroberfläche.md Normal file
View File

@@ -0,0 +1,31 @@
# Nutzerdatenfenster
![alt text](images/user_main.png)
!!! info
Die Nutzeroberfläche kann nur geöffnet werden, wenn ein Nutzer offen ist. Ansonsten wird ein Fehler angezeigt. (s. unten)
![Error](images/err_nouser.png)
# Bedeutung der Felder
- (1) Nutzerdaten:
Name des Nutzers, Matrikelnummer, E-Mail
Wird eine Angabe geändert, erscheint Feld (3) um diese Angaben entweder zu speichern oder um die Änderungen rückgängig zu machen.
- (2) Nutzer Löschen:
Mit dem Klick auf den Mülleimer wird der Nutzer gelöscht. Alle zugewiesenen Ausleihen werden in der [Ausleihhistorie](Ausleihhistorie.md) mit den Nutzerkonto `gelöscht` angezeigt.
- (4) Medien:
Umfasst unter anderem Feld (5), welches ein neues Fenster zum [verlängern](ausleihe verlängern.md) der Ausleihe öffnet.
Mit einem Klick auf
- Alle Ausleihen
- Aktuell entliehen
- Überzogen
werden die Einträge der Tabelle gefiltert. Zusätzlich kann mithilfe der Eingabezeile unter den Filteroptionen gezielt nach einem Titel oder einer Signatur gesucht werden.
- (5) Verlängern:
Um Medien zu verlängern, müssen diese in der Tabelle angeklickt werden. Mit Strg können mehrere Medien gleichzeitig ausgewählt und verlängert werden. Hierzu wird ein neues Fenster geöffnet, siehe [Ausleihe verlängern](ausleihe verlängern.md).

View File

@@ -0,0 +1,9 @@
# Medien verlängern
![Oberfläche](images/extend.png)
## Information
Die Ausleihe verlängern kann nur geöffnet werden, wenn ein Nutzer offen ist.
Diese Oberfläche erlaubt es, eine oder mehrere Medien zu verlängern. Hierzu muss ein neues, in der Zukunft liegendes Datum ausgewählt und mit OK bestätigt werden.
In der Datenbank wird nun das neue Datum gespeichert und die Einträge in der Tabelle werden aktualisiert.

BIN
docs/images/add_user.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
docs/images/createUser.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 B

BIN
docs/images/err_nouser.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
docs/images/extend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
docs/images/loanhistory.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
docs/images/restart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
docs/images/settings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
docs/images/user_main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

20
docs/index.md Normal file
View File

@@ -0,0 +1,20 @@
# Übersicht
!!! info
Einige Knöpfe sind auf Englisch. Diese Einstellung kann ich leider nicht ändern, da diese Übersetzung von der Anwendung automatisch ausgeführt werden
## [Hauptoberfläche](Ausleihsystem.md)
Die Hauptoberfläche wird angezeigt, wenn die Anwendung gestartet wird.
Von hier aus können Nutzer angelegt und bearbeitet werden, Medien ausgeliehen und zurückgegeben werden, sowie verschiedene Unterbereiche anzeigen.
Unterbereiche umfassen:
- [Nutzerdaten](Nutzeroberfläche.md) - Daten für den aktuellen Nutzer anzeigen und bearbeiten
- [Nutzer anlegen](Nutzer anlegen.md) - Neuen Nutzer anlegen
- [Ausleihhistorie](Ausleihhistorie.md) - Historie der Ausleihen
- [Bericht erstellen](Bericht erstellen.md) - Bericht für einen festgelegten Zeitrahmen erstellen
- [Einstellungen](Einstellungen.md)
## Navigation

16
docs/shortcuts.md Normal file
View File

@@ -0,0 +1,16 @@
# Shortcuts
!!! info
Die Shortcuts können für die Anwendung manuell festgelegt werden.
Dafür in den [Einstellungen](Einstellungen.md) unter Shortcuts den neuen Shortcut eingeben und speichern
Standardmäßig sind die Shortcuts wie folgt festgelegt:
| Shortcut | Standard |
| ------- | -------- |
| Ausleihhistorie | F7 |
| Bericht erstellen | F6 |
| Hilfe | F1 |
| Nutzer | F5 |
| Rückgabemodus | F8 |

View File

@@ -0,0 +1,5 @@
.md-typeset .admonition,
.md-typeset details {
border-width: 0;
border-left-width: 4px;
}

View File

@@ -15,3 +15,4 @@ icons:
user: user.svg
warning: warning.svg
delete: delete.svg
restart: restart.svg

1
icons/restart.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M440-122q-121-15-200.5-105.5T160-440q0-66 26-126.5T260-672l57 57q-38 34-57.5 79T240-440q0 88 56 155.5T440-202v80Zm80 0v-80q87-16 143.5-83T720-440q0-100-70-170t-170-70h-3l44 44-56 56-140-140 140-140 56 56-44 44h3q134 0 227 93t93 227q0 121-79.5 211.5T520-122Z"/></svg>

After

Width:  |  Height:  |  Size: 382 B

30
mkdocs.yml Normal file
View File

@@ -0,0 +1,30 @@
site_name: LibrarySystem
theme:
features:
- search.suggest
- search.highlight
name: material
icon:
admonition:
note: fontawesome/solid/note-sticky
abstract: fontawesome/solid/book
info: fontawesome/solid/circle-info
tip: fontawesome/solid/bullhorn
success: fontawesome/solid/check
question: fontawesome/solid/circle-question
warning: fontawesome/solid/triangle-exclamation
failure: fontawesome/solid/bomb
danger: fontawesome/solid/skull
bug: fontawesome/solid/robot
example: fontawesome/solid/flask
quote: fontawesome/solid/quote-left
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- tables
extra_css:
- stylesheets/extra.css
plugins:
- search

View File

@@ -0,0 +1,12 @@
from PyQt6.QtCore import QThread, pyqtSignal
from src.utils import launch_documentation
class DocumentationThread(QThread):
def __init__(self):
super().__init__()
def run(self):
launch_documentation()

View File

@@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(375, 247)
Dialog.resize(375, 245)
Dialog.setMinimumSize(QtCore.QSize(40, 0))
self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")

View File

@@ -142,6 +142,9 @@ class Ui_MainWindow(object):
self.menuHotkeys.setObjectName("menuHotkeys")
self.menuFenster = QtWidgets.QMenu(parent=self.menubar)
self.menuFenster.setObjectName("menuFenster")
self.menuHilfe = QtWidgets.QMenu(parent=self.menubar)
self.menuHilfe.setGeometry(QtCore.QRect(2484, 209, 181, 94))
self.menuHilfe.setObjectName("menuHilfe")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
self.statusbar.setObjectName("statusbar")
@@ -158,15 +161,22 @@ class Ui_MainWindow(object):
self.actionAusleihhistorie.setObjectName("actionAusleihhistorie")
self.actionBericht_erstellen = QtGui.QAction(parent=MainWindow)
self.actionBericht_erstellen.setObjectName("actionBericht_erstellen")
self.actionDokumentation_ffnen = QtGui.QAction(parent=MainWindow)
self.actionDokumentation_ffnen.setObjectName("actionDokumentation_ffnen")
self.actionProblem_melden = QtGui.QAction(parent=MainWindow)
self.actionProblem_melden.setObjectName("actionProblem_melden")
self.menuDatei.addAction(self.actionEinstellungen)
self.menuDatei.addAction(self.actionBeenden)
self.menuHotkeys.addAction(self.actionRueckgabemodus)
self.menuFenster.addAction(self.actionNutzer)
self.menuFenster.addAction(self.actionAusleihhistorie)
self.menuFenster.addAction(self.actionBericht_erstellen)
self.menuHilfe.addAction(self.actionDokumentation_ffnen)
self.menuHilfe.addAction(self.actionProblem_melden)
self.menubar.addAction(self.menuDatei.menuAction())
self.menubar.addAction(self.menuHotkeys.menuAction())
self.menubar.addAction(self.menuFenster.menuAction())
self.menubar.addAction(self.menuHilfe.menuAction())
self.retranslateUi(MainWindow)
self.actionBeenden.triggered.connect(MainWindow.close) # type: ignore
@@ -198,6 +208,7 @@ class Ui_MainWindow(object):
self.menuDatei.setTitle(_translate("MainWindow", "Datei"))
self.menuHotkeys.setTitle(_translate("MainWindow", "Hotkeys"))
self.menuFenster.setTitle(_translate("MainWindow", "Fenster"))
self.menuHilfe.setTitle(_translate("MainWindow", "Hilfe"))
self.actionEinstellungen.setText(_translate("MainWindow", "Einstellungen"))
self.actionBeenden.setText(_translate("MainWindow", "Beenden"))
self.actionRueckgabemodus.setText(_translate("MainWindow", "Rückgabemodus"))
@@ -208,3 +219,6 @@ class Ui_MainWindow(object):
self.actionAusleihhistorie.setShortcut(_translate("MainWindow", "F8"))
self.actionBericht_erstellen.setText(_translate("MainWindow", "Bericht erstellen"))
self.actionBericht_erstellen.setShortcut(_translate("MainWindow", "F7"))
self.actionDokumentation_ffnen.setText(_translate("MainWindow", "Dokumentation öffnen"))
self.actionDokumentation_ffnen.setShortcut(_translate("MainWindow", "F1"))
self.actionProblem_melden.setText(_translate("MainWindow", "Problem melden"))

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>375</width>
<height>247</height>
<height>245</height>
</rect>
</property>
<property name="minimumSize">

View File

@@ -278,9 +278,25 @@
<addaction name="actionAusleihhistorie"/>
<addaction name="actionBericht_erstellen"/>
</widget>
<widget class="QMenu" name="menuHilfe">
<property name="geometry">
<rect>
<x>2484</x>
<y>209</y>
<width>181</width>
<height>94</height>
</rect>
</property>
<property name="title">
<string>Hilfe</string>
</property>
<addaction name="actionDokumentation_ffnen"/>
<addaction name="actionProblem_melden"/>
</widget>
<addaction name="menuDatei"/>
<addaction name="menuHotkeys"/>
<addaction name="menuFenster"/>
<addaction name="menuHilfe"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionEinstellungen">
@@ -309,11 +325,6 @@
<string>F6</string>
</property>
</action>
<action name="actionNutzer_2">
<property name="text">
<string>Nutzer</string>
</property>
</action>
<action name="actionAusleihhistorie">
<property name="text">
<string>Ausleihhistorie</string>
@@ -330,9 +341,17 @@
<string>F7</string>
</property>
</action>
<action name="actionNutzer_3">
<action name="actionDokumentation_ffnen">
<property name="text">
<string>Nutzer</string>
<string>Dokumentation öffnen</string>
</property>
<property name="shortcut">
<string>F1</string>
</property>
</action>
<action name="actionProblem_melden">
<property name="text">
<string>Problem melden</string>
</property>
</action>
</widget>

View File

@@ -1,4 +1,5 @@
from .log import Log
from .icon import Icon
from .debug import debugMessage
from .stringtodate import stringToDate
from .stringtodate import stringToDate
from .documentation import launch_documentation

View File

@@ -0,0 +1,21 @@
from pyramid.config import Configurator
from wsgiref.simple_server import make_server
import os
def website():
config = Configurator()
# Set up static file serving from the 'site/' directory
config.add_static_view(name='/', path=os.path.join(os.getcwd(), 'site'), cache_max_age=3600)
app = config.make_wsgi_app()
return app
def launch_documentation():
app = website()
server = make_server('localhost', 6543, app)
print("Serving MkDocs documentation on http://0.0.0.0:6543")
server.serve_forever()
if __name__ == '__main__':
pass