public async Task <IActionResult> DetailsPop(int id, string tipo = "", string mensaje = "") { ConfiguracionsController configuracionControl = new ConfiguracionsController(db, userManager); EvaluacionsController controlEvaluacion = new EvaluacionsController(db); UnidadesdeMedida Unidad = new UnidadesdeMedida(); EjecucionCalculada respuestaFormato = new EjecucionCalculada(); Ejecucion ejec = await db.Ejecucion.Where(n => n.id == id).FirstOrDefaultAsync(); if (ejec != null) { //-------------------------------------------------------identificar si un usuario tiene acceso a editar una ejecucion if (User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Ejecucion.Editar" && c.Value == "1") || (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Planeacion.Editar" && c.Value == "1"))) { ViewBag.MostrarBotonEditarEjecucion = await configuracionControl.PermisoMostrarEditarEjecucion(User, ejec); } else { ViewBag.MostrarBotonEditarEjecucion = false; } //-------------------------------------------------------identificar si un usuario tiene acceso a editar una ejecucion EjecucionCalculada respuesta = new EjecucionCalculada(); //-------------- generacion de un objeto genérico para manejar los diferentes tipos de indicadores ObjectHandle manejador = Activator.CreateInstance(null, "seguimiento.Formulas." + ejec.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 Periodo periodoLineaBase = db.Periodo.Where(n => n.tipo == "lineabase").FirstOrDefault(); Ejecucion lineaBase = db.Ejecucion.Where(n => n.idperiodo == periodoLineaBase.id && n.idindicador == ejec.idindicador).FirstOrDefault(); List <Evaluacion> evaluaciones = await controlEvaluacion.Get(ejec.idindicador, "Indicador"); object[] args = { ejec, null }; //carga los argumentos en un objeto var respuesta2 = (EjecucionCalculada)operadorPeriodo.Invoke(op, args); //envia los argumentos mediante invoke al metodo Calculo_periodo respuesta = respuesta2; respuestaFormato = controlEvaluacion.SetEvaluacion(Unidad.Formato(respuesta), evaluaciones); //almacena cada ejecucionCalcuada en la lista pero antes ajusta el formato con la clase unidadess de medida ViewBag.Adjuntos = await db.EjecucionAdjunto.Where(n => n.idejecucion == ejec.id).ToListAsync(); ViewBag.tipo = tipo; ViewBag.mensaje = mensaje; } return(View(respuestaFormato)); }
public EjecucionCalculada SetEvaluacion(EjecucionCalculada ejecucion, List <Evaluacion> semaforos) { EvaluacionDisplay eval = new EvaluacionDisplay(); eval.Color = ""; eval.texto = ""; if ((ejecucion.EjecutadoError == null && ejecucion.PlaneadoError == null) || ejecucion.Periodo.tipo != "periodo") { foreach (var semaforox in semaforos) { if (ejecucion.Calculado >= semaforox.Minimo && ejecucion.Calculado <= semaforox.Maximo) { eval.Color = semaforox.Color; eval.texto = semaforox.Nombre; } } } ejecucion.Evaluacion = eval; return(ejecucion); }
public EjecucionCalculada Formato(EjecucionCalculada ejecucionOriginal) { EjecucionCalculada ejecucion = new EjecucionCalculada(); ejecucion = ejecucionOriginal.Clone(); // se clona el objeto para evitar editar la ejecucion original switch (ejecucion.Indicador.unidad) { case "Porcentaje": return(FormatoPorcentaje(ejecucion)); case "Numero": return(FormatoNumero(ejecucion)); case "NumeroSinCalculo": return(FormatoNumeroSinCalculo(ejecucion)); case "PorcentajeSinCalculo": return(FormatoPorcentajeSinCalculo(ejecucion)); default: return(FormatoNumero(ejecucion)); } }
public Object Calculo_subtotal(Ejecucion ejecucion, List <object> listadoParaSubtotal, decimal lineaBase) { decimal sumaPlaneado = 0, sumaEjecutados = 0, valEjecutado = 0, valPlaneado = 0, valCalculado = 0; int cuenta = 0; EjecucionCalculada respuesta = new EjecucionCalculada(); string msg = ""; foreach (Ejecucion calculada in listadoParaSubtotal) { valEjecutado = 0; valPlaneado = 0; if (calculada.ejecutado != null) { calculada.ejecutado = calculada.ejecutado.Replace(',', '.'); } if (calculada.planeado != null) { calculada.planeado = calculada.planeado.Replace(',', '.'); } try { decimal.TryParse(calculada.ejecutado, NumberStyles.Any, CultureInfo.InvariantCulture, out valEjecutado); } catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; } catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; } catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; } try { decimal.TryParse(calculada.planeado, NumberStyles.Any, CultureInfo.InvariantCulture, out valPlaneado); } catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; } catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; } catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; } sumaPlaneado = sumaPlaneado + valPlaneado; if (calculada.cargado == true && calculada.Periodo.cargado == true) { sumaEjecutados = sumaEjecutados + valEjecutado; } cuenta++; } if (cuenta > 0) { if (sumaPlaneado != lineaBase) { valCalculado = (sumaEjecutados - lineaBase) / (sumaPlaneado - lineaBase); if (valCalculado > 1) { valCalculado = 1; } if (valCalculado < 0) { valCalculado = 0; } } else if (sumaPlaneado == lineaBase) { lineaBase = sumaPlaneado + 10; valCalculado = (sumaEjecutados - lineaBase) / (sumaPlaneado - lineaBase); if (valCalculado > 1) { valCalculado = 1; } if (valCalculado < 0) { valCalculado = 0; } } else { valCalculado = 0; } } respuesta.id = ejecucion.id; respuesta.FechaActualizacion = ejecucion.FechaActualizacion; respuesta.idindicador = ejecucion.idindicador; respuesta.Indicador = ejecucion.Indicador; respuesta.idperiodo = ejecucion.idperiodo; respuesta.Periodo = ejecucion.Periodo; respuesta.cargado = ejecucion.cargado; respuesta.ejecutado = sumaEjecutados.ToString(); respuesta.planeado = sumaPlaneado.ToString(); respuesta.Nota = ejecucion.Nota; respuesta.adjunto = ejecucion.adjunto; respuesta.Mensaje = msg; respuesta.Calculado = (valCalculado * 100); if (respuesta.Calculado > 100) { respuesta.Calculado = 100; } if (respuesta.Calculado < 0) { respuesta.Calculado = 0; } return((Object)respuesta); }
public EjecucionCalculada Calculo_total(Ejecucion ejecucion, List <object> listadoParaTotal, decimal lineaBase) { decimal valEjecutado = 0, valPlaneado = 0, valCalculado = 0, sumaPlaneado = 0, sumaEjecutados = 0; int cuenta = 0; EjecucionCalculada respuesta = new EjecucionCalculada(); string msg = ""; foreach (EjecucionCalculada calculada in listadoParaTotal) { valEjecutado = 0; valPlaneado = 0; try { valEjecutado = System.Convert.ToDecimal(calculada.ejecutado); } catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; } catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; } catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; } try { valPlaneado = System.Convert.ToDecimal(calculada.planeado); } catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; } catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; } catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; } if (calculada.Periodo.cargado == true) { valCalculado = calculada.Calculado + valCalculado; } cuenta++; } if (cuenta > 0) { valCalculado = valCalculado / cuenta; if (valCalculado > 100) { valCalculado = 100; } if (valCalculado < 0) { valCalculado = 0; } } respuesta.id = ejecucion.id; respuesta.FechaActualizacion = ejecucion.FechaActualizacion; respuesta.idindicador = ejecucion.idindicador; respuesta.Indicador = ejecucion.Indicador; respuesta.idperiodo = ejecucion.idperiodo; respuesta.Periodo = ejecucion.Periodo; respuesta.cargado = ejecucion.cargado; respuesta.ejecutado = ""; //sumaEjecutados.ToString(); respuesta.planeado = ""; //sumaPlaneado.ToString(); respuesta.Nota = ejecucion.Nota; respuesta.adjunto = ejecucion.adjunto; respuesta.Mensaje = msg; respuesta.Calculado = (valCalculado); if (respuesta.Calculado > 100) { respuesta.Calculado = 100; } if (respuesta.Calculado < 0) { respuesta.Calculado = 0; } return(respuesta); }
//eta función toma un modelo ejecucion y agrega el valor calculado y un mensaje con posibles errores y los almacena en un tipo de dato ejecucionCalculada public EjecucionCalculada Calculo_periodo(Ejecucion ejecucion, decimal lineaBase) { decimal valEjecutado = 0, valPlaneado = 0, valCalculado; string msg = ""; EjecucionCalculada respuesta = new EjecucionCalculada(); if (ejecucion.ejecutado != null) { ejecucion.ejecutado = ejecucion.ejecutado.Replace(',', '.'); } if (ejecucion.planeado != null) { ejecucion.planeado = ejecucion.planeado.Replace(',', '.'); } //conversión a # de los valores ejecutados y planeados try { decimal.TryParse(ejecucion.ejecutado, NumberStyles.Any, CultureInfo.InvariantCulture, out valEjecutado); } catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; } catch (System.FormatException) { msg = "el valor ejecutado tiene un formato incorrecto"; } catch (System.ArgumentNullException) { msg = "ejecutado Nulo"; } //conversión a # de los valores ejecutados y planeados try { decimal.TryParse(ejecucion.planeado, NumberStyles.Any, CultureInfo.InvariantCulture, out valPlaneado); } catch (System.OverflowException) { msg = "el valor planeado genera desbordamiento"; } catch (System.FormatException) { msg = "el valor planeado tiene un formato incorrecto"; } catch (System.ArgumentNullException) { msg = "planeado Nulo"; } //mensaje de no error if (msg == "") { //evita planeados negativos y 0 para evitar divisiones por 0, si es aso genera mensaje de error if (valPlaneado == lineaBase) { msg = "Se está tomando un Lb de " + (valPlaneado + 10); lineaBase = valPlaneado + 10; valCalculado = (((valEjecutado - lineaBase) / (valPlaneado - lineaBase)) * 100); } else { //realiza el calculo del valor a devolver, siempre en porcentaje valCalculado = (((valEjecutado - lineaBase) / (valPlaneado - lineaBase)) * 100); } respuesta.Calculado = valCalculado; } if (respuesta.Calculado > 100) { respuesta.Calculado = 100; } if (respuesta.Calculado < 0) { respuesta.Calculado = 0; } respuesta.id = ejecucion.id; respuesta.FechaActualizacion = ejecucion.FechaActualizacion; respuesta.idindicador = ejecucion.idindicador; respuesta.Indicador = ejecucion.Indicador; respuesta.idperiodo = ejecucion.idperiodo; respuesta.Periodo = ejecucion.Periodo; respuesta.cargado = ejecucion.cargado; respuesta.ejecutado = ejecucion.ejecutado; respuesta.Nota = ejecucion.Nota; respuesta.adjunto = ejecucion.adjunto; respuesta.Mensaje = msg; respuesta.planeado = ejecucion.planeado; return(respuesta); }
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(int itemId = 0) { EvaluacionsController ControlEvaluacion = new EvaluacionsController(db); //--- variables List <Indicador> indicadores = new List <Indicador>(); // variable que almacena los indicadores devueltos por la base de datos List <object> listado = new List <object>(); //variable con toda la informacion a enviar a la vista UnidadesdeMedida Unidad = new UnidadesdeMedida(); //---------recepcion de parametros var idPadre = itemId; //recibe el id padre desde la url //-----------consulta los indicadores que pertenecen a esa categoria si no lo logra genera alerta indicadores = await db.Indicador.Where(n => n.idCategoria == idPadre).Include(n => n.TipoIndicador).ToListAsync(); foreach (var indicador in indicadores) // ciclo que se repite para cada indicador encontrado { //variables para cada indicador var ejecuciones = await db.Ejecucion.Where(n => n.idindicador == indicador.id).OrderBy(n => n.Periodo.orden).ToListAsync(); //var ejecuciones = db.ejecucions.SqlQuery("select * from ejecucions where idindicador = " + indicador.id).ToList(); //Recupera de la base de datos el listado de ejecuciones existentes List <object> listadoEjecuciones = new List <object>(); //variable con las ejecuciones List <object> listadoParaSubtotal = new List <object>(); //variable con las ejecuciones necesarias para calcular cada subtotal List <object> listadoParaTotal = new List <object>(); //variable con los subtotales necesarios para calcular el total EjecucionCalculada respuesta = new EjecucionCalculada(); decimal lineaBase = 0; string msg = ""; //-------------- 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 //------------------ se definen las evaluaciones a aplicar para cada indicador List <Evaluacion> evaluaciones = await ControlEvaluacion.Get(indicador.id, "Indicador"); foreach (var 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(ControlEvaluacion.SetEvaluacion((Unidad.Formato(respuesta)), evaluaciones)); //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(ControlEvaluacion.SetEvaluacion((Unidad.Formato(respuesta)), evaluaciones)); //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(ControlEvaluacion.SetEvaluacion((Unidad.Formato(respuesta)), evaluaciones)); //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 = Regex.Replace(lb, "^-$", ""); lb = Regex.Replace(lb, "^_$", ""); lb = Regex.Replace(lb, "[a-zA-Z^&()<>//:@#$%;+_!¡]", ""); } try { lineaBase = string.IsNullOrEmpty(lb) ? 0 : System.Convert.ToDecimal(lb); } catch (System.OverflowException) { msg = "el valor ejecutado genera desbordamiento"; } catch (System.FormatException) { msg = "el valor ejecutado genera desbordamiento"; } catch (System.ArgumentNullException) { msg = "el valor ejecutado genera desbordamiento"; } object[] argslineabase = { registro, (decimal)10.00 }; //carga los argumentos en un objeto respuesta = (EjecucionCalculada)operadorPeriodo.Invoke(op, argslineabase); //envia los argumentos mediante invoke al metodo Calculo_periodo listadoEjecuciones.Add(Unidad.Formato(respuesta)); //almacena cada ejecucionCalcuada en la lista break; default: object[] argsotros = { registro, (decimal)10.00 }; //carga los argumentos en un objeto respuesta = (EjecucionCalculada)operadorPeriodo.Invoke(op, argsotros); //envia los argumentos mediante invoke al metodo Calculo_periodo listadoEjecuciones.Add(Unidad.Formato(respuesta)); //almacena cada ejecucionCalcuada en la lista break; } } object[] indicadorConejecuciones = { indicador, listadoEjecuciones }; //objeto que unifica los datos del inidcaodr y sus ejecuciones listado.Add(indicadorConejecuciones); //almacena el indicador y las ejecuciuones en el listado a enviar a la vista } ViewBag.listado = listado; return(View()); }
private EjecucionCalculada FormatoPorcentajeSinCalculo(EjecucionCalculada ejecucion) { decimal valEjecutado = 0, valPlaneado = 0; string msg = ""; if (ejecucion.ejecutado != null) { ejecucion.ejecutado = ejecucion.ejecutado.Replace(',', '.'); } if (ejecucion.planeado != null) { ejecucion.planeado = ejecucion.planeado.Replace(',', '.'); } try { decimal.TryParse(ejecucion.ejecutado, NumberStyles.Any, CultureInfo.InvariantCulture, out valEjecutado); } catch (System.OverflowException) { ejecucion.EjecutadoError = ejecucion.EjecutadoError + "el valor ejecutado genera desbordamiento, "; } catch (System.FormatException) { ejecucion.EjecutadoError = ejecucion.EjecutadoError + "el valor ejecutado tiene un formato incorrecto, "; } catch (System.ArgumentNullException) { ejecucion.EjecutadoError = ejecucion.EjecutadoError + "ejecutado Nulo"; } try { decimal.TryParse(ejecucion.planeado, NumberStyles.Any, CultureInfo.InvariantCulture, out valPlaneado); } catch (System.OverflowException) { ejecucion.PlaneadoError = ejecucion.PlaneadoError + "el valor planeado genera desbordamiento, "; } catch (System.FormatException) { ejecucion.PlaneadoError = ejecucion.PlaneadoError + "el valor planeado tiene un formato incorrecto, "; } catch (System.ArgumentNullException) { ejecucion.PlaneadoError = ejecucion.PlaneadoError + "planeado Nulo, "; } if (ejecucion.planeado != "" && ejecucion.planeado != null) { if (ejecucion.PlaneadoError == null) { ejecucion.planeado = string.Format("{0:0.00}%", valPlaneado); //agrega el signo % a todos los planeados no nulos con unidad porcentaje } } else { ejecucion.planeado = ""; } switch (ejecucion.Periodo.tipo) { case "periodo": //estilo de los calculado en los periodos tipo porcentaje if (ejecucion.cargado && ejecucion.Periodo.cargado) { ejecucion.CalculadoDisplay = ""; } //estilo de los ejecutados en los periodos tipo porcentaje if (ejecucion.ejecutado != "" && ejecucion.ejecutado != null) { if (ejecucion.EjecutadoError == null) { ejecucion.ejecutado = string.Format("{0:0.00}%", valEjecutado); //agrega el signo % a todos los planeados no nulos con unidad porcentaje } } else { ejecucion.ejecutado = ""; } break; case "subtotal": //estilo de los calculado en los subtotales tipo porcentaje if (ejecucion.Periodo.cargado) { ejecucion.CalculadoDisplay = ""; } //condicional para los valores ejecutados total y subtotal si hay un valor ejecutado pero no se ha activado el periodo no se debe mostrat if (ejecucion.ejecutado != "" && ejecucion.Periodo.cargado) { ejecucion.ejecutado = string.Format("{0:0.00}%", valEjecutado); //agrega el signo % a todos los planeados no nulos con unidad porcentaje } else { ejecucion.ejecutado = ""; } break; case "Total": //estilo de los calculado en los totales tipo porcentaje if (ejecucion.Periodo.cargado) { ejecucion.CalculadoDisplay = ""; } //condicional para los valores ejecutados total y subtotal si hauy un valor ejecutado pero no se ha activado el periodo no se debe mostrat if (ejecucion.ejecutado != "" && ejecucion.Periodo.cargado) { ejecucion.ejecutado = string.Format("{0:0.00}%", valEjecutado); //agrega el signo % a todos los planeados no nulos con unidad porcentaje } else { ejecucion.ejecutado = ""; } break; default: break; } if (ejecucion.EjecutadoError != null || ejecucion.PlaneadoError != null) { ejecucion.CalculadoDisplay = ""; } return(ejecucion); }