diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/DocumentDao.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/DocumentDao.java index 56bfd4c..24b2dc8 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/DocumentDao.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/DocumentDao.java @@ -25,4 +25,6 @@ public interface DocumentDao extends CitGenericDAO { List findByProcessInstance(Long processInstanceId); + List findByWorkItem(Long workItemId); + } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/impl/DocumentDaoHibernate.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/impl/DocumentDaoHibernate.java index 9b9f610..21212db 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/impl/DocumentDaoHibernate.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/dao/impl/DocumentDaoHibernate.java @@ -57,4 +57,17 @@ public class DocumentDaoHibernate extends CitGenericDAOImpl implements DocumentD return query.getResultList(); } + + @SuppressWarnings("unchecked") + @Override + public List findByWorkItem(Long workItemId) { + String queryString = "select document from Document as document" + + " where document.workItem.id = :workItemId" + + " and document.dataInativo is null "; + + Query query = em().createQuery(queryString); + query.setParameter("workItemId", workItemId); + + return query.getResultList(); + } } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/DocumentService.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/DocumentService.java index a81d66c..eac9249 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/DocumentService.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/DocumentService.java @@ -28,4 +28,6 @@ public interface DocumentService extends GenericService { void buildDocument(String name, MultipartFile file, Long documentId, Long documentType, String documentDescription, Long processInstanceId, Long workItemId); List findByProcessInstance(Long processInstanceId); + + List findByWorkItem(Long workItemId); } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/impl/DocumentServiceImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/impl/DocumentServiceImpl.java index 0112cae..5eea31c 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/impl/DocumentServiceImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/document/service/impl/DocumentServiceImpl.java @@ -126,4 +126,9 @@ public class DocumentServiceImpl extends GenericServiceImpl impl return documentDao.findByProcessInstance(processInstanceId); } + @Override + public List findByWorkItem(Long workItemId) { + return documentDao.findByWorkItem(workItemId); + } + } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/ProcessInstanceServiceBase.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/ProcessInstanceServiceBase.java index 7beca01..e0d94c4 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/ProcessInstanceServiceBase.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/ProcessInstanceServiceBase.java @@ -52,5 +52,7 @@ public interface ProcessInstanceServiceBase extends GenericService files); public void sendMessages(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance); + + void sendNotificationForAssignments(RuntimeEnvironment runtimeEnvironment, Long userTaskItemId, String notificationTemplateName, boolean sendAttachedFiles); } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/ProcessInstanceServiceBaseImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/ProcessInstanceServiceBaseImpl.java index ef1c30d..3ac143d 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/ProcessInstanceServiceBaseImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/ProcessInstanceServiceBaseImpl.java @@ -1,6 +1,8 @@ package br.com.centralit.esi.api.execution.service.impl; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -21,6 +23,8 @@ import br.com.centralit.esi.api.design.model.FlowVersion; import br.com.centralit.esi.api.design.model.event.Event; import br.com.centralit.esi.api.design.service.FlowActionService; import br.com.centralit.esi.api.design.service.FlowConnectionService; +import br.com.centralit.esi.api.document.model.Document; +import br.com.centralit.esi.api.document.service.DocumentService; import br.com.centralit.esi.api.enumerated.ActorTypeEnum; import br.com.centralit.esi.api.enumerated.EstimateTimeTypeEnum; import br.com.centralit.esi.api.enumerated.ProcessInstanceStatusEnum; @@ -32,6 +36,7 @@ import br.com.centralit.esi.api.execution.model.ProcessInstance; import br.com.centralit.esi.api.execution.model.ProcessInstanceVariable; import br.com.centralit.esi.api.execution.model.UserTaskItem; import br.com.centralit.esi.api.execution.model.WorkItem; +import br.com.centralit.esi.api.execution.model.WorkItemAssignment; import br.com.centralit.esi.api.execution.service.ProcessInstanceServiceBase; import br.com.centralit.esi.api.execution.service.ProcessInstanceVariableService; import br.com.centralit.esi.api.execution.service.ProcessInstanceVariableValueService; @@ -43,6 +48,7 @@ import br.com.centralit.esi.api.notification.model.Message; import br.com.centralit.esi.api.notification.model.Notification; import br.com.centralit.esi.api.notification.model.NotificationTemplate; import br.com.centralit.esi.api.notification.service.NotificationService; +import br.com.centralit.esi.api.notification.service.NotificationTemplateService; import br.com.centralit.esi.api.parameter.model.Parameter; import br.com.centralit.esi.api.parameter.service.ParameterService; import br.com.centralit.esi.api.runtime.RuntimeContext; @@ -53,6 +59,7 @@ import br.com.centralit.esi.api.security.model.User; import br.com.centralit.esi.api.security.service.SecurityService; import br.com.centralit.esi.api.subscriber.model.Subscriber; import br.com.centralit.esi.api.util.EsiAppUtils; +import br.com.centralit.esi.exception.EsiBusinessException; import br.com.centralit.framework.exception.BusinessException; import br.com.centralit.framework.mail.HTMLMail; import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; @@ -103,7 +110,13 @@ public abstract class ProcessInstanceServiceBaseImpl extends GenericServiceImpl< private NotificationService notificationService; @Autowired + private NotificationTemplateService notificationTemplateService; + + @Autowired protected SecurityService securityService; + + @Autowired + protected DocumentService documentService; protected ProcessInstanceDao processInstanceDao; @@ -177,6 +190,7 @@ public abstract class ProcessInstanceServiceBaseImpl extends GenericServiceImpl< runtimeEnvironment.addOrUpdateObject("processInstanceService", this); runtimeEnvironment.addOrUpdateObject("processInstance", processInstance); runtimeEnvironment.addOrUpdateObject("userTaskService", workItemUserTaskService); + runtimeEnvironment.addOrUpdateObject("notificationTemplateService", notificationTemplateService); } @@ -373,11 +387,12 @@ public abstract class ProcessInstanceServiceBaseImpl extends GenericServiceImpl< String HTMLText = runtimeEnvironment.parseString(message.getHTMLText()); String from = runtimeEnvironment.parseString(message.getFrom()); String subject = runtimeEnvironment.parseString(message.getSubject()); + subject = UtilString.isNullOrEmpty(subject) ? " " : subject; - if (EsiAppUtils.BPE_SEND_EMAIL) { + if (EsiAppUtils.BPE_SEND_EMAIL && !UtilString.isNullOrEmpty(HTMLText)) { htmlMail.sendMail(message.getEmails(runtimeEnvironment), from, subject, HTMLText, message.getFiles()); } - if (EsiAppUtils.BPE_SEND_NOTIFICATION) { + if (EsiAppUtils.BPE_SEND_NOTIFICATION && !UtilString.isNullOrEmpty(text)) { Notification notification = new Notification(subject, text, message.getUsers() != null ? Arrays.asList(message.getUsers()) : null, message.getGroups() != null ? Arrays.asList(message.getGroups()) : null); notificationService.sendNotification(runtimeEnvironment, notification); } @@ -689,7 +704,7 @@ public abstract class ProcessInstanceServiceBaseImpl extends GenericServiceImpl< @Override public void addMessage(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, NotificationTemplate notificationTemplate, User[] users, Group[] groups, List files) { - if (!UtilString.isNullOrEmpty(notificationTemplate.getText())) { + if (!UtilString.isNullOrEmpty(notificationTemplate.getText()) || !UtilString.isNullOrEmpty(notificationTemplate.getHTMLText())) { String text = runtimeEnvironment.parseString(notificationTemplate.getText()); String HTMLText = runtimeEnvironment.parseString(notificationTemplate.getHTMLText()); String from = runtimeEnvironment.parseString(EsiAppUtils.BPE_EMAIL_FROM); @@ -740,4 +755,83 @@ public abstract class ProcessInstanceServiceBaseImpl extends GenericServiceImpl< return processInstance; } + + public User[] getAssignedUsers(UserTaskItem userTask) { + List list = new ArrayList(); + if (userTask.getAssignments() != null) { + for (WorkItemAssignment assignment : userTask.getAssignments()) { + if (assignment.getUser() != null) { + User user = securityService.getUser(assignment.getUser().getId()); + if (user != null) { + list.add(user); + } + } + } + + User[] result = new User[list.size()]; + list.toArray(result); + + return result; + }else{ + return new User[0]; + } + } + + public Group[] getAssignedGroups(UserTaskItem userTask) { + List list = new ArrayList(); + if (userTask.getAssignments() != null) { + for (WorkItemAssignment assignment : userTask.getAssignments()) { + if (assignment.getGroup() != null) { + Group group = securityService.getGroup(assignment.getGroup().getId()); + if (group != null) { + list.add(group); + } + } + } + + Group[] result = new Group[list.size()]; + list.toArray(result); + + return result; + }else{ + return new Group[0]; + } + } + + @SuppressWarnings("resource") + @Override + public void sendNotificationForAssignments(RuntimeEnvironment runtimeEnvironment, Long userTaskItemId, String notificationTemplateName, boolean sendAttachedFiles) { + NotificationTemplate notificationTemplate = notificationTemplateService.findByName(notificationTemplateName); + if (notificationTemplate != null) { + UserTaskItem userTaskItem = workItemUserTaskService.getReference(userTaskItemId); + if (userTaskItem != null) { + ProcessInstance processInstance = userTaskItem.getProcessInstance(); + + List files = null; + if (sendAttachedFiles) { + List documents = documentService.findByProcessInstance(processInstance.getId()); + if (documents != null) { + files = new ArrayList(); + for (Document document : documents) { + try { + if (document.getAttachedFile() != null && document.getAttachedFile().getFile() != null) { + File tempFile = File.createTempFile("temp", ""); + FileOutputStream fos = new FileOutputStream(tempFile); + fos.write(document.getAttachedFile().getFile()); + + files.add(tempFile); + } + } catch (IOException e) { + e.printStackTrace(); + throw new EsiBusinessException(e); + } + } + } + } + + this.addMessage(runtimeEnvironment, processInstance, notificationTemplate, this.getAssignedUsers(userTaskItem), this.getAssignedGroups(userTaskItem), files); + this.sendMessages(runtimeEnvironment, processInstance); + } + } + } } \ No newline at end of file diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/pack/service/impl/PackServiceImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/pack/service/impl/PackServiceImpl.java index 72fa7da..b6da7e2 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/pack/service/impl/PackServiceImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/pack/service/impl/PackServiceImpl.java @@ -175,7 +175,7 @@ public class PackServiceImpl extends GenericServiceImpl implements P if (pack.getNotifications() != null) { for (NotificationTemplate notification : pack.getNotifications()) { notification = notificationTemplateService.save(notification, pack.getReplaceElement()); - pack.getElements().add(new PackElement(pack, PackElementTypeEnum.NOTIFICATION, notification.getId(), notification.getName(), notification.getSubject())); + pack.getElements().add(new PackElement(pack, PackElementTypeEnum.NOTIFICATION, notification.getId(), notification.getName(), notification.getDescription())); } } if (pack.isNew()) { diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ConvertUtilsESI.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ConvertUtilsESI.java index a51f563..89e7a04 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ConvertUtilsESI.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ConvertUtilsESI.java @@ -159,6 +159,18 @@ public class ConvertUtilsESI { return str.length() == 24 && str.charAt(4) == '-' && str.charAt(7) == '-' && str.charAt(10) == 'T' && str.charAt(13) == ':'; } + public static boolean isTimestamp(final String str) { + try { + if (str.length() >= 19 && str.charAt(4) == '-' && str.charAt(7) == '-' && str.charAt(10) == ' ' && str.charAt(13) == ':') { + Timestamp ts = Timestamp.valueOf(str); + return ts != null; + } + + } catch (Exception e) { + } + return false; + } + /** * @param value * @return @@ -173,6 +185,9 @@ public class ConvertUtilsESI { }else if (value instanceof Calendar) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); return dateFormat.format(((Calendar) value).getTime()); + }else if (value instanceof Timestamp) { + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); + return dateFormat.format(((Timestamp) value).getTime()); }else if (value instanceof Date) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); return dateFormat.format(((Date) value).getTime()); @@ -645,5 +660,5 @@ public class ConvertUtilsESI { return result; } - + } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ParseUtilsESI.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ParseUtilsESI.java index 2788792..936f875 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ParseUtilsESI.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/util/ParseUtilsESI.java @@ -1,6 +1,7 @@ package br.com.centralit.esi.api.util; import java.lang.reflect.Method; +import java.sql.Timestamp; import java.util.HashMap; import org.apache.commons.lang.text.StrSubstitutor; @@ -69,6 +70,8 @@ public class ParseUtilsESI { result = json.get(property); if (result instanceof String && ConvertUtilsESI.isJsonDate((String) result)) { result = UtilDate.jsonToDate((String) result); + }else if (result instanceof String && ConvertUtilsESI.isTimestamp((String) result)) { + return Timestamp.valueOf((String) result); } } catch (Exception e) { } diff --git a/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java b/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java index 4ad4941..a1e49c2 100644 --- a/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java +++ b/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java @@ -848,7 +848,8 @@ public class StartupListenerEsi extends UtilStartup implements ApplicationListen str.append("var parameterService = runtimeEnvironment.getObject(\"parameterService\");\n\n"); str.append("var EnvironmentVariable = importNames.EnvironmentVariable;\n\n"); str.append("var VariableTypeEnum = importNames.VariableTypeEnum;\n"); - str.append("var HashMap = importNames.HashMap;\n\n"); + str.append("var HashMap = importNames.HashMap;\n"); + str.append("var StringBuilder = importNames.StringBuilder;\n\n"); str.append("addOrUpdateObject = function(name, value) {\n"); str.append(" runtimeEnvironment.addOrUpdateObject(name, value);\n"); @@ -930,6 +931,10 @@ public class StartupListenerEsi extends UtilStartup implements ApplicationListen str.append(" userTaskService.assign(runtimeEnvironment, userTask, "+uuid+".ActorTypeEnum.GROUP, type, group);\n"); str.append("};\n\n"); + str.append("sendNotificationForAssignments = function(userTaskId, templateName, sendAttachedFiles) {\n"); + str.append(" processInstanceService.sendNotificationForAssignments(runtimeEnvironment, userTaskId, templateName, sendAttachedFiles);\n"); + str.append("};\n\n"); + return str.toString(); } diff --git a/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/NotificationTemplateListController.js b/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/NotificationTemplateListController.js index 66bb740..c59b2bc 100644 --- a/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/NotificationTemplateListController.js +++ b/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/NotificationTemplateListController.js @@ -9,6 +9,7 @@ citApp.controller('NotificationTemplateListController', ["$scope", "Notification }; $scope.headers = [ {title : $translate.instant('LABEL.NOME'), value : 'name', tamanho: 30 } , + {title : $translate.instant('LABEL.DESCRICAO'), value : 'description' }, {title : $translate.instant('LABEL.ASSUNTO'), value : 'subject' }]; $scope.filterCriteria = { @@ -16,8 +17,9 @@ citApp.controller('NotificationTemplateListController', ["$scope", "Notification dir : 'asc', sort : 'name', limit : 10, - fields: ['id', 'name', 'subject'], + fields: ['id', 'name', 'description', 'subject'], filters : [ {type : 'string', field : 'name' } , + {type : 'string', field : 'description' }, {type : 'string', field : 'subject' }] }; diff --git a/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/PackController.js b/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/PackController.js index b6bcb7e..3a56985 100644 --- a/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/PackController.js +++ b/cit-esi-web/src/main/webapp/assets/js/angular/custom/controller/PackController.js @@ -305,7 +305,7 @@ citApp.controller('PackController', ["$scope", "PackRepository", "DataObjectRepo $scope.setNotificationTemplate = function (item) { if (item && item.id) { - $scope.addElement('NOTIFICATION', item, 'subject'); + $scope.addElement('NOTIFICATION', item, 'description'); } $scope.clearNotificationTemplate(); }; diff --git a/cit-esi-web/src/main/webapp/html/businessProcess/businessProcessData.html b/cit-esi-web/src/main/webapp/html/businessProcess/businessProcessData.html index cb7707a..7380e28 100644 --- a/cit-esi-web/src/main/webapp/html/businessProcess/businessProcessData.html +++ b/cit-esi-web/src/main/webapp/html/businessProcess/businessProcessData.html @@ -166,7 +166,7 @@
-
diff --git a/cit-esi-web/src/main/webapp/html/pack/packEdit.html b/cit-esi-web/src/main/webapp/html/pack/packEdit.html index 555a5ea..d8eac36 100644 --- a/cit-esi-web/src/main/webapp/html/pack/packEdit.html +++ b/cit-esi-web/src/main/webapp/html/pack/packEdit.html @@ -307,7 +307,7 @@