public async Task <IViewComponentResult> InvokeAsync(String numero, String id, String periodo, string alto, string ancho, string titulo, string tipo)
        {
            EjecucionCategoriaController controlEjecucionCategoria = new EjecucionCategoriaController(db, userManager);

            ViewBag.indicadores = false;

            var Numero      = Int32.Parse(numero);
            var IdCategoria = Int32.Parse(id);
            var IdPeriodo   = Int32.Parse(periodo);

            List <EjecucionCategoria> ejecuciones = await controlEjecucionCategoria.GetHijosFromCatIDPerID(IdCategoria, IdPeriodo);

            ViewBag.Numero  = Numero;
            ViewBag.alto    = alto;
            ViewBag.ancho   = ancho;
            ViewBag.titulo  = titulo;
            ViewBag.periodo = periodo;
            ViewBag.tipo    = tipo;

            if (ejecuciones.Count == 0)
            {
                ViewBag.indicadores = true;
                ViewBag.itemId      = IdCategoria;
            }

            return(View(ejecuciones));
        }
Пример #2
0
        public async Task <IViewComponentResult> InvokeAsync(String numero, String id, String periodo, string alto, string ancho, string titulo, string tipo)
        {
            EjecucionCategoriaController controlEjecucionCategoria = new EjecucionCategoriaController(db, userManager);
            EvaluacionsController        controlEvaluacion         = new EvaluacionsController(db);


            var Numero    = Int32.Parse(numero);
            var Id        = Int32.Parse(id);
            var IdPeriodo = Int32.Parse(periodo);

            var periodoO = await db.Periodo.Where(n => n.id == IdPeriodo).FirstOrDefaultAsync();


            List <Object> respuesta = new List <object>();

            List <EjecucionCategoria> datos = new List <EjecucionCategoria>();

            // var numero = Int32.Parse(Request["posicion"]);
            // var id = Int32.Parse(Request["id"]);
            // var Periodo = Int32.Parse(Request["periodo"]);

            if (periodoO.tipo == "Total")
            {
                datos = await controlEjecucionCategoria.GetFromCategoriaYTotal(Id, IdPeriodo);
            }
            else
            {
                datos = await controlEjecucionCategoria.GetFromCategoriaYSubtotal(Id, IdPeriodo);
            }

            //======================================== obtiene los semanoforos===============================
            List <Evaluacion> evaluaciones = await controlEvaluacion.Get(Id, "Categotia");

            var semaforos = controlEvaluacion.SetEvaluacionCategoria(datos, evaluaciones);

            //======================================== obtiene los semanoforos===============================
            int ndato = 0;

            foreach (EjecucionCategoria dato in datos)
            {
                object[] EjecucionconSemaforo = { dato, semaforos[ndato] };
                respuesta.Add(EjecucionconSemaforo);
                ndato++;
            }


            ViewBag.Numero      = Numero;
            ViewBag.alto        = alto;
            ViewBag.ancho       = ancho;
            ViewBag.titulo      = titulo;
            ViewBag.periodo     = periodo;
            ViewBag.tipo        = tipo;
            ViewBag.Ejecuciones = respuesta;
            return(View());
        }
Пример #3
0
        public async Task <string> Calculo_total_categoria(Configuracion configuracion)
        {
            //controladores
            EjecucionCategoriaController controlEjecucionCategoria = new EjecucionCategoriaController(db, userManager);                              //Instancia controlador de EjecucionesCategorias
            NivelsController             controlnivel      = new NivelsController(db, userManager);                                                  //Instancia controlador de Niveles
            CategoriasController         controlCategorias = new CategoriasController(db, userManager);                                              //Instancia controlador de Categorias
            PeriodosController           controlPeriodos   = new PeriodosController(db, userManager);                                                //Instancia controlador de Periodos

            // variables
            List <Periodo> periodos = await controlPeriodos.getAll();                           //Obtiene los periodos

            Nivel nivelMaximo = await controlnivel.getMain();                                   //obtienen la categoria principal

            int nivelaOperar    = System.Convert.ToInt32(configuracion.CalculoNivel);           //obtiene la categoria de la que se tomaran los indicadores a operar
            int MinNivelaOperar = nivelaOperar;

            //------------------------------------------------------------inicia con las categorias de l nivel en el que estan los indicadores

            var categoriasz = await controlCategorias.getFromNivel(nivelaOperar);               //obtiene categorias de menor nivel

            controlEjecucionCategoria.BorrarTodo();                                             //borra la base de datos
            var resp = await Calcular_categoria_menor(categoriasz, periodos);                   // calcula la categoria de menor nivel

            nivelaOperar = nivelaOperar - 1;

            while (nivelaOperar >= nivelMaximo.numero)
            {
                categoriasz = await controlCategorias.getFromNivel(nivelaOperar);
                await Calcular_categorias_nivel_n(categoriasz, periodos, MinNivelaOperar);

                nivelaOperar = nivelaOperar - 1;
            }



            var carro = "mio";

            return(carro);
        }
Пример #4
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);
        }