예제 #1
0
        public async Task <IActionResult> DetailsPop(int id, string tipo = "", string mensaje = "")
        {
            ConfiguracionsController configuracionControl = new ConfiguracionsController(db, userManager);
            EvaluacionsController    controlEvaluacion    = new EvaluacionsController(db);
            UnidadesdeMedida         Unidad = new UnidadesdeMedida();

            EjecucionCalculada respuestaFormato = new EjecucionCalculada();

            Ejecucion ejec = await db.Ejecucion.Where(n => n.id == id).FirstOrDefaultAsync();

            if (ejec != null)
            {
                //-------------------------------------------------------identificar si un usuario tiene acceso a editar una ejecucion



                if (User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Ejecucion.Editar" && c.Value == "1") ||
                                  (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Planeacion.Editar" && c.Value == "1")))
                {
                    ViewBag.MostrarBotonEditarEjecucion = await configuracionControl.PermisoMostrarEditarEjecucion(User, ejec);
                }
                else
                {
                    ViewBag.MostrarBotonEditarEjecucion = false;
                }
                //-------------------------------------------------------identificar si un usuario tiene acceso a editar una ejecucion


                EjecucionCalculada respuesta = new EjecucionCalculada();


                //-------------- generacion de un objeto genérico para manejar los diferentes tipos de indicadores
                ObjectHandle manejador       = Activator.CreateInstance(null, "seguimiento.Formulas." + ejec.Indicador.TipoIndicador.file); //se crea un manejador  op -objeto generico- y un operador generico que permite llamar a las formulas con la cadena del tipo de indiciador: mantenimiento, incremento etc
                Object       op              = manejador.Unwrap();
                Type         t               = op.GetType();
                MethodInfo   operadorPeriodo = t.GetMethod("Calculo_periodo"); //operador es un metodo generico que refleja la funcionalidad de Calculo periodo

                Periodo   periodoLineaBase = db.Periodo.Where(n => n.tipo == "lineabase").FirstOrDefault();
                Ejecucion lineaBase        = db.Ejecucion.Where(n => n.idperiodo == periodoLineaBase.id && n.idindicador == ejec.idindicador).FirstOrDefault();


                List <Evaluacion> evaluaciones = await controlEvaluacion.Get(ejec.idindicador, "Indicador");

                object[] args       = { ejec, null };                                                        //carga los argumentos en un objeto
                var      respuesta2 = (EjecucionCalculada)operadorPeriodo.Invoke(op, args);                  //envia los argumentos mediante invoke al metodo Calculo_periodo
                respuesta        = respuesta2;
                respuestaFormato = controlEvaluacion.SetEvaluacion(Unidad.Formato(respuesta), evaluaciones); //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida


                ViewBag.Adjuntos = await db.EjecucionAdjunto.Where(n => n.idejecucion == ejec.id).ToListAsync();

                ViewBag.tipo    = tipo;
                ViewBag.mensaje = mensaje;
            }
            return(View(respuestaFormato));
        }
예제 #2
0
        public EjecucionCalculada SetEvaluacion(EjecucionCalculada ejecucion, List <Evaluacion> semaforos)
        {
            EvaluacionDisplay eval = new EvaluacionDisplay();

            eval.Color = "";
            eval.texto = "";
            if ((ejecucion.EjecutadoError == null && ejecucion.PlaneadoError == null) || ejecucion.Periodo.tipo != "periodo")
            {
                foreach (var semaforox in semaforos)
                {
                    if (ejecucion.Calculado >= semaforox.Minimo && ejecucion.Calculado <= semaforox.Maximo)
                    {
                        eval.Color = semaforox.Color;
                        eval.texto = semaforox.Nombre;
                    }
                }
            }
            ejecucion.Evaluacion = eval;
            return(ejecucion);
        }
        public EjecucionCalculada Formato(EjecucionCalculada ejecucionOriginal)
        {
            EjecucionCalculada ejecucion = new EjecucionCalculada();

            ejecucion = ejecucionOriginal.Clone();      // se clona el objeto para evitar editar la ejecucion original

            switch (ejecucion.Indicador.unidad)
            {
            case "Porcentaje":
                return(FormatoPorcentaje(ejecucion));

            case "Numero":
                return(FormatoNumero(ejecucion));

            case "NumeroSinCalculo":
                return(FormatoNumeroSinCalculo(ejecucion));

            case "PorcentajeSinCalculo":
                return(FormatoPorcentajeSinCalculo(ejecucion));

            default:
                return(FormatoNumero(ejecucion));
            }
        }
예제 #4
0
        public Object Calculo_subtotal(Ejecucion ejecucion, List <object> listadoParaSubtotal, decimal lineaBase)
        {
            decimal            sumaPlaneado = 0, sumaEjecutados = 0, valEjecutado = 0, valPlaneado = 0, valCalculado = 0;
            int                cuenta    = 0;
            EjecucionCalculada respuesta = new EjecucionCalculada();
            string             msg       = "";

            foreach (Ejecucion calculada in listadoParaSubtotal)
            {
                valEjecutado = 0;
                valPlaneado  = 0;
                if (calculada.ejecutado != null)
                {
                    calculada.ejecutado = calculada.ejecutado.Replace(',', '.');
                }
                if (calculada.planeado != null)
                {
                    calculada.planeado = calculada.planeado.Replace(',', '.');
                }

                try { decimal.TryParse(calculada.ejecutado, NumberStyles.Any, CultureInfo.InvariantCulture, out valEjecutado); }
                catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; }
                catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; }
                catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; }

                try { decimal.TryParse(calculada.planeado, NumberStyles.Any, CultureInfo.InvariantCulture, out valPlaneado); }
                catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; }
                catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; }
                catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; }

                sumaPlaneado = sumaPlaneado + valPlaneado;
                if (calculada.cargado == true && calculada.Periodo.cargado == true)
                {
                    sumaEjecutados = sumaEjecutados + valEjecutado;
                }
                cuenta++;
            }

            if (cuenta > 0)
            {
                if (sumaPlaneado != lineaBase)
                {
                    valCalculado = (sumaEjecutados - lineaBase) / (sumaPlaneado - lineaBase);

                    if (valCalculado > 1)
                    {
                        valCalculado = 1;
                    }
                    if (valCalculado < 0)
                    {
                        valCalculado = 0;
                    }
                }
                else if (sumaPlaneado == lineaBase)
                {
                    lineaBase    = sumaPlaneado + 10;
                    valCalculado = (sumaEjecutados - lineaBase) / (sumaPlaneado - lineaBase);

                    if (valCalculado > 1)
                    {
                        valCalculado = 1;
                    }
                    if (valCalculado < 0)
                    {
                        valCalculado = 0;
                    }
                }
                else
                {
                    valCalculado = 0;
                }
            }
            respuesta.id = ejecucion.id;
            respuesta.FechaActualizacion = ejecucion.FechaActualizacion;
            respuesta.idindicador        = ejecucion.idindicador;
            respuesta.Indicador          = ejecucion.Indicador;
            respuesta.idperiodo          = ejecucion.idperiodo;
            respuesta.Periodo            = ejecucion.Periodo;
            respuesta.cargado            = ejecucion.cargado;
            respuesta.ejecutado          = sumaEjecutados.ToString();
            respuesta.planeado           = sumaPlaneado.ToString();
            respuesta.Nota      = ejecucion.Nota;
            respuesta.adjunto   = ejecucion.adjunto;
            respuesta.Mensaje   = msg;
            respuesta.Calculado = (valCalculado * 100);


            if (respuesta.Calculado > 100)
            {
                respuesta.Calculado = 100;
            }
            if (respuesta.Calculado < 0)
            {
                respuesta.Calculado = 0;
            }

            return((Object)respuesta);
        }
예제 #5
0
        public EjecucionCalculada Calculo_total(Ejecucion ejecucion, List <object> listadoParaTotal, decimal lineaBase)
        {
            decimal            valEjecutado = 0, valPlaneado = 0, valCalculado = 0, sumaPlaneado = 0, sumaEjecutados = 0;
            int                cuenta    = 0;
            EjecucionCalculada respuesta = new EjecucionCalculada();
            string             msg       = "";

            foreach (EjecucionCalculada calculada in listadoParaTotal)
            {
                valEjecutado = 0;
                valPlaneado  = 0;
                try { valEjecutado = System.Convert.ToDecimal(calculada.ejecutado); }
                catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; }
                catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; }
                catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; }

                try { valPlaneado = System.Convert.ToDecimal(calculada.planeado); }
                catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; }
                catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; }
                catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; }



                if (calculada.Periodo.cargado == true)
                {
                    valCalculado = calculada.Calculado + valCalculado;
                }
                cuenta++;
            }


            if (cuenta > 0)
            {
                valCalculado = valCalculado / cuenta;

                if (valCalculado > 100)
                {
                    valCalculado = 100;
                }
                if (valCalculado < 0)
                {
                    valCalculado = 0;
                }
            }

            respuesta.id = ejecucion.id;
            respuesta.FechaActualizacion = ejecucion.FechaActualizacion;
            respuesta.idindicador        = ejecucion.idindicador;
            respuesta.Indicador          = ejecucion.Indicador;
            respuesta.idperiodo          = ejecucion.idperiodo;
            respuesta.Periodo            = ejecucion.Periodo;
            respuesta.cargado            = ejecucion.cargado;
            respuesta.ejecutado          = ""; //sumaEjecutados.ToString();
            respuesta.planeado           = ""; //sumaPlaneado.ToString();
            respuesta.Nota      = ejecucion.Nota;
            respuesta.adjunto   = ejecucion.adjunto;
            respuesta.Mensaje   = msg;
            respuesta.Calculado = (valCalculado);


            if (respuesta.Calculado > 100)
            {
                respuesta.Calculado = 100;
            }
            if (respuesta.Calculado < 0)
            {
                respuesta.Calculado = 0;
            }

            return(respuesta);
        }
예제 #6
0
        //eta función toma un modelo ejecucion y agrega el valor calculado y un mensaje con posibles errores y los almacena en un tipo de dato ejecucionCalculada
        public EjecucionCalculada Calculo_periodo(Ejecucion ejecucion, decimal lineaBase)
        {
            decimal            valEjecutado = 0, valPlaneado = 0, valCalculado;
            string             msg       = "";
            EjecucionCalculada respuesta = new EjecucionCalculada();

            if (ejecucion.ejecutado != null)
            {
                ejecucion.ejecutado = ejecucion.ejecutado.Replace(',', '.');
            }
            if (ejecucion.planeado != null)
            {
                ejecucion.planeado = ejecucion.planeado.Replace(',', '.');
            }


            //conversión a # de los valores ejecutados y planeados
            try { decimal.TryParse(ejecucion.ejecutado, NumberStyles.Any, CultureInfo.InvariantCulture, out valEjecutado); }
            catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; }
            catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; }
            catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; }

            //conversión a # de los valores ejecutados y planeados
            try { decimal.TryParse(ejecucion.planeado, NumberStyles.Any, CultureInfo.InvariantCulture, out valPlaneado); }
            catch (System.OverflowException) { msg = "el valor planeado genera desbordamiento"; }
            catch (System.FormatException) { msg = "el valor planeado tiene un formato incorrecto"; }
            catch (System.ArgumentNullException) { msg = "planeado Nulo"; }
            //mensaje de no error
            if (msg == "")
            {
                //evita planeados negativos y 0 para evitar divisiones por 0, si es aso genera mensaje de error
                if (valPlaneado == lineaBase)
                {
                    msg          = "Se está tomando un Lb de " + (valPlaneado + 10);
                    lineaBase    = valPlaneado + 10;
                    valCalculado = (((valEjecutado - lineaBase) / (valPlaneado - lineaBase)) * 100);
                }
                else
                {
                    //realiza el calculo del valor a devolver, siempre en porcentaje
                    valCalculado = (((valEjecutado - lineaBase) / (valPlaneado - lineaBase)) * 100);
                }

                respuesta.Calculado = valCalculado;
            }

            if (respuesta.Calculado > 100)
            {
                respuesta.Calculado = 100;
            }
            if (respuesta.Calculado < 0)
            {
                respuesta.Calculado = 0;
            }

            respuesta.id = ejecucion.id;
            respuesta.FechaActualizacion = ejecucion.FechaActualizacion;
            respuesta.idindicador        = ejecucion.idindicador;
            respuesta.Indicador          = ejecucion.Indicador;
            respuesta.idperiodo          = ejecucion.idperiodo;
            respuesta.Periodo            = ejecucion.Periodo;
            respuesta.cargado            = ejecucion.cargado;
            respuesta.ejecutado          = ejecucion.ejecutado;
            respuesta.Nota     = ejecucion.Nota;
            respuesta.adjunto  = ejecucion.adjunto;
            respuesta.Mensaje  = msg;
            respuesta.planeado = ejecucion.planeado;

            return(respuesta);
        }
예제 #7
0
        private async Task <bool> Calcular_categoria_menor(List <Categoria> categoriasz, List <Periodo> periodos)
        {
            bool resp = false;

            //controladores
            IndicadorsController         controlIndicadores        = new IndicadorsController(db, userManager);
            EjecucionsController         controlEjecucion          = new EjecucionsController(db, userManager);
            PeriodosController           controlPeriodos           = new PeriodosController(db, userManager);
            EjecucionCategoriaController controlEjecucionCategoria = new EjecucionCategoriaController(db, userManager);

            // variables
            List <Indicador>          indicadores           = new List <Indicador>();
            List <Ejecucion>          ejecuciones           = new List <Ejecucion>();
            List <EjecucionCalculada> ejecucionesCalculadas = new List <EjecucionCalculada>();

            //List<Periodo> periodos = controlPeriodos.getAll();

            foreach (Categoria categoriax in categoriasz)
            {
                indicadores = await controlIndicadores.getFromCategoria(categoriax.id);

                List <EjecucionCalculada> listadoEjecuciones = new List <EjecucionCalculada>();
                List <EjecucionCategoria> respuestas         = new List <EjecucionCategoria>();

                foreach (Indicador indicador in indicadores)
                {
                    //-------------- generacion de un objeto genérico para manejar los diferentes tipos de indicadores
                    ObjectHandle       manejador        = Activator.CreateInstance(null, "seguimiento.Formulas." + indicador.TipoIndicador.file); //se crea un manejador  op -objeto generico- y un operador generico que permite llamar a las formulas con la cadena del tipo de indiciador: mantenimiento, incremento etc
                    Object             op               = manejador.Unwrap();
                    Type               t                = op.GetType();
                    MethodInfo         operadorPeriodo  = t.GetMethod("Calculo_periodo");  //operador es un metodo generico que refleja la funcionalidad de Calculo periodo
                    MethodInfo         operadorSubtotal = t.GetMethod("Calculo_subtotal"); //operador es un metodo generico que refleja la funcionalidad de Calculo subtotal
                    MethodInfo         operadorTotal    = t.GetMethod("Calculo_total");    //operador es un metodo generico que refleja la funcionalidad de Calculo total
                    decimal            lineaBase        = 0;
                    EjecucionCalculada respuesta        = new EjecucionCalculada();

                    List <object> listadoParaSubtotal = new List <object>();
                    List <object> listadoParaTotal    = new List <object>();
                    string        msg = "";


                    ejecuciones = await controlEjecucion.getFromIndicador(indicador.id);

                    foreach (Ejecucion registro in ejecuciones)
                    {
                        switch (registro.Periodo.tipo)
                        {
                        case "periodo":
                            object[] args = { registro, lineaBase };                          //carga los argumentos en un objeto
                            respuesta = (EjecucionCalculada)operadorPeriodo.Invoke(op, args); //envia los argumentos mediante invoke al metodo Calculo_periodo
                            listadoEjecuciones.Add(respuesta);                                //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida
                            listadoParaSubtotal.Add(respuesta);                               //almacena ejecucón para el calculo del subtotal
                            break;

                        case "subtotal":
                            Object[] argsSubtotal = { registro, listadoParaSubtotal, lineaBase };      //carga los argumentos en un objeto
                            respuesta = (EjecucionCalculada)operadorSubtotal.Invoke(op, argsSubtotal); //envia los argumentos mediante invoke al metodo Calculo_subtotal
                            listadoEjecuciones.Add(respuesta);                                         //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida
                            listadoParaTotal.Add(respuesta);                                           //almacena ejecucón para el calculo del subtotal
                            listadoParaSubtotal.Clear();
                            break;

                        case "Total":
                            object[] argstotal = { registro, listadoParaTotal, lineaBase };      //carga los argumentos en un objeto
                            respuesta = (EjecucionCalculada)operadorTotal.Invoke(op, argstotal); //envia los argumentos mediante invoke al metodo Calculo_total
                            listadoEjecuciones.Add(respuesta);                                   //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida
                            listadoParaTotal.Clear();
                            break;

                        case "lineabase":
                            var lb = registro.ejecutado;
                            if (lb != null)
                            {
                                lb = lb.Replace(" ", "");
                                lb = lb.Replace("%", "");
                                lb = Regex.Replace(lb, "^-$", "");
                                lb = Regex.Replace(lb, "^_$", "");
                                lb = Regex.Replace(lb, "[a-zA-Z^&()<>//:@#$%;+_!¡]", "");
                                lb = Regex.Replace(lb, "^\\.$", "");
                                lb = Regex.Replace(lb, "\\.\\.$", "");
                                lb = Regex.Replace(lb, "\\.", "");
                            }

                            try { lineaBase = lb == "" ? 0 : System.Convert.ToDecimal(lb); }
                            catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; }

                            break;

                        default:

                            break;
                        }
                    }
                }

                foreach (Periodo periodo in periodos)
                {
                    decimal total = 0, calculado = 0;
                    Boolean valida = false;


                    var ejecucionesperiodo =
                        (from ejecucionx in listadoEjecuciones
                         where ejecucionx.Periodo.id == periodo.id
                         select ejecucionx);

                    foreach (EjecucionCalculada calcuada in ejecucionesperiodo)
                    {
                        if ((calcuada.EjecutadoError == null && calcuada.PlaneadoError == null && calcuada.cargado == true) || calcuada.Periodo.tipo != "periodo")
                        {
                            total     = total + calcuada.Indicador.ponderador;
                            calculado = calculado + (calcuada.Calculado / 100) * calcuada.Indicador.ponderador;
                            valida   |= true;
                        }
                    }
                    if (total > 0)
                    {
                        calculado = (calculado / total) * 100;
                    }
                    else
                    {
                        calculado = 0;
                    }

                    EjecucionCategoria resultado = new EjecucionCategoria();
                    //resultado.Id = 1;
                    resultado.Calculado = calculado;
                    //resultado.Categoria = categoriax;
                    resultado.IdCategoria = categoriax.id;
                    resultado.idperiodo   = periodo.id;
                    resultado.Maximo      = total;
                    resultado.Mostrar     = valida;

                    var r = await controlEjecucionCategoria.Crear(resultado);
                }
            }
            return(resp);
        }
        public async Task <IViewComponentResult> InvokeAsync(int itemId = 0)
        {
            EvaluacionsController ControlEvaluacion = new EvaluacionsController(db);


            //--- variables
            List <Indicador> indicadores = new List <Indicador>(); // variable que almacena los indicadores devueltos por la base de datos
            List <object>    listado     = new List <object>();    //variable con toda la informacion a enviar a la vista
            UnidadesdeMedida Unidad      = new UnidadesdeMedida();

            //---------recepcion de parametros
            var idPadre = itemId; //recibe el id padre desde la url


            //-----------consulta los indicadores que pertenecen a esa categoria si no lo logra genera alerta
            indicadores = await db.Indicador.Where(n => n.idCategoria == idPadre).Include(n => n.TipoIndicador).ToListAsync();



            foreach (var indicador in indicadores) // ciclo que se repite para cada indicador encontrado
            {
                //variables para cada indicador
                var ejecuciones = await db.Ejecucion.Where(n => n.idindicador == indicador.id).OrderBy(n => n.Periodo.orden).ToListAsync();

                //var ejecuciones = db.ejecucions.SqlQuery("select * from ejecucions where idindicador = " + indicador.id).ToList();  //Recupera de la base de datos el listado de ejecuciones existentes
                List <object>      listadoEjecuciones  = new List <object>(); //variable con las ejecuciones
                List <object>      listadoParaSubtotal = new List <object>(); //variable con las ejecuciones necesarias para calcular cada subtotal
                List <object>      listadoParaTotal    = new List <object>(); //variable con los subtotales necesarios para calcular el total
                EjecucionCalculada respuesta           = new EjecucionCalculada();
                decimal            lineaBase           = 0;
                string             msg = "";

                //-------------- generacion de un objeto genérico para manejar los diferentes tipos de indicadores
                ObjectHandle manejador        = Activator.CreateInstance(null, "seguimiento.Formulas." + indicador.TipoIndicador.file); //se crea un manejador  op -objeto generico- y un operador generico que permite llamar a las formulas con la cadena del tipo de indiciador: mantenimiento, incremento etc
                Object       op               = manejador.Unwrap();
                Type         t                = op.GetType();
                MethodInfo   operadorPeriodo  = t.GetMethod("Calculo_periodo");  //operador es un metodo generico que refleja la funcionalidad de Calculo periodo
                MethodInfo   operadorSubtotal = t.GetMethod("Calculo_subtotal"); //operador es un metodo generico que refleja la funcionalidad de Calculo subtotal
                MethodInfo   operadorTotal    = t.GetMethod("Calculo_total");    //operador es un metodo generico que refleja la funcionalidad de Calculo total


                //------------------ se definen las evaluaciones a aplicar para cada indicador
                List <Evaluacion> evaluaciones = await ControlEvaluacion.Get(indicador.id, "Indicador");

                foreach (var registro in ejecuciones)
                {
                    switch (registro.Periodo.tipo)
                    {
                    case "periodo":
                        object[] args = { registro, lineaBase };                                                            //carga los argumentos en un objeto
                        respuesta = (EjecucionCalculada)operadorPeriodo.Invoke(op, args);                                   //envia los argumentos mediante invoke al metodo Calculo_periodo
                        listadoEjecuciones.Add(ControlEvaluacion.SetEvaluacion((Unidad.Formato(respuesta)), evaluaciones)); //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida
                        listadoParaSubtotal.Add(respuesta);                                                                 //almacena ejecucón para el calculo del subtotal
                        break;

                    case "subtotal":
                        object[] argsSubtotal = { registro, listadoParaSubtotal, lineaBase };                               //carga los argumentos en un objeto
                        respuesta = (EjecucionCalculada)operadorSubtotal.Invoke(op, argsSubtotal);                          //envia los argumentos mediante invoke al metodo Calculo_subtotal
                        listadoEjecuciones.Add(ControlEvaluacion.SetEvaluacion((Unidad.Formato(respuesta)), evaluaciones)); //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida
                        listadoParaTotal.Add(respuesta);                                                                    //almacena ejecucón para el calculo del subtotal
                        listadoParaSubtotal.Clear();
                        break;

                    case "Total":
                        object[] argstotal = { registro, listadoParaTotal, lineaBase };                                     //carga los argumentos en un objeto
                        respuesta = (EjecucionCalculada)operadorTotal.Invoke(op, argstotal);                                //envia los argumentos mediante invoke al metodo Calculo_total
                        listadoEjecuciones.Add(ControlEvaluacion.SetEvaluacion((Unidad.Formato(respuesta)), evaluaciones)); //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida
                        listadoParaTotal.Clear();
                        break;

                    case "lineabase":

                        var lb = registro.ejecutado;
                        if (lb != null)
                        {
                            lb = lb.Replace("%", "");
                            lb = Regex.Replace(lb, "^-$", "");
                            lb = Regex.Replace(lb, "^_$", "");
                            lb = Regex.Replace(lb, "[a-zA-Z^&()<>//:@#$%;+_!¡]", "");
                        }
                        try { lineaBase = string.IsNullOrEmpty(lb) ? 0 : System.Convert.ToDecimal(lb); }
                        catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; }
                        catch (System.FormatException) { msg = "el valor ejecutado genera desbordamiento"; }
                        catch (System.ArgumentNullException) { msg = "el valor ejecutado genera desbordamiento"; }



                        object[] argslineabase = { registro, (decimal)10.00 };                     //carga los argumentos en un objeto
                        respuesta = (EjecucionCalculada)operadorPeriodo.Invoke(op, argslineabase); //envia los argumentos mediante invoke al metodo Calculo_periodo
                        listadoEjecuciones.Add(Unidad.Formato(respuesta));                         //almacena cada ejecucionCalcuada en la lista

                        break;

                    default:

                        object[] argsotros = { registro, (decimal)10.00 };                     //carga los argumentos en un objeto
                        respuesta = (EjecucionCalculada)operadorPeriodo.Invoke(op, argsotros); //envia los argumentos mediante invoke al metodo Calculo_periodo
                        listadoEjecuciones.Add(Unidad.Formato(respuesta));                     //almacena cada ejecucionCalcuada en la lista

                        break;
                    }
                }

                object[] indicadorConejecuciones = { indicador, listadoEjecuciones }; //objeto que unifica los datos del inidcaodr y sus ejecuciones
                listado.Add(indicadorConejecuciones);                                 //almacena el indicador y las ejecuciuones en el listado a enviar a la vista
            }
            ViewBag.listado = listado;
            return(View());
        }
        private EjecucionCalculada FormatoPorcentajeSinCalculo(EjecucionCalculada ejecucion)
        {
            decimal valEjecutado = 0, valPlaneado = 0;
            string  msg = "";

            if (ejecucion.ejecutado != null)
            {
                ejecucion.ejecutado = ejecucion.ejecutado.Replace(',', '.');
            }
            if (ejecucion.planeado != null)
            {
                ejecucion.planeado = ejecucion.planeado.Replace(',', '.');
            }

            try { decimal.TryParse(ejecucion.ejecutado, NumberStyles.Any, CultureInfo.InvariantCulture, out valEjecutado); }
            catch (System.OverflowException) { ejecucion.EjecutadoError = ejecucion.EjecutadoError + "el valor ejecutado genera desbordamiento, "; }
            catch (System.FormatException) { ejecucion.EjecutadoError = ejecucion.EjecutadoError + "el valor ejecutado tiene un formato incorrecto, "; }
            catch (System.ArgumentNullException) { ejecucion.EjecutadoError = ejecucion.EjecutadoError + "ejecutado Nulo"; }

            try { decimal.TryParse(ejecucion.planeado, NumberStyles.Any, CultureInfo.InvariantCulture, out valPlaneado); }
            catch (System.OverflowException) { ejecucion.PlaneadoError = ejecucion.PlaneadoError + "el valor planeado genera desbordamiento, "; }
            catch (System.FormatException) { ejecucion.PlaneadoError = ejecucion.PlaneadoError + "el valor planeado tiene un formato incorrecto, "; }
            catch (System.ArgumentNullException) { ejecucion.PlaneadoError = ejecucion.PlaneadoError + "planeado Nulo, "; }



            if (ejecucion.planeado != "" && ejecucion.planeado != null)
            {
                if (ejecucion.PlaneadoError == null)
                {
                    ejecucion.planeado = string.Format("{0:0.00}%", valPlaneado);     //agrega el signo % a todos los planeados no nulos con unidad porcentaje
                }
            }
            else
            {
                ejecucion.planeado = "";
            }



            switch (ejecucion.Periodo.tipo)
            {
            case "periodo":


                //estilo de los calculado en los periodos tipo porcentaje
                if (ejecucion.cargado && ejecucion.Periodo.cargado)
                {
                    ejecucion.CalculadoDisplay = "";
                }

                //estilo de los ejecutados en los periodos tipo porcentaje
                if (ejecucion.ejecutado != "" && ejecucion.ejecutado != null)
                {
                    if (ejecucion.EjecutadoError == null)
                    {
                        ejecucion.ejecutado = string.Format("{0:0.00}%", valEjecutado);         //agrega el signo % a todos los planeados no nulos con unidad porcentaje
                    }
                }
                else
                {
                    ejecucion.ejecutado = "";
                }

                break;

            case "subtotal":
                //estilo de los calculado en los subtotales tipo porcentaje
                if (ejecucion.Periodo.cargado)
                {
                    ejecucion.CalculadoDisplay = "";
                }

                //condicional para los valores ejecutados total y subtotal si hay un valor ejecutado pero no se ha activado el periodo no se debe mostrat
                if (ejecucion.ejecutado != "" && ejecucion.Periodo.cargado)
                {
                    ejecucion.ejecutado = string.Format("{0:0.00}%", valEjecutado);         //agrega el signo % a todos los planeados no nulos con unidad porcentaje
                }
                else
                {
                    ejecucion.ejecutado = "";
                }

                break;

            case "Total":


                //estilo de los calculado en los totales tipo porcentaje
                if (ejecucion.Periodo.cargado)
                {
                    ejecucion.CalculadoDisplay = "";
                }

                //condicional para los valores ejecutados total y subtotal si hauy un valor ejecutado pero no se ha activado el periodo no se debe mostrat
                if (ejecucion.ejecutado != "" && ejecucion.Periodo.cargado)
                {
                    ejecucion.ejecutado = string.Format("{0:0.00}%", valEjecutado);         //agrega el signo % a todos los planeados no nulos con unidad porcentaje
                }
                else
                {
                    ejecucion.ejecutado = "";
                }


                break;

            default:
                break;
            }

            if (ejecucion.EjecutadoError != null || ejecucion.PlaneadoError != null)
            {
                ejecucion.CalculadoDisplay = "";
            }

            return(ejecucion);
        }