Ejemplo n.º 1
0
        public async Task <bool> CrearFaltantes()
        {
            PeriodosController   PeriodoControl   = new PeriodosController(db, userManager);
            IndicadorsController IndicadorControl = new IndicadorsController(db, userManager);

            var periodos = await PeriodoControl.getAll();

            var indicadores = await IndicadorControl.GetAll();

            bool respuesta = false;

            foreach (Periodo periodo in periodos)
            {
                foreach (Indicador indicador in indicadores)
                {
                    Ejecucion ejecucionxy = await GetFromIndicadorPeriodo(indicador.id, periodo.id);

                    if (ejecucionxy == null)
                    {
                        Ejecucion ejecucionnew = new Ejecucion();
                        ejecucionnew.idindicador = indicador.id;
                        ejecucionnew.idperiodo   = periodo.id;

                        await db.Ejecucion.AddAsync(ejecucionnew);

                        await db.SaveChangesAsync();

                        respuesta = true;
                    }
                }
            }

            return(respuesta);
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> Deletepop(int id)
        {
            IndicadorsController     controlIndicador     = new IndicadorsController(db, userManager);
            ConfiguracionsController controlConfiguracion = new ConfiguracionsController(db, userManager);

            NotaIndicador nota = await db.NotaIndicador.FindAsync(id);

            Indicador indicador = await controlIndicador.getFromId(nota.Indicador.id);


            var userFull = await userManager.FindByEmailAsync(User.Identity.Name);

            var notasE = User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Nota.Editar" && c.Value == "1"));
            var super  = User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Super" && c.Value == "1"));



            ViewBag.editar        = controlConfiguracion.Editable(userFull.IDDependencia, indicador.Categoria, notasE, super);
            ViewBag.visible       = true;
            ViewBag.configuracion = await controlConfiguracion.Get();

            ViewBag.indicador = indicador;
            ViewBag.userFull  = userFull;


            return(View(nota));
        }
Ejemplo n.º 3
0
        public async Task <ActionResult> Indicadorpop(int indicadorid = 0, string tipo = "", string mensaje = "")
        {
            IndicadorsController     controlIndicador     = new  IndicadorsController(db, userManager);
            ResponsablesController   controlResponsable   = new ResponsablesController(db, userManager);
            ConfiguracionsController controlConfiguracion = new ConfiguracionsController(db, userManager);

            int ID = Convert.ToInt32(indicadorid);

            Indicador indicador = await controlIndicador.getFromId(ID);


            if (User.Identity.Name != null)
            {
                var userFull = await userManager.FindByEmailAsync(User.Identity.Name);

                // obtiene las categorias
                var idsx = controlResponsable.GetAllIdsFromResponsable(userFull.IDDependencia);

                var notasE = User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Nota.Editar" && c.Value == "1"));
                var super  = User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Super" && c.Value == "1"));



                ViewBag.tipo          = tipo;
                ViewBag.mensaje       = mensaje;
                ViewBag.editar        = controlConfiguracion.Editable(userFull.IDDependencia, indicador.Categoria, notasE, super);
                ViewBag.visible       = true;
                ViewBag.configuracion = await controlConfiguracion.Get();

                ViewBag.indicador = indicador;
                ViewBag.userFull  = userFull;

                ViewBag.PermisoResponsable = idsx;
            }
            else
            {
                Configuracion config = await controlConfiguracion.Get();

                ViewBag.tipo    = tipo;
                ViewBag.mensaje = mensaje;


                ViewBag.editar             = false;
                ViewBag.userFull           = false;
                ViewBag.configuracion      = config;
                ViewBag.visible            = config.libre;
                ViewBag.PermisoResponsable = false;
            }


            var notas = await db.NotaIndicador.Include(n => n.Indicador).Include(n => n.User).Where(n => n.IdIndicador == ID).OrderByDescending(n => n.FechaCreacion).ToListAsync();

            return(View(notas.ToList()));
        }
        public async Task <int> NumeroIndicadores(int idcategoria)
        {
            int respuesta = 0;


            IndicadorsController controlIndicador = new IndicadorsController(db, userManager);

            List <Categoria> categorias = await CategoriasMenoresList(idcategoria);


            List <Indicador> indicadores = await controlIndicador.getFromCategorias(categorias);

            respuesta = indicadores.Where(n => n.ponderador > 0).Count();


            return(respuesta);
        }
Ejemplo n.º 5
0
        public async Task <decimal> CategoriaPonderador(int categoria)
        {
            CategoriasController controlCategoria = new CategoriasController(db, userManager);
            IndicadorsController controlIndicador = new IndicadorsController(db, userManager);
            decimal ponderador = 0;
            Dictionary <int, int> categorias = await controlCategoria.CategoriasMenores(categoria);

            foreach (var categ in categorias)
            {
                List <Indicador> indicadores = await controlIndicador.getFromCategoria(categ.Key);

                foreach (Indicador ind in indicadores)
                {
                    ponderador = ponderador + ind.ponderador;
                }
            }

            return(ponderador);
        }
Ejemplo n.º 6
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 <ActionResult> CategoriaInfo(String numero, String id, String periodo, string alto, string ancho, string titulo, string tipo)

        {
            ConfiguracionsController controlConfiguración = new ConfiguracionsController(db, userManager);
            CategoriasController     controlCategoria     = new CategoriasController(db, userManager);
            IndicadorsController     controlIndicador     = new IndicadorsController(db, userManager);
            PeriodosController       controlPeriodo       = new PeriodosController(db, userManager);


            Configuracion config = await controlConfiguración.Get();

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



            Categoria categoria = await controlCategoria.getFromId(IdCategoria);

            //hijos
            var hijos = await controlCategoria.getFromCategoria(categoria.id);

            if (hijos.Count > 0)
            {
                ViewBag.nombreHijos = hijos[0].Nivel.nombre;
                ViewBag.numeroHijos = hijos.Count;
            }



            //ponderador
            if (config.PonderacionTipo == "PonderacionAbsoluta")
            {
                PonderacionAbsoluta pond = new PonderacionAbsoluta(db, userManager);
                categoria.Ponderador = await pond.CategoriaPonderador(categoria.id); //80
            }

            //indicadores
            var indi = await controlIndicador.getFromCategoria(categoria.id);

            var indicadores = indi.Where(n => n.ponderador > 0);

            if (indicadores.Count() > 0)
            {
                ViewBag.numeroIndicadores = indicadores.Count();
            }
            else
            {
                ViewBag.numeroIndicadores = await controlCategoria.NumeroIndicadores(categoria.id); //81
            }

            //numero de indicadores en cada evaluacion del último periodo reportado
            if (IdPeriodo != 0)
            {
                // var LastPeriodoReport = COntrolPeriodos.UltimoPeriodoRepFromSubtotal(IdPeriodo);

                ViewBag.periodo = await controlPeriodo.GetFromId(IdPeriodo);

                var periodoSubtotal = await controlPeriodo.GetSubtotalFromPeriodo(IdPeriodo);

                if (periodoSubtotal > 0)
                {
                    ViewBag.periodoSubtotal = await db.Periodo.FindAsync(periodoSubtotal);
                }
            }



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


            return(View(categoria));
        }