public void Execute(IServiceProvider serviceProvider) { lock (thisLock) { var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); ITracingService trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(null); PausaTarefaService pausaTarefaService = new PausaTarefaService(context.OrganizationName, context.IsExecutingOffline, service); try { trace.Trace(context.MessageName); switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { case Domain.Enum.Plugin.MessageName.Create: var entidade = (Entity)context.InputParameters["Target"]; //altera a entidade Tarefa para ficar com o mesmo motivo da Pausa var pausaCreate = pausaTarefaService.BuscaPausaTarefa(entidade.Id); if (!pausaTarefaService.PersistirMotivoPausaNaTarefa(pausaCreate)) { throw new ArgumentException("Não foi possível atualizar o Motivo da pausa na Tarefa."); } break; case Domain.Enum.Plugin.MessageName.Update: if (context.PostEntityImages.Contains("imagem") && context.PostEntityImages["imagem"] is Entity) { PausaTarefa pausaUpdate = context.PostEntityImages["imagem"].Parse <PausaTarefa>(context.OrganizationName, context.IsExecutingOffline, service); if (pausaUpdate.DataTermino != null || pausaUpdate.DataTermino != DateTime.MinValue) { //atribui vazio para o Motivo da Pausa na Tarefa var tarefa = pausaTarefaService.BuscaTarefa(pausaUpdate.Tarefa.Id); tarefa.MotivoPausa = " "; //para salvar no banco, não funciona se usar null ou string.Empty TarefaService tarefaService = new TarefaService(context.OrganizationName, context.IsExecutingOffline, service); tarefaService.Persistir(tarefa); } } break; } } catch (Exception ex) { string message = SDKore.Helper.Error.Handler(ex); trace.Trace(SDKore.Helper.Error.GetMessageError(ex)); throw new InvalidPluginExecutionException(message, ex); } } }
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 } }