mail template
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
from dialog_sources.newMailTemplateDesigner_ui import Ui_Dialog
|
from dialog_sources.newMailTemplateDesigner_ui import Ui_Dialog
|
||||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||||
from PyQt6.QtGui import QFont
|
from PyQt6.QtGui import QFont
|
||||||
|
import os
|
||||||
|
|
||||||
class MailTemplateDialog(QtWidgets.QDialog, Ui_Dialog):
|
class MailTemplateDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||||
def __init__(self,parent = None) -> None:
|
def __init__(self,parent = None) -> None:
|
||||||
@@ -10,34 +11,182 @@ class MailTemplateDialog(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
self.placeholder_list.setCurrentText("")
|
self.placeholder_list.setCurrentText("")
|
||||||
self.insertPlaceholder.clicked.connect(self.insert_placeholder)
|
self.insertPlaceholder.clicked.connect(self.insert_placeholder)
|
||||||
self.placeholder_list.currentTextChanged.connect(self.updateDescription)
|
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):
|
def updateDescription(self):
|
||||||
print("update triggered")
|
print("update triggered")
|
||||||
print(self.placeholder_list.currentText())
|
print(self.placeholder_list.currentText())
|
||||||
placeholders = {"anrede" : "Die Anrede beinhaltet sowohl Person als auch Sehr geehrte/r",
|
placeholders = {"anrede" : "Die Anrede beinhaltet sowohl Person als auch Sehr geehrte/r; dargestellt als: {greeting}",
|
||||||
"apparatsfach" : "Das Fach, in welchem der Apparat angelegt wurde",
|
"apparatsfach" : "Das Fach, in welchem der Apparat angelegt wurde; dargestellt als: {AppSubject}",
|
||||||
"apparatsname": "Der Name des Apparats",
|
"apparatsname": "Der Name des Apparats; dargestellt als: {Appname}",
|
||||||
"apparatsnummer": "Die Nummer des Apparats",
|
"apparatsnummer": "Die Nummer des Apparats; dargestellt als: {AppNr}",
|
||||||
"dozentname" : "Der Name des Dozenten / der Dozentin",
|
"dozentname" : "Der Name des Dozenten / der Dozentin; dargestellt als: {Profname}",
|
||||||
"signatur" : "Die persönliche / allgemeine Signatur am ende der Mail",
|
"signatur" : "Die persönliche / allgemeine Signatur am ende der Mail; dargestellt als: {signature}",
|
||||||
"": " "}
|
"": " "}
|
||||||
for key, item, in placeholders.items():
|
for key, item, in placeholders.items():
|
||||||
if key in self.placeholder_list.currentText().lower():
|
if key in self.placeholder_list.currentText().lower():
|
||||||
self.lineEdit.setText(item)
|
self.lineEdit.setText(item)
|
||||||
break
|
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):
|
def insert_placeholder(self):
|
||||||
placeholder = {"anrede" : "{}",
|
placeholder = {"anrede" : "{greeting}",
|
||||||
"apparatsfach" : "Das Fach, in welchem der Apparat angelegt wurde",
|
"apparatsfach" : "{AppSubject}",
|
||||||
"apparatsname": "Der Name des Apparats",
|
"apparatsname": "{Appname}",
|
||||||
"apparatsnummer": "Die Nummer des Apparats",
|
"apparatsnummer": "{AppNr}",
|
||||||
"dozentname" : "Der Name des Dozenten / der Dozentin",
|
"dozentname" : "{Profname}",
|
||||||
"signatur" : "Die persönliche / allgemeine Signatur am ende der Mail",
|
"signatur" : '''<pre class="moz-signature" cols="72">--
|
||||||
"": " "}
|
{signature}
|
||||||
|
</pre>'''
|
||||||
|
}
|
||||||
cursor = self.templateEdit.textCursor()
|
cursor = self.templateEdit.textCursor()
|
||||||
|
for key, item, in placeholder.items():
|
||||||
cursor.insertText("{{placeholder}}")
|
if key in self.placeholder_list.currentText().lower():
|
||||||
|
cursor.insertText(item)
|
||||||
|
break
|
||||||
self.templateEdit.setTextCursor(cursor)
|
self.templateEdit.setTextCursor(cursor)
|
||||||
self.templateEdit.setFocus()
|
self.templateEdit.setFocus()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user