From c3a9ea49c8aa2861a436b776527fbb12144069e6 Mon Sep 17 00:00:00 2001 From: Vinzent Broens <v.broens@adito.de> Date: Wed, 27 Oct 2021 10:23:52 +0000 Subject: [PATCH] Service 2001297 serial action --- .../recordcontainers/jdito/onInsert.js | 5 +- .../changedata/onActionProcess.js | 122 +++++++++++++----- .../reopenticket/onActionProcess.js | 8 +- .../returnticket/onActionProcess.js | 17 ++- .../recordcontainers/db/onDBInsert.js | 14 +- .../recordcontainers/db/onDBUpdate.js | 19 +-- .../_____LANGUAGE_EXTRA.aod | 18 +++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 48 +++++-- .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 18 +++ 9 files changed, 207 insertions(+), 62 deletions(-) diff --git a/entity/ServiceEmail_entity/recordcontainers/jdito/onInsert.js b/entity/ServiceEmail_entity/recordcontainers/jdito/onInsert.js index 082d2c305a..b8b01338db 100644 --- a/entity/ServiceEmail_entity/recordcontainers/jdito/onInsert.js +++ b/entity/ServiceEmail_entity/recordcontainers/jdito/onInsert.js @@ -196,7 +196,8 @@ if(returnedMsgAfterSend == true) "directionKeywordId" : $KeywordRegistry.activityDirection$outgoing(), "subject" : infoText, "content" : contentActivity, - "categoryKeywordId" : $KeywordRegistry.activityCategory$mail() + "categoryKeywordId" : $KeywordRegistry.activityCategory$mail(), + "responsibleContactId" : vars.get( "$param.ContactId_param") }; var ActivityLink = ["Supportticket", ticketID]; @@ -296,7 +297,7 @@ if(returnedMsgAfterSend == true) "responsibleContactId" : vars.get( "$param.ContactId_param"), "subject" : translate.text("EMAIL ERROR") + "!", "content" : contentActivity, - "categoryKeywordId" : $KeywordRegistry.activityCategory$mail() + "categoryKeywordId" : $KeywordRegistry.activityCategory$mail() }; var ActivityLink = ["Supportticket", ticketID]; diff --git a/entity/SupportTicketMultiSelect_entity/entityfields/changedata/onActionProcess.js b/entity/SupportTicketMultiSelect_entity/entityfields/changedata/onActionProcess.js index 41ee4231cb..cb9344c6c3 100644 --- a/entity/SupportTicketMultiSelect_entity/entityfields/changedata/onActionProcess.js +++ b/entity/SupportTicketMultiSelect_entity/entityfields/changedata/onActionProcess.js @@ -1,66 +1,126 @@ +import("system.question"); +import("system.logging"); +import("system.neon"); +import("Employee_lib"); import("ActivityTask_lib"); +import("Sql_lib"); +import("Contact_lib"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); import("system.translate"); import("system.tools"); -import("Util_lib"); -import("Sql_lib"); -import("system.neon"); import("system.vars"); -import("KeywordRegistry_basic"); var taskIDs= JSON.parse(vars.get("$param.TaskIds_param")); +var taskIDsforStatus = JSON.parse(vars.get("$param.TaskIds_param")); var TaskfieldValues = {}; +var TaskfieldValueStatus = {}; var TicketfieldValues = {}; +var obj_toolsUser = tools.getCurrentUser()[tools.PARAMS]; +var activityContent = []; +var ChangeCounter = 0; +var removedIds; /// PRIORITY if(vars.exists("$field.PRIORITY") && (vars.get("$field.PRIORITY") != "" )) { TaskfieldValues["PRIORITY"] = vars.get("$field.PRIORITY"); + activityContent += translate.text("Priority changed to") + ": " + KeywordUtils.getViewValue($KeywordRegistry.taskPriority(), vars.get("$field.PRIORITY")); } /// STATUS if(vars.exists("$field.STATUS") && (vars.get("$field.STATUS") != "" )) { - TaskfieldValues["STATUS"] = vars.get("$field.STATUS"); - TicketfieldValues["DATE_EDIT_STATUS"] = vars.get("$sys.date"); - if(vars.get("$field.STATUS") == $KeywordRegistry.taskStatus$unassigned()) + if (vars.get("$field.STATUS") != $KeywordRegistry.taskStatus$ended()) { - TicketfieldValues["EDITOR_CONTACT_ID"] = ""; + // Check whether one of the selected Tickets has the status "ended" and removes them from the selection + var endedTicketIds = new SqlBuilder () + .select("TASK.TASKID") + .from("TASK") + .where("TASK.TASKID",taskIDs,SqlBuilder.IN()) + .and("TASK.STATUS",$KeywordRegistry.taskStatus$ended()) + .arrayColumn(); + if(endedTicketIds) + { + for each (endedTicketId in endedTicketIds) + { + var index = taskIDsforStatus.indexOf(endedTicketId); + if (index > -1) + { + removedIds = taskIDsforStatus.splice(index, 1); + ChangeCounter += 1; + } + } + } + TaskfieldValueStatus["STATUS"] = vars.get("$field.STATUS"); + TicketfieldValues["DATE_EDIT_STATUS"] = vars.get("$sys.date"); } - if(vars.get("field.STATUS") == $KeywordRegistry.taskStatus$ended()) + else { - TicketfieldValues["DATE_END"] = vars.get("$sys.date"); - TicketfieldValues["CONCLUSION"] = vars.get("$field.CONCLUSION"); - - var obj_toolsUser = tools.getCurrentUser()[tools.PARAMS]; - - //insert Activity - DataPreset = + if(vars.get("$field.STATUS") == $KeywordRegistry.taskStatus$unassigned()) + { + TicketfieldValues["EDITOR_CONTACT_ID"] = ""; + } + if(vars.get("field.STATUS") == $KeywordRegistry.taskStatus$ended()) + { + TicketfieldValues["DATE_END"] = vars.get("$sys.date"); + TicketfieldValues["CONCLUSION"] = vars.get("$field.CONCLUSION"); + } + if(activityContent != "") { - "directionKeywordId" : $KeywordRegistry.activityDirection$internal(), - "subject" : translate.text("Ticket returned"), - "content" : translate.text("Ticket returned to pool") + ". " - +"\n"+ translate.text("Original editor") + ": " + vars.get( "$field.EDITOR_CONTACT_ID") - +"\n"+ translate.text("Returned by") + ": "+ obj_toolsUser[tools.FIRSTNAME] +" "+ obj_toolsUser[tools.LASTNAME], - "categoryKeywordId" : $KeywordRegistry.activityCategory$sys() - }; - var ActivityLink = ["Supportticket", ticketID]; + activityContent += " / " + } + activityContent += translate.text("Status changed to") + ": " + KeywordUtils.getViewValue($KeywordRegistry.taskStatus(), vars.get("$field.STATUS")); - ActivityUtils.insertNewActivity(DataPreset, [ActivityLink]); - } + TaskfieldValue["STATUS"] = vars.get("$field.STATUS"); + TicketfieldValues["DATE_EDIT_STATUS"] = vars.get("$sys.date"); + } } /// EDITOR if(vars.exists("$field.EDITOR_CONTACT_ID") && (vars.get("$field.EDITOR_CONTACT_ID") != "" )) { TicketfieldValues["EDITOR_CONTACT_ID"] = vars.get("$field.EDITOR_CONTACT_ID"); + if(activityContent != "") + { + activityContent += " / " + } + activityContent += translate.text("Editor changed to") + ": " + ContactUtils.getFullTitleByContactId(vars.get("$field.EDITOR_CONTACT_ID"),false); + } /// CATEGORY if(vars.exists("$field.CATEGORY") && (vars.get("$field.CATEGORY") != "" )) { - TicketfieldValues["CATEGORY"] = vars.get("$field.CATEGORY"); + TicketfieldValues["CATEGORY"] = vars.get("$field.CATEGORY"); + if(activityContent != "") + { + activityContent += " / " + } + activityContent += translate.text("Category changed to") + ": " + KeywordUtils.getViewValue($KeywordRegistry.ticketCategory(), vars.get("$field.CATEGORY")); + } /// UPDATE TICKET & TASK -newWhere("TASK.TASKID",taskIDs,SqlBuilder.IN()).updateFields(TaskfieldValues); -newWhere("TICKET.TASK_ID",taskIDs,SqlBuilder.IN()).updateFields(TicketfieldValues); - +if (taskIDsforStatus) +{ + newWhereIfSet("TASK.TASKID",taskIDsforStatus,SqlBuilder.IN()).updateFields(TaskfieldValueStatus); +} +if (taskIDs) +{ + newWhereIfSet("TASK.TASKID",taskIDs,SqlBuilder.IN()).updateFields(TaskfieldValues); + newWhereIfSet("TICKET.TASK_ID",taskIDs,SqlBuilder.IN()).updateFields(TicketfieldValues); +} -neon.openContext("SupportTicket", "SupportTicketFilter_view", null, neon.OPERATINGSTATE_SEARCH, null); \ No newline at end of file +/// Message to user, if status change was skipped +if (ChangeCounter > 1) +{ + question.showMessage(translate.withArguments("You tried to change the status of \"%0\" tickets from 'ended' to another status.", [ChangeCounter]) + + " " + translate.text("The status-change of these tickets was skipped. Any other changes were carried out.") + + " " + translate.text("To re-open tickets, please use the corresponding action."), question.INFORMATION, translate.text("Status changes skipped!")); +} +if (ChangeCounter == 1) +{ + question.showMessage(translate.text("You tried to change the status of a ticket from 'ended' to another status.") + + " " + translate.text("The status-change of these tickets was skipped. Any other changes were carried out.") + + " " + translate.text("To re-open tickets, please use the corresponding action."), question.INFORMATION, translate.text("Status change skipped!")); +} +neon.closeImage(vars.get("$sys.currentimage"), true) +neon.refresh(); diff --git a/entity/SupportTicket_entity/entityfields/reopenticket/onActionProcess.js b/entity/SupportTicket_entity/entityfields/reopenticket/onActionProcess.js index fe5cf5667d..c65098d31c 100644 --- a/entity/SupportTicket_entity/entityfields/reopenticket/onActionProcess.js +++ b/entity/SupportTicket_entity/entityfields/reopenticket/onActionProcess.js @@ -1,3 +1,4 @@ +import("Employee_lib"); import("Context_lib"); import("ActivityTask_lib"); import("system.translate"); @@ -22,10 +23,9 @@ var obj_toolsUser = tools.getCurrentUser()[tools.PARAMS], var DataPreset = { "directionKeywordId" : $KeywordRegistry.activityDirection$internal(), - "subject" : translate.text("Ticket reopen"), - "content" : translate.text("Ticket was reopen by") + ": "+ obj_toolsUser[tools.FIRSTNAME] +" " - + obj_toolsUser[tools.LASTNAME], - "categoryKeywordId" : $KeywordRegistry.activityCategory$sys() + "subject" : translate.text("Ticket reopen"), + "categoryKeywordId" : $KeywordRegistry.activityCategory$sys(), + "responsibleContactId" : EmployeeUtils.getCurrentContactId() } var ActivityLink = [ContextUtils.getCurrentContextId(), ticketID]; diff --git a/entity/SupportTicket_entity/entityfields/returnticket/onActionProcess.js b/entity/SupportTicket_entity/entityfields/returnticket/onActionProcess.js index 98516b9aa7..4f2b2c1fff 100644 --- a/entity/SupportTicket_entity/entityfields/returnticket/onActionProcess.js +++ b/entity/SupportTicket_entity/entityfields/returnticket/onActionProcess.js @@ -16,10 +16,23 @@ else { var str_taskId = vars.get("$field.TASK_ID"); var ContactId = EmployeeUtils.getCurrentContactId(); - newWhere("TASK.TASKID",str_taskId).updateFields({ + + newWhere("TASK.TASKID",str_taskId).updateFields( + { "STATUS" : $KeywordRegistry.taskStatus$inProgress() }); - newWhere("TICKET.TASK_ID",str_taskId).updateFields({ + // Set DATE_BEGIN, if not yet set. + if (!vars.get("$field.DATE_BEGIN")) + { + newWhere("TICKET.TASK_ID",str_taskId).updateFields( + { + "DATE_BEGIN" : vars.get("$sys.date") + }) + } + + newWhere("TICKET.TASK_ID",str_taskId).updateFields( + { + "DATE_EDIT_STATUS" : vars.get("$sys.date"), "EDITOR_CONTACT_ID" : ContactId }); neon.refresh(); diff --git a/entity/SupportTicket_entity/recordcontainers/db/onDBInsert.js b/entity/SupportTicket_entity/recordcontainers/db/onDBInsert.js index bbefca4cd2..af0d6b6281 100644 --- a/entity/SupportTicket_entity/recordcontainers/db/onDBInsert.js +++ b/entity/SupportTicket_entity/recordcontainers/db/onDBInsert.js @@ -1,3 +1,4 @@ +import("Employee_lib"); import("Context_lib"); import("Sql_lib"); import("system.translate"); @@ -58,10 +59,11 @@ if( actionName == "duplicateTicket") { "directionKeywordId" : $KeywordRegistry.activityDirection$internal(), "subject" : translate.text("Ticket duplicated (duplicate)"), - "content" : translate.text("Ticket created through duplication by") + ': ' - + obj_toolsUser[tools.FIRSTNAME] +" "+ obj_toolsUser[tools.LASTNAME] + ". " + "content" : translate.text("Ticket created through duplication") + ". " + translate.text("Ticket number of the original ticket") + ': ' + codeold, - "categoryKeywordId" : $KeywordRegistry.activityCategory$sys() + "categoryKeywordId" : $KeywordRegistry.activityCategory$sys(), + "responsibleContactId" : EmployeeUtils.getCurrentContactId() + } var ActivityLink = [ContextUtils.getCurrentContextId(), ticketID]; @@ -72,10 +74,10 @@ if( actionName == "duplicateTicket") { "directionKeywordId" : $KeywordRegistry.activityDirection$internal(), "subject" : translate.text("Ticket duplicated (original)"), - "content" : translate.text("Ticket was duplicated by") + ': '+ obj_toolsUser[tools.FIRSTNAME] +" " - + obj_toolsUser[tools.LASTNAME] + ". " + "content" : translate.text("Ticket was duplicated") + ". " + translate.text("Ticket number of the created ticket") + ': ' + code, - "categoryKeywordId" : $KeywordRegistry.activityCategory$sys() + "categoryKeywordId" : $KeywordRegistry.activityCategory$sys(), + "responsibleContactId" : EmployeeUtils.getCurrentContactId() } var ActivityLink = [ContextUtils.getCurrentContextId(), ticketIDold]; diff --git a/entity/SupportTicket_entity/recordcontainers/db/onDBUpdate.js b/entity/SupportTicket_entity/recordcontainers/db/onDBUpdate.js index 58ba8d1829..2bacab3ce0 100644 --- a/entity/SupportTicket_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/SupportTicket_entity/recordcontainers/db/onDBUpdate.js @@ -1,3 +1,5 @@ +import("Contact_lib"); +import("Employee_lib"); import("Context_lib"); import("ActivityTask_lib"); import("system.datetime"); @@ -63,11 +65,12 @@ if( vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) { "directionKeywordId" : $KeywordRegistry.activityDirection$internal(), "subject" : translate.text("Ticket resubmitted"), - "content" : translate.text("Ticket resubmitted by") + ': '+ obj_toolsUser[tools.FIRSTNAME] +" " - + obj_toolsUser[tools.LASTNAME] + ". " - + translate.text("New date due") + ": " - + datetime.toDate(vars.get("$field.TASK_MATURITY_DATE"), "dd.MM.yyyy"), - "categoryKeywordId" : $KeywordRegistry.activityCategory$sys() + "content" : translate.text("New date due") + ": " + + datetime.toDate(vars.get("$field.TASK_MATURITY_DATE"), "dd.MM.yyyy") + " " + + translate.text("Editor changed to") + ": " + + ContactUtils.getFullTitleByContactId(vars.get("$field.TICKET_EDITOR_CONTACT_ID"),false), + "categoryKeywordId" : $KeywordRegistry.activityCategory$sys(), + "responsibleContactId" : EmployeeUtils.getCurrentContactId() } var ActivityLink = [ContextUtils.getCurrentContextId(), ticketID]; @@ -85,9 +88,9 @@ if( vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) "directionKeywordId" : $KeywordRegistry.activityDirection$internal(), "subject" : translate.text("Ticket returned"), "content" : translate.text("Ticket returned to pool") + ". " - +"\n"+ translate.text("Original editor") + ": " + vars.get( "$field.TICKET_EDITOR_CONTACT_ID.displayValue") - +"\n"+ translate.text("Returned by") + ": "+ obj_toolsUser[tools.FIRSTNAME] +" "+ obj_toolsUser[tools.LASTNAME], - "categoryKeywordId" : $KeywordRegistry.activityCategory$sys() + +"\n"+ translate.text("Original editor") + ": " + vars.get( "$field.TICKET_EDITOR_CONTACT_ID.displayValue"), + "categoryKeywordId" : $KeywordRegistry.activityCategory$sys(), + "responsibleContactId" : EmployeeUtils.getCurrentContactId() } var ActivityLink = [ContextUtils.getCurrentContextId(), ticketID]; diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 598cfd20b5..e0a47e7366 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -11111,15 +11111,33 @@ <entry> <key>Mailing to customer</key> </entry> + <entry> + <key>You tried to change the status of \"%0\" tickets from 'ended' to another status.</key> + </entry> + <entry> + <key>The status-change of these tickets was skipped. Any other changes were carried out.</key> + </entry> + <entry> + <key>To re-opening tickets, please use the corresponding action.</key> + </entry> <entry> <key>Create only person</key> </entry> + <entry> + <key>Status change skipped!</key> + </entry> <entry> <key>Slave administration '%0' is '%1'</key> </entry> <entry> <key>The file did not contain any data</key> </entry> + <entry> + <key>You tried to change the status of a ticket from 'ended' to another status.</key> + </entry> + <entry> + <key>Status changes skipped!</key> + </entry> <entry> <key>Slave administration</key> </entry> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 07ddc7bfcd..d26ab6e78d 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -14,9 +14,17 @@ <key>Slave administration</key> <value>Slave Verwaltung</value> </entry> + <entry> + <key>The status-change of these tickets was skipped. Any other changes were carried out.</key> + <value>Die Statusänderungen dieser Tickets wurden übersprungen. Alle anderen Änderungen wurden durchgeführt.</value> + </entry> <entry> <key>Ticket was reopen by</key> </entry> + <entry> + <key>You tried to change the status of a ticket from 'ended' to another status.</key> + <value>Sie haben versucht den Status eines Tickets von 'abgeschlossen zu einem anderen Status zu ändern.</value> + </entry> <entry> <key>Create new campaign step</key> <value>Neue Kampagnenstufe erstellen</value> @@ -29,6 +37,10 @@ <key>Open in mosaico</key> <value>In Mosaico öffnen</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> + </entry> <entry> <key>Single (Service/Internal)</key> <value>Einzel (Service/Intern)</value> @@ -45,6 +57,10 @@ <key>Single (Service/All)</key> <value>Einzel (Service/Alle)</value> </entry> + <entry> + <key>You tried to change the status of \"%0\" tickets from 'ended' to another status.</key> + <value>Sie haben versucht den Status von \"%0\" Tickets von 'abgeschlossen zu einem anderen Status zu ändern.</value> + </entry> <entry> <key>Ticket was duplicated by</key> <value>Ticket wurde dupliziert. Anwender</value> @@ -129,7 +145,7 @@ <key>Template</key> </entry> <entry> - <key>Use all service ticket categories</key> + <key>Use all serviceticket categories</key> <value>Alle Serviceticket Kategorien verwenden</value> </entry> <entry> @@ -361,7 +377,7 @@ <value>Keine Werbung</value> </entry> <entry> - <key>Contact & Service ticket</key> + <key>Contact & Serviceticket</key> <value>Kontakt & Serviceticket</value> </entry> <entry> @@ -12502,6 +12518,10 @@ Bitte Datumseingabe prüfen</value> <entry> <key>per mail</key> </entry> + <entry> + <key>Status change skipped!</key> + <value>Statusänderung übersprungen!</value> + </entry> <entry> <key>Send digital Advertisingmaterials & complete Workflow Task</key> </entry> @@ -14165,12 +14185,12 @@ Bitte Datumseingabe prüfen</value> <key>2</key> </entry> <entry> - <key>Service ticket category</key> - <value>Serviceticket Kategorie</value> + <key>Serviceticket category</key> + <value>Serviceticket-Kategorie</value> </entry> <entry> - <key>Service ticket categories</key> - <value>Serviceticket Kategorien</value> + <key>Serviceticket categories</key> + <value>Serviceticket-Kategorien</value> </entry> <entry> <key>Service tickets</key> @@ -14437,6 +14457,10 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Employees for Employee groups</key> </entry> + <entry> + <key>Status changes skipped!</key> + <value>Statusänderungen übersprungen!</value> + </entry> <entry> <key>Last Click</key> </entry> @@ -14525,13 +14549,19 @@ Bitte Datumseingabe prüfen</value> <key>New Service ticket</key> </entry> <entry> - <key>Serviceticket category</key> + <key>Service ticket category</key> + <value>Serviceticket-Kategorie</value> </entry> <entry> - <key>Serviceticket categories</key> + <key>Use all service ticket categories</key> </entry> <entry> - <key>Contact & Serviceticket</key> + <key>Contact & Service ticket</key> + <value>Kontakt & Serviceticket</value> + </entry> + <entry> + <key>Service ticket categories</key> + <value>Serviceticket-Kategorien</value> </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 3dd33ba156..f06ac690be 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -11231,6 +11231,24 @@ <entry> <key>Service ticket categories</key> </entry> + <entry> + <key>You tried to change the status of \"%0\" tickets from 'ended' to another status.</key> + </entry> + <entry> + <key>The status-change of these tickets was skipped. Any other changes were carried out.</key> + </entry> + <entry> + <key>To re-opening tickets, please use the corresponding action.</key> + </entry> + <entry> + <key>Status change skipped!</key> + </entry> + <entry> + <key>You tried to change the status of a ticket from 'ended' to another status.</key> + </entry> + <entry> + <key>Status changes skipped!</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab