Skip to content

Commit

Permalink
feat(GUI): Verbesserte Oberfläche im Modus CODE_GENERIEREN (#471)
Browse files Browse the repository at this point in the history
* Update .gitignore

Added venv

* Improved Kontaktdateneingabe (CodeGen))

Verbesserung der UX.
Felder wurden deaktiviert,
Ladefunktion unterstüzt nun CodeGen

* select correct tab

* typo

* added default arguments
  • Loading branch information
TRojaner2013 committed Jun 15, 2021
1 parent 312923a commit f2c0f57
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 50 deletions.
24 changes: 12 additions & 12 deletions tools/gui/kontaktdaten.ui
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@
<item row="0" column="1">
<widget class="QLineEdit" name="i_code_impfzentren">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Gib hier deinen ersten Vermittlungscode ein.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Gib hier deinen ersten Vermittlungscode ein. Solltest du keinen Code haben, kannst du hier eifach XXXX-XXXX-XXXX eintragen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="inputMask">
<string>NNNN-NNNN-NNNN</string>
Expand Down Expand Up @@ -935,11 +935,11 @@
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="b_test_pushover">
<property name="text">
<string>Pushover Testen</string>
</property>
</widget>
<widget class="QPushButton" name="b_test_pushover">
<property name="text">
<string>Pushover Testen</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="spacer_label">
Expand All @@ -949,7 +949,7 @@
</font>
</property>
<property name="text">
<string></string>
<string/>
</property>
</widget>
</item>
Expand Down Expand Up @@ -994,11 +994,11 @@
</widget>
</item>
<item row="8" column="0">
<widget class="QPushButton" name="b_test_telegram">
<property name="text">
<string>Telegram Testen</string>
</property>
</widget>
<widget class="QPushButton" name="b_test_telegram">
<property name="text">
<string>Telegram Testen</string>
</property>
</widget>
</item>
</layout>
</widget>
Expand Down
170 changes: 132 additions & 38 deletions tools/gui/qtkontakt.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,11 @@ def __init__(self, parent: QtWidgets.QWidget, modus: Modus, standard_speicherpfa
# Versuche Kontakdaten zu laden
self.__lade_alle_werte()

# Wähle ersten Reiter aus
self.tabWidget.setCurrentIndex(0)
# Wähle passenden Reiter aus
if self.modus == modus.CODE_GENERIEREN:
self.tabWidget.setCurrentIndex(1)
else:
self.tabWidget.setCurrentIndex(0)

# Erstelle Events für LineEdits
for line_edit in self.vermittlungscodes_tab.findChildren(QtWidgets.QLineEdit):
Expand Down Expand Up @@ -154,12 +157,16 @@ def setup(self):
elif self.modus == Modus.CODE_GENERIEREN:
# Benötigt wird: PLZ's der Impfzentren, Telefonnummer, Mail
# Alles andere wird daher deaktiviert
# !!!! wir erlauben aktuell alle eingaben, da diese später für die terminsuche benötigt werden. !!!
# self.readonly_alle_line_edits(("i_plz_impfzentren", "i_telefon", "i_mail"))
# self.i_code_impfzentren.setInputMask("")

self.i_code_impfzentren.setText("XXXXXXXXXXXX")
self.i_code_impfzentren.setReadOnly(True)
self.readonly_alle_line_edits(("i_plz_impfzentren", "i_telefon", "i_mail"))

self.disable_all_dateEdits()
self.disable_all_timeEdits()
self.disable_all_checkBoxes()
self.disable_all_comboBoxes()
# '' sind alle Standard-Buttons e.g. Save, Reset
self.disable_all_buttons(['', 'b_impfzentren_waehlen'])

else:
raise RuntimeError("Modus ungueltig!")

Expand Down Expand Up @@ -266,16 +273,7 @@ def __get_alle_werte(self) -> dict:
Returns:
dict: User eingaben
"""

plz_zentrum_raw = self.i_plz_impfzentren.text()
codes = self.__get_vermittlungscodes()
anrede = self.i_anrede_combo_box.currentText().strip()
vorname = self.i_vorname.text().strip()
nachname = self.i_nachname.text().strip()
strasse = self.i_strasse.text().strip()
hausnummer = self.i_hausnummer.text().strip()
wohnort = self.i_wohnort.text().strip()
plz_wohnort = self.i_plz_wohnort.text().strip()
telefon = self.i_telefon.text().strip()
mail = self.i_mail.text().strip()
notifications = self.__get_notifications()
Expand All @@ -284,25 +282,47 @@ def __get_alle_werte(self) -> dict:
plz_zentren = plz_zentrum_raw.split(",")
plz_zentren = [plz.strip() for plz in plz_zentren]


if self.modus == Modus.TERMIN_SUCHEN:
codes = self.__get_vermittlungscodes()
anrede = self.i_anrede_combo_box.currentText().strip()
vorname = self.i_vorname.text().strip()
nachname = self.i_nachname.text().strip()
strasse = self.i_strasse.text().strip()
hausnummer = self.i_hausnummer.text().strip()
wohnort = self.i_wohnort.text().strip()
plz_wohnort = self.i_plz_wohnort.text().strip()

kontaktdaten = {
"plz_impfzentren": plz_zentren,
"codes": codes,
"kontakt": {
"anrede": anrede,
"vorname": vorname,
"nachname": nachname,
"strasse": strasse,
"hausnummer": hausnummer,
"plz": plz_wohnort,
"ort": wohnort,
"phone": telefon,
"notificationChannel": "email",
"notificationReceiver": mail
},
"notifications": notifications,
"zeitrahmen": self.__get_zeitrahmen()
}

return kontaktdaten

kontaktdaten = {
"plz_impfzentren": plz_zentren,
"codes": codes,
"kontakt": {
"anrede": anrede,
"vorname": vorname,
"nachname": nachname,
"strasse": strasse,
"hausnummer": hausnummer,
"plz": plz_wohnort,
"ort": wohnort,
"phone": telefon,
"notificationChannel": "email",
"notificationReceiver": mail
},
"notifications": notifications,
"zeitrahmen": self.__get_zeitrahmen()
}

return kontaktdaten

def __check_werte(self, kontaktdaten: dict):
Expand All @@ -311,7 +331,8 @@ def __check_werte(self, kontaktdaten: dict):
Args:
kontaktdaten (dict): Kontaktdaten
modus: Modus der geprüft werden soll
Raises:
ValidationError: Daten Fehlerhaft
MissingValuesError: Daten Fehlen
Expand All @@ -333,21 +354,21 @@ def __lade_alle_werte(self):
# ToDo: Evtl. Meldung anzeigen
return

self.__check_werte(kontaktdaten)
kontakt_tools.check_kontaktdaten(kontaktdaten, Modus.CODE_GENERIEREN)
kontakt_tools.validate_kontaktdaten(kontaktdaten)

self.i_plz_impfzentren.setText(self.__get_impfzentren_plz(kontaktdaten["plz_impfzentren"]))
self.i_telefon.setText(kontaktdaten["kontakt"]["phone"])
self.i_mail.setText(kontaktdaten["kontakt"]["notificationReceiver"])

if self.modus == Modus.CODE_GENERIEREN:
# Versuche alle Werte zu laden, wenn möglich
try:
kontakt_tools.check_kontaktdaten(kontaktdaten, Modus.TERMIN_SUCHEN)
kontakt_tools.validate_kontaktdaten(kontaktdaten)
except MissingValuesError as exc:
return
except ValidationError as exc:
return
# Versuche alle Werte zu laden, wenn möglich
try:
kontakt_tools.check_kontaktdaten(kontaktdaten, Modus.TERMIN_SUCHEN)
kontakt_tools.validate_kontaktdaten(kontaktdaten)
except MissingValuesError as exc:
return
except ValidationError as exc:
return

# Wird nur bei Terminsuche benötigt
self.__set_vermittlungscodes(kontaktdaten["codes"])
Expand Down Expand Up @@ -428,7 +449,7 @@ def __set_impzentren_plz(self, plz: str):

self.i_plz_impfzentren.setText(plz)

def readonly_alle_line_edits(self, ausgeschlossen: list):
def readonly_alle_line_edits(self, ausgeschlossen: list=list()):
"""
Setzt alle QLineEdit auf "read only", ausgeschlossen der Widgets in ausgeschlossen.
Setzt zudem den PlacholderText auf "Daten werden nicht benötigt"
Expand All @@ -443,6 +464,79 @@ def readonly_alle_line_edits(self, ausgeschlossen: list):
if line_edit.objectName() not in ausgeschlossen:
line_edit.setReadOnly(True)
line_edit.setPlaceholderText("Daten werden nicht benötigt")
line_edit.setEnabled(False)


def disable_all_checkBoxes(self, ausgeschlossen: list=list()):
"""
Setzt alle QCheckBox auf "disabled", ausgeschlossen der Widgets in ausgeschlossen.
Args:
ausgeschlossen (list): Liste mit den ObjectNamen der Widgets die ausgeschlossen werden sollen
"""

checkBoxes = self.findChildren(QtWidgets.QCheckBox)

for checkBox in checkBoxes:
if checkBox.objectName() not in ausgeschlossen:
checkBox.setEnabled(False)

def disable_all_dateEdits(self, ausgeschlossen: list=list()):
"""
Setzt alle QDateEdit auf "disabled", ausgeschlossen der Widgets in ausgeschlossen.
Args:
ausgeschlossen (list): Liste mit den ObjectNamen der Widgets die ausgeschlossen werden sollen
"""

dateEdits = self.findChildren(QtWidgets.QDateEdit)

for dateEdit in dateEdits:
if dateEdit.objectName() not in ausgeschlossen:
dateEdit.setEnabled(False)


def disable_all_timeEdits(self, ausgeschlossen: list=list()):
"""
Setzt alle QTimeEdit auf "disabled", ausgeschlossen der Widgets in ausgeschlossen.
Args:
ausgeschlossen (list): Liste mit den ObjectNamen der Widgets die ausgeschlossen werden sollen
"""

timeEdits = self.findChildren(QtWidgets.QTimeEdit)

for timeEdit in timeEdits:
if timeEdit.objectName() not in ausgeschlossen:
timeEdit.setEnabled(False)

def disable_all_comboBoxes(self, ausgeschlossen: list=list()):
"""
Setzt alle QComboBox auf "disabled", ausgeschlossen der Widgets in ausgeschlossen.
Args:
ausgeschlossen (list): Liste mit den ObjectNamen der Widgets die ausgeschlossen werden sollen
"""

comboBoxes = self.findChildren(QtWidgets.QComboBox)

for comboBox in comboBoxes:
if comboBox.objectName() not in ausgeschlossen:
comboBox.setEnabled(False)

def disable_all_buttons(self, ausgeschlossen: list=list()):
"""
Setzt alle QPushButtons auf "disabled", ausgeschlossen der Widgets in ausgeschlossen.
Args:
ausgeschlossen (list): Liste mit den ObjectNamen der Widgets die ausgeschlossen werden sollen
"""

pushButtons = self.findChildren(QtWidgets.QPushButton)

for pushButton in pushButtons:
if pushButton.objectName() not in ausgeschlossen:
pushButton.setEnabled(False)

def __reset_kontakdaten(self):
"""
Expand Down

0 comments on commit f2c0f57

Please sign in to comment.