protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { switch (EnumConverter <MessageName>(context.MessageName.ToLower())) { #region Create case MessageName.Create: break; #endregion #region Update case MessageName.Update: break; #endregion #region SetStateDynamicEntity case MessageName.SetStateDynamicEntity: EntityReference entity = (EntityReference)context.InputParameters["EntityMoniker"]; OptionSetValue state = (OptionSetValue)context.InputParameters["State"]; //OptionSetValue status = (OptionSetValue)context.InputParameters["Status"]; IOrganizationService service = serviceFactory.CreateOrganizationService(null); if (state.Value == (int)Tarefa.StateCode.Fechada) { TarefaService ServiceTarefas = new TarefaService(context.OrganizationName, context.IsExecutingOffline, service); var task = ServiceTarefas.BuscaTarefa(entity.Id); //Alteração para obter tempo de resposta ignorando finais de semana e feriados task.TempoResposta = (Decimal)CalcularDiferencaHorasEntreDatas(context, task.CriadoEm.Value.ToLocalTime(), DateTime.Now.ToLocalTime()); //calcula as pausas da Tarefa PausaTarefaService pausaTarefaService = new PausaTarefaService(context.OrganizationName, context.IsExecutingOffline, service); var pausas = pausaTarefaService.ListarPausaTarefa(entity.Id); decimal TempoPausa = 0; pausas.ForEach(p => { //finaliza as pausas pendentes if (p.DataTermino == null || p.DataTermino == DateTime.MinValue) { p.DataTermino = DateTime.Now.AddHours(3); pausaTarefaService.Persistir(p); } //calcula o tempo das pausas (em minutos) TempoPausa = (Decimal)CalcularDiferencaHorasEntreDatas(context, p.DataInicio.ToLocalTime(), p.DataTermino.ToLocalTime()); }); //atualiza o campo de tempo de atuação da tarefa if (task.TempoResposta.HasValue) { task.TempoAtuacao = (task.TempoResposta.Value - TempoPausa); } else { task.TempoAtuacao = TempoPausa; } task.MotivoPausa = " "; //para salvar no banco, não funciona se usar null ou string.Empty ServiceTarefas.Persistir(task); } break; #endregion } }