Formulario Tablero 2.0.N

De FlexiPymeDocs
Ir a la navegación Ir a la búsqueda

Formulario Tablero

Código de Referencia

using FlexiPyme.entorno;
using FlexiPyme.ui.extras;
using FlexiPyme.ui.formularios.especificos.tablero;
using FlexiPyme.db;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FlexiAplicacion.LogicaComun;

namespace FlexiAplicacion.Reportes
{
    public class frmReporteVentasPorRubroTablero : FlexiTablero
    {
        public override void InicializarFormulario()
        {

            //this.Titulo = "Tablero";
            //this.MostrarCalendario = false;
            
            FlexiTableroFila fila = new FlexiTableroFila();

            FlexiTableroParteGrilla lista = new FlexiTableroParteGrilla();

            // Top 3
            fila = new FlexiTableroFila();
            this.AgregarFila(fila);

            
            lista = new FlexiTableroParteGrilla();
            lista.Nombre = "top5Grilla";
            lista.Titulo = "Top 5";
            //lista.AgregarAccion("detalle", "frmFacturasLista");
            lista.AnchoGrilla = 6;

            lista.Query = @"";
            lista.AgregarColumna("rubro", "Rubro", FlexiTableroParteGrillaColumnaTipo.TEXTO);
            lista.AgregarColumna("total", "Total", FlexiTableroParteGrillaColumnaTipo.MONEDA, true);
            lista.AgregarColumna("porcentaje", "% del Total", FlexiTableroParteGrillaColumnaTipo.MONEDA);
            

            fila.AgregarParte(lista);
            
            
            // Torta Top 5
            FlexiTableroParteGraficoTorta graficoTorta = new FlexiTableroParteGraficoTorta();
            graficoTorta.Nombre = "top5Torta";
            graficoTorta.AnchoGrilla = 6;
            graficoTorta.Titulo = "Top 5";

            //graficoTorta.AltoMinimoPX = 200;

            fila.AgregarParte(graficoTorta);
            

			// Grafico Total
            fila = new FlexiTableroFila();
            this.AgregarFila(fila);

            FlexiTableroParteGraficoBarras grafico = new FlexiTableroParteGraficoBarras();
            grafico.Nombre = "graficoVentas";
            grafico.Titulo = "Ventas Netas Por Rubro";
            //grafico.AgregarAccion("detalle", "frmFacturasLista");
            grafico.AnchoGrilla = 12;

            grafico.AltoMinimoPX = 300;

            fila.AgregarParte(grafico);


            // Grafico de Lineas
            fila = new FlexiTableroFila();
            this.AgregarFila(fila);

            FlexiTableroParteGraficoLineas graficoLineas = new FlexiTableroParteGraficoLineas();
            graficoLineas.Nombre = "graficoVentas2";
            graficoLineas.AnchoGrilla = 8;
            graficoLineas.Titulo = "Ventas Proyectadas";
            graficoLineas.AgregarAccion("detalle", "frmFacturasLista");

            graficoLineas.AltoMinimoPX = 200;

            fila.AgregarParte(graficoLineas);
			

            // Grafico Lista			
            fila = new FlexiTableroFila();
            this.AgregarFila(fila);

	    lista = new FlexiTableroParteGrilla();
            lista.Nombre = "grillaVentas";
            lista.Titulo = "Ventas Netas Por Rubro";
            //lista.AgregarAccion("detalle", "frmFacturasLista");
            lista.AnchoGrilla = 12;

            lista.Query = @"";
            lista.AgregarColumna("rubro", "Rubro", FlexiTableroParteGrillaColumnaTipo.TEXTO);
            
            for(int i = 1; i <= 12; i++)
            {
            	lista.AgregarColumna("m" + i, new DateTime(2023, i, 1).ToString("MMMM"), FlexiTableroParteGrillaColumnaTipo.MONEDA, true);
                //lista.BuscarColumna("m" + i).FormatString = "{0:#,##0}";
            }
            
            lista.AgregarColumna("total", "Total", FlexiTableroParteGrillaColumnaTipo.MONEDA, true);
            //lista.BuscarColumna("total").FormatString = "{0:#,##0}";
            

            fila.AgregarParte(lista);

            this.AgregarFiltroLibre("anio", "Año");
            this.BuscarFiltro("anio").Valor = DateTime.Today.Year.ToString();
        }

        public override void AntesDeVisualizarLista(FlexiTableroParteBase parte)
        {
            int anio = this.BuscarFiltro("anio").ValorEntero;

            if (parte.Nombre == "grillaVentas")
            {
            	
                FlexiTableroParteGrilla grilla = (FlexiTableroParteGrilla)parte;

                FlexiDbTabla tabla = new FlexiDbTabla();
                tabla.AgregarColumnaCadena("rubro");
                for(int i = 1; i <= 12; i++)
                {
                	tabla.AgregarColumnaMoneda("m" + i);
                }
                tabla.AgregarColumnaMoneda("total");
                
                
                string sql = "select * from Rubros order by nombre";
                FlexiDbTabla dsRub = FlexiDb.Listar(sql);
                
                foreach (FlexiDbFila reg in dsRub.Filas)
                {
                    int idRubro = reg.ObtenerEntero("id");
                    string nombre = reg.ObtenerCadena("nombre");
                    
                    FlexiDbFila fila = tabla.NuevaFilaVacia();
                    fila.ModificarCadena("rubro", nombre);
                    
                    decimal total = 0;
					for(int i = 1; i <= 12; i++)
                    {
                    	decimal neto = LogicaDeTableroHome.ObtenerNetoVentasPorRubro(anio, i, idRubro);
                        total += neto;
                        fila.ModificarMoneda("m" + i, neto);
                    }
                    fila.ModificarMoneda("total", total);
                    tabla.AgregarFila(fila);
                    
                }

                grilla.DatosAVisualizar = tabla;
            }
            else if (parte.Nombre == "graficoVentas")
            {
                FlexiTableroParteGraficoBarras grafico = (FlexiTableroParteGraficoBarras)parte;
				
                List<decimal> valoresResto = new List<decimal>();
                
                for(int i = 1; i <= 12; i++)
                {
                	grafico.Etiquetas.Add(new DateTime(2023, i, 1).ToString("MMMM"));
                    valoresResto.Add(0M);
                }
                
                FlexiDbTabla dsRub = LogicaDeTableroHome.ObtenerNetoVentasRubrosPorAnio(anio);
                
                int r = 1;
                foreach (FlexiDbFila reg in dsRub.Filas)
                {
                	int idRubro = reg.ObtenerEntero("id");
                    string nombre = reg.ObtenerCadena("nombre");
                    
                    if (r <= 5)
                    {
                        List<decimal> valores = new List<decimal>();
                        for(int i = 1; i <= 12; i++)
                        {
                            decimal neto = LogicaDeTableroHome.ObtenerNetoVentasPorRubro(anio, i, idRubro);
                            valores.Add(neto);
                        }
                        grafico.AgregarSerie(nombre, valores, GetRandomHexColor());
                    }
                    else
                    {
                    	for(int i = 1; i <= 12; i++)
                        {
                            decimal neto = LogicaDeTableroHome.ObtenerNetoVentasPorRubro(anio, i, idRubro);
                            valoresResto[i-1] += neto;
                        }
                    }
                    r++;
                }
                
                grafico.AgregarSerie("Resto", valoresResto, GetRandomHexColor());
                
            }
            else if (parte.Nombre == "top5Grilla")
            {
            	
                FlexiTableroParteGrilla grilla = (FlexiTableroParteGrilla)parte;

                FlexiDbTabla tabla = new FlexiDbTabla();
                tabla.AgregarColumnaCadena("rubro");
                tabla.AgregarColumnaMoneda("total");
                tabla.AgregarColumnaMoneda("porcentaje");
                
                
                FlexiDbTabla dsRub = LogicaDeTableroHome.ObtenerNetoVentasRubrosPorAnio(anio);
                
                decimal total = 0;
                foreach (FlexiDbFila reg in dsRub.Filas)
                	total += reg.ObtenerMoneda("total");
                
                int i = 1;
                decimal totalTop5 = 0;
                foreach (FlexiDbFila reg in dsRub.Filas)
                {
                	if (i <= 5)
                    {
                        string nombre = reg.ObtenerCadena("nombre");
                        decimal totalRubro = reg.ObtenerMoneda("total");
						
                        totalTop5 += totalRubro;
                        
                        decimal porcentaje = 0;
                        if (total > 0)
                            porcentaje = Decimal.Round(totalRubro / total * 100M, 0);

                        FlexiDbFila fila = tabla.NuevaFilaVacia();
                        fila.ModificarCadena("rubro", nombre);
                        fila.ModificarMoneda("total", totalRubro);
                        fila.ModificarMoneda("porcentaje", porcentaje);


                        tabla.AgregarFila(fila);
                    }
                    i++;
                    
                }
                
                decimal totalResto = total - totalTop5;
                decimal porcResto = 0;
                if (total > 0)
                	porcResto = Decimal.Round(totalResto / total * 100M, 0);
                    
                FlexiDbFila filaResto = tabla.NuevaFilaVacia();
                filaResto.ModificarCadena("rubro", "Resto");
                filaResto.ModificarMoneda("total", totalResto);
                filaResto.ModificarMoneda("porcentaje", porcResto);

                tabla.AgregarFila(filaResto);
				
                grilla.DatosAVisualizar = tabla;
            }
            else if (parte.Nombre == "top5Torta")
            {
            	List<string> etiquetas = new List<string>();
                List<decimal> valores = new List<decimal>();
                List<string> colores = new List<string>();
                
            	FlexiDbTabla dsRub = LogicaDeTableroHome.ObtenerNetoVentasRubrosPorAnio(anio);
                
                decimal total = 0;
                foreach (FlexiDbFila reg in dsRub.Filas)
                	total += reg.ObtenerMoneda("total");
                
                int i = 1;
                decimal totalTop5 = 0;
                foreach (FlexiDbFila reg in dsRub.Filas)
                {
                	if (i <= 5)
                    {
                        string nombre = reg.ObtenerCadena("nombre");
                        decimal totalRubro = reg.ObtenerMoneda("total");
                        
                        totalTop5 += totalRubro;
						
                        etiquetas.Add(nombre);
                        valores.Add(totalRubro);
                        colores.Add(GetRandomHexColor());
                    }
                    i++;
                    
                }
                
                decimal totalResto = total - totalTop5;
                
                etiquetas.Add("Resto");
                valores.Add(totalResto);
                colores.Add(GetRandomHexColor());

            	
                FlexiTableroParteGraficoTorta grafico = (FlexiTableroParteGraficoTorta)parte;

                grafico.Etiquetas = etiquetas;
                grafico.Valores = valores;
                grafico.HexColores = colores;

                grafico.AltoMaximoPX = 400;
                
                
                
            }
            
        }
        
        public string GetRandomHexColor()
        {
            var result = "#" + Guid.NewGuid().ToString().Substring(0, 6);
            return result;
        }
    }
}