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