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;
        }
예제 #2
0
        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;
        }
예제 #3
0
        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);
        }
예제 #5
0
        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();
        }
예제 #10
0
        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;
        }