diff --git a/.gitignore b/.gitignore index 5d29872f3..e98ab6d8c 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ nb-configuration.xml .idea/ *.iml /newrelic +src/main/resources/**/*.jasper \ No newline at end of file diff --git a/src/main/java/sic/controller/CuentaCorrienteController.java b/src/main/java/sic/controller/CuentaCorrienteController.java index 682d4b8d8..4c050545c 100644 --- a/src/main/java/sic/controller/CuentaCorrienteController.java +++ b/src/main/java/sic/controller/CuentaCorrienteController.java @@ -23,6 +23,7 @@ import sic.service.IClienteService; import sic.service.ICuentaCorrienteService; import sic.service.IProveedorService; +import sic.util.FormatoReporte; @RestController @RequestMapping("/api/v1") @@ -119,7 +120,7 @@ public ResponseEntity getReporteCuentaCorriente( cuentaCorrienteService.getReporteCuentaCorrienteCliente( cuentaCorrienteService.getCuentaCorrientePorCliente( clienteService.getClienteNoEliminadoPorId(criteria.getIdCliente())), - formato); + FormatoReporte.XLSX); headers.setContentLength(reporteXls.length); return new ResponseEntity<>(reporteXls, headers, HttpStatus.OK); } @@ -130,7 +131,7 @@ public ResponseEntity getReporteCuentaCorriente( cuentaCorrienteService.getReporteCuentaCorrienteCliente( cuentaCorrienteService.getCuentaCorrientePorCliente( clienteService.getClienteNoEliminadoPorId(criteria.getIdCliente())), - formato); + FormatoReporte.PDF); return new ResponseEntity<>(reportePDF, headers, HttpStatus.OK); } default -> throw new BusinessServiceException(messageSource.getMessage( @@ -148,32 +149,32 @@ public ResponseEntity getReporteListaDeCuentasCorrienteClientePorCriteri headers.setCacheControl("must-revalidate, post-check=0, pre-check=0"); return switch (formato) { case "xlsx" -> - this.getReporteListaDeCuentasCorrienteClienteEnXlsx(headers, criteria, claims, formato); + this.getReporteListaDeCuentasCorrienteClienteEnXlsx(headers, criteria, claims); case "pdf" -> - this.getReporteListaDeCuentasCorrienteClienteEnPdf(headers, criteria, claims, formato); + this.getReporteListaDeCuentasCorrienteClienteEnPdf(headers, criteria, claims); default -> throw new BusinessServiceException( messageSource.getMessage("mensaje_formato_no_valido", null, Locale.getDefault())); }; } private ResponseEntity getReporteListaDeCuentasCorrienteClienteEnXlsx( - HttpHeaders headers, BusquedaCuentaCorrienteClienteCriteria criteria, Claims claims, String formato) { + HttpHeaders headers, BusquedaCuentaCorrienteClienteCriteria criteria, Claims claims) { headers.setContentType(new MediaType("application", "vnd.ms-excel")); headers.set(CONTENT_DISPOSITION_HEADER, "attachment; filename=ListaClientes.xlsx"); byte[] reporteXls = cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( - criteria, (int) claims.get(ID_USUARIO), formato); + criteria, (int) claims.get(ID_USUARIO), FormatoReporte.XLSX); headers.setContentLength(reporteXls.length); return new ResponseEntity<>(reporteXls, headers, HttpStatus.OK); } private ResponseEntity getReporteListaDeCuentasCorrienteClienteEnPdf( - HttpHeaders headers, BusquedaCuentaCorrienteClienteCriteria criteria, Claims claims, String formato) { + HttpHeaders headers, BusquedaCuentaCorrienteClienteCriteria criteria, Claims claims) { headers.setContentType(MediaType.APPLICATION_PDF); headers.add(CONTENT_DISPOSITION_HEADER, "attachment; filename=ListaClientes.pdf"); byte[] reportePDF = cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( - criteria, (int) claims.get(ID_USUARIO), formato); + criteria, (int) claims.get(ID_USUARIO), FormatoReporte.PDF); return new ResponseEntity<>(reportePDF, headers, HttpStatus.OK); } } diff --git a/src/main/java/sic/controller/ProductoController.java b/src/main/java/sic/controller/ProductoController.java index d670a7402..b81aee8c8 100644 --- a/src/main/java/sic/controller/ProductoController.java +++ b/src/main/java/sic/controller/ProductoController.java @@ -15,6 +15,7 @@ import sic.modelo.dto.*; import sic.service.*; import sic.exception.BusinessServiceException; +import sic.util.FormatoReporte; import javax.persistence.EntityNotFoundException; @@ -126,12 +127,10 @@ public void getListaDePrecios( @RequestBody BusquedaProductoCriteria criteria, @PathVariable long idSucursal, @RequestParam(required = false) String formato) { - if (formato == null || formato.isEmpty()) { - formato = "xlsx"; - } + if (formato == null || formato.isEmpty()) formato = "pdf"; switch (formato) { - case "xlsx" -> productoService.getListaDePreciosEnXls(criteria, idSucursal); - case "pdf" -> productoService.getListaDePreciosEnPdf(criteria, idSucursal); + case "xlsx" -> productoService.procesarReporteListaDePrecios(criteria, idSucursal, FormatoReporte.XLSX); + case "pdf" -> productoService.procesarReporteListaDePrecios(criteria, idSucursal, FormatoReporte.PDF); default -> throw new BusinessServiceException( messageSource.getMessage("mensaje_formato_no_valido", null, Locale.getDefault())); } diff --git a/src/main/java/sic/service/ICuentaCorrienteService.java b/src/main/java/sic/service/ICuentaCorrienteService.java index 280625074..516a6df13 100644 --- a/src/main/java/sic/service/ICuentaCorrienteService.java +++ b/src/main/java/sic/service/ICuentaCorrienteService.java @@ -6,7 +6,7 @@ import sic.modelo.*; import sic.modelo.criteria.BusquedaCuentaCorrienteClienteCriteria; import sic.modelo.criteria.BusquedaCuentaCorrienteProveedorCriteria; - +import sic.util.FormatoReporte; import java.math.BigDecimal; import java.util.List; @@ -18,11 +18,9 @@ public interface ICuentaCorrienteService { BigDecimal getSaldoCuentaCorriente(long idCliente); - CuentaCorrienteCliente guardarCuentaCorrienteCliente( - CuentaCorrienteCliente cuentaCorrienteCliente); + CuentaCorrienteCliente guardarCuentaCorrienteCliente(CuentaCorrienteCliente cuentaCorrienteCliente); - CuentaCorrienteProveedor guardarCuentaCorrienteProveedor( - CuentaCorrienteProveedor cuentaCorrienteProveedor); + CuentaCorrienteProveedor guardarCuentaCorrienteProveedor(CuentaCorrienteProveedor cuentaCorrienteProveedor); void validarReglasDeNegocio(CuentaCorriente cuentaCorriente); @@ -50,8 +48,10 @@ Page buscarCuentaCorrienteProveedor( void asentarEnCuentaCorriente(Remito remito, TipoDeOperacion tipo); - byte[] getReporteCuentaCorrienteCliente( - CuentaCorrienteCliente cuentaCorrienteCliente, String formato); + byte[] getReporteCuentaCorrienteCliente(CuentaCorrienteCliente cuentaCorrienteCliente, FormatoReporte formato); + + byte[] getReporteListaDeCuentasCorrienteClientePorCriteria( + BusquedaCuentaCorrienteClienteCriteria criteria, long idUsuarioLoggedIn, FormatoReporte formato); List getUltimosDosMovimientos(CuentaCorriente cuentaCorriente); @@ -65,11 +65,7 @@ byte[] getReporteCuentaCorrienteCliente( RenglonCuentaCorriente getRenglonCuentaCorrienteDeRemito(Remito remito, boolean eliminado); - byte[] getReporteListaDeCuentasCorrienteClientePorCriteria( - BusquedaCuentaCorrienteClienteCriteria criteria, long idUsuarioLoggedIn, String formato); - - BooleanBuilder getBuilder( - BusquedaCuentaCorrienteClienteCriteria criteria, long idUsuarioLoggedIn); + BooleanBuilder getBuilder(BusquedaCuentaCorrienteClienteCriteria criteria, long idUsuarioLoggedIn); List buscarCuentasCorrienteClienteParaReporte( BusquedaCuentaCorrienteClienteCriteria criteria, long idUsuarioLoggedIn); diff --git a/src/main/java/sic/service/IProductoService.java b/src/main/java/sic/service/IProductoService.java index 8201f19f6..25cf551cd 100644 --- a/src/main/java/sic/service/IProductoService.java +++ b/src/main/java/sic/service/IProductoService.java @@ -11,6 +11,7 @@ import sic.modelo.dto.*; import sic.modelo.embeddable.CantidadProductoEmbeddable; import sic.modelo.embeddable.PrecioProductoEmbeddable; +import sic.util.FormatoReporte; public interface IProductoService { @@ -38,9 +39,11 @@ void actualizarStockNotaCredito( Page buscarProductos(BusquedaProductoCriteria criteria, Long idSucursal); - Page buscarProductosDeCatalogoParaUsuario(BusquedaProductoCriteria criteria, Long idSucursal, Long isSucursal); + Page buscarProductosDeCatalogoParaUsuario( + BusquedaProductoCriteria criteria, Long idSucursal, Long isSucursal); - Page buscarProductosDeCatalogoParaVenta(BusquedaProductoCriteria criteria, Long idSucursal, Long idUsuario, Long idCliente); + Page buscarProductosDeCatalogoParaVenta( + BusquedaProductoCriteria criteria, Long idSucursal, Long idUsuario, Long idCliente); void marcarFavoritos(Page productos, long idUsuario); @@ -75,17 +78,17 @@ BigDecimal calcularGananciaPorcentaje( Producto getProductoPorCodigo(String codigo); - Producto getProductoPorDescripcion(String descripciona); + Producto getProductoPorDescripcion(String descripcion); Producto getProductoNoEliminadoPorId(long idProducto); BigDecimal calcularValorStock(BusquedaProductoCriteria criteria); - void getListaDePreciosEnXls(BusquedaProductoCriteria criteria, long idSucursal); + void procesarReporteListaDePrecios(BusquedaProductoCriteria criteria, long idSucursal, FormatoReporte formato); - void getListaDePreciosEnPdf(BusquedaProductoCriteria criteria, long idSucursal); + void enviarListaDeProductosPorEmail(String mailTo, byte[] listaDeProductos, FormatoReporte formato); - void enviarListaDeProductosPorEmail(String mailTo, byte[] listaDeProductos, String formato); + byte[] getReporteListaDePrecios(List productos, FormatoReporte formato); Producto guardar(NuevoProductoDTO producto, long idMedida, long idRubro, long idProveedor); @@ -119,7 +122,8 @@ BigDecimal calcularGananciaPorcentaje( void validarLongitudDeArrays(int longitudIds, int longitudCantidades); - ProductoFaltanteDTO construirNuevoProductoFaltante(Producto producto, BigDecimal cantidadSolicitada, BigDecimal cantidadDisponible, long idSucursal); + ProductoFaltanteDTO construirNuevoProductoFaltante( + Producto producto, BigDecimal cantidadSolicitada, BigDecimal cantidadDisponible, long idSucursal); PrecioProductoEmbeddable construirPrecioProductoEmbeddable(ProductoDTO productoDTO); diff --git a/src/main/java/sic/service/impl/CuentaCorrienteServiceImpl.java b/src/main/java/sic/service/impl/CuentaCorrienteServiceImpl.java index ab8bd9fdb..4ed03028c 100644 --- a/src/main/java/sic/service/impl/CuentaCorrienteServiceImpl.java +++ b/src/main/java/sic/service/impl/CuentaCorrienteServiceImpl.java @@ -1,6 +1,5 @@ package sic.service.impl; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -13,11 +12,6 @@ import javax.imageio.ImageIO; import javax.swing.ImageIcon; import com.querydsl.core.BooleanBuilder; -import net.sf.jasperreports.engine.*; -import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; -import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter; -import net.sf.jasperreports.export.SimpleExporterInput; -import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -43,6 +37,8 @@ import sic.service.ISucursalService; import sic.service.IUsuarioService; import sic.util.CustomValidator; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; @Service public class CuentaCorrienteServiceImpl implements ICuentaCorrienteService { @@ -58,6 +54,7 @@ public class CuentaCorrienteServiceImpl implements ICuentaCorrienteService { private static final int TAMANIO_PAGINA_DEFAULT = 25; private final MessageSource messageSource; private final CustomValidator customValidator; + private final JasperReportsHandler jasperReportsHandler; @Autowired @Lazy @@ -68,7 +65,7 @@ public CuentaCorrienteServiceImpl( RenglonCuentaCorrienteRepository renglonCuentaCorrienteRepository, IUsuarioService usuarioService, IClienteService clienteService, ISucursalService sucursalService, CustomValidator customValidator, - MessageSource messageSource) { + MessageSource messageSource, JasperReportsHandler jasperReportsHandler) { this.cuentaCorrienteRepository = cuentaCorrienteRepository; this.cuentaCorrienteClienteRepository = cuentaCorrienteClienteRepository; this.cuentaCorrienteProveedorRepository = cuentaCorrienteProveedorRepository; @@ -78,12 +75,12 @@ public CuentaCorrienteServiceImpl( this.sucursalService = sucursalService; this.messageSource = messageSource; this.customValidator = customValidator; + this.jasperReportsHandler = jasperReportsHandler; } @Override @Transactional - public CuentaCorrienteCliente guardarCuentaCorrienteCliente( - CuentaCorrienteCliente cuentaCorrienteCliente) { + public CuentaCorrienteCliente guardarCuentaCorrienteCliente(CuentaCorrienteCliente cuentaCorrienteCliente) { customValidator.validar(cuentaCorrienteCliente); this.validarReglasDeNegocio(cuentaCorrienteCliente); cuentaCorrienteCliente = cuentaCorrienteClienteRepository.save(cuentaCorrienteCliente); @@ -93,8 +90,7 @@ public CuentaCorrienteCliente guardarCuentaCorrienteCliente( @Override @Transactional - public CuentaCorrienteProveedor guardarCuentaCorrienteProveedor( - CuentaCorrienteProveedor cuentaCorrienteProveedor) { + public CuentaCorrienteProveedor guardarCuentaCorrienteProveedor(CuentaCorrienteProveedor cuentaCorrienteProveedor) { customValidator.validar(cuentaCorrienteProveedor); this.validarReglasDeNegocio(cuentaCorrienteProveedor); cuentaCorrienteProveedor = cuentaCorrienteProveedorRepository.save(cuentaCorrienteProveedor); @@ -490,69 +486,35 @@ private void cambiarFechaUltimoComprobante(CuentaCorriente cc, RenglonCuentaCorr } @Override - public byte[] getReporteCuentaCorrienteCliente( - CuentaCorrienteCliente cuentaCorrienteCliente, String formato) { - var classLoader = this.getClass().getClassLoader(); - var isFileReport = - classLoader.getResourceAsStream("sic/vista/reportes/CuentaCorriente.jasper"); - JRBeanCollectionDataSource ds = - new JRBeanCollectionDataSource( - this.getRenglonesCuentaCorrienteParaReporte( - cuentaCorrienteCliente.getIdCuentaCorriente())); + public byte[] getReporteCuentaCorrienteCliente(CuentaCorrienteCliente cuentaCorrienteCliente, FormatoReporte formato) { + var renglonesCuentaCorriente = this.getRenglonesCuentaCorrienteParaReporte(cuentaCorrienteCliente.getIdCuentaCorriente()); Map params = new HashMap<>(); params.put("cuentaCorrienteCliente", cuentaCorrienteCliente); - Sucursal sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); + var sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); if (sucursalPredeterminada.getLogo() != null && !sucursalPredeterminada.getLogo().isEmpty()) { try { - params.put( - "logo", new ImageIcon(ImageIO.read(new URL(sucursalPredeterminada.getLogo()))).getImage()); + params.put("logo", new ImageIcon(ImageIO.read(new URL(sucursalPredeterminada.getLogo()))).getImage()); } catch (IOException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); + throw new ServiceException(messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); } } - switch (formato) { - case "xlsx" -> { - try { - return xlsReportToArray(JasperFillManager.fillReport(isFileReport, params, ds)); - } catch (JRException ex) { - throw new ServiceException( - messageSource.getMessage("mensaje_error_reporte", null, Locale.getDefault()), ex); - } - } - case "pdf" -> { - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(isFileReport, params, ds)); - } catch (JRException ex) { - throw new ServiceException( - messageSource.getMessage("mensaje_error_reporte", null, Locale.getDefault()), ex); - } - } - default -> throw new BusinessServiceException( - messageSource.getMessage("mensaje_formato_no_valido", null, Locale.getDefault())); - } + return jasperReportsHandler.compilar("report/CuentaCorriente.jrxml", params, renglonesCuentaCorriente, formato); } - private byte[] xlsReportToArray(JasperPrint jasperPrint) { - byte[] bytes = null; - try { - JRXlsxExporter jasperXlsxExportMgr = new JRXlsxExporter(); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - SimpleOutputStreamExporterOutput simpleOutputStreamExporterOutput = - new SimpleOutputStreamExporterOutput(out); - jasperXlsxExportMgr.setExporterInput(new SimpleExporterInput(jasperPrint)); - jasperXlsxExportMgr.setExporterOutput(simpleOutputStreamExporterOutput); - jasperXlsxExportMgr.exportReport(); - bytes = out.toByteArray(); - out.close(); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } catch (IOException ex) { - logger.error(ex.getMessage()); + @Override + public byte[] getReporteListaDeCuentasCorrienteClientePorCriteria(BusquedaCuentaCorrienteClienteCriteria criteria, + long idUsuarioLoggedIn, FormatoReporte formato) { + var cuentaCorrienteClientes = this.buscarCuentasCorrienteClienteParaReporte(criteria, idUsuarioLoggedIn); + Map params = new HashMap<>(); + var sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); + if (sucursalPredeterminada.getLogo() != null && !sucursalPredeterminada.getLogo().isEmpty()) { + try { + params.put("logo", new ImageIcon(ImageIO.read(new URL(sucursalPredeterminada.getLogo()))).getImage()); + } catch (IOException ex) { + throw new ServiceException(messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); + } } - return bytes; + return jasperReportsHandler.compilar("report/ListaClientes.jrxml", params, cuentaCorrienteClientes, formato); } @Override @@ -561,8 +523,7 @@ public RenglonCuentaCorriente guardar(RenglonCuentaCorriente renglonCuentaCorrie } @Override - public RenglonCuentaCorriente getRenglonCuentaCorrienteDeFactura( - Factura factura, boolean eliminado) { + public RenglonCuentaCorriente getRenglonCuentaCorrienteDeFactura(Factura factura, boolean eliminado) { return renglonCuentaCorrienteRepository.findByFacturaAndEliminado(factura, eliminado); } @@ -572,28 +533,24 @@ public RenglonCuentaCorriente getRenglonCuentaCorrienteDeNota(Nota nota, boolean } @Override - public RenglonCuentaCorriente getRenglonCuentaCorrienteDeRecibo( - Recibo recibo, boolean eliminado) { + public RenglonCuentaCorriente getRenglonCuentaCorrienteDeRecibo(Recibo recibo, boolean eliminado) { return renglonCuentaCorrienteRepository.findByReciboAndEliminado(recibo, eliminado); } @Override - public RenglonCuentaCorriente getRenglonCuentaCorrienteDeRemito( - Remito remito, boolean eliminado) { + public RenglonCuentaCorriente getRenglonCuentaCorrienteDeRemito(Remito remito, boolean eliminado) { return renglonCuentaCorrienteRepository.findByRemitoAndEliminado(remito, eliminado); } @Override - public Page getRenglonesCuentaCorriente( - long idCuentaCorriente, Integer pagina) { + public Page getRenglonesCuentaCorriente(long idCuentaCorriente, Integer pagina) { Pageable pageable = PageRequest.of(pagina, TAMANIO_PAGINA_DEFAULT); return renglonCuentaCorrienteRepository.findAllByCuentaCorrienteAndEliminado( idCuentaCorriente, pageable); } @Override - public List getRenglonesCuentaCorrienteParaReporte( - long idCuentaCorriente) { + public List getRenglonesCuentaCorrienteParaReporte(long idCuentaCorriente) { return renglonCuentaCorrienteRepository.findAllByCuentaCorrienteAndEliminado(idCuentaCorriente); } @@ -604,50 +561,4 @@ public List getUltimosDosMovimientos(CuentaCorriente cue cuentaCorriente, false); } - @Override - public byte[] getReporteListaDeCuentasCorrienteClientePorCriteria(BusquedaCuentaCorrienteClienteCriteria criteria, long idUsuarioLoggedIn, String formato) { - List cuentaCorrienteClientes = this.buscarCuentasCorrienteClienteParaReporte(criteria, idUsuarioLoggedIn); - JasperReport jasperDesign; - try { - var classLoader = this.getClass().getClassLoader(); - var isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/ListaClientes.jrxml"); - jasperDesign = JasperCompileManager.compileReport(isFileReport); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } - Map params = new HashMap<>(); - Sucursal sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); - if (sucursalPredeterminada.getLogo() != null && !sucursalPredeterminada.getLogo().isEmpty()) { - try { - params.put( - "logo", new ImageIcon(ImageIO.read(new URL(sucursalPredeterminada.getLogo()))).getImage()); - } catch (IOException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); - } - } - JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(cuentaCorrienteClientes); - switch (formato) { - case "xlsx" -> { - try { - return xlsReportToArray(JasperFillManager.fillReport(jasperDesign, params, ds)); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } - } - case "pdf" -> { - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(jasperDesign, params, ds)); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } - } - default -> throw new BusinessServiceException(messageSource.getMessage( - "mensaje_formato_no_valido", null, Locale.getDefault())); - } - } } diff --git a/src/main/java/sic/service/impl/FacturaVentaServiceImpl.java b/src/main/java/sic/service/impl/FacturaVentaServiceImpl.java index 55628ac31..116e6df57 100644 --- a/src/main/java/sic/service/impl/FacturaVentaServiceImpl.java +++ b/src/main/java/sic/service/impl/FacturaVentaServiceImpl.java @@ -1,8 +1,6 @@ package sic.service.impl; import com.querydsl.core.BooleanBuilder; -import net.sf.jasperreports.engine.*; -import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +19,8 @@ import sic.service.*; import sic.util.CalculosComprobante; import sic.util.CustomValidator; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; import javax.imageio.ImageIO; import javax.swing.*; @@ -52,6 +52,7 @@ public class FacturaVentaServiceImpl implements IFacturaVentaService { private static final String NRO_SERIE = "nroSerie"; private static final String NRO_FACTURA = "nroFactura"; private final CustomValidator customValidator; + private final JasperReportsHandler jasperReportsHandler; @Autowired @Lazy @@ -68,7 +69,8 @@ public FacturaVentaServiceImpl( ITransportistaService transportistaService, ISucursalService sucursalService, MessageSource messageSource, - CustomValidator customValidator) { + CustomValidator customValidator, + JasperReportsHandler jasperReportsHandler) { this.facturaVentaRepository = facturaVentaRepository; this.reciboService = reciboService; this.taxationService = taxationService; @@ -82,6 +84,7 @@ public FacturaVentaServiceImpl( this.sucursalService = sucursalService; this.messageSource = messageSource; this.customValidator = customValidator; + this.jasperReportsHandler = jasperReportsHandler; } @Override @@ -464,24 +467,8 @@ public byte[] getReporteFacturaVenta(Factura factura) { messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); } } - List renglones = facturaService.getRenglonesDeLaFactura(factura.getIdFactura()); - JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(renglones); - JasperReport jasperDesign; - try { - var classLoader = this.getClass().getClassLoader(); - var isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/FacturaVenta.jrxml"); - jasperDesign = JasperCompileManager.compileReport(isFileReport); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(jasperDesign, params, ds)); - } catch (JRException ex) { - throw new ServiceException( - messageSource.getMessage("mensaje_error_reporte", null, Locale.getDefault()), ex); - } + var renglones = facturaService.getRenglonesDeLaFactura(factura.getIdFactura()); + return jasperReportsHandler.compilar("report/FacturaVenta.jrxml", params, renglones, FormatoReporte.PDF); } @Override diff --git a/src/main/java/sic/service/impl/NotaServiceImpl.java b/src/main/java/sic/service/impl/NotaServiceImpl.java index 67ef31aab..d3ae15869 100644 --- a/src/main/java/sic/service/impl/NotaServiceImpl.java +++ b/src/main/java/sic/service/impl/NotaServiceImpl.java @@ -1,7 +1,6 @@ package sic.service.impl; import java.io.IOException; -import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URL; @@ -11,10 +10,6 @@ import javax.persistence.EntityNotFoundException; import javax.swing.ImageIcon; import com.querydsl.core.BooleanBuilder; -import net.sf.jasperreports.engine.JRException; -import net.sf.jasperreports.engine.JasperExportManager; -import net.sf.jasperreports.engine.JasperFillManager; -import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +34,8 @@ import sic.exception.BusinessServiceException; import sic.exception.ServiceException; import sic.util.CustomValidator; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; @Service public class NotaServiceImpl implements INotaService { @@ -66,26 +63,28 @@ public class NotaServiceImpl implements INotaService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final MessageSource messageSource; private final CustomValidator customValidator; + private final JasperReportsHandler jasperReportsHandler; @Autowired @Lazy public NotaServiceImpl( - NotaRepository notaRepository, - NotaCreditoRepository notaCreditoRepository, - NotaDebitoRepository notaDebitoRepository, - IFacturaService facturaService, - INotaService notaService, - IReciboService reciboService, - IClienteService clienteService, - IProveedorService proveedorService, - IUsuarioService usuarioService, - IProductoService productoService, - ISucursalService sucursalService, - ICuentaCorrienteService cuentaCorrienteService, - IPaymentService paymentService, - ITaxationService taxationService, - MessageSource messageSource, - CustomValidator customValidator) { + NotaRepository notaRepository, + NotaCreditoRepository notaCreditoRepository, + NotaDebitoRepository notaDebitoRepository, + IFacturaService facturaService, + INotaService notaService, + IReciboService reciboService, + IClienteService clienteService, + IProveedorService proveedorService, + IUsuarioService usuarioService, + IProductoService productoService, + ISucursalService sucursalService, + ICuentaCorrienteService cuentaCorrienteService, + IPaymentService paymentService, + ITaxationService taxationService, + MessageSource messageSource, + CustomValidator customValidator, + JasperReportsHandler jasperReportsHandler) { this.notaRepository = notaRepository; this.notaCreditoRepository = notaCreditoRepository; this.notaDebitoRepository = notaDebitoRepository; @@ -102,6 +101,7 @@ public NotaServiceImpl( this.taxationService = taxationService; this.messageSource = messageSource; this.customValidator = customValidator; + this.jasperReportsHandler = jasperReportsHandler; } @Override @@ -1114,41 +1114,27 @@ private void actualizarStock( @Override public byte[] getReporteNota(Nota nota) { - var classLoader = this.getClass().getClassLoader(); - InputStream isFileReport; - JRBeanCollectionDataSource ds; Map params = new HashMap<>(); - if (nota instanceof NotaCredito) { - isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/NotaCredito.jasper"); - List renglones = this.getRenglonesDeNotaCredito(nota.getIdNota()); - ds = new JRBeanCollectionDataSource(renglones); - params.put("notaCredito", nota); - } else { - isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/NotaDebito.jasper"); - List renglones = this.getRenglonesDeNotaDebito(nota.getIdNota()); - ds = new JRBeanCollectionDataSource(renglones); - params.put("notaDebito", nota); - } - ConfiguracionSucursal configuracionSucursal = nota.getSucursal().getConfiguracionSucursal(); + var configuracionSucursal = nota.getSucursal().getConfiguracionSucursal(); params.put("preImpresa", configuracionSucursal.isUsarFacturaVentaPreImpresa()); if (nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_B) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_C) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_X) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_B) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_C) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_X) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_PRESUPUESTO) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_PRESUPUESTO)) { + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_C) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_X) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_B) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_C) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_X) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_PRESUPUESTO) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_PRESUPUESTO)) { nota.setSubTotalBruto(nota.getTotal()); nota.setIva105Neto(BigDecimal.ZERO); nota.setIva21Neto(BigDecimal.ZERO); } if (nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_A) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_B) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_C) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_A) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_B) - || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_C)) { + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_B) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_C) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_A) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_B) + || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_C)) { if (nota.getNumSerieAfip() != 0 && nota.getNumNotaAfip() != 0) { params.put("serie", nota.getNumSerieAfip()); params.put("nroNota", nota.getNumNotaAfip()); @@ -1162,21 +1148,21 @@ public byte[] getReporteNota(Nota nota) { } if (nota.getSucursal().getLogo() != null && !nota.getSucursal().getLogo().isEmpty()) { try { - params.put( - "logo", new ImageIcon(ImageIO.read(new URL(nota.getSucursal().getLogo()))).getImage()); + params.put("logo", new ImageIcon(ImageIO.read(new URL(nota.getSucursal().getLogo()))).getImage()); } catch (IOException ex) { logger.error(ex.getMessage()); throw new ServiceException( - messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); + messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); } } - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(isFileReport, params, ds)); - } catch (JRException ex) { - logger.error(ex.getMessage()); - throw new ServiceException( - messageSource.getMessage("mensaje_error_reporte", null, Locale.getDefault()), ex); + if (nota instanceof NotaCredito) { + var renglones = this.getRenglonesDeNotaCredito(nota.getIdNota()); + params.put("notaCredito", nota); + return jasperReportsHandler.compilar("report/NotaCredito.jrxml", params, renglones, FormatoReporte.PDF); + } else { + var renglones = this.getRenglonesDeNotaDebito(nota.getIdNota()); + params.put("notaDebito", nota); + return jasperReportsHandler.compilar("report/NotaDebito.jrxml", params, renglones, FormatoReporte.PDF); } } diff --git a/src/main/java/sic/service/impl/PedidoServiceImpl.java b/src/main/java/sic/service/impl/PedidoServiceImpl.java index d653b727d..bb8615ec1 100644 --- a/src/main/java/sic/service/impl/PedidoServiceImpl.java +++ b/src/main/java/sic/service/impl/PedidoServiceImpl.java @@ -10,9 +10,6 @@ import javax.imageio.ImageIO; import javax.persistence.EntityNotFoundException; import javax.swing.ImageIcon; - -import net.sf.jasperreports.engine.*; -import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,6 +34,8 @@ import sic.exception.ServiceException; import sic.util.CalculosComprobante; import sic.util.CustomValidator; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; @Service public class PedidoServiceImpl implements IPedidoService { @@ -55,20 +54,22 @@ public class PedidoServiceImpl implements IPedidoService { private static final int TAMANIO_PAGINA_DEFAULT = 25; private final MessageSource messageSource; private final CustomValidator customValidator; + private final JasperReportsHandler jasperReportsHandler; @Autowired public PedidoServiceImpl( - PedidoRepository pedidoRepository, - RenglonPedidoRepository renglonPedidoRepository, - IUsuarioService usuarioService, - IClienteService clienteService, - IProductoService productoService, - IEmailService emailService, - IReciboService reciboService, - ICuentaCorrienteService cuentaCorrienteService, - ModelMapper modelMapper, - MessageSource messageSource, - CustomValidator customValidator) { + PedidoRepository pedidoRepository, + RenglonPedidoRepository renglonPedidoRepository, + IUsuarioService usuarioService, + IClienteService clienteService, + IProductoService productoService, + IEmailService emailService, + IReciboService reciboService, + ICuentaCorrienteService cuentaCorrienteService, + ModelMapper modelMapper, + MessageSource messageSource, + CustomValidator customValidator, + JasperReportsHandler jasperReportsHandler) { this.pedidoRepository = pedidoRepository; this.renglonPedidoRepository = renglonPedidoRepository; this.usuarioService = usuarioService; @@ -80,6 +81,7 @@ public PedidoServiceImpl( this.modelMapper = modelMapper; this.messageSource = messageSource; this.customValidator = customValidator; + this.jasperReportsHandler = jasperReportsHandler; } @Override @@ -485,9 +487,8 @@ public void cancelar(Pedido pedido) { productoService.actualizarStockPedido(pedido, TipoDeOperacion.ACTUALIZACION); pedido = pedidoRepository.save(pedido); this.actualizarCantidadReservadaDeProductosPorCambioDeEstado(pedido); - logger.warn( - messageSource.getMessage( - "mensaje_pedido_cancelado", new Object[] {pedido}, Locale.getDefault())); + logger.warn(messageSource.getMessage( + "mensaje_pedido_cancelado", new Object[]{pedido}, Locale.getDefault())); } else { throw new BusinessServiceException( messageSource.getMessage( @@ -540,12 +541,11 @@ public List getRenglonesDelPedidoOrdenadorPorIdRenglonSegunEstado @Override public byte[] getReportePedido(long idPedido) { Map params = new HashMap<>(); - Pedido pedido = this.getPedidoNoEliminadoPorId(idPedido); + var pedido = this.getPedidoNoEliminadoPorId(idPedido); params.put("pedido", pedido); if (pedido.getSucursal().getLogo() != null && !pedido.getSucursal().getLogo().isEmpty()) { try { - params.put( - "logo", new ImageIcon(ImageIO.read(new URL(pedido.getSucursal().getLogo()))).getImage()); + params.put("logo", new ImageIcon(ImageIO.read(new URL(pedido.getSucursal().getLogo()))).getImage()); } catch (IOException ex) { throw new ServiceException(messageSource.getMessage( "mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); @@ -558,25 +558,8 @@ public byte[] getReportePedido(long idPedido) { detalleEnvio = pedido.getEnvio(); } params.put("detalleEnvio", detalleEnvio); - List renglones = - this.getRenglonesDelPedidoOrdenadorPorIdRenglon(pedido.getIdPedido()); - JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(renglones); - JasperReport jasperDesign; - try { - var classLoader = this.getClass().getClassLoader(); - var isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/Pedido.jrxml"); - jasperDesign = JasperCompileManager.compileReport(isFileReport); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(jasperDesign, params, ds)); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } + var renglones = this.getRenglonesDelPedidoOrdenadorPorIdRenglon(pedido.getIdPedido()); + return jasperReportsHandler.compilar("report/Pedido.jrxml", params, renglones, FormatoReporte.PDF); } @Override @@ -663,14 +646,10 @@ public Resultados calcularResultadosPedido(NuevosResultadosComprobanteDTO calcul @Scheduled(cron = "0 0/1 * * * ?") @Transactional public void cancelarPedidosAbiertos() { - logger.info( - messageSource.getMessage( - "mensaje_cron_job_cancelar_pedidos", null, Locale.getDefault())); + logger.info(messageSource.getMessage("mensaje_cron_job_cancelar_pedidos", null, Locale.getDefault())); Pageable pageable = PageRequest.of(0, Integer.MAX_VALUE); - Page paginaPedidos = - pedidoRepository.findAllByEstadoAndEliminado(EstadoPedido.ABIERTO, pageable); - paginaPedidos.forEach( - pedido -> { + Page paginaPedidos = pedidoRepository.findAllByEstadoAndEliminado(EstadoPedido.ABIERTO, pageable); + paginaPedidos.forEach(pedido -> { if (pedido.getFechaVencimiento().isBefore(LocalDateTime.now())) { this.cancelar(pedido); } diff --git a/src/main/java/sic/service/impl/ProductoServiceImpl.java b/src/main/java/sic/service/impl/ProductoServiceImpl.java index 71fadddb3..42ee7ee98 100644 --- a/src/main/java/sic/service/impl/ProductoServiceImpl.java +++ b/src/main/java/sic/service/impl/ProductoServiceImpl.java @@ -1,9 +1,6 @@ package sic.service.impl; import com.querydsl.core.BooleanBuilder; - -import net.sf.jasperreports.engine.*; -import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.*; @@ -12,7 +9,6 @@ import org.springframework.data.domain.Sort; import org.springframework.scheduling.annotation.Async; import sic.modelo.*; - import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URL; @@ -21,10 +17,6 @@ import javax.imageio.ImageIO; import javax.persistence.EntityNotFoundException; import javax.swing.ImageIcon; - -import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; -import net.sf.jasperreports.export.SimpleExporterInput; -import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -41,8 +33,8 @@ import sic.service.*; import sic.util.CalculosComprobante; import sic.util.CustomValidator; - -import java.io.ByteArrayOutputStream; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; import java.io.IOException; @Service @@ -65,32 +57,31 @@ public class ProductoServiceImpl implements IProductoService { private final IUsuarioService usuarioService; private final IEmailService emailService; private static final int TAMANIO_PAGINA_DEFAULT = 25; - private static final String FORMATO_XLSX = "xlsx"; - private static final String FORMATO_PDF = "pdf"; - private static final String MENSAJE_ERROR_REPORTE = "mensaje_error_reporte"; private static final String MENSAJE_ERROR_ACTUALIZAR_STOCK_PRODUCTO_ELIMINADO = "mensaje_error_actualizar_stock_producto_eliminado"; private static final String PRODUCTO_SIN_IMAGEN = "/producto_sin_imagen.png"; private final MessageSource messageSource; private final CustomValidator customValidator; + private final JasperReportsHandler jasperReportsHandler; @Autowired @Lazy public ProductoServiceImpl( - ProductoRepository productoRepository, - ProductoFavoritoRepository productoFavoritoRepository, - IRubroService rubroService, - IProveedorService proveedorService, - IMedidaService medidaService, - ICarritoCompraService carritoCompraService, - IImageUploaderService imageUploaderService, - ISucursalService sucursalService, - ITraspasoService traspasoService, - IPedidoService pedidoService, - IClienteService clienteService, - IUsuarioService usuarioService, - IEmailService emailService, - MessageSource messageSource, - CustomValidator customValidator) { + ProductoRepository productoRepository, + ProductoFavoritoRepository productoFavoritoRepository, + IRubroService rubroService, + IProveedorService proveedorService, + IMedidaService medidaService, + ICarritoCompraService carritoCompraService, + IImageUploaderService imageUploaderService, + ISucursalService sucursalService, + ITraspasoService traspasoService, + IPedidoService pedidoService, + IClienteService clienteService, + IUsuarioService usuarioService, + IEmailService emailService, + MessageSource messageSource, + CustomValidator customValidator, + JasperReportsHandler jasperReportsHandler) { this.productoRepository = productoRepository; this.productoFavoritoRepository = productoFavoritoRepository; this.rubroService = rubroService; @@ -106,6 +97,7 @@ public ProductoServiceImpl( this.emailService = emailService; this.messageSource = messageSource; this.customValidator = customValidator; + this.jasperReportsHandler = jasperReportsHandler; } @Override @@ -1027,7 +1019,8 @@ public List getProductosSinStockDisponibleParaTraspaso( } @Override - public ProductoFaltanteDTO construirNuevoProductoFaltante(Producto producto, BigDecimal cantidadSolicitada, BigDecimal cantidadDisponible, long idSucursal) { + public ProductoFaltanteDTO construirNuevoProductoFaltante( + Producto producto, BigDecimal cantidadSolicitada, BigDecimal cantidadDisponible, long idSucursal) { ProductoFaltanteDTO productoFaltanteDTO = new ProductoFaltanteDTO(); productoFaltanteDTO.setIdProducto(producto.getIdProducto()); productoFaltanteDTO.setCodigo(producto.getCodigo()); @@ -1103,90 +1096,38 @@ public BigDecimal calcularPrecioLista(BigDecimal pvp, BigDecimal ivaPorcentaje) @Override @Async - public void getListaDePreciosEnXls(BusquedaProductoCriteria criteria, long idSucursal) { - List productos = this.buscarProductosParaReporte(criteria); - this.enviarListaDeProductosPorEmail(sucursalService.getSucursalPorId(idSucursal).getEmail(), - this.getListaDePrecios(productos, FORMATO_XLSX), FORMATO_XLSX); - } - - @Override - @Async - public void getListaDePreciosEnPdf(BusquedaProductoCriteria criteria, long idSucursal) { - List productos = this.buscarProductosParaReporte(criteria); - this.enviarListaDeProductosPorEmail(sucursalService.getSucursalPorId(idSucursal).getEmail(), - this.getListaDePrecios(productos, FORMATO_PDF), FORMATO_PDF); + public void procesarReporteListaDePrecios(BusquedaProductoCriteria criteria, long idSucursal, FormatoReporte formato) { + var productos = this.buscarProductosParaReporte(criteria); + var reporte = this.getReporteListaDePrecios(productos, formato); + this.enviarListaDeProductosPorEmail(sucursalService.getSucursalPorId(idSucursal).getEmail(), reporte, formato); } @Override - public void enviarListaDeProductosPorEmail(String mailTo, byte[] listaDeProductos, String formato) { + public void enviarListaDeProductosPorEmail(String mailTo, byte[] listaDeProductos, FormatoReporte formato) { emailService.enviarEmail( mailTo, "", "Listado de productos", "", listaDeProductos, - "ListaDeProductos." + formato); + "ListaDeProductos." + formato.toString()); } - public byte[] getListaDePrecios(List productos, String formato) { + @Override + public byte[] getReporteListaDePrecios(List productos, FormatoReporte formato) { var params = new HashMap(); - var sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); + var sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); if (sucursalPredeterminada.getLogo() != null && !sucursalPredeterminada.getLogo().isEmpty()) { try { params.put("logo", new ImageIcon(ImageIO.read(new URL(sucursalPredeterminada.getLogo()))).getImage()); params.put("productoSinImagen", new ImageIcon(ImageIO.read(Objects.requireNonNull(getClass().getResource(PRODUCTO_SIN_IMAGEN)))) - .getImage()); + .getImage()); } catch (IOException | NullPointerException ex) { throw new ServiceException(messageSource.getMessage("mensaje_recurso_no_encontrado", null, Locale.getDefault()), ex); } } - var ds = new JRBeanCollectionDataSource(productos); - JasperReport jasperDesign; - try { - var classLoader = this.getClass().getClassLoader(); - var isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/ListaPreciosProductos.jrxml"); - jasperDesign = JasperCompileManager.compileReport(isFileReport); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage(MENSAJE_ERROR_REPORTE, null, Locale.getDefault()), ex); - } - switch (formato) { - case "xlsx" -> { - try { - return xlsReportToArray(JasperFillManager.fillReport(jasperDesign, params, ds)); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage(MENSAJE_ERROR_REPORTE, null, Locale.getDefault()), ex); - } - } - case "pdf" -> { - try { - return JasperExportManager.exportReportToPdf(JasperFillManager.fillReport(jasperDesign, params, ds)); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage(MENSAJE_ERROR_REPORTE, null, Locale.getDefault()), ex); - } - } - default -> throw new BusinessServiceException(messageSource.getMessage("mensaje_formato_no_valido", null, Locale.getDefault())); - } - } - - private byte[] xlsReportToArray(JasperPrint jasperPrint) { - byte[] bytes = null; - try { - JRXlsxExporter jasperXlsxExportMgr = new JRXlsxExporter(); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - SimpleOutputStreamExporterOutput simpleOutputStreamExporterOutput = - new SimpleOutputStreamExporterOutput(out); - jasperXlsxExportMgr.setExporterInput(new SimpleExporterInput(jasperPrint)); - jasperXlsxExportMgr.setExporterOutput(simpleOutputStreamExporterOutput); - jasperXlsxExportMgr.exportReport(); - bytes = out.toByteArray(); - out.close(); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage(MENSAJE_ERROR_REPORTE, null, Locale.getDefault()), ex); - } catch (IOException ex) { - logger.error(ex.getMessage()); - } - return bytes; + return jasperReportsHandler.compilar("report/ListaPreciosProductos.jrxml", params, productos, formato); } private boolean contieneDuplicados(long[] array) { diff --git a/src/main/java/sic/service/impl/ReciboServiceImpl.java b/src/main/java/sic/service/impl/ReciboServiceImpl.java index 05c8eb4f0..0db3b530e 100644 --- a/src/main/java/sic/service/impl/ReciboServiceImpl.java +++ b/src/main/java/sic/service/impl/ReciboServiceImpl.java @@ -8,10 +8,8 @@ import javax.imageio.ImageIO; import javax.persistence.EntityNotFoundException; import javax.swing.ImageIcon; - import com.mercadopago.resources.payment.Payment; import com.querydsl.core.BooleanBuilder; -import net.sf.jasperreports.engine.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,6 +28,8 @@ import sic.exception.BusinessServiceException; import sic.exception.ServiceException; import sic.util.CustomValidator; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; @Service public class ReciboServiceImpl implements IReciboService { @@ -44,18 +44,20 @@ public class ReciboServiceImpl implements IReciboService { private static final int TAMANIO_PAGINA_DEFAULT = 25; private final MessageSource messageSource; private final CustomValidator customValidator; + private final JasperReportsHandler jasperReportsHandler; @Autowired @Lazy public ReciboServiceImpl( - ReciboRepository reciboRepository, - ICuentaCorrienteService cuentaCorrienteService, - ISucursalService sucursalService, - INotaService notaService, - IFormaDePagoService formaDePagoService, - ICajaService cajaService, - MessageSource messageSource, - CustomValidator customValidator) { + ReciboRepository reciboRepository, + ICuentaCorrienteService cuentaCorrienteService, + ISucursalService sucursalService, + INotaService notaService, + IFormaDePagoService formaDePagoService, + ICajaService cajaService, + MessageSource messageSource, + CustomValidator customValidator, + JasperReportsHandler jasperReportsHandler) { this.reciboRepository = reciboRepository; this.cuentaCorrienteService = cuentaCorrienteService; this.sucursalService = sucursalService; @@ -64,6 +66,7 @@ public ReciboServiceImpl( this.cajaService = cajaService; this.messageSource = messageSource; this.customValidator = customValidator; + this.jasperReportsHandler = jasperReportsHandler; } @Override @@ -316,29 +319,13 @@ public byte[] getReporteRecibo(Recibo recibo) { params.put("recibo", recibo); if (recibo.getSucursal().getLogo() != null && !recibo.getSucursal().getLogo().isEmpty()) { try { - params.put( - "logo", new ImageIcon(ImageIO.read(new URL(recibo.getSucursal().getLogo()))).getImage()); + params.put("logo", new ImageIcon(ImageIO.read(new URL(recibo.getSucursal().getLogo()))).getImage()); } catch (IOException ex) { throw new ServiceException(messageSource.getMessage( "mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); } } - JasperReport jasperDesign; - try { - var classLoader = this.getClass().getClassLoader(); - var isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/Recibo.jrxml"); - jasperDesign = JasperCompileManager.compileReport(isFileReport); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(jasperDesign, params)); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } + return jasperReportsHandler.compilar("report/Recibo.jrxml", params, null, FormatoReporte.PDF); } @Override diff --git a/src/main/java/sic/service/impl/RemitoServiceImpl.java b/src/main/java/sic/service/impl/RemitoServiceImpl.java index 3b34d65c9..89edf4a2f 100644 --- a/src/main/java/sic/service/impl/RemitoServiceImpl.java +++ b/src/main/java/sic/service/impl/RemitoServiceImpl.java @@ -1,8 +1,6 @@ package sic.service.impl; import com.querydsl.core.BooleanBuilder; -import net.sf.jasperreports.engine.*; -import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -22,7 +20,8 @@ import sic.repository.RenglonRemitoRepository; import sic.service.*; import sic.util.CustomValidator; - +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; import javax.imageio.ImageIO; import javax.persistence.EntityNotFoundException; import javax.swing.*; @@ -48,18 +47,20 @@ public class RemitoServiceImpl implements IRemitoService { private static final int TAMANIO_PAGINA_DEFAULT = 25; private final CustomValidator customValidator; private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final JasperReportsHandler jasperReportsHandler; @Autowired - public RemitoServiceImpl (IFacturaService facturaService, - IFacturaVentaService facturaVentaService, - RemitoRepository remitoRepository, - RenglonRemitoRepository renglonRemitoRepository, - IClienteService clienteService, - IUsuarioService usuarioService, - ITransportistaService transportistaService, - ICuentaCorrienteService cuentaCorrienteService, - MessageSource messageSource, - CustomValidator customValidator) { + public RemitoServiceImpl(IFacturaService facturaService, + IFacturaVentaService facturaVentaService, + RemitoRepository remitoRepository, + RenglonRemitoRepository renglonRemitoRepository, + IClienteService clienteService, + IUsuarioService usuarioService, + ITransportistaService transportistaService, + ICuentaCorrienteService cuentaCorrienteService, + MessageSource messageSource, + CustomValidator customValidator, + JasperReportsHandler jasperReportsHandler) { this.facturaService = facturaService; this.facturaVentaService = facturaVentaService; this.remitoRepository = remitoRepository; @@ -70,6 +71,7 @@ public RemitoServiceImpl (IFacturaService facturaService, this.cuentaCorrienteService = cuentaCorrienteService; this.messageSource = messageSource; this.customValidator = customValidator; + this.jasperReportsHandler = jasperReportsHandler; } @Override @@ -279,7 +281,7 @@ public BooleanBuilder getBuilder(BusquedaRemitoCriteria criteria) { @Override public byte[] getReporteRemito(long idRemito) { - Remito remitoParaReporte = this.getRemitoPorId(idRemito); + var remitoParaReporte = this.getRemitoPorId(idRemito); Map params = new HashMap<>(); params.put("remito", remitoParaReporte); if (remitoParaReporte.getSucursal().getLogo() != null && !remitoParaReporte.getSucursal().getLogo().isEmpty()) { @@ -292,23 +294,7 @@ public byte[] getReporteRemito(long idRemito) { messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); } } - List renglones = this.getRenglonesDelRemito(idRemito); - JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(renglones); - JasperReport jasperDesign; - try { - var classLoader = this.getClass().getClassLoader(); - var isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/Remito.jrxml"); - jasperDesign = JasperCompileManager.compileReport(isFileReport); - } catch (JRException ex) { - throw new ServiceException(messageSource.getMessage( - "mensaje_error_reporte", null, Locale.getDefault()), ex); - } - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(jasperDesign, params, ds)); - } catch (JRException ex) { - throw new ServiceException( - messageSource.getMessage("mensaje_error_reporte", null, Locale.getDefault()), ex); - } + var renglones = this.getRenglonesDelRemito(idRemito); + return jasperReportsHandler.compilar("report/Remito.jrxml", params, renglones, FormatoReporte.PDF); } } diff --git a/src/main/java/sic/service/impl/TraspasoServiceImpl.java b/src/main/java/sic/service/impl/TraspasoServiceImpl.java index 4f3b9d9fb..4f20cccf6 100644 --- a/src/main/java/sic/service/impl/TraspasoServiceImpl.java +++ b/src/main/java/sic/service/impl/TraspasoServiceImpl.java @@ -1,10 +1,6 @@ package sic.service.impl; import com.querydsl.core.BooleanBuilder; -import net.sf.jasperreports.engine.JRException; -import net.sf.jasperreports.engine.JasperExportManager; -import net.sf.jasperreports.engine.JasperFillManager; -import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,12 +19,12 @@ import sic.repository.RenglonTraspasoRepository; import sic.repository.TraspasoRepository; import sic.service.*; - +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; import javax.imageio.ImageIO; import javax.persistence.EntityNotFoundException; import javax.swing.*; import java.io.IOException; -import java.io.InputStream; import java.math.BigDecimal; import java.net.URL; import java.time.LocalDateTime; @@ -47,16 +43,18 @@ public class TraspasoServiceImpl implements ITraspasoService { private final MessageSource messageSource; private static final int TAMANIO_PAGINA_DEFAULT = 25; private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final JasperReportsHandler jasperReportsHandler; @Autowired public TraspasoServiceImpl( - TraspasoRepository traspasoRepository, - RenglonTraspasoRepository renglonTraspasoRepository, - IProductoService productoService, - ISucursalService sucursalService, - IUsuarioService usuarioService, - IPedidoService pedidoService, - MessageSource messageSource) { + TraspasoRepository traspasoRepository, + RenglonTraspasoRepository renglonTraspasoRepository, + IProductoService productoService, + ISucursalService sucursalService, + IUsuarioService usuarioService, + IPedidoService pedidoService, + MessageSource messageSource, + JasperReportsHandler jasperReportsHandler) { this.traspasoRepository = traspasoRepository; this.renglonTraspasoRepository = renglonTraspasoRepository; this.productoService = productoService; @@ -64,6 +62,7 @@ public TraspasoServiceImpl( this.usuarioService = usuarioService; this.pedidoService = pedidoService; this.messageSource = messageSource; + this.jasperReportsHandler = jasperReportsHandler; } @Override @@ -376,17 +375,17 @@ public Pageable getPageable(Integer pagina, String ordenarPor, String sentido, i @Override public byte[] getReporteTraspaso(BusquedaTraspasoCriteria criteria) { - List traspasosParaReporte = - traspasoRepository - .findAll( - this.getBuilderTraspaso(criteria), - this.getPageable( - (criteria.getPagina() == null || criteria.getPagina() < 0) - ? 0 - : criteria.getPagina(), - criteria.getOrdenarPor(), - criteria.getSentido(), Integer.MAX_VALUE)) - .getContent(); + var traspasosParaReporte = + traspasoRepository + .findAll( + this.getBuilderTraspaso(criteria), + this.getPageable( + (criteria.getPagina() == null || criteria.getPagina() < 0) + ? 0 + : criteria.getPagina(), + criteria.getOrdenarPor(), + criteria.getSentido(), Integer.MAX_VALUE)) + .getContent(); if (traspasosParaReporte.isEmpty()) { throw new BusinessServiceException( messageSource.getMessage( @@ -399,9 +398,10 @@ public byte[] getReporteTraspaso(BusquedaTraspasoCriteria criteria) { traspaso.getRenglones().forEach(renglonTraspaso -> { if (renglones.get(renglonTraspaso.getIdProducto()) != null) renglones.get(renglonTraspaso.getIdProducto()) - .setCantidad(renglones.get(renglonTraspaso.getIdProducto()).getCantidad().add(renglonTraspaso.getCantidadProducto())); + .setCantidad(renglones.get(renglonTraspaso.getIdProducto()) + .getCantidad().add(renglonTraspaso.getCantidadProducto())); else { - RenglonReporteTraspasoDTO renglonReporteTraspasoDTO = + var renglonReporteTraspasoDTO = RenglonReporteTraspasoDTO.builder() .sucursalOrigen(traspaso.getNombreSucursalOrigen()) .sucursalDestino(traspaso.getNombreSucursalDestino()) @@ -413,30 +413,20 @@ public byte[] getReporteTraspaso(BusquedaTraspasoCriteria criteria) { renglones.put(renglonTraspaso.getIdProducto(), renglonReporteTraspasoDTO); } })); - var classLoader = this.getClass().getClassLoader(); - var isFileReport = - classLoader.getResourceAsStream("sic/vista/reportes/Traspasos.jasper"); - JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(renglones.values()); Map params = new HashMap<>(); params.put("FechaDesde", criteria.getFechaDesde()); params.put("FechaHasta", criteria.getFechaHasta()); - Sucursal sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); + var sucursalPredeterminada = sucursalService.getSucursalPredeterminada(); if (sucursalPredeterminada.getLogo() != null && !sucursalPredeterminada.getLogo().isEmpty()) { try { params.put( - "logo", - new ImageIcon(ImageIO.read(new URL(sucursalPredeterminada.getLogo()))).getImage()); + "logo", + new ImageIcon(ImageIO.read(new URL(sucursalPredeterminada.getLogo()))).getImage()); } catch (IOException ex) { throw new ServiceException( - messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); + messageSource.getMessage("mensaje_sucursal_404_logo", null, Locale.getDefault()), ex); } } - try { - return JasperExportManager.exportReportToPdf( - JasperFillManager.fillReport(isFileReport, params, ds)); - } catch (JRException ex) { - throw new ServiceException( - messageSource.getMessage("mensaje_error_reporte", null, Locale.getDefault()), ex); - } + return jasperReportsHandler.compilar("report/Traspasos.jrxml", params, renglones.values(), FormatoReporte.PDF); } } diff --git a/src/main/java/sic/util/FormatoReporte.java b/src/main/java/sic/util/FormatoReporte.java new file mode 100644 index 000000000..08abd9ad4 --- /dev/null +++ b/src/main/java/sic/util/FormatoReporte.java @@ -0,0 +1,11 @@ +package sic.util; + +public enum FormatoReporte { + PDF, + XLSX; + + @Override + public String toString() { + return name().toLowerCase(); + } +} diff --git a/src/main/java/sic/util/JasperReportsHandler.java b/src/main/java/sic/util/JasperReportsHandler.java new file mode 100644 index 000000000..5fd0102da --- /dev/null +++ b/src/main/java/sic/util/JasperReportsHandler.java @@ -0,0 +1,59 @@ +package sic.util; + +import net.sf.jasperreports.engine.*; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; +import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter; +import net.sf.jasperreports.export.SimpleExporterInput; +import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Component; +import sic.exception.BusinessServiceException; +import sic.exception.ServiceException; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Collection; +import java.util.Locale; +import java.util.Map; + +@Component +public class JasperReportsHandler { + + private final MessageSource messageSource; + + public JasperReportsHandler(MessageSource messageSource) { + this.messageSource = messageSource; + } + + public byte[] compilar(String pathToJrxml, Map params, Collection datasource, FormatoReporte formato) { + JasperReport jasperReport; + JasperPrint jasperPrint; + var ds = new JRBeanCollectionDataSource(datasource); + try { + var classLoader = this.getClass().getClassLoader(); + var isFileReport = classLoader.getResourceAsStream(pathToJrxml); + jasperReport = JasperCompileManager.compileReport(isFileReport); + jasperPrint = JasperFillManager.fillReport(jasperReport, params, ds); + return switch (formato) { + case PDF -> JasperExportManager.exportReportToPdf(jasperPrint); + case XLSX -> convertirAlFormatoXlsx(jasperPrint); + default -> throw new BusinessServiceException( + messageSource.getMessage("mensaje_formato_no_valido", null, Locale.getDefault())); + }; + } catch (JRException | IOException ex) { + throw new ServiceException(messageSource.getMessage("mensaje_error_reporte", null, Locale.getDefault()), ex); + } + } + + private byte[] convertirAlFormatoXlsx(JasperPrint jasperPrint) throws JRException, IOException { + var jasperXlsxExportMgr = new JRXlsxExporter(); + var out = new ByteArrayOutputStream(); + var simpleOutputStreamExporterOutput = new SimpleOutputStreamExporterOutput(out); + jasperXlsxExportMgr.setExporterInput(new SimpleExporterInput(jasperPrint)); + jasperXlsxExportMgr.setExporterOutput(simpleOutputStreamExporterOutput); + jasperXlsxExportMgr.exportReport(); + byte[] bytes = out.toByteArray(); + out.close(); + return bytes; + } +} diff --git a/src/main/resources/sic/vista/reportes/CuentaCorriente.jrxml b/src/main/resources/report/CuentaCorriente.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/CuentaCorriente.jrxml rename to src/main/resources/report/CuentaCorriente.jrxml diff --git a/src/main/resources/sic/vista/reportes/FacturaVenta.jrxml b/src/main/resources/report/FacturaVenta.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/FacturaVenta.jrxml rename to src/main/resources/report/FacturaVenta.jrxml diff --git a/src/main/resources/sic/vista/reportes/ListaClientes.jrxml b/src/main/resources/report/ListaClientes.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/ListaClientes.jrxml rename to src/main/resources/report/ListaClientes.jrxml diff --git a/src/main/resources/sic/vista/reportes/ListaPreciosProductos.jrxml b/src/main/resources/report/ListaPreciosProductos.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/ListaPreciosProductos.jrxml rename to src/main/resources/report/ListaPreciosProductos.jrxml diff --git a/src/main/resources/sic/vista/reportes/NotaCredito.jrxml b/src/main/resources/report/NotaCredito.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/NotaCredito.jrxml rename to src/main/resources/report/NotaCredito.jrxml diff --git a/src/main/resources/sic/vista/reportes/NotaDebito.jrxml b/src/main/resources/report/NotaDebito.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/NotaDebito.jrxml rename to src/main/resources/report/NotaDebito.jrxml diff --git a/src/main/resources/sic/vista/reportes/Pedido.jrxml b/src/main/resources/report/Pedido.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/Pedido.jrxml rename to src/main/resources/report/Pedido.jrxml diff --git a/src/main/resources/sic/vista/reportes/Recibo.jrxml b/src/main/resources/report/Recibo.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/Recibo.jrxml rename to src/main/resources/report/Recibo.jrxml diff --git a/src/main/resources/sic/vista/reportes/Remito.jrxml b/src/main/resources/report/Remito.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/Remito.jrxml rename to src/main/resources/report/Remito.jrxml diff --git a/src/main/resources/sic/vista/reportes/Traspasos.jrxml b/src/main/resources/report/Traspasos.jrxml similarity index 100% rename from src/main/resources/sic/vista/reportes/Traspasos.jrxml rename to src/main/resources/report/Traspasos.jrxml diff --git a/src/main/resources/sic/vista/reportes/CuentaCorriente.jasper b/src/main/resources/sic/vista/reportes/CuentaCorriente.jasper deleted file mode 100644 index 7b1e823eb..000000000 Binary files a/src/main/resources/sic/vista/reportes/CuentaCorriente.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/FacturaVenta.jasper b/src/main/resources/sic/vista/reportes/FacturaVenta.jasper deleted file mode 100644 index 0bd4613e1..000000000 Binary files a/src/main/resources/sic/vista/reportes/FacturaVenta.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/ListaPreciosProductos.jasper b/src/main/resources/sic/vista/reportes/ListaPreciosProductos.jasper deleted file mode 100644 index 77ee00fdb..000000000 Binary files a/src/main/resources/sic/vista/reportes/ListaPreciosProductos.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/NotaCredito.jasper b/src/main/resources/sic/vista/reportes/NotaCredito.jasper deleted file mode 100644 index 32b25b775..000000000 Binary files a/src/main/resources/sic/vista/reportes/NotaCredito.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/NotaDebito.jasper b/src/main/resources/sic/vista/reportes/NotaDebito.jasper deleted file mode 100644 index acad26251..000000000 Binary files a/src/main/resources/sic/vista/reportes/NotaDebito.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/Pedido.jasper b/src/main/resources/sic/vista/reportes/Pedido.jasper deleted file mode 100644 index b3436fd73..000000000 Binary files a/src/main/resources/sic/vista/reportes/Pedido.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/Recibo.jasper b/src/main/resources/sic/vista/reportes/Recibo.jasper deleted file mode 100644 index a02a2be2a..000000000 Binary files a/src/main/resources/sic/vista/reportes/Recibo.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/Remito.jasper b/src/main/resources/sic/vista/reportes/Remito.jasper deleted file mode 100644 index d78893d58..000000000 Binary files a/src/main/resources/sic/vista/reportes/Remito.jasper and /dev/null differ diff --git a/src/main/resources/sic/vista/reportes/Traspasos.jasper b/src/main/resources/sic/vista/reportes/Traspasos.jasper deleted file mode 100644 index 22e1464f7..000000000 Binary files a/src/main/resources/sic/vista/reportes/Traspasos.jasper and /dev/null differ diff --git a/src/test/java/sic/controller/CuentaCorrienteControllerTest.java b/src/test/java/sic/controller/CuentaCorrienteControllerTest.java index ac538e8b3..993816bb9 100644 --- a/src/test/java/sic/controller/CuentaCorrienteControllerTest.java +++ b/src/test/java/sic/controller/CuentaCorrienteControllerTest.java @@ -17,6 +17,7 @@ import sic.service.IClienteService; import sic.service.ICuentaCorrienteService; import sic.service.IProveedorService; +import sic.util.FormatoReporte; import javax.crypto.SecretKey; import java.time.LocalDateTime; @@ -65,9 +66,13 @@ void shouldTestReporteListaDeCuentasCorrienteClientePorCriteria() { .compact(); Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody(); when(authService.getClaimsDelToken("headers")).thenReturn(claims); - when(cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria(criteria, 1L, "xlsx")).thenReturn("reporte".getBytes()); - assertNotNull(cuentaCorrienteController.getReporteListaDeCuentasCorrienteClientePorCriteria(criteria, "xlsx", "headers")); - when(cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria(criteria, 1L, "pdf")).thenReturn("reporte".getBytes()); - assertNotNull(cuentaCorrienteController.getReporteListaDeCuentasCorrienteClientePorCriteria(criteria, "pdf", "headers")); + when(cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( + criteria, 1L, FormatoReporte.XLSX)).thenReturn("reporte".getBytes()); + assertNotNull(cuentaCorrienteController.getReporteListaDeCuentasCorrienteClientePorCriteria( + criteria, "xlsx", "headers")); + when(cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( + criteria, 1L, FormatoReporte.PDF)).thenReturn("reporte".getBytes()); + assertNotNull(cuentaCorrienteController.getReporteListaDeCuentasCorrienteClientePorCriteria( + criteria, "pdf", "headers")); } } diff --git a/src/test/java/sic/repository/ProductoRepositoryTest.java b/src/test/java/sic/repository/ProductoRepositoryTest.java index 9673c0b51..d69956e38 100644 --- a/src/test/java/sic/repository/ProductoRepositoryTest.java +++ b/src/test/java/sic/repository/ProductoRepositoryTest.java @@ -9,7 +9,6 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.jdbc.Sql; import org.springframework.test.context.junit.jupiter.SpringExtension; import sic.App; import sic.interceptor.JwtInterceptor; @@ -33,9 +32,7 @@ class ProductoRepositoryTest { @MockBean JwtInterceptor jwtInterceptor; @Autowired TestEntityManager testEntityManager; - @Autowired ProductoRepositoryImpl productoRepositoryImpl; - @Autowired LocalidadRepository localidadRepository; @Test diff --git a/src/test/java/sic/service/impl/CuentaCorrienteServiceImplTest.java b/src/test/java/sic/service/impl/CuentaCorrienteServiceImplTest.java index 80c4fd331..9a51137e2 100644 --- a/src/test/java/sic/service/impl/CuentaCorrienteServiceImplTest.java +++ b/src/test/java/sic/service/impl/CuentaCorrienteServiceImplTest.java @@ -19,6 +19,8 @@ import sic.service.ISucursalService; import sic.service.IUsuarioService; import sic.util.CustomValidator; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; import java.util.ArrayList; import java.util.List; @@ -31,7 +33,7 @@ @ExtendWith(SpringExtension.class) @ContextConfiguration( - classes = {CuentaCorrienteServiceImpl.class, CustomValidator.class, MessageSource.class}) + classes = {CuentaCorrienteServiceImpl.class, CustomValidator.class, MessageSource.class, JasperReportsHandler.class}) class CuentaCorrienteServiceImplTest { @MockBean CuentaCorrienteRepository cuentaCorrienteRepository; @@ -56,9 +58,9 @@ void shouldTestReporteListaDeClientes() { when(usuarioService.getUsuarioNoEliminadoPorId(1L)).thenReturn(usuario); when(cuentaCorrienteClienteRepository.findAll( cuentaCorrienteService.getBuilder( - BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L), + BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L), cuentaCorrienteService.getPageable(null, null, null, "cliente.nombreFiscal", Integer.MAX_VALUE))) - .thenReturn(new PageImpl<>(cuentasCorriente)); + .thenReturn(new PageImpl<>(cuentasCorriente)); Sucursal sucursal = new Sucursal(); sucursal.setLogo("noTieneImagen"); when(sucursalService.getSucursalPredeterminada()).thenReturn(sucursal); @@ -66,20 +68,20 @@ void shouldTestReporteListaDeClientes() { ServiceException.class, () -> cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( - BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, "pdf")); + BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, FormatoReporte.PDF)); assertThrows( ServiceException.class, () -> cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( - BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, "xlsx")); + BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, FormatoReporte.XLSX)); verify(messageSource, times(2)).getMessage(eq("mensaje_sucursal_404_logo"), any(), any()); sucursal.setLogo(null); BusquedaProductoCriteria criteria = BusquedaProductoCriteria.builder().build(); assertNotNull( cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( - BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, "pdf")); + BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, FormatoReporte.PDF)); assertNotNull( cuentaCorrienteService.getReporteListaDeCuentasCorrienteClientePorCriteria( - BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, "pdf")); + BusquedaCuentaCorrienteClienteCriteria.builder().build(), 1L, FormatoReporte.PDF)); } } diff --git a/src/test/java/sic/service/impl/FacturaVentaServiceImplTest.java b/src/test/java/sic/service/impl/FacturaVentaServiceImplTest.java index 6dbb08e37..9c839329a 100644 --- a/src/test/java/sic/service/impl/FacturaVentaServiceImplTest.java +++ b/src/test/java/sic/service/impl/FacturaVentaServiceImplTest.java @@ -20,6 +20,7 @@ import sic.repository.FacturaVentaRepository; import sic.service.IEmailService; import sic.util.CustomValidator; +import sic.util.JasperReportsHandler; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -36,7 +37,8 @@ CustomValidator.class, FacturaVentaServiceImpl.class, FacturaServiceImpl.class, - MessageSource.class + MessageSource.class, + JasperReportsHandler.class }) class FacturaVentaServiceImplTest { diff --git a/src/test/java/sic/service/impl/PedidoServiceImplTest.java b/src/test/java/sic/service/impl/PedidoServiceImplTest.java index d6ec43bf2..a8c1f2e33 100644 --- a/src/test/java/sic/service/impl/PedidoServiceImplTest.java +++ b/src/test/java/sic/service/impl/PedidoServiceImplTest.java @@ -20,6 +20,7 @@ import sic.repository.RenglonPedidoRepository; import sic.service.IEmailService; import sic.util.CustomValidator; +import sic.util.JasperReportsHandler; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -31,7 +32,7 @@ @ExtendWith(SpringExtension.class) @ContextConfiguration( - classes = {PedidoServiceImpl.class, CustomValidator.class, MessageSource.class}) + classes = {PedidoServiceImpl.class, CustomValidator.class, MessageSource.class, JasperReportsHandler.class}) class PedidoServiceImplTest { @MockBean PedidoRepository pedidoRepository; diff --git a/src/test/java/sic/service/impl/ProductoServiceImplTest.java b/src/test/java/sic/service/impl/ProductoServiceImplTest.java index 46ed9ffcf..c85fd7284 100644 --- a/src/test/java/sic/service/impl/ProductoServiceImplTest.java +++ b/src/test/java/sic/service/impl/ProductoServiceImplTest.java @@ -32,11 +32,14 @@ import sic.repository.ProductoRepository; import sic.service.IEmailService; import sic.util.CustomValidator; +import sic.util.FormatoReporte; +import sic.util.JasperReportsHandler; + import javax.persistence.EntityNotFoundException; @ExtendWith(SpringExtension.class) @ContextConfiguration( - classes = {ProductoServiceImpl.class, CustomValidator.class, MessageSource.class}) + classes = {ProductoServiceImpl.class, CustomValidator.class, MessageSource.class, JasperReportsHandler.class}) class ProductoServiceImplTest { @MockBean MedidaServiceImpl medidaService; @@ -505,16 +508,16 @@ void shouldTestReporteListaDePrecios() { assertThrows( ServiceException.class, () -> - productoService.getListaDePreciosEnPdf(BusquedaProductoCriteria.builder().build(), 1L)); + productoService.procesarReporteListaDePrecios(BusquedaProductoCriteria.builder().build(), 1L, FormatoReporte.PDF)); assertThrows( ServiceException.class, () -> - productoService.getListaDePreciosEnXls(BusquedaProductoCriteria.builder().build(), 1L)); + productoService.procesarReporteListaDePrecios(BusquedaProductoCriteria.builder().build(), 1L, FormatoReporte.XLSX)); verify(messageSource, times(2)).getMessage(eq("mensaje_recurso_no_encontrado"), any(), any()); sucursal.setLogo(null); BusquedaProductoCriteria criteria = BusquedaProductoCriteria.builder().build(); - productoService.getListaDePreciosEnPdf(criteria, 1L); - productoService.getListaDePreciosEnXls(criteria, 1L); + productoService.procesarReporteListaDePrecios(criteria, 1L, FormatoReporte.PDF); + productoService.procesarReporteListaDePrecios(criteria, 1L, FormatoReporte.XLSX); verify(emailService, times(2)) .enviarEmail( eq("correo@gmail.com"), eq(""), eq("Listado de productos"), eq(""), any(), any()); diff --git a/src/test/java/sic/service/impl/RemitoServiceImplTest.java b/src/test/java/sic/service/impl/RemitoServiceImplTest.java index 453a6dfe6..662e7a9b3 100644 --- a/src/test/java/sic/service/impl/RemitoServiceImplTest.java +++ b/src/test/java/sic/service/impl/RemitoServiceImplTest.java @@ -18,6 +18,7 @@ import sic.repository.RenglonRemitoRepository; import sic.service.*; import sic.util.CustomValidator; +import sic.util.JasperReportsHandler; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -33,7 +34,7 @@ @ExtendWith(SpringExtension.class) @ContextConfiguration( - classes = {CustomValidator.class, RemitoServiceImpl.class, MessageSource.class}) + classes = {CustomValidator.class, RemitoServiceImpl.class, MessageSource.class, JasperReportsHandler.class}) class RemitoServiceImplTest { @MockBean IFacturaService facturaService; diff --git a/src/test/java/sic/service/impl/TraspasoServiceImplTest.java b/src/test/java/sic/service/impl/TraspasoServiceImplTest.java index 2d4a4bc29..4cce75dda 100644 --- a/src/test/java/sic/service/impl/TraspasoServiceImplTest.java +++ b/src/test/java/sic/service/impl/TraspasoServiceImplTest.java @@ -20,6 +20,7 @@ import sic.repository.RenglonTraspasoRepository; import sic.repository.TraspasoRepository; import sic.util.CustomValidator; +import sic.util.JasperReportsHandler; import javax.persistence.EntityNotFoundException; import java.math.BigDecimal; @@ -32,7 +33,7 @@ @ExtendWith(SpringExtension.class) @ContextConfiguration( - classes = {CustomValidator.class, TraspasoServiceImpl.class, MessageSource.class}) + classes = {CustomValidator.class, TraspasoServiceImpl.class, MessageSource.class, JasperReportsHandler.class}) class TraspasoServiceImplTest { @MockBean ProductoServiceImpl productoService;