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); }
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); }
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; } }
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; } }
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(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)); }