Esempio n. 1
0
        private decimal ObterValorAtingimento(IndicadorEntity indicadorEntity, decimal valorMeta, decimal valorRealizado)
        {
            decimal diferencaRealizadoMeta = valorRealizado - valorMeta;
            decimal diferencaSobreMeta     = diferencaRealizadoMeta / valorMeta;
            decimal pesoSobreCriterio      = indicadorEntity.ValorPercentualPeso / indicadorEntity.ValorPercentualCriterio;
            decimal produto     = diferencaSobreMeta * pesoSobreCriterio;
            decimal atingimento = produto * 100;

            if (indicadorEntity.TipoCardinalidade == TipoCardinalidade.QuantoMaiorMelhor)
            {
                atingimento = (1 + produto) * 100;
            }
            else if (indicadorEntity.TipoCardinalidade == TipoCardinalidade.QuantoMenorMelhor)
            {
                atingimento = (1 - produto) * 100;
            }

            if (indicadorEntity.ValorMinimoAtingimento.HasValue && atingimento < indicadorEntity.ValorMinimoAtingimento.Value)
            {
                return(indicadorEntity.ValorMinimoAtingimento.Value);
            }
            else if (indicadorEntity.ValorMaximoAtingimento.HasValue && atingimento > indicadorEntity.ValorMaximoAtingimento.Value)
            {
                return(indicadorEntity.ValorMaximoAtingimento.Value);
            }

            return(atingimento);
        }
Esempio n. 2
0
        /// <summary>
        /// Permite obtener una Observacion Planeada Entity
        /// </summary>
        /// <param name="CodigoExpediente"></param>
        /// <returns>Entidad Observacion Planeada Response</returns>
        public ProcessResult <IndicadorResponse> ObtenerIndicador(IndicadorRequest data)
        {
            ProcessResult <IndicadorResponse> resultado = new ProcessResult <IndicadorResponse>();

            resultado.Result = new IndicadorResponse();
            try
            {
                if (data.CodigoIndicador.HasValue)
                {
                    IndicadorEntity IndicadorEntity = indicadorEntityRepository.GetById(data.CodigoIndicador);
                    if (IndicadorEntity != null)
                    {
                        ResponsableEntity responsableEntity = responsableEntityRepository.GetById(IndicadorEntity.CodigoResponsable);

                        resultado.Result = Mapper.Map <IndicadorEntity, IndicadorResponse>(IndicadorEntity);
                        resultado.Result.NombreCompletoResponsable = responsableEntity.Nombres + " " + responsableEntity.ApellidoPaterno + " " + responsableEntity.ApellidoMaterno;

                        resultado.Result.FechaInicioVigenciaString = resultado.Result.FechaInicioVigencia.Value.ToShortDateString();
                        resultado.Result.FechaFinVigenciaString    = resultado.Result.FechaFinVigencia.Value.ToShortDateString();
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <IndicadorService>(ex.Message);
            }
            return(resultado);
        }
Esempio n. 3
0
        private decimal ObterValorCalculado(IndicadorEntity indicador, long idProjeto, DateTime dataInicial, DateTime dataFinal, bool meta = true)
        {
            if (indicador.Formula is null)
            {
                throw new ArgumentNullException($"A fórmuala do indicador: '{indicador.Identificador}' não foi definida.");
            }

            string formula        = new string(indicador.Formula);
            int    posicaoInicial = -1;

            while ((posicaoInicial = formula.IndexOf('[')) != -1)
            {
                ushort quantidadeCaracteresAteOFim = ObterQuantidadeCaracteresAteOFimDaExpressa(indicador.Formula, posicaoInicial);
                string indicadorFormula            = indicador.Formula.Substring(posicaoInicial, quantidadeCaracteresAteOFim).Replace("[", "").Replace("]", "");

                if (string.IsNullOrWhiteSpace(indicadorFormula))
                {
                    throw new Exception($"Fórmula inválida. '{indicador.Formula}'.");
                }

                var novoIndicador = indicadorRepository.Find($"Identificador = '{indicadorFormula}'");
                if (novoIndicador is null)
                {
                    throw new Exception($"Não foi possível localizar um indicador com este identificador: '{indicadorFormula}'.");
                }

                decimal valor          = meta ? ObterValorMetaMovimento(idProjeto, novoIndicador, dataInicial, dataFinal) : ObterValorRealizadoMovimento(idProjeto, novoIndicador, dataInicial, dataFinal);
                string  valorFormatado = valor.ToString().Replace(".", "").Replace(",", ".");
                formula = formula.Replace($"[{indicadorFormula}]", valorFormatado);
            }

            return(ObterValorFormula(formula));
        }
Esempio n. 4
0
        public ProcessResult <IndicadorResponse> RegistrarIndicador(IndicadorRequest data)
        {
            ProcessResult <IndicadorResponse> resultado = new ProcessResult <IndicadorResponse>();

            resultado.Result = new IndicadorResponse();
            try
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    IndicadorEntity indicadorSincronizar = indicadorEntityRepository.GetById(data.CodigoIndicador);
                    IndicadorEntity indicadorGeneral     = Mapper.Map <IndicadorRequest, IndicadorEntity>(data);

                    if (indicadorSincronizar != null)
                    {
                        if (data.CodigoFormula != null)
                        {
                            indicadorSincronizar.CodigoFormula = data.CodigoFormula;
                        }

                        if (indicadorSincronizar.CodigoFormula != null)
                        {
                            indicadorGeneral.CodigoFormula = indicadorSincronizar.CodigoFormula;
                        }

                        Mapper.Map <IndicadorEntity, IndicadorEntity>(indicadorSincronizar, indicadorGeneral);
                        indicadorEntityRepository.Editar(indicadorSincronizar);
                        resultado.Result.CodigoIndicador = data.CodigoIndicador;
                    }
                    else
                    {
                        indicadorEntityRepository.Insertar(indicadorGeneral);
                        bool registroExitoso = resultado.IsSuccess;
                        if (!registroExitoso)
                        {
                            resultado.IsSuccess = false;
                            resultado.Exception = new ApplicationLayerException <IndicadorService>(MensajesSistemaResource.EtiquetaError);
                        }
                    }
                    resultado.Result.CodigoIndicador = indicadorGeneral.CodigoIndicador;

                    if (data.ListaIndicadorAmbito != null && data.ListaIndicadorAmbito.Count > 0)
                    {
                        this.EliminarIndicadorAmbito(indicadorGeneral);
                        this.GuardarIndicadorAmbito(data.ListaIndicadorAmbito, indicadorGeneral);
                    }

                    indicadorEntityRepository.GuardarCambios();
                    ts.Complete();
                }
            }
            catch (Exception ex)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <IndicadorService>(ex.Message);
            }
            return(resultado);
        }
Esempio n. 5
0
        /// <summary>
        /// Permite eliminar Indicador Ambito
        /// </summary>
        public void EliminarIndicadorAmbito(IndicadorEntity data)
        {
            List <IndicadorAmbitoEntity> lstIndicadorAmbito = indicadorAmbitoEntityRepository.GetFiltered(x => x.CodigoIndicador == data.CodigoIndicador && x.EstadoRegistro == DatosConstantes.EstadoRegistro.Activo).ToList();

            for (int i = 0; i < lstIndicadorAmbito.Count; i++)
            {
                Guid codigoIndicadorAmbito = lstIndicadorAmbito[i].CodigoIndicadorAmbito.Value;
                indicadorAmbitoEntityRepository.Eliminar(codigoIndicadorAmbito);
                indicadorAmbitoEntityRepository.GuardarCambios();
            }
        }
Esempio n. 6
0
        private ResultadoCalculo ObterResultadosCalculados(IndicadorEntity indicador, long idProjeto, DateTime dataInicial, DateTime dataFinal)
        {
            var resultadoCalculo = new ResultadoCalculo
            {
                ValorMeta      = ObterValorCalculado(indicador, idProjeto, dataInicial, dataFinal),
                ValorRealizado = ObterValorCalculado(indicador, idProjeto, dataInicial, dataFinal, false)
            };

            resultadoCalculo.ValorAtingimento = ObterValorAtingimento(indicador, resultadoCalculo.ValorMeta, resultadoCalculo.ValorRealizado);
            DefinirPropriedadesIndicador(indicador, resultadoCalculo);
            return(resultadoCalculo);
        }
Esempio n. 7
0
        private void DefinirPropriedadesIndicador(IndicadorEntity indicador, ResultadoCalculo resultado)
        {
            resultado.Identificador      = indicador.Identificador;
            resultado.UnidadeMedida      = $"{indicador.UnidadeMedida.Codigo} - {indicador.UnidadeMedida.Descricao}";
            resultado.UsuarioResponsavel = indicador.UsuarioResponsavel.Nome;
            switch (indicador.TipoCardinalidade)
            {
            case TipoCardinalidade.Exata: resultado.Cardinalidade = "Exata"; break;

            case TipoCardinalidade.QuantoMaiorMelhor: resultado.Cardinalidade = "Quanto maior melhor"; break;

            case TipoCardinalidade.QuantoMenorMelhor: resultado.Cardinalidade = "Quanto menor melhor"; break;

            default: throw new Exception($"Tipo de cardinalidade inválida no indicador: '{indicador.Identificador}'.");
            }
        }
Esempio n. 8
0
        public ProcessResult <object> EliminarIndicador(IndicadorRequest filtro)
        {
            ProcessResult <object> resultado = new ProcessResult <object>();

            resultado.Result = string.Empty;
            try
            {
                IndicadorEntity oIndicadorEntity = indicadorEntityRepository.GetById(filtro.CodigoIndicador);

                if (oIndicadorEntity != null)
                {
                    indicadorEntityRepository.Eliminar(oIndicadorEntity.CodigoIndicador);
                    resultado.IsSuccess = true;
                    indicadorEntityRepository.GuardarCambios();
                }
            }
            catch (Exception ex)
            {
                resultado.Exception = new ApplicationLayerException <IndicadorService>(ex.Message);
            }
            return(resultado);
        }
Esempio n. 9
0
        private decimal ObterValorRealizadoMovimento(long idProjeto, IndicadorEntity indicadorEntity, DateTime dataInicial, DateTime dataFinal)
        {
            string tipoOperacao = indicadorEntity.TipoAcumuloRealizado == TipoAcumulo.Media ? "avg" : "sum";
            string sql          = $"select round(coalesce({tipoOperacao}(ValorRealizado), 0), 2) valor from Movimento where IdProjeto = {idProjeto} and IdIndicador = {indicadorEntity.IdIndicador} ";

            if (indicadorEntity.TipoAcumuloRealizado == TipoAcumulo.NaoAcumulavel)
            {
                sql += "and DataLancamento = :P1";
                var database = DatabaseProvider.NewQuery(sql);
                database.AddParameter("P1", dataInicial.Date);
                database.ExecuteQuery();
                return(database.GetDecimal("VALOR"));
            }
            else
            {
                sql += "and DataLancamento Between :P1 and :P2";
                var database = DatabaseProvider.NewQuery(sql);
                database.AddParameter("P1", dataInicial.Date);
                database.AddParameter("P2", dataFinal.Date);
                database.ExecuteQuery();
                return(database.GetDecimal("VALOR"));
            }
        }
Esempio n. 10
0
 /// <summary>
 /// Permite registar Indicador Gestion
 /// </summary>
 public void GuardarIndicadorAmbito(List <IndicadorAmbitoRequest> lstIndicadorAmbito, IndicadorEntity data)
 {
     for (int i = 0; i < lstIndicadorAmbito.Count; i++)
     {
         lstIndicadorAmbito[i].CodigoIndicador = data.CodigoIndicador.Value;
         IndicadorAmbitoEntity indicadorAmbitoGeneral = Mapper.Map <IndicadorAmbitoRequest, IndicadorAmbitoEntity>(lstIndicadorAmbito[i]);
         indicadorAmbitoEntityRepository.Insertar(indicadorAmbitoGeneral);
         indicadorAmbitoEntityRepository.GuardarCambios();
     }
 }