using compabetov2.database; using compabetov2.database.modelos; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace compabetov2 { public partial class Estadiscticas : Form { private List ventasDia; private List ventasMes; public Estadiscticas() { InitializeComponent(); darFormatoDTP(); } private void darFormatoDTP() { dtpBuscar.Format = DateTimePickerFormat.Custom; dtpBuscar.CustomFormat = "dd/MM/yyyy"; } private void btnBuscar_Click(object sender, EventArgs e) { 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); List productosMes = estadisticasMes(); List productosDia = estadisticasDia(); decimal totalmes = totalMes(); decimal totaldia = totalDia(); decimal totaldianeto = totalDiaNeto(); Dictionary> envios = service.conseguirEnvioMes(fechaBuscar); Dictionary estadisticas = new Dictionary { { "mes", new Dictionary{ { "productos", productosMes }, { "productoMasVendido", prodctoMasVendido(productosMes) }, { "mejorVendedor", mejorVenderdorMes() }, { "totalMes", totalmes }, { "EnvioCantidad", totalMesSinEnvio(envios) }, } }, { "dia", new Dictionary{ { "productos", productosDia }, { "productoMasVendido", prodctoMasVendido(productosDia) }, { "mejorVendedor", mejorVenderdorDia() }, { "totalDia", totalDia()}, { "totalNetoDia", totaldianeto }, { "EnvioCantidad", totalDiaSinEnvio(envios) }, } } }; mostrarDatos(estadisticas); } private int totalMesSinEnvio(Dictionary> envios) { return envios["mes"].Count; } private int totalDiaSinEnvio(Dictionary> envios) { return envios["dia"].Count; } private decimal totalMes() { decimal total = 0; foreach(VentaModel venta in ventasMes) { 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 detalles = service.conseguirDetallesVenta(venta); decimal totalDetalle = 0; foreach(DetalleVentaModel detalle in detalles) { totalDetalle += detalle.cantidad * (detalle.producto.precio - detalle.producto.precioCompra); } total += totalDetalle; } return total; } private List estadisticasMes() { List detallesMes = new List(); //recorre las ventas del mes foreach (VentaModel venta in ventasMes) { //consigue los detalles de la venta List detallesVenta = service.conseguirDetallesVenta(venta); //recorre los detalles de la venta foreach (DetalleVentaModel detalle in detallesVenta) { int totalElementos = detallesMes.Count; for (int i = 0; i <= totalElementos; i++) { //si no encuentra el producto lo agrega if (i == totalElementos) { DetalleVentaModel detalleAgregar = new DetalleVentaModel(detalle.cantidad, detalle.producto, detalle.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)) { producto.cantidad += detalle.cantidad; break; } } } } return detallesMes; } private List estadisticasDia() { List detallesDia = new List(); //recorre las ventas del mes foreach (VentaModel venta in ventasDia) { //consigue los detalles de la venta List detallesVenta = service.conseguirDetallesVenta(venta); //recorre los detalles de la venta foreach (DetalleVentaModel detalle in detallesVenta) { int totalElementos = detallesDia.Count; int contador = 0; for (int i = 0; i <= totalElementos; i++) { contador++; //si no encuentra el producto lo agrega if (i == totalElementos) { DetalleVentaModel detalleAgregar = new DetalleVentaModel(detalle.cantidad, detalle.producto, detalle.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)) { producto.cantidad += detalle.cantidad; break; } } } } return detallesDia; } private void mostrarDatos(Dictionary estadisticas) { dgvDia.Rows.Clear(); dgvMes.Rows.Clear(); List detallesMes = estadisticas["mes"]["productos"]; decimal totalVendidoMes = 0; foreach (DetalleVentaModel producto in detallesMes) { totalVendidoMes += (producto.cantidad * producto.producto.cantidad) * producto.producto.precio; // Crear una nueva fila DataGridViewRow nuevaFila = new DataGridViewRow(); // Crear celdas para la nueva fila DataGridViewCell productoN = new DataGridViewTextBoxCell(); DataGridViewCell precio = new DataGridViewTextBoxCell(); DataGridViewCell precioCompra = new DataGridViewTextBoxCell(); DataGridViewCell cantidad = new DataGridViewTextBoxCell(); DataGridViewCell total = new DataGridViewTextBoxCell(); DataGridViewCell totalNeto = new DataGridViewTextBoxCell(); // Establecer los valores de las celdas (puedes ajustar según tu necesidad) productoN.Value = $"{producto.producto.nombre}"; precio.Value = $"{producto.producto.precio}"; precioCompra.Value = $"{producto.producto.precioCompra}"; cantidad.Value = $"{producto.cantidad}"; total.Value = $"{producto.cantidad * producto.producto.precio}"; totalNeto.Value = $"{producto.cantidad * (producto.producto.precio - producto.producto.precioCompra)}"; // Agregar las celdas a la fila nuevaFila.Cells.Add(productoN); nuevaFila.Cells.Add(precio); nuevaFila.Cells.Add(precioCompra); nuevaFila.Cells.Add(cantidad); nuevaFila.Cells.Add(total); nuevaFila.Cells.Add(totalNeto); // 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"]}"; lbProductoMes.Text = $"Producto mas vendido: {estadisticas["mes"]["productoMasVendido"]}"; lbVendedorMes.Text = $"Mejor vendedor: {estadisticas["mes"]["mejorVendedor"]}"; lbMesSEnvio.Text = $"Total del mes sin envios: ${totalSinEnvioMes}"; //dia List detallesDia = estadisticas["dia"]["productos"]; decimal totalVendidoDia = 0; foreach (DetalleVentaModel producto in detallesDia) { totalVendidoDia += (producto.cantidad * producto.producto.cantidad) * producto.producto.precio; // Crear una nueva fila DataGridViewRow nuevaFila = new DataGridViewRow(); // Crear celdas para la nueva fila DataGridViewCell productoN = new DataGridViewTextBoxCell(); DataGridViewCell precio = new DataGridViewTextBoxCell(); DataGridViewCell precioCompra = new DataGridViewTextBoxCell(); DataGridViewCell cantidad = new DataGridViewTextBoxCell(); DataGridViewCell total = new DataGridViewTextBoxCell(); DataGridViewCell totalNeto = new DataGridViewTextBoxCell(); // Establecer los valores de las celdas (puedes ajustar según tu necesidad) productoN.Value = $"{producto.producto.nombre}"; precio.Value = $"{producto.producto.precio}"; precioCompra.Value = $"{producto.producto.precioCompra}"; cantidad.Value = $"{producto.cantidad}"; total.Value = $"{producto.cantidad * producto.producto.precio}"; totalNeto.Value = $"{producto.cantidad * (producto.producto.precio - producto.producto.precioCompra)}"; // Agregar las celdas a la fila nuevaFila.Cells.Add(productoN); nuevaFila.Cells.Add(precio); nuevaFila.Cells.Add(precioCompra); nuevaFila.Cells.Add(cantidad); nuevaFila.Cells.Add(total); nuevaFila.Cells.Add(totalNeto); // Agregar la nueva fila al DataGridView dgvDia.Rows.Add(nuevaFila); } decimal totalSinEnvioDia = estadisticas["dia"]["totalDia"] - (estadisticas["dia"]["EnvioCantidad"] * 10); lbTotalDia.Text = $"Total de dia: ${estadisticas["dia"]["totalDia"]}"; 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"]}"; } private string mejorVenderdorMes() { string mejorVendedor = ""; int contadorNumeroVentas = 0; Dictionary empleados = new Dictionary(); foreach(VentaModel venta in ventasMes) { if (empleados.ContainsKey(venta.responzable)) { empleados[venta.responzable] += 1; } else { empleados.Add(venta.responzable, 1); } } foreach(string empleado in empleados.Keys) { if (empleados[empleado] > contadorNumeroVentas) { contadorNumeroVentas = empleados[empleado]; mejorVendedor = empleado; } } return mejorVendedor; } private string prodctoMasVendido(List productos) { string productoMasVendido = ""; int cantidadProducto = 0; foreach(DetalleVentaModel producto in productos) { if(producto.cantidad > cantidadProducto) { productoMasVendido = producto.producto.nombre; cantidadProducto = producto.cantidad; } } return productoMasVendido; } private string mejorVenderdorDia() { string mejorVendedor = ""; int contadorNumeroVentas = 0; Dictionary empleados = new Dictionary(); foreach (VentaModel venta in ventasDia) { if (empleados.ContainsKey(venta.responzable)) { empleados[venta.responzable] += 1; } else { empleados.Add(venta.responzable, 1); } } foreach (string empleado in empleados.Keys) { if (empleados[empleado] > contadorNumeroVentas) { contadorNumeroVentas = empleados[empleado]; mejorVendedor = empleado; } } return mejorVendedor; } private void label5_Click(object sender, EventArgs e) { } private void Estadiscticas_Load(object sender, EventArgs e) { } private void lbVendedorMes_Click(object sender, EventArgs e) { } private void lbProductoMes_Click(object sender, EventArgs e) { } private void lbVendedorDia_Click(object sender, EventArgs e) { } private void lbProductDia_Click(object sender, EventArgs e) { } private void pictureBox2_Click(object sender, EventArgs e) { this.Close(); } private void dgvDia_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void btnVentasDia_Click(object sender, EventArgs e) { RegistroVentas ventana = new RegistroVentas(ventasDia,this); ventana.Owner = this; ventana.Show(); } private void btnVentasMes_Click(object sender, EventArgs e) { RegistroVentas ventana = new RegistroVentas(ventasMes, this); ventana.Owner = this; ventana.Show(); } } }