예제 #1
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
            }
        }