ui changes, formatting

This commit is contained in:
WorldTeacher
2024-06-05 15:39:55 +02:00
parent 98849f22a0
commit a56c70a8b4
26 changed files with 1163 additions and 402 deletions

View File

@@ -1,11 +1,15 @@
from .dialog_sources import NewMailTemplateDesignerDialog
from PyQt6 import QtWidgets, QtCore, QtGui
from PyQt6.QtGui import QFont
import os
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtGui import QFont
from src import Icon
from .dialog_sources import NewMailTemplateDesignerDialog
class MailTemplateDialog(QtWidgets.QDialog, NewMailTemplateDesignerDialog):
def __init__(self,parent = None) -> None:
def __init__(self, parent=None) -> None:
super().__init__(parent)
self.setupUi(self)
self.setWindowIcon(Icon("edit_note").icon)
@@ -20,17 +24,23 @@ class MailTemplateDialog(QtWidgets.QDialog, NewMailTemplateDesignerDialog):
self.testTemplate.clicked.connect(self.test_template)
self.fontBox.currentFontChanged.connect(self.setCurrentFont)
self.fontSize.currentTextChanged.connect(self.setFontSize)
#buttonbox
#save button
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Save).clicked.connect(self.save_template)
#discard button
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Discard).clicked.connect(self.discard_changes)
#cancel button
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Cancel).clicked.connect(self.closeNow)
# buttonbox
# save button
self.buttonBox.button(
QtWidgets.QDialogButtonBox.StandardButton.Save
).clicked.connect(self.save_template)
# discard button
self.buttonBox.button(
QtWidgets.QDialogButtonBox.StandardButton.Discard
).clicked.connect(self.discard_changes)
# cancel button
self.buttonBox.button(
QtWidgets.QDialogButtonBox.StandardButton.Cancel
).clicked.connect(self.closeNow)
def save_template(self):
print("save triggered")
#create a dialog to ask for the name of the template
# create a dialog to ask for the name of the template
dialog = QtWidgets.QInputDialog()
dialog.setInputMode(QtWidgets.QInputDialog.InputMode.TextInput)
dialog.setLabelText("Bitte geben Sie den Namen des Templates ein:")
@@ -43,79 +53,100 @@ class MailTemplateDialog(QtWidgets.QDialog, NewMailTemplateDesignerDialog):
if template_name != "":
template = template_name + ".eml"
if template in os.listdir("mail_vorlagen"):
#warning dialog
# warning dialog
dialog = QtWidgets.QMessageBox()
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
Icon("warning",dialog)
dialog.setText("Ein Template mit diesem Namen existiert bereits. Möchten Sie es überschreiben?")
Icon("warning", dialog)
dialog.setText(
"Ein Template mit diesem Namen existiert bereits. Möchten Sie es überschreiben?"
)
dialog.setWindowTitle("Template überschreiben")
dialog.setStandardButtons(QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No)
dialog.setStandardButtons(
QtWidgets.QMessageBox.StandardButton.Yes
| QtWidgets.QMessageBox.StandardButton.No
)
dialog.setDefaultButton(QtWidgets.QMessageBox.StandardButton.No)
ret = dialog.exec()
if ret == QtWidgets.QMessageBox.StandardButton.No:
return
if save == 1:
mail = f"""Subject: {self.subject.text()}
MIME-Version: 1.0
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit
{self.templateEdit.toHtml()}"""
html_head = '''<html>
{self.templateEdit.toHtml()}"""
html_head = """<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
'''
"""
mail_base = mail.split("<html>")[0]
mail_body = mail.split("</head>")[1]
mail = mail_base + html_head + mail_body
mail = mail.replace("&lt;", "<").replace("&gt;", ">").replace("&quot;", '"').replace("&amp;", "&")
with open(f"mail_vorlagen/{template}","w") as f:
mail = (
mail.replace("&lt;", "<")
.replace("&gt;", ">")
.replace("&quot;", '"')
.replace("&amp;", "&")
)
with open(f"mail_vorlagen/{template}", "w") as f:
f.write(mail)
self.close()
else:
#warning dialog
# warning dialog
dialog = QtWidgets.QMessageBox()
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
dialog.setWindowIcon(Icon("warning").icon)
dialog.setText("Bitte geben Sie einen Namen für das Template ein.")
dialog.setWindowTitle("Fehler beim Speichern")
dialog.exec()
return
return
def discard_changes(self):
self.subject.clear()
self.templateEdit.clear()
def closeNow(self):
if self.subject.text() == "" and self.templateEdit.toPlainText() == "":
self.close()
else:
dialog = QtWidgets.QMessageBox()
dialog.setWindowIcon(Icon("warning").icon)
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
dialog.setText("Möchten Sie die Änderungen wirklich verwerfen?")
dialog.setWindowTitle("Änderungen verwerfen")
dialog.setStandardButtons(QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No)
dialog.setStandardButtons(
QtWidgets.QMessageBox.StandardButton.Yes
| QtWidgets.QMessageBox.StandardButton.No
)
dialog.setDefaultButton(QtWidgets.QMessageBox.StandardButton.No)
ret = dialog.exec()
if ret == QtWidgets.QMessageBox.StandardButton.Yes:
self.close()
def updateDescription(self):
print("update triggered")
print(self.placeholder_list.currentText())
placeholders = {"anrede" : "Die Anrede beinhaltet sowohl Person als auch Sehr geehrte/r; dargestellt als: {greeting}",
"apparatsfach" : "Das Fach, in welchem der Apparat angelegt wurde; dargestellt als: {AppSubject}",
"apparatsname": "Der Name des Apparats; dargestellt als: {Appname}",
placeholders = {
"anrede": "Die Anrede beinhaltet sowohl Person als auch Sehr geehrte/r; dargestellt als: {greeting}",
"apparatsfach": "Das Fach, in welchem der Apparat angelegt wurde; dargestellt als: {AppSubject}",
"apparatsname": "Der Name des Apparats; dargestellt als: {Appname}",
"apparatsnummer": "Die Nummer des Apparats; dargestellt als: {AppNr}",
"dozentname" : "Der Name des Dozenten / der Dozentin; dargestellt als: {Profname}",
"signatur" : "Die persönliche / allgemeine Signatur am ende der Mail; dargestellt als: {signature}",
"": " "}
for key, item, in placeholders.items():
"dozentname": "Der Name des Dozenten / der Dozentin; dargestellt als: {Profname}",
"signatur": "Die persönliche / allgemeine Signatur am ende der Mail; dargestellt als: {signature}",
"": " ",
}
for (
key,
item,
) in placeholders.items():
if key in self.placeholder_list.currentText().lower():
self.lineEdit.setText(item)
break
def setCurrentFont(self):
font = self.fontBox.currentFont()
font.setPointSize(int(self.fontSize.currentText()))
@@ -124,7 +155,7 @@ Content-Transfer-Encoding: 8bit
def setFontSize(self):
size = self.fontSize.currentText()
self.templateEdit.setFontPointSize(int(size))
def setFontBold(self):
if self.bold.isChecked():
self.templateEdit.setFontWeight(QtGui.QFont.Weight.Bold)
@@ -142,9 +173,16 @@ Content-Transfer-Encoding: 8bit
self.templateEdit.setFontUnderline(True)
else:
self.templateEdit.setFontUnderline(False)
def test_template(self):
placeholders = ["{greeting}","{AppSubject}","{Appname}","{AppNr}","{Profname}","{signature}"]
placeholders = [
"{greeting}",
"{AppSubject}",
"{Appname}",
"{AppNr}",
"{Profname}",
"{signature}",
]
mail_subject = self.subject.text()
mail_body = self.templateEdit.toHtml()
missing_body = []
@@ -153,51 +191,58 @@ Content-Transfer-Encoding: 8bit
assert placeholders[2] in mail_subject
except AssertionError:
missing_subject.append(placeholders[2])
#check if all placeholders are in the mail body
# check if all placeholders are in the mail body
for placeholder in placeholders:
try:
assert placeholder in mail_body
except AssertionError:
missing_body.append(placeholder)
if missing_body != []:
#warning dialog
self.testTemplate.setText("")
# warning dialog
Icon("template_fail", self.testTemplate)
dialog = QtWidgets.QMessageBox()
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
dialog.setIcon(Icon("warning").icon)
dialog.setText("Folgende Platzhalter fehlen im Template:")
missing = "Betreff:\n" +"\n".join(missing_subject) + "\n\n" + "Mailtext:\n"+"\n".join(missing_body)
missing = (
"Betreff:\n"
+ "\n".join(missing_subject)
+ "\n\n"
+ "Mailtext:\n"
+ "\n".join(missing_body)
)
dialog.setInformativeText(f"{missing}")
dialog.setWindowTitle("Fehlende Platzhalter")
dialog.exec()
self.testTemplate.setText("Template testen")
else:
self.testTemplate.setText("")
self.testTemplate.setText("")
def insert_placeholder(self):
placeholder = {"anrede" : "{greeting}",
"apparatsfach" : "{AppSubject}",
"apparatsname": "{Appname}",
placeholder = {
"anrede": "{greeting}",
"apparatsfach": "{AppSubject}",
"apparatsname": "{Appname}",
"apparatsnummer": "{AppNr}",
"dozentname" : "{Profname}",
"signatur" : '''<pre class="moz-signature" cols="72">--
"dozentname": "{Profname}",
"signatur": """<pre class="moz-signature" cols="72">--
{signature}
</pre>'''
}
</pre>""",
}
cursor = self.templateEdit.textCursor()
for key, item, in placeholder.items():
for (
key,
item,
) in placeholder.items():
if key in self.placeholder_list.currentText().lower():
cursor.insertText(item)
break
self.templateEdit.setTextCursor(cursor)
self.templateEdit.setFocus()
def launch_gui():
app = QtWidgets.QApplication([])
window = MailTemplateDialog()
@@ -207,4 +252,3 @@ def launch_gui():
if __name__ == "__main__":
launch_gui()