예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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
            }
        }