diff --git a/Controladora/ControladoraInformes.cs b/Controladora/ControladoraInformes.cs index 6ecdba8..a251529 100644 --- a/Controladora/ControladoraInformes.cs +++ b/Controladora/ControladoraInformes.cs @@ -1,5 +1,8 @@ using Entidades; +using Entidades.DTO; using Informes; +using Microsoft.EntityFrameworkCore.Metadata.Conventions; +using Modelo; using System; using System.Collections.Generic; using System.Linq; @@ -13,6 +16,30 @@ namespace Controladora { const string configpath = "settings.json"; + private RepositorioFactura repositorioFactura = new(new Context()); + + public List? MostrarFacturasEnRangoDeFechas(DateTime FechaInicio, DateTime FechaFinal) + { + if (FechaFinal < FechaInicio) return null; + + List list = repositorioFactura.ObtenerFacturasEnRangoFechas(FechaInicio, FechaFinal); + return list; + } + + public List? MostrarFacturasDeClienteEnRangoDeFechas(Cliente cli, DateTime fecInicio, DateTime fecFin) + { + if (fecFin < fecInicio) return null; + if (cli.Cuit <= 0) return null; + + List list = repositorioFactura.ObtenerFacturasDeClienteEnRangoFechas(cli, fecInicio, fecFin); + return list; + } + + public List? MostrarProductosMasVendidos() + { + return repositorioFactura.ObtenerInformeProductoMasUsados(); + } + public void GuardarConfig(ConfigEmail config) { try diff --git a/Entidades/DTO/DtoProductoInforme.cs b/Entidades/DTO/DtoProductoInforme.cs new file mode 100644 index 0000000..a8414f7 --- /dev/null +++ b/Entidades/DTO/DtoProductoInforme.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Entidades.DTO +{ + public record DtoProductoInforme(int Id, string Nombre, int CantidadVendida, int StockRemanente); +} diff --git a/Modelo/RepositorioFactura.cs b/Modelo/RepositorioFactura.cs index 95991c9..30a6058 100644 --- a/Modelo/RepositorioFactura.cs +++ b/Modelo/RepositorioFactura.cs @@ -1,5 +1,6 @@ using System.Collections.ObjectModel; using Entidades; +using Entidades.DTO; using Microsoft.EntityFrameworkCore; namespace Modelo @@ -15,8 +16,8 @@ namespace Modelo { return context.Facturas .AsNoTracking() - .Include(x=>x.Detalles) - .Include(x=>x.Cliente) + .Include(x => x.Detalles) + .Include(x => x.Cliente) .ToList(); } @@ -38,7 +39,7 @@ namespace Modelo { detalle.Producto = (detalle.Producto.EsPerecedero) ? context.ProductoPercederos.FirstOrDefault(x => x.Id == detalle.Producto.Id) : - context.ProductoNoPercederos.FirstOrDefault(x => x.Id == detalle.Producto.Id) ; + context.ProductoNoPercederos.FirstOrDefault(x => x.Id == detalle.Producto.Id); } t.Detalles = list; @@ -61,10 +62,45 @@ namespace Modelo public Factura ObtenerPorId(Factura fac) { var factura = context.Facturas - .Include(x=>x.Detalles) - .ThenInclude(x=>x.Producto) + .Include(x => x.Detalles) + .ThenInclude(x => x.Producto) .FirstOrDefault(x => x.Id == fac.Id); return factura; } + + public List ObtenerFacturasDeClienteEnRangoFechas(Cliente cli, DateTime fecInicio, DateTime fecFin) + { + return context.Facturas + .AsNoTracking() + .Include(x => x.Detalles) + .Include(x => x.Cliente) + .Where(x => x.Fecha > fecInicio && x.Fecha < fecFin && x.Cliente.Cuit == cli.Cuit) + .ToList(); + } + public List ObtenerFacturasEnRangoFechas(DateTime fecInicio, DateTime fecFinal) + { + return context.Facturas + .AsNoTracking() + .Include(x => x.Detalles) + .Where(x => (x.Fecha > fecInicio && x.Fecha < fecFinal)) + .ToList(); + + } + + public List ObtenerInformeProductoMasUsados() + { + List list + = context.DetalleFacturas + .GroupBy(df => df.Producto) + .Select(g => new DtoProductoInforme + ( + g.Key.Id, + g.Key.Nombre, + g.Sum(df => df.Cantidad), + context.Lotes.Include(x => x.Producto).Where(x=>x.Id == g.Key.Id).Sum(x => x.Cantidad) + )) + .ToList(); + return list; + } } } diff --git a/Vista/PantallaPrincipal.Designer.cs b/Vista/PantallaPrincipal.Designer.cs index 64d94ce..a525150 100644 --- a/Vista/PantallaPrincipal.Designer.cs +++ b/Vista/PantallaPrincipal.Designer.cs @@ -37,15 +37,19 @@ remitosToolStripMenuItem = new ToolStripMenuItem(); ordenDeCompraToolStripMenuItem = new ToolStripMenuItem(); pedidosPresupuestoToolStripMenuItem = new ToolStripMenuItem(); + categoriasToolStripMenuItem = new ToolStripMenuItem(); configToolStripMenuItem = new ToolStripMenuItem(); informesToolStripMenuItem = new ToolStripMenuItem(); - categoriasToolStripMenuItem = new ToolStripMenuItem(); + informesToolStrip = new ToolStripMenuItem(); + facturasPorFechaToolStripMenuItem = new ToolStripMenuItem(); + facturasPorClienteToolStripMenuItem = new ToolStripMenuItem(); + productoMasVendidoToolStripMenuItem = new ToolStripMenuItem(); menuStrip1.SuspendLayout(); SuspendLayout(); // // menuStrip1 // - menuStrip1.Items.AddRange(new ToolStripItem[] { gestionarToolStripMenuItem, configToolStripMenuItem }); + menuStrip1.Items.AddRange(new ToolStripItem[] { gestionarToolStripMenuItem, informesToolStrip, configToolStripMenuItem }); menuStrip1.Location = new Point(0, 0); menuStrip1.Name = "menuStrip1"; menuStrip1.Size = new Size(800, 24); @@ -109,6 +113,13 @@ pedidosPresupuestoToolStripMenuItem.Text = "Presupuesto"; pedidosPresupuestoToolStripMenuItem.Click += pedidosPresupuestoToolStripMenuItem_Click; // + // categoriasToolStripMenuItem + // + categoriasToolStripMenuItem.Name = "categoriasToolStripMenuItem"; + categoriasToolStripMenuItem.Size = new Size(180, 22); + categoriasToolStripMenuItem.Text = "Categorias"; + categoriasToolStripMenuItem.Click += categoriasToolStripMenuItem_Click; + // // configToolStripMenuItem // configToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { informesToolStripMenuItem }); @@ -119,16 +130,34 @@ // informesToolStripMenuItem // informesToolStripMenuItem.Name = "informesToolStripMenuItem"; - informesToolStripMenuItem.Size = new Size(121, 22); + informesToolStripMenuItem.Size = new Size(180, 22); informesToolStripMenuItem.Text = "Informes"; informesToolStripMenuItem.Click += informesToolStripMenuItem_Click; // - // categoriasToolStripMenuItem + // informesToolStrip // - categoriasToolStripMenuItem.Name = "categoriasToolStripMenuItem"; - categoriasToolStripMenuItem.Size = new Size(180, 22); - categoriasToolStripMenuItem.Text = "Categorias"; - categoriasToolStripMenuItem.Click += categoriasToolStripMenuItem_Click; + informesToolStrip.DropDownItems.AddRange(new ToolStripItem[] { facturasPorFechaToolStripMenuItem, facturasPorClienteToolStripMenuItem, productoMasVendidoToolStripMenuItem }); + informesToolStrip.Name = "informesToolStrip"; + informesToolStrip.Size = new Size(66, 20); + informesToolStrip.Text = "Informes"; + // + // facturasPorFechaToolStripMenuItem + // + facturasPorFechaToolStripMenuItem.Name = "facturasPorFechaToolStripMenuItem"; + facturasPorFechaToolStripMenuItem.Size = new Size(194, 22); + facturasPorFechaToolStripMenuItem.Text = "Facturas Por Fecha"; + // + // facturasPorClienteToolStripMenuItem + // + facturasPorClienteToolStripMenuItem.Name = "facturasPorClienteToolStripMenuItem"; + facturasPorClienteToolStripMenuItem.Size = new Size(194, 22); + facturasPorClienteToolStripMenuItem.Text = "Facturas Por Cliente"; + // + // productoMasVendidoToolStripMenuItem + // + productoMasVendidoToolStripMenuItem.Name = "productoMasVendidoToolStripMenuItem"; + productoMasVendidoToolStripMenuItem.Size = new Size(194, 22); + productoMasVendidoToolStripMenuItem.Text = "Producto Mas Vendido"; // // PantallaPrincipal // @@ -161,5 +190,9 @@ private ToolStripMenuItem configToolStripMenuItem; private ToolStripMenuItem informesToolStripMenuItem; private ToolStripMenuItem categoriasToolStripMenuItem; + private ToolStripMenuItem informesToolStrip; + private ToolStripMenuItem facturasPorFechaToolStripMenuItem; + private ToolStripMenuItem facturasPorClienteToolStripMenuItem; + private ToolStripMenuItem productoMasVendidoToolStripMenuItem; } } \ No newline at end of file