Formulario Tablero 2.0.N
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;
}
}
}