diff --git a/entity/ServiceEmail_entity/ServiceEmail_entity.aod b/entity/ServiceEmail_entity/ServiceEmail_entity.aod index 320cc965fd74585829f0d2424f06c6baaef92423..6b682e03726c67fa67995bc7a99f61310b25a914 100644 --- a/entity/ServiceEmail_entity/ServiceEmail_entity.aod +++ b/entity/ServiceEmail_entity/ServiceEmail_entity.aod @@ -40,6 +40,7 @@ <title>Email content</title> <contentType>HTML</contentType> <valueProcess>%aditoprj%/entity/ServiceEmail_entity/entityfields/email_body_content/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/ServiceEmail_entity/entityfields/email_body_content/displayValueProcess.js</displayValueProcess> </entityField> <entityField> <name>BINDATA</name> @@ -279,6 +280,12 @@ <name>RequestorContactId_param</name> <expose v="true" /> </entityParameter> + <entityField> + <name>textbox</name> + <title>Input</title> + <contentType>HTML</contentType> + <htmlEditorFeatures>BASIC</htmlEditorFeatures> + </entityField> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/ServiceEmail_entity/afterUiInit.js b/entity/ServiceEmail_entity/afterUiInit.js index 457c932e3aed55cae26fec07509873841b55a63e..8be3a41be1680a75479febcbb63a7f4fa77d7464 100644 --- a/entity/ServiceEmail_entity/afterUiInit.js +++ b/entity/ServiceEmail_entity/afterUiInit.js @@ -93,7 +93,7 @@ if(vars.get("$param.TicketCode_param")) // SIGNATURE if(vars.exists("$param.SignatureId_param") && vars.get("$param.SignatureId_param")) { - vars.set("$field.signature", getSignatureContent(vars.get("$param.SignatureId_param"))); + vars.set("$field.signature", ServiceMailUtils.getSignatureContent(vars.get("$param.SignatureId_param"))); } // INITIAL BODY HISTORY @@ -102,7 +102,7 @@ if(vars.exists("$param.SignatureId_param") && vars.get("$param.SignatureId_param var initialEmailBodyRaw = ""; // set body as last activity. if does not exist take the ticket description -let mostRecentActivityBodyPart = getBodyHistoryFromActivity(null, ticketID, "mostRecent", +let mostRecentActivityBodyPart = ServiceMailUtils.getBodyHistoryFromActivity(null, ticketID, "mostRecent", vars.get("$param.From_param"),vars.get("$param.SenderEmail_param")); if(mostRecentActivityBodyPart) @@ -111,7 +111,7 @@ if(mostRecentActivityBodyPart) } else { - initialEmailBodyRaw = getBodyHistory( + initialEmailBodyRaw = ServiceMailUtils.getBodyHistory( vars.get("$param.From_param"), // from vars.get("$param.SenderEmail_param"), // sender vars.get("$param.TicketSubject_param"), //subject diff --git a/entity/ServiceEmail_entity/entityfields/choosetexttoforward/onValueChange.js b/entity/ServiceEmail_entity/entityfields/choosetexttoforward/onValueChange.js index 82b8c69f934b6f6fe0130546612c5a4e0d47e2ee..2f2f66c4965b73f92d8bcc1248d9e4c308dc0385 100644 --- a/entity/ServiceEmail_entity/entityfields/choosetexttoforward/onValueChange.js +++ b/entity/ServiceEmail_entity/entityfields/choosetexttoforward/onValueChange.js @@ -1,3 +1,4 @@ +import("Util_lib"); import("ServiceEmail_lib"); import("system.datetime"); import("system.vars"); @@ -11,7 +12,7 @@ let choosenValue = vars.get("$field.chooseTextToForward"); if(choosenValue == "originalTicket") { - emailBodyHystoryText = getBodyHistory( + emailBodyHystoryText = ServiceMailUtils.getBodyHistory( vars.get("$param.From_param"), // from vars.get("$param.SenderEmail_param"), // sender vars.get("$param.TicketSubject_param"), //subject @@ -22,7 +23,7 @@ if(choosenValue == "originalTicket") } else if(choosenValue == "allActivities") { - emailBodyHystoryText = getBodyHistoryForAllActivities( + emailBodyHystoryText = ServiceMailUtils.getBodyHistoryForAllActivities( vars.get("$param.TicketId_param"), vars.get("$param.TaskId_param"),// ticketID, taskID, "intern", // kind vars.get("$param.From_param"), vars.get("$param.SenderEmail_param"), //from, sender, @@ -32,14 +33,10 @@ else if(choosenValue == "allActivities") } else if(choosenValue != "") { // one specific activityId - emailBodyHystoryText = getBodyHistoryFromActivity(choosenValue, null,"intern", + emailBodyHystoryText = ServiceMailUtils.getBodyHistoryFromActivity(choosenValue, null,"intern", vars.get("$param.From_param"), vars.get("$param.SenderEmail_param")); } vars.set("$field.emailHistoryRaw", emailBodyHystoryText); - -// create complete Email and set the body -vars.set("$field.EMAIL_BODY_CONTENT", - createBodyEmail(vars.get("$field.choosenDocTemplateRow"), vars.get("$field.signature"), emailBodyHystoryText) ); - +vars.set("$field.EMAIL_BODY_CONTENT", ServiceMailUtils.createBodyEmail(null, vars.get("$field.signature"), vars.get("$field.emailHistoryRaw"))); \ No newline at end of file diff --git a/entity/ServiceEmail_entity/entityfields/document_template/onValueChange.js b/entity/ServiceEmail_entity/entityfields/document_template/onValueChange.js index 2228438d46b1ce4910cdb44d7320f05823152f17..93694984a4b8d120e9b5c21b39a77f346e168e72 100644 --- a/entity/ServiceEmail_entity/entityfields/document_template/onValueChange.js +++ b/entity/ServiceEmail_entity/entityfields/document_template/onValueChange.js @@ -8,14 +8,18 @@ var documentTemplateContent = DocumentTemplateUtils.getTemplate(vars.get("$local ///REPLACE CONTENT WITH PLACEHOLDERS let contactId = vars.get("$param.ContactId_param"); +var template = new DocumentTemplate(util.encodeBase64String(documentTemplateContent), DocumentTemplate.types.HTML, undefined, true) if(contactId != undefined && contactId != null && contactId != "") { - var template = new DocumentTemplate(util.encodeBase64String(documentTemplateContent), DocumentTemplate.types.HTML, undefined, true) - documentTemplateContent = template.getReplacedContentByContactId(contactId, false, true); + documentTemplateContent = template.getReplacedContentByContactId(contactId); -} +} +else +{ + documentTemplateContent = template.toString(); +} vars.set("$field.choosenDocTemplateRow", documentTemplateContent); -vars.set("$field.EMAIL_BODY_CONTENT", - createBodyEmail(documentTemplateContent, vars.get("$field.signature"), vars.get("$field.emailHistoryRaw"))); +vars.set("$field.textbox", + ServiceMailUtils.createBodyEmail(documentTemplateContent)); \ No newline at end of file diff --git a/entity/ServiceEmail_entity/entityfields/email_body_content/displayValueProcess.js b/entity/ServiceEmail_entity/entityfields/email_body_content/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..96b4a1caacff31c0c432d9b97b9702e0d5ac9d28 --- /dev/null +++ b/entity/ServiceEmail_entity/entityfields/email_body_content/displayValueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("Util_lib"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && vars.get("$field.textbox")) +{ + var preview = vars.get("$field.EMAIL_BODY_CONTENT") + preview = StringUtils.replaceAll(preview.toString(), "{@Service@}", vars.get("$field.textbox")); + result.string(preview); +} \ No newline at end of file diff --git a/entity/ServiceEmail_entity/entityfields/email_body_content/valueProcess.js b/entity/ServiceEmail_entity/entityfields/email_body_content/valueProcess.js index 4e0bc459e315b88e1da9b28e7d79f240b404f8ab..4ce6957e4028d9231e6688d0b68faefc553eb649 100644 --- a/entity/ServiceEmail_entity/entityfields/email_body_content/valueProcess.js +++ b/entity/ServiceEmail_entity/entityfields/email_body_content/valueProcess.js @@ -1,3 +1,4 @@ +import("Util_lib"); import("system.result"); import("ServiceEmail_lib"); import("system.neon"); @@ -11,7 +12,7 @@ if( vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW ) { if(vars.get("$param.InitializeBody_param") == "true") { - result.string(createBodyEmail(null, vars.get("$field.signature"), vars.get("$field.emailHistoryRaw"))); + result.string(ServiceMailUtils.createBodyEmail(null, vars.get("$field.signature"), vars.get("$field.emailHistoryRaw"))); vars.set("$param.InitializeBody_param", "false"); } } diff --git a/entity/ServiceEmail_entity/onValidation.js b/entity/ServiceEmail_entity/onValidation.js index fbfb40d8866791fa449d85148dbb94af5ea9d82d..8fda035b9fa0a28ba4dfd0f8ce2c708986dfa512 100644 --- a/entity/ServiceEmail_entity/onValidation.js +++ b/entity/ServiceEmail_entity/onValidation.js @@ -56,7 +56,39 @@ else { result.string(errorText); } - + +// CHECK if at least one mail-address is added + +var recipientsTo = vars.get("$field.Recipients_TO.insertedRows"); +var recipientsCC = vars.get("$field.Recipients_CC.insertedRows"); +var recipientsBCC = vars.get("$field.Recipients_BCC.insertedRows"); +var gate = false; + +recipientsTo.forEach(function(recipient) +{ + if (recipient.email_address != "") + { + gate = true; + } +}); +recipientsCC.forEach(function(recipient) +{ + if (recipient.email_address != "") + { + gate = true; + } +}); +recipientsBCC.forEach(function(recipient) +{ + if (recipient.email_address != "") + { + gate = true; + } +}); +if (!gate) +{ + result.string(translate.text("You have to add at least one recipient.")); +} diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index d26ab6e78d8f3411b5185200288b8e97a311c2b1..5556566e197109251c634738f8f2d63f70e17d3d 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -37,6 +37,10 @@ <key>Open in mosaico</key> <value>In Mosaico öffnen</value> </entry> + <entry> + <key>You have to add at least one recipient.</key> + <value>Sie müssen mindestens einen Empfänger eintragen.</value> + </entry> <entry> <key>To re-opening tickets, please use the corresponding action.</key> <value>Nutzen Sie bitte die entsprechende Aktion, um Tickets wiederzueröffnen.</value> @@ -145,7 +149,7 @@ <key>Template</key> </entry> <entry> - <key>Use all serviceticket categories</key> + <key>Use all service ticket categories</key> <value>Alle Serviceticket Kategorien verwenden</value> </entry> <entry> @@ -377,7 +381,7 @@ <value>Keine Werbung</value> </entry> <entry> - <key>Contact & Serviceticket</key> + <key>Contact & Service ticket</key> <value>Kontakt & Serviceticket</value> </entry> <entry> @@ -14185,11 +14189,11 @@ Bitte Datumseingabe prüfen</value> <key>2</key> </entry> <entry> - <key>Serviceticket category</key> + <key>Service ticket category</key> <value>Serviceticket-Kategorie</value> </entry> <entry> - <key>Serviceticket categories</key> + <key>Service ticket categories</key> <value>Serviceticket-Kategorien</value> </entry> <entry> @@ -14549,20 +14553,23 @@ Bitte Datumseingabe prüfen</value> <key>New Service ticket</key> </entry> <entry> - <key>Service ticket category</key> + <key>Serviceticket category</key> <value>Serviceticket-Kategorie</value> </entry> <entry> <key>Use all service ticket categories</key> </entry> <entry> - <key>Contact & Service ticket</key> + <key>Contact & Serviceticket</key> <value>Kontakt & Serviceticket</value> </entry> <entry> <key>Service ticket categories</key> <value>Serviceticket-Kategorien</value> </entry> + <entry> + <key>Use all serviceticket categories</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonView/ServiceEmailEdit_view/ServiceEmailEdit_view.aod b/neonView/ServiceEmailEdit_view/ServiceEmailEdit_view.aod index e4e3564fe1057d23110a11c5694843b21be128ee..4de1652b73a287a41c03e15a183707696e6684d2 100644 --- a/neonView/ServiceEmailEdit_view/ServiceEmailEdit_view.aod +++ b/neonView/ServiceEmailEdit_view/ServiceEmailEdit_view.aod @@ -71,13 +71,18 @@ <name>889a816a-d489-42c5-87ca-504c48d5ae3f</name> <entityField>chooseTextToForward</entityField> </entityFieldLink> + <entityFieldLink> + <name>e2470001-5d27-452f-83ec-2fb7131dc163</name> + <entityField>textbox</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <genericViewTemplate> <name>ContentEmail</name> - <editMode v="true" /> - <hideEmptyFields v="true" /> + <editMode v="false" /> + <hideEmptyFields v="false" /> <entityField>#ENTITY</entityField> + <isEditable v="false" /> <fields> <entityFieldLink> <name>78a3d546-f2ed-4798-8aa9-72e56df3b0b3</name> diff --git a/neonView/ServiceForwardEmailEdit_view/ServiceForwardEmailEdit_view.aod b/neonView/ServiceForwardEmailEdit_view/ServiceForwardEmailEdit_view.aod index 2107a0c59fca11c75d1839fd8d304392a6096b5f..52f68ef001b9c9767d5f4e8a3fc45e36c647e2ea 100644 --- a/neonView/ServiceForwardEmailEdit_view/ServiceForwardEmailEdit_view.aod +++ b/neonView/ServiceForwardEmailEdit_view/ServiceForwardEmailEdit_view.aod @@ -69,7 +69,18 @@ <entityField>chooseTextToForward</entityField> </entityFieldLink> <entityFieldLink> - <name>5a6feff6-22b1-4358-b1f6-0073114d4a3b</name> + <name>ad1b9985-3b8a-4793-8534-57ea9c9f3e63</name> + <entityField>textbox</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <genericViewTemplate> + <name>ContentEmail</name> + <hideEmptyFields v="false" /> + <isEditable v="false" /> + <fields> + <entityFieldLink> + <name>d53c5a09-2834-4f13-98a1-01faa45b06bc</name> <entityField>EMAIL_BODY_CONTENT</entityField> </entityFieldLink> </fields> diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index b82552621a344e18c27e3232345126b497675bf3..a8160a1096c395f86b245a1988a548bb66fd9f05 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -56,7 +56,7 @@ <intervall v="5000" /> <bridgeMode v="3" /> <flagMode v="2" /> - <process>mailbridge</process> + <process>mailbridge_service</process> <errorProcess></errorProcess> <attachmentHandling>ALL</attachmentHandling> </mailbridgeMailserver> @@ -105,6 +105,7 @@ <customStringProperty> <name>bulkmail.baseReplacementURL</name> <description>Base url for replacement of redirectlinks in bulkmails</description> + <property></property> </customStringProperty> </customConfigProperties> <customProperties> @@ -218,10 +219,12 @@ <customStringProperty> <name>bulkmail.user</name> <description>Title of the useraccount that is used to send bulkmails</description> + <property>mailbridgeDev</property> </customStringProperty> <customStringProperty> <name>mosaico.url</name> <description>Url of the Mosaico Email Editor</description> + <property>https://mosaico.xrm-service.dev.c2.adito.cloud</property> </customStringProperty> </customProperties> </preferences> diff --git a/process/ServiceEmail_lib/process.js b/process/ServiceEmail_lib/process.js index 5fc836f7868b1fb57e780dd78cb9a0bdfaec821b..b95659af157abf10268dfef2250c568a8417c2d5 100644 --- a/process/ServiceEmail_lib/process.js +++ b/process/ServiceEmail_lib/process.js @@ -7,13 +7,20 @@ import("system.translate"); import("system.vars"); import("DocumentTemplate_lib") - +/** + * Provides functions for ServiceMail. + * + * Do not create an instance of this! + * + * @class + */ +function ServiceMailUtils () {} /** * @description Creates the header for the Text history * * @return Header as a string */ -function headerTextHistory() +ServiceMailUtils.headerTextHistory = function () { var textForBody ="<hr>"; textForBody +=" <p>-----"+ translate.text("Original message") +"----- </p>"; @@ -33,10 +40,10 @@ function headerTextHistory() * * @return string with the original message, send date and time */ -function getBodyHistory(pTo,pSender,pSubject,pTicketCode,pTicketID, pTaskID) +ServiceMailUtils.getBodyHistory = function(pTo,pSender,pSubject,pTicketCode,pTicketID, pTaskID) { //add Subject and From - var textForBody = headerTextHistory(); + var textForBody = ServiceMailUtils.headerTextHistory(); if(!pTaskID) { @@ -100,7 +107,7 @@ function getBodyHistory(pTo,pSender,pSubject,pTicketCode,pTicketID, pTaskID) * * @return string with the original message, send date and time */ -function getBodyHistoryFromActivity(pActivityID, pTicketID, pKind, pTo, pSender) +ServiceMailUtils.getBodyHistoryFromActivity = function(pActivityID, pTicketID, pKind, pTo, pSender) { var activityInfo = []; @@ -130,7 +137,7 @@ function getBodyHistoryFromActivity(pActivityID, pTicketID, pKind, pTo, pSender) if(activityInfo && activityInfo.length > 0) { - var textForBody = headerTextHistory(); + var textForBody = ServiceMailUtils.headerTextHistory(); textForBody +="<p>"; @@ -197,14 +204,14 @@ function getBodyHistoryFromActivity(pActivityID, pTicketID, pKind, pTo, pSender) * * @return string with the original message, send date and time */ -function getBodyHistoryForAllActivities(pTicketID, pTaskID, pKind, pTo, pSender, pSubject, pTicketCode) +ServiceMailUtils.getBodyHistoryForAllActivities = function(pTicketID, pTaskID, pKind, pTo, pSender, pSubject, pTicketCode) { // first original ticket var textForBody = ""; // get original erst - textForBody += getBodyHistory(pTo,pSender,pSubject,pTicketCode,pTicketID, pTaskID) + textForBody += ServiceMailUtils.getBodyHistory(pTo,pSender,pSubject,pTicketCode,pTicketID, pTaskID) var allActivities = newSelect("ACTIVITYID") .from("ACTIVITY") @@ -217,7 +224,7 @@ function getBodyHistoryForAllActivities(pTicketID, pTaskID, pKind, pTo, pSender, allActivities.forEach(function(activityId) { - textForBody += getBodyHistoryFromActivity(activityId, null, pKind, pTo,pSender); + textForBody += ServiceMailUtils.getBodyHistoryFromActivity(activityId, null, pKind, pTo,pSender); }); return textForBody; @@ -231,7 +238,7 @@ function getBodyHistoryForAllActivities(pTicketID, pTaskID, pKind, pTo, pSender, * * @return string the signature */ -function getSignatureContent(pSignatureID) +ServiceMailUtils.getSignatureContent = function(pSignatureID) { let dokumentTemplateId = newSelect("SIGNATURE_DOCUMENTTEMPLATE_ID") .from("MAILSIGNATURE") @@ -267,7 +274,7 @@ function getSignatureContent(pSignatureID) * * @return string the signature without placeholder */ -function getSignatureWithoutPlaceholder(pDocumentContent) +ServiceMailUtils.getSignatureWithoutPlaceholder = function(pDocumentContent) { // ///DELETE PLACEHOLDERS @@ -285,23 +292,23 @@ function getSignatureWithoutPlaceholder(pDocumentContent) /** * @description create the email body for the answer email * - * @param {String} pDocumentTemplate the documenttemplate used to create the first part of the mail + * @param {String} pDocumanteTemplate the documenttemplate used to create the first part of the mail * @param {String} pSignature the signature to be added below the documentTemplate - * @param {String} phistoryEmailText the original mail added at the bottom of the mail + * @param {String} pHistoryEmailText the original mail added at the bottom of the mail * * @return string the signature without placeholder */ -function createBodyEmail(pDocumanteTemplate, pSignature, pHistoryEmailText) +ServiceMailUtils.createBodyEmail = function(pDocumanteTemplate, pSignature, pHistoryEmailText) { var emailBody = ""; if(pDocumanteTemplate) { - emailBody = "<p>" + pDocumanteTemplate + "</p>" ; + emailBody = pDocumanteTemplate ; } else { - emailBody = "<br/><br/>"; // place to write + emailBody = ""; // place to write } if(pSignature) @@ -309,8 +316,6 @@ function createBodyEmail(pDocumanteTemplate, pSignature, pHistoryEmailText) emailBody += pSignature ; } - emailBody += "</br>" - if(pHistoryEmailText) { emailBody += pHistoryEmailText ;