示例#1
0
        public void InsertsPeriodos()
        {
            PeriodosController   controller = new PeriodosController();
            ApplicationDbContext db         = new ApplicationDbContext();
            Periodo periodoPrueba           = new Periodo()
            {
                Anio = 2018, Cuatrimestre = 3
            };

            controller.Create(periodoPrueba);
            periodoPrueba = db.Periodo.Where(g => g.Codigo == "2018-C2").First();
            Assert.IsTrue(periodoPrueba != null);
            db.Periodo.Remove(periodoPrueba);
        }
示例#2
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);
        }
示例#3
0
        private string obtenerPeriodo(string codigoPeriodo)
        {
            try
            {
                PeriodosController controller = new PeriodosController();

                List <PeriodosModel> periodos = controller.ConnectGET();

                foreach (PeriodosModel temp in periodos)
                {
                    if (temp.Numero.Equals(codigoPeriodo))
                    {
                        return(temp.FechaInicial.ToShortDateString() + " - " + temp.FechaFinal.ToShortDateString());
                    }
                }

                return("Periodo No encontrado");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#4
0
        private string obtenerCodigoPeriodo(string nombrePerido)
        {
            try
            {
                PeriodosController   controller = new PeriodosController();
                List <PeriodosModel> periodos   = controller.ConnectGET();

                foreach (PeriodosModel temp in periodos)
                {
                    string t = temp.FechaInicial.ToShortDateString() + " - " + temp.FechaFinal.ToShortDateString();
                    if (t.Equals(nombrePerido))
                    {
                        return(temp.Numero);
                    }
                }

                return("Sin Codigo");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#5
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);
        }
示例#6
0
        public async Task <IViewComponentResult> InvokeAsync(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)
            {
                var nombreHijos = hijos[0].Nivel.nombre;

                nombreHijos = nombreHijos.Substring(nombreHijos.Length - 1) == "r" ? nombreHijos + "e" : nombreHijos;

                ViewBag.nombreHijos = nombreHijos;
                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));
        }