estadisticas terminadas con detalle del mejor vendedor

This commit is contained in:
Carlos Sandoval
2024-06-30 03:09:38 -06:00
parent d81f706053
commit 8e6571fbc9
15 changed files with 469 additions and 311 deletions
+99 -91
View File
@@ -10,13 +10,15 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization.Configuration;
namespace compabetov2
{
public partial class Estadiscticas : Form
{
private List<VentaModel> ventasDia;
private List<VentaModel> ventasMes;
Dictionary<string, List<Dictionary<string, dynamic>>> resumen;
decimal costosCompraProductos;
decimal ganaciaBrutaProductos;
public Estadiscticas()
{
@@ -35,120 +37,102 @@ namespace compabetov2
string fechaBuscaStr = dtpBuscar.Text;
DateTime.TryParseExact(fechaBuscaStr, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime fechaBuscar);
ventasDia = service.conseguirVentasDia(fechaBuscar);
ventasMes = service.conseguirVentasMes(fechaBuscar);
resumen = service.estadisticas(fechaBuscar);
List<DetalleVentaModel> productosMes = estadisticasMes();
List<DetalleVentaModel> productosDia = estadisticasDia();
decimal totalmes = totalMes();
decimal totaldia = totalDia();
decimal totaldianeto = totalDiaNeto();
decimal importeMes = calcularImporte(resumen["mes"]);
decimal importeDia = calcularImporte(resumen["dia"]);
Dictionary<string, List<Envio>> envios = service.conseguirEnvioMes(fechaBuscar);
int enviosMes = cantidadEnvios(envios["mes"]);
int enviosDia = cantidadEnvios(envios["dia"]);
decimal utilidadMes = calcularUtilidad(resumen["mes"], importeMes, enviosMes);
Dictionary<string,dynamic> estadisticas = new Dictionary<string, dynamic>
{
{ "mes", new Dictionary<string, dynamic>{
{ "productos", productosMes },
{ "productoMasVendido", prodctoMasVendido(productosMes) },
{ "mejorVendedor", mejorVenderdorMes() },
{ "totalMes", totalmes },
{ "EnvioCantidad", totalMesSinEnvio(envios) },
{ "mejorVendedor", "yo"/*mejorVenderdorMes()*/ },
{ "EnvioCantidad", enviosMes },
{ "totalImportes", importeMes },
}
},
{ "dia", new Dictionary<string, dynamic>{
{ "productos", productosDia },
{ "productoMasVendido", prodctoMasVendido(productosDia) },
{ "mejorVendedor", mejorVenderdorDia() },
{ "totalDia", totalDia()},
{ "totalNetoDia", totaldianeto },
{ "EnvioCantidad", totalDiaSinEnvio(envios) },
{ "mejorVendedor", "yo"/*mejorVenderdorMes()*/ },
{ "EnvioCantidad", enviosDia },
{ "totalImportes", importeDia },
}
}
};
mostrarDatos(estadisticas);
}
private int totalMesSinEnvio(Dictionary<string, List<Envio>> envios)
{
return envios["mes"].Count;
private int cantidadEnvios(List<Envio> envios)
{
return envios.Count;
}
private int totalDiaSinEnvio(Dictionary<string, List<Envio>> envios)
private decimal calcularUtilidad(List<Dictionary<string, dynamic>> resumen, decimal totalImportes, int cantidadEnvios)
{
return envios["dia"].Count;
}
decimal utilidad = 0;
private decimal totalMes()
{
decimal total = 0;
foreach(VentaModel venta in ventasMes)
costosCompraProductos = 0;
ganaciaBrutaProductos = 0;
foreach (Dictionary<string, dynamic> venta_y_detalles in resumen)
{
total += venta.total;
}
return total;
}
private decimal totalDia()
{
decimal total = 0;
foreach (VentaModel venta in ventasDia)
{
total += venta.total;
}
return total;
}
private decimal totalDiaNeto()
{
decimal total = 0;
foreach (VentaModel venta in ventasDia)
{
List<DetalleVentaModel> detalles = service.conseguirDetallesVenta(venta);
decimal totalDetalle = 0;
foreach(DetalleVentaModel detalle in detalles)
foreach(DetalleVentaModel detalle in venta_y_detalles["detalles"])
{
totalDetalle += detalle.cantidad * (detalle.producto.precio - detalle.producto.precioCompra);
ganaciaBrutaProductos += detalle.cantidad * detalle.producto.precio;
costosCompraProductos += detalle.cantidad * detalle.producto.precioCompra;
}
total += totalDetalle;
}
return total;
utilidad = ganaciaBrutaProductos - costosCompraProductos;
ganaciaBrutaProductos += totalImportes + (cantidadEnvios * 10);
utilidad += totalImportes + (cantidadEnvios * 10);
return utilidad;
}
private List<DetalleVentaModel> estadisticasMes()
{
List<Dictionary<string, dynamic>> mes = resumen["mes"];
List<DetalleVentaModel> detallesMes = new List<DetalleVentaModel>();
//recorre las ventas del mes
foreach (VentaModel venta in ventasMes)
foreach (Dictionary<string, dynamic> venta_y_detalles in mes)
{
//consigue los detalles de la venta
List<DetalleVentaModel> detallesVenta = service.conseguirDetallesVenta(venta);
//recorre los detalles de la venta
foreach (DetalleVentaModel detalle in detallesVenta)
foreach (DetalleVentaModel detallesVenta in venta_y_detalles["detalles"])
{
int totalElementos = detallesMes.Count;
int contador = 0;
for (int i = 0; i <= totalElementos; i++)
{
//si no encuentra el producto lo agrega
contador++;
//si no existe el producto lo agrega
if (i == totalElementos)
{
DetalleVentaModel detalleAgregar = new DetalleVentaModel(detalle.cantidad, detalle.producto, detalle.idVenta);
DetalleVentaModel detalleAgregar = new DetalleVentaModel(detallesVenta.cantidad, detallesVenta.producto, detallesVenta.idVenta);
detallesMes.Add(detalleAgregar);
break;
}
DetalleVentaModel producto = detallesMes[i];
//si encuentra el produco solo aumneta la cantidad
if (producto.producto.nombre.Equals(detalle.producto.nombre))
//si existe el producto solo aumenta la cantidad
if (producto.producto.nombre.Equals(detallesVenta.producto.nombre))
{
producto.cantidad += detalle.cantidad;
producto.cantidad += detallesVenta.cantidad;
break;
}
}
}
}
@@ -158,36 +142,34 @@ namespace compabetov2
private List<DetalleVentaModel> estadisticasDia()
{
//solo copie y pegue le metodo estadisticas dia y cambie el key en resumen de mes a dia
List<Dictionary<string, dynamic>> dia = resumen["dia"];
List<DetalleVentaModel> detallesDia = new List<DetalleVentaModel>();
//recorre las ventas del mes
foreach (VentaModel venta in ventasDia)
{
//consigue los detalles de la venta
List<DetalleVentaModel> detallesVenta = service.conseguirDetallesVenta(venta);
foreach (Dictionary<string, dynamic> venta_y_detalles in dia) {
//recorre los detalles de la venta
foreach (DetalleVentaModel detalle in detallesVenta)
foreach (DetalleVentaModel detallesVenta in venta_y_detalles["detalles"])
{
int totalElementos = detallesDia.Count;
int contador = 0;
for (int i = 0; i <= totalElementos; i++)
{
contador++;
//si no encuentra el producto lo agrega
//si no existe el producto lo agrega
if (i == totalElementos)
{
DetalleVentaModel detalleAgregar = new DetalleVentaModel(detalle.cantidad, detalle.producto, detalle.idVenta);
DetalleVentaModel detalleAgregar = new DetalleVentaModel(detallesVenta.cantidad, detallesVenta.producto, detallesVenta.idVenta);
detallesDia.Add(detalleAgregar);
break;
}
DetalleVentaModel producto = detallesDia[i];
//si encuentra el produco solo aumneta la cantidad
if (producto.producto.nombre.Equals(detalle.producto.nombre))
//si existe el producto solo aumenta la cantidad
if (producto.producto.nombre.Equals(detallesVenta.producto.nombre))
{
producto.cantidad += detalle.cantidad;
producto.cantidad += detallesVenta.cantidad;
break;
}
}
}
}
@@ -235,11 +217,13 @@ namespace compabetov2
// Agregar la nueva fila al DataGridView
dgvMes.Rows.Add(nuevaFila);
}
decimal totalSinEnvioMes = estadisticas["mes"]["totalMes"] - (estadisticas["mes"]["EnvioCantidad"] *10);
lbTotalMes.Text = $"Total de mes: ${estadisticas["mes"]["totalMes"]}";
lbUtilidadMes.Text = $"Utilidad del mes: ${calcularUtilidad(resumen["mes"], estadisticas["mes"]["totalImportes"], estadisticas["mes"]["EnvioCantidad"])}";
lbProductoMes.Text = $"Producto mas vendido: {estadisticas["mes"]["productoMasVendido"]}";
lbVendedorMes.Text = $"Mejor vendedor: {estadisticas["mes"]["mejorVendedor"]}";
lbMesSEnvio.Text = $"Total del mes sin envios: ${totalSinEnvioMes}";
lbGananciasBrutasMes.Text = $"Ganancias Brutas mes: ${ganaciaBrutaProductos}";
lbTotalImporteMes.Text = $"Total importe del Mes: ${estadisticas["mes"]["totalImportes"]}";
lbEnvioMes.Text = $"Total de envios del mes: ${estadisticas["mes"]["EnvioCantidad"] * 10}";
//dia
List<DetalleVentaModel> detallesDia = estadisticas["dia"]["productos"];
@@ -278,12 +262,12 @@ namespace compabetov2
dgvDia.Rows.Add(nuevaFila);
}
decimal totalSinEnvioDia = estadisticas["dia"]["totalDia"] - (estadisticas["dia"]["EnvioCantidad"] * 10);
lbTotalDia.Text = $"Total de dia: ${estadisticas["dia"]["totalDia"]}";
lbUtilidadDia.Text = $"Utilidad del dia: ${calcularUtilidad(resumen["dia"], estadisticas["dia"]["totalImportes"], estadisticas["dia"]["EnvioCantidad"])}";
lbProductDia.Text = $"Producto mas vendido: {estadisticas["dia"]["productoMasVendido"]}";
lbVendedorDia.Text = $"Mejor vendedor: {estadisticas["dia"]["mejorVendedor"]}";
lbDiaSEnvio.Text = $"Total del dia sin envios: ${totalSinEnvioDia}";
lbTotalDiaNeto.Text = $"Total neto del dia: ${estadisticas["dia"]["totalNetoDia"]}";
lbGananciasBrutasDia.Text = $"Ganancias Brutas dia: ${ganaciaBrutaProductos}";
lbTotalImporteDia.Text = $"Total importe del dia: ${estadisticas["dia"]["totalImportes"]}";
lbEnviosDia.Text = $"Total de envios del dia: ${estadisticas["dia"]["EnvioCantidad"] * 10}";
}
@@ -293,10 +277,11 @@ namespace compabetov2
string mejorVendedor = "";
int contadorNumeroVentas = 0;
Dictionary<string,int> empleados = new Dictionary<string,int>();
foreach(VentaModel venta in ventasMes)
List<Dictionary<string, dynamic>> mes = resumen["mes"];
Dictionary<string, int> empleados = new Dictionary<string, int>();
foreach (Dictionary<string, dynamic> venta_y_detalle in mes)
{
VentaModel venta = venta_y_detalle["venta"];
if (empleados.ContainsKey(venta.responzable))
{
empleados[venta.responzable] += 1;
@@ -342,10 +327,11 @@ namespace compabetov2
string mejorVendedor = "";
int contadorNumeroVentas = 0;
List<Dictionary<string, dynamic>> dia = resumen["dia"];
Dictionary<string, int> empleados = new Dictionary<string, int>();
foreach (VentaModel venta in ventasDia)
foreach (Dictionary<string, dynamic> venta_y_detalle in dia)
{
VentaModel venta = venta_y_detalle["venta"];
if (empleados.ContainsKey(venta.responzable))
{
empleados[venta.responzable] += 1;
@@ -368,6 +354,23 @@ namespace compabetov2
return mejorVendedor;
}
private decimal calcularImporte(List<Dictionary<string, dynamic>> resumen)
{
decimal totalImporte = 0;
foreach(Dictionary<string, dynamic> informacion in resumen)
{
List<DetalleImporte> importes = informacion["importes"];
foreach(DetalleImporte importe in importes)
{
totalImporte += importe.cantidad * importe.precioImporte;
}
}
return totalImporte;
}
private void label5_Click(object sender, EventArgs e)
{
@@ -410,16 +413,21 @@ namespace compabetov2
private void btnVentasDia_Click(object sender, EventArgs e)
{
RegistroVentas ventana = new RegistroVentas(ventasDia,this);
RegistroVentas ventana = new RegistroVentas(resumen["dia"],this);
ventana.Owner = this;
ventana.Show();
}
private void btnVentasMes_Click(object sender, EventArgs e)
{
RegistroVentas ventana = new RegistroVentas(ventasMes, this);
RegistroVentas ventana = new RegistroVentas(resumen["mes"], this);
ventana.Owner = this;
ventana.Show();
}
private void lbTotalDia_Click(object sender, EventArgs e)
{
}
}
}