mail template
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from dialog_sources.newMailTemplateDesigner_ui import Ui_Dialog
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6.QtGui import QFont
|
||||
import os
|
||||
|
||||
class MailTemplateDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
def __init__(self,parent = None) -> None:
|
||||
@@ -10,34 +11,182 @@ class MailTemplateDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
self.placeholder_list.setCurrentText("")
|
||||
self.insertPlaceholder.clicked.connect(self.insert_placeholder)
|
||||
self.placeholder_list.currentTextChanged.connect(self.updateDescription)
|
||||
self.bold.clicked.connect(self.setFontBold)
|
||||
self.italic.clicked.connect(self.setTextFontItalic)
|
||||
self.underlined.clicked.connect(self.setTextFontUnderline)
|
||||
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)
|
||||
|
||||
def save_template(self):
|
||||
print("save triggered")
|
||||
#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:")
|
||||
dialog.setWindowTitle("Template speichern")
|
||||
dialog.setOkButtonText("Speichern")
|
||||
dialog.setCancelButtonText("Abbrechen")
|
||||
dialog.setWindowIcon(QtGui.QIcon("icons/save.png"))
|
||||
save = dialog.exec()
|
||||
template_name = dialog.textValue()
|
||||
if template_name != "":
|
||||
template = template_name + ".eml"
|
||||
if template in os.listdir("mail_vorlagen"):
|
||||
#warning dialog
|
||||
dialog = QtWidgets.QMessageBox()
|
||||
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
|
||||
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.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>
|
||||
<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("<", "<").replace(">", ">").replace(""", '"').replace("&", "&")
|
||||
with open(f"mail_vorlagen/{template}","w") as f:
|
||||
f.write(mail)
|
||||
self.close()
|
||||
else:
|
||||
#warning dialog
|
||||
dialog = QtWidgets.QMessageBox()
|
||||
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
|
||||
dialog.setText("Bitte geben Sie einen Namen für das Template ein.")
|
||||
dialog.setWindowTitle("Fehler beim Speichern")
|
||||
dialog.exec()
|
||||
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.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.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",
|
||||
"apparatsfach" : "Das Fach, in welchem der Apparat angelegt wurde",
|
||||
"apparatsname": "Der Name des Apparats",
|
||||
"apparatsnummer": "Die Nummer des Apparats",
|
||||
"dozentname" : "Der Name des Dozenten / der Dozentin",
|
||||
"signatur" : "Die persönliche / allgemeine Signatur am ende der Mail",
|
||||
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():
|
||||
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()))
|
||||
self.templateEdit.setFont(font)
|
||||
|
||||
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)
|
||||
else:
|
||||
self.templateEdit.setFontWeight(QtGui.QFont.Weight.Normal)
|
||||
|
||||
def setTextFontItalic(self):
|
||||
if self.italic.isChecked():
|
||||
self.templateEdit.setFontItalic(True)
|
||||
else:
|
||||
self.templateEdit.setFontItalic(False)
|
||||
|
||||
def setTextFontUnderline(self):
|
||||
if self.underlined.isChecked():
|
||||
self.templateEdit.setFontUnderline(True)
|
||||
else:
|
||||
self.templateEdit.setFontUnderline(False)
|
||||
|
||||
def test_template(self):
|
||||
placeholders = ["{greeting}","{AppSubject}","{Appname}","{AppNr}","{Profname}","{signature}"]
|
||||
mail_subject = self.subject.text()
|
||||
mail_body = self.templateEdit.toHtml()
|
||||
missing_body = []
|
||||
missing_subject = []
|
||||
try:
|
||||
assert placeholders[2] in mail_subject
|
||||
except AssertionError:
|
||||
missing_subject.append(placeholders[2])
|
||||
#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("❗")
|
||||
dialog = QtWidgets.QMessageBox()
|
||||
dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
|
||||
dialog.setText("Folgende Platzhalter fehlen im Template:")
|
||||
|
||||
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("✔")
|
||||
|
||||
|
||||
def insert_placeholder(self):
|
||||
placeholder = {"anrede" : "{}",
|
||||
"apparatsfach" : "Das Fach, in welchem der Apparat angelegt wurde",
|
||||
"apparatsname": "Der Name des Apparats",
|
||||
"apparatsnummer": "Die Nummer des Apparats",
|
||||
"dozentname" : "Der Name des Dozenten / der Dozentin",
|
||||
"signatur" : "Die persönliche / allgemeine Signatur am ende der Mail",
|
||||
"": " "}
|
||||
placeholder = {"anrede" : "{greeting}",
|
||||
"apparatsfach" : "{AppSubject}",
|
||||
"apparatsname": "{Appname}",
|
||||
"apparatsnummer": "{AppNr}",
|
||||
"dozentname" : "{Profname}",
|
||||
"signatur" : '''<pre class="moz-signature" cols="72">--
|
||||
{signature}
|
||||
</pre>'''
|
||||
}
|
||||
cursor = self.templateEdit.textCursor()
|
||||
|
||||
cursor.insertText("{{placeholder}}")
|
||||
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user