private void Agregar_fila_analisis_economico_financiero(resumen_categoria_anio.conceptos_analisis_economico_financiero concepto, List<resumen_categoria_anio.resultados_economicos_financieros> resultados, Table tree)
        {
            TableRow row = new TableRow();
            row.Attributes.Add("class", "treegrid-" + concepto.ToString());

            //concepto
            Reportes.Valores_anio_equipo ds = Session["ds_equipo_anio"] as Reportes.Valores_anio_equipo;
            Reportes.Valores_anio_equipo.Detalle_itemRow dir = ds.Detalle_item.NewDetalle_itemRow();

            TableCell column_resultado = new TableCell();
            string tooltip = "";
            switch (concepto)
            {
                case resumen_categoria_anio.conceptos_analisis_economico_financiero.finan_resultado:
                    dir.Nombre_item = "Resultado Financiero";
                    dir.Bold = "SI";

                    column_resultado.Text = "Resultado Financiero";
                    tooltip = "Ingresos totales - Costos Fijos Erogables - Impuestos (5% del ingreso facturado)";
                    break;
                case resumen_categoria_anio.conceptos_analisis_economico_financiero.porcentaje_de_ganancias:
                    dir.Nombre_item = "Porcentaje de ganancias";
                    dir.Bold = "SI";

                    column_resultado.Text = "Porcentaje de ganancias";
                    tooltip = "Resultado financiero / Ingresos";
                    break;
                case resumen_categoria_anio.conceptos_analisis_economico_financiero.velocidad_de_recupero:
                    dir.Nombre_item = "Velocidad de recupero";
                    dir.Bold = "SI";

                    column_resultado.Text = "Velocidad de recupero";
                    tooltip = "Amortización / Resultado financiero";
                    break;
                default:
                    break;
            }

            row.Cells.Add(column_resultado);
            tree.Rows.Add(row);

            //valores mensuales, mes 13 = total, mes 14 = promedio
            for (int i = 0; i < 14; i++)
            {
                resumen_categoria_anio.resultados_economicos_financieros vm = resultados.First(x => x.agrupacion == ((resumen_categoria_anio.agrupaciones)i + 1) && x.tipo == concepto);

                TableCell column_valor = new TableCell();
                column_valor.Attributes.Add("align", "right");

                Label valor = new Label();
                valor.ToolTip = tooltip;
                valor.Enabled = false;
                valor.ID = "valor_mes_" + vm.agrupacion.ToString() + "_id_concepto_" + vm.tipo.ToString();
                valor.Attributes.Add("class", "form-control");
                switch (concepto)
                {
                    case resumen_categoria_anio.conceptos_analisis_economico_financiero.finan_resultado:
                        dir[i + 1] = Cadena.Formato_moneda(vm.valor, Cadena.Moneda.pesos);
                        valor.Text = Cadena.Formato_moneda(vm.valor, Cadena.Moneda.pesos);
                        break;
                    case resumen_categoria_anio.conceptos_analisis_economico_financiero.porcentaje_de_ganancias:
                        dir[i + 1] = Cadena.Formato_porcentaje(vm.valor * Convert.ToDecimal(100));
                        valor.Text = Cadena.Formato_porcentaje(vm.valor * Convert.ToDecimal(100));
                        break;
                    case resumen_categoria_anio.conceptos_analisis_economico_financiero.velocidad_de_recupero:
                        dir[i + 1] = vm.valor.ToString();
                        valor.Text = vm.valor.ToString();
                        break;
                    default:
                        break;
                }

                if (vm.valor < 0)
                {
                    valor.ForeColor = Color.Red;
                }
                column_valor.Controls.Add(valor);

                row.Cells.Add(column_valor);
            }

            ds.Detalle_item.Rows.Add(dir);
            Session["ds_equipo_anio"] = ds;
        }
        private void CrearMostrarTabla(int id_categoria, int anio)
        {
            Reportes.Valores_anio_equipo ds = new Reportes.Valores_anio_equipo();

            using (var cxt = new Model1Container())
            {

                List<Item_ingreso_egreso> conceptos;
                conceptos = cxt.Items_ingresos_egresos.ToList();
                var roots = conceptos.Where(ii => ii.id_item_padre == null);

                Table tree = new Table();
                tree.Attributes.Add("runat", "server");
                tree.Attributes.Add("class", "tree table");
                tree.ID = "tree";

                #region título

                TableRow row = new TableRow();
                row.TableSection = TableRowSection.TableHeader;
                row.Attributes.Add("class", "treegrid-0");
                row.Attributes.Add("title", "Conceptos");

                TableCell column = new TableCell();
                column.Style.Value = "background-color:lightgray";
                column.Text = "<b>Conceptos</b>";
                row.Cells.Add(column);

                for (int i = 0; i < 12; i++)
                {
                    DateTime d = new DateTime(DateTime.Today.Year, i + 1, 1);

                    TableCell column_mes = new TableCell();
                    column_mes.Style.Value = "width:200px;background-color:lightgray";
                    column_mes.Attributes.Add("align", "center");
                    column_mes.Text = "<b>" + d.ToString("MMMM") + "</b>";
                    row.Cells.Add(column_mes);
                }

                TableCell column_totales = new TableCell();
                column_totales.Style.Value = "width:250px;background-color:lightgray";
                column_totales.Attributes.Add("align", "center");
                column_totales.Text = "<b>TOTAL " + ddl_anio.Text + "</b>";
                row.Cells.Add(column_totales);

                TableCell column_prom = new TableCell();
                column_prom.Style.Value = "width:200px;background-color:lightgray";
                column_prom.Attributes.Add("align", "center");
                column_prom.Text = "<b>Promedio mensual</b>";
                row.Cells.Add(column_prom);

                tree.Rows.Add(row);

                #endregion

                resumen_categoria_anio resumen_categoria_anio = new resumen_categoria_anio(anio, id_categoria);

                Reportes.Valores_anio_equipo.Datos_equipoRow der = ds.Datos_equipo.NewDatos_equipoRow();
                der.Nombre = resumen_categoria_anio.Categoria.nombre;
                der.Año = resumen_categoria_anio.Año.ToString();
                ds.Datos_equipo.Rows.Add(der);

                Session["ds_equipo_anio"] = ds;

                foreach (Item_ingreso_egreso item in roots)
                {
                    AgregarNodo(item, tree, cxt, resumen_categoria_anio);
                }

                #region Pie de tabla

                List<resumen_categoria_anio.resultados_economicos_financieros> resultados = resumen_categoria_anio.analisis_economico_financiero();

                //agregar analisis financiero
                #region Titulo analisis financiero
                TableRow row_af = new TableRow();
                row_af.Attributes.Add("class", "treegrid-0");
                row_af.Attributes.Add("title", "Análisis Financiero");

                TableCell column_af = new TableCell();
                column_af.Style.Value = "width:350px;background-color:lightgray";
                column_af.Text = "<b>Análisis Financiero</b>";
                row_af.Controls.Add(column_af);

                for (int i = 0; i < 12; i++)
                {
                    //DateTime d = new DateTime(DateTime.Today.Year, i + 1, 1);

                    TableCell column_mes = new TableCell();
                    column_mes.Style.Value = "width:200px;background-color:lightgray";
                    //column_mes.Attributes.Add("align", "center");
                    //column_mes.InnerHtml = "<b>" + d.ToString("MMMM") + "</b>";
                    row_af.Cells.Add(column_mes);
                }

                TableCell column_totales_af = new TableCell();
                column_totales_af.Style.Value = "width:250px;background-color:lightgray";
                //column_totales_af.Attributes.Add("align", "center");
                //column_totales_af.InnerHtml = "<b>TOTAL " + ddl_anio.Text + "</b>";
                row_af.Cells.Add(column_totales_af);

                TableCell column_prom_af = new TableCell();
                column_prom_af.Style.Value = "width:200px;background-color:lightgray";
                //column_prom_af.Attributes.Add("align", "center");
                //column_prom_af.InnerHtml = "<b>Promedio mensual</b>";
                row_af.Cells.Add(column_prom_af);

                tree.Controls.Add(row_af);

                #endregion

                Agregar_fila_analisis_economico_financiero(resumen_categoria_anio.conceptos_analisis_economico_financiero.finan_resultado, resultados, tree);

                //agregar porcentaje de ganancias
                Agregar_fila_analisis_economico_financiero(resumen_categoria_anio.conceptos_analisis_economico_financiero.porcentaje_de_ganancias, resultados, tree);

                //agregar velocidad de recupero
                Agregar_fila_analisis_economico_financiero(resumen_categoria_anio.conceptos_analisis_economico_financiero.velocidad_de_recupero, resultados, tree);

                #endregion

                div_tree.Controls.Clear();

                div_tree.Controls.Add(tree);
            }
        }
        private void AgregarNodo(Item_ingreso_egreso concepto, Table tree, Model1Container cxt, resumen_categoria_anio valores_anuales)
        {
            TableRow row = new TableRow();
            row.Attributes.Add("class", "treegrid-" + concepto.id_item + (concepto.id_item_padre != null ? " treegrid-parent-" + concepto.id_item_padre : "") + (concepto.id_item_padre == null ? " h4" : "") + (concepto.tipo == "Ingreso" ? " alert-success" : " alert-danger"));
            row.Attributes.Add("title", concepto.descripcion);

            Reportes.Valores_anio_equipo ds = Session["ds_equipo_anio"] as Reportes.Valores_anio_equipo;
            Reportes.Valores_anio_equipo.Detalle_itemRow dir = ds.Detalle_item.NewDetalle_itemRow();

            //concepto
            TableCell column = new TableCell();

            dir.Nombre_item = concepto.nombre;
            dir.Bold = concepto.Hijos.Count > 0 ? "SI" : "NO";

            column.Text = (concepto.Hijos.Count > 0 ? "<strong>" : "") + concepto.nombre + (concepto.Hijos.Count > 0 ? "</strong>" : "");
            row.Cells.Add(column);

            List<resumen_categoria_anio.valor_item_mes> valores_concepto = valores_anuales.Obtener_agrupacion_por_concepto(concepto.id_item);

            //valores mensuales, mes 13 = total, mes 14 = promedio
            for (int i = 0; i < 14; i++)
            {
                resumen_categoria_anio.valor_item_mes vm = valores_concepto.First(x => x.agrupacion == ((resumen_categoria_anio.agrupaciones)i + 1));

                dir[i + 1] = Cadena.Formato_moneda(vm.valor, Cadena.Moneda.pesos);

                TableCell column_valor = new TableCell();
                column_valor.Attributes.Add("align", "right");

                Label valor = new Label();
                valor.Enabled = false;
                valor.ID = "valor_mes_" + vm.agrupacion.ToString() + "_id_concepto_" + vm.id_concepto.ToString();
                valor.Attributes.Add("class", "form-control");
                valor.Text = Cadena.Formato_moneda(vm.valor, Cadena.Moneda.pesos);
                column_valor.Controls.Add(valor);

                row.Cells.Add(column_valor);
            }

            if (((Label)row.Cells[14].Controls[0]).Text != "$ 0,00")
            {
                tree.Rows.Add(row);
            }

            ds.Detalle_item.Rows.Add(dir);

            Session["ds_equipo_anio"] = ds;

            foreach (Item_ingreso_egreso hijo in concepto.Hijos)
            {
                AgregarNodo(hijo, tree, cxt, valores_anuales);
            }
        }