public static IQueryable<Factura> Where_FiltroBusqueda(this IQueryable<Factura> consulta, FiltroBusquedaFactura filtroBusqueda) { if (!string.IsNullOrEmpty(filtroBusqueda.SerieFactura)) { consulta = consulta.Where(m => m.SerieFactura == filtroBusqueda.SerieFactura); } if (!string.IsNullOrEmpty(filtroBusqueda.NombreOEmpresaCliente)) { consulta = consulta.Where(m => m.CompradorNombreOEmpresa.Contains(filtroBusqueda.NombreOEmpresaCliente) || m.Comprador.NombreComercial.Contains(filtroBusqueda.NombreOEmpresaCliente)); } if (filtroBusqueda.FechaDesde.HasValue && filtroBusqueda.FechaHasta.HasValue) { consulta = consulta.Where(m => m.FechaEmisionFactura >= filtroBusqueda.FechaDesde.Value && m.FechaEmisionFactura <= filtroBusqueda.FechaHasta.Value); } if (filtroBusqueda.IdCliente.HasValue) { consulta = consulta.Where(m => m.IdComprador == filtroBusqueda.IdCliente.Value); } if (!string.IsNullOrEmpty(filtroBusqueda.Conceptos)) { consulta = consulta.Where(m => m.Lineas.Any(l => l.Descripcion.Contains(filtroBusqueda.Conceptos))); } return consulta; }
public async Task<IPagedList<LineaListaGestionFacturas>> ListaGestionFacturasAsync(FiltroBusquedaFactura filtroBusqueda) { var consulta = CrearConsultaFacturasFiltrada(filtroBusqueda); var consultaOrdenada = consulta.OrderBy_OrdenarPor(filtroBusqueda.OrdenarPorEnum); var consultaLineasFacturas = consultaOrdenada .Select(m => new LineaListaGestionFacturas { Id = m.Id, IdUsuario = m.IdUsuario, IdComprador = m.IdComprador, FormatoNumeroFactura = m.FormatoNumeroFactura, NumeracionFactura = m.NumeracionFactura, SerieFactura = m.SerieFactura, FechaEmisionFactura = m.FechaEmisionFactura, FechaVencimientoFactura = m.FechaVencimientoFactura, EstadoFactura = m.EstadoFactura, BaseImponible = m.Lineas.Sum(l => (decimal?)(l.PrecioUnitario * l.Cantidad)) ?? 0, Impuestos = m.Lineas.Sum(l => (decimal?)Math.Round((l.PrecioUnitario * l.Cantidad * l.PorcentajeImpuesto / 100),2)) ?? 0, CompradorNombreOEmpresa = m.CompradorNombreOEmpresa, ListaDescripciones = m.Lineas.Select(l => l.Descripcion), CompradorNombreComercial = m.Comprador.NombreComercial }); var facturas = await consultaLineasFacturas.ToPagedListAsync(filtroBusqueda.IndicePagina, filtroBusqueda.LineasPorPagina); return facturas; }
public async Task<TotalesFacturas> ObtenerTotalesAsync(FiltroBusquedaFactura filtroBusqueda) { var consultaFacturas = CrearConsultaFacturasFiltrada(filtroBusqueda); var totales = await consultaFacturas.Select(m=> new { Id = 1, BaseImponible = m.Lineas.Sum(l => (decimal?)(l.PrecioUnitario * l.Cantidad)) ?? 0, Impuestos = m.Lineas.Sum(l => (decimal?)Math.Round((l.PrecioUnitario * l.Cantidad * l.PorcentajeImpuesto / 100),2)) ?? 0, }) .GroupBy(m=> m.Id) .Select(g=> new TotalesFacturas { TotalBaseImponible = g.Sum(t=>t.BaseImponible), TotalImpuestos = g.Sum(t => t.Impuestos), }).FirstOrDefaultAsync(); if (totales == null) totales = new TotalesFacturas(); return totales; }
public async Task<ActionResult> ListaGestionFacturas(FiltroBusquedaFactura filtroBusqueda, int? pagina) { if (!filtroBusqueda.TieneValores) { filtroBusqueda = RecuperarFiltroBusqueda(); if (pagina.HasValue) filtroBusqueda.IndicePagina = pagina.Value; } var viewmodel = new ListaGestionFacturasViewModel { FiltroBusqueda = filtroBusqueda, ListaFacturas = await _servicioFactura.ListaGestionFacturasAsync(filtroBusqueda), Totales = await _servicioFactura.ObtenerTotalesAsync(filtroBusqueda) }; GuardarFiltroBusqueda(filtroBusqueda); return View("ListaGestionFacturas", viewmodel); }
private IQueryable<Factura> CrearConsultaFacturasFiltrada(FiltroBusquedaFactura filtroBusqueda) { var consulta = _contexto.Facturas.AsQueryable(); if (filtroBusqueda.TieneValores) { consulta = consulta.Where_FiltroBusqueda(filtroBusqueda); } return consulta; }
private void GuardarFiltroBusqueda(FiltroBusquedaFactura filtro) { Session["FiltroBusquedaFacturas"] = filtro; }
public async Task<ActionResult> DescargarExcel(FiltroBusquedaFactura filtroBusqueda) { if (!filtroBusqueda.TieneValores) { filtroBusqueda = FiltroBusquedaConValoresPorDefecto(); } filtroBusqueda.LineasPorPagina = int.MaxValue; var listaGestionFacturas = await _servicioFactura.ListaGestionFacturasAsync(filtroBusqueda); if (!listaGestionFacturas.Any()) return RedirectToAction("ListaGestionFacturas"); var workbook = ServicioExcel.GenerarExcelFactura(filtroBusqueda, listaGestionFacturas); var nombreArchivoExcel = string.Format("Facturacion_desde_{0}_hasta_{1}", filtroBusqueda.FechaDesde.Value.ToString("dd-MM-yyyy"), filtroBusqueda.FechaHasta.Value.ToString("dd-MM-yyyy")); return new ExcelResult(workbook, nombreArchivoExcel); }
public async Task<ActionResult> DescargarZip(FiltroBusquedaFactura filtroBusqueda) { if (!filtroBusqueda.TieneValores) { filtroBusqueda = FiltroBusquedaConValoresPorDefecto(); } filtroBusqueda.LineasPorPagina = int.MaxValue; var listaGestionFacturas = await _servicioFactura.ListaGestionFacturasAsync(filtroBusqueda); if (!listaGestionFacturas.Any()) return RedirectToAction("ListaGestionFacturas"); var archivoZip = await GenerarZip(listaGestionFacturas); var nombreArchivoZip = string.Format("Facturas_desde_{0}_hasta_{1}.zip", filtroBusqueda.FechaDesde.Value.ToString("dd-MM-yyyy"), filtroBusqueda.FechaHasta.Value.ToString("dd-MM-yyyy")); archivoZip.Position = 0; HttpContext.Response.AppendHeader("content-disposition", "attachment; filename=" + nombreArchivoZip); return File(archivoZip, "application/zip"); }
public void Get_ListaGestionFacturas_EsOk() { // Arrange var controller = ObtenerControladorFacturas(); var filtroBusqueda = new FiltroBusquedaFactura { FechaDesde = new DateTime(2015,8,1), FechaHasta = new DateTime(2016, 1, 1) }; // Act var result = controller.ListaGestionFacturas(filtroBusqueda, 1).Result; // Assert Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(ActionResult)); Assert.IsInstanceOfType((ListaGestionFacturasViewModel)((ViewResult)result).ViewData.Model, typeof(ListaGestionFacturasViewModel)); controller.Dispose(); }
public static XLWorkbook GenerarExcelFactura(FiltroBusquedaFactura filtroBusqueda, IEnumerable<LineaListaGestionFacturas> facturas) { var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Facturación"); worksheet.Name = "Facturación"; worksheet.Range("A1:E1").Style.Font.SetBold(); if (filtroBusqueda.FechaDesde.HasValue && filtroBusqueda.FechaHasta.HasValue) worksheet.Range("A1:E1").Merge().Value = string.Format("Facturación entre {0} y {1}", filtroBusqueda.FechaDesde.Value.ToShortDateString(), filtroBusqueda.FechaHasta.Value.ToShortDateString()); //cabecera worksheet.Cell("A3").Value = new[] { new { Fecha="FECHA", //Dia="DIA", //Mes = "MES", //Año = "AÑO", NumFactura = "Nº FACTURA", Cliente = "NOMBRE", Titulo ="CONCEPTO", BaseImponible = "BASE IMPONIBLE", CuotaIva ="CUOTA IVA", Total ="TOTAL FACTURA" } }; worksheet.Range("A3:G3").Style .Font.SetFontSize(13) .Font.SetBold(true) .Font.SetFontColor(XLColor.White) .Fill.SetBackgroundColor(XLColor.Gray) .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); //Lineas var row = 4; var col = 1; foreach (var factura in facturas.OrderBy(m => m.FechaEmisionFactura)) { worksheet.Cell(row, col).Value = factura.FechaEmisionFactura.ToShortDateString(); //col++; //worksheet.Cell(row, col).Value = factura.FechaEmisionFactura.Day; //col++; //worksheet.Cell(row, col).Value = factura.FechaEmisionFactura.Month; //col++; //worksheet.Cell(row, col).Value = factura.FechaEmisionFactura.Year; col++; worksheet.Cell(row, col).Value = factura.NumeroFactura; col++; worksheet.Cell(row, col).Value = factura.CompradorNombreOEmpresa; col++; worksheet.Cell(row, col).Value = factura.Conceptos.TruncarConElipsis(70); worksheet.Cell(row, col).Comment.AddText(factura.Conceptos); col++; worksheet.Cell(row, col).DataType = XLCellValues.Number; worksheet.Cell(row, col).Value = factura.BaseImponible; worksheet.Cell(row, col).Style.NumberFormat.SetFormat("#,##0.00 €"); col++; worksheet.Cell(row, col).DataType = XLCellValues.Number; worksheet.Cell(row, col).Value = factura.Impuestos; worksheet.Cell(row, col).Style.NumberFormat.SetFormat("#,##0.00 €"); col++; worksheet.Cell(row, col).DataType = XLCellValues.Number; worksheet.Cell(row, col).Value = factura.ImporteTotal; worksheet.Cell(row, col).Style.NumberFormat.SetFormat("#,##0.00 €"); row++; col = 1; } worksheet.Columns().AdjustToContents().Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); worksheet.Column("D").Style .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left); return workbook; }