From abce9b5461ffa132e8f8f9286b14d1744baafcef Mon Sep 17 00:00:00 2001 From: Franco Bellucci Date: Fri, 8 Dec 2023 19:40:28 +0100 Subject: [PATCH] Report refactoring (#472) * Change the reporting compile strategy and move files to the new report folder * Refactoring JasperReports * Revert application.properties * Fix tests --- .gitignore | 1 + .../controller/CuentaCorrienteController.java | 17 +- .../sic/controller/ProductoController.java | 9 +- .../sic/service/ICuentaCorrienteService.java | 20 +-- .../java/sic/service/IProductoService.java | 18 ++- .../impl/CuentaCorrienteServiceImpl.java | 151 ++++-------------- .../service/impl/FacturaVentaServiceImpl.java | 29 +--- .../sic/service/impl/NotaServiceImpl.java | 102 +++++------- .../sic/service/impl/PedidoServiceImpl.java | 71 +++----- .../sic/service/impl/ProductoServiceImpl.java | 125 ++++----------- .../sic/service/impl/ReciboServiceImpl.java | 43 ++--- .../sic/service/impl/RemitoServiceImpl.java | 50 +++--- .../sic/service/impl/TraspasoServiceImpl.java | 72 ++++----- src/main/java/sic/util/FormatoReporte.java | 11 ++ .../java/sic/util/JasperReportsHandler.java | 59 +++++++ .../reportes => report}/CuentaCorriente.jrxml | 0 .../reportes => report}/FacturaVenta.jrxml | 0 .../reportes => report}/ListaClientes.jrxml | 0 .../ListaPreciosProductos.jrxml | 0 .../reportes => report}/NotaCredito.jrxml | 0 .../reportes => report}/NotaDebito.jrxml | 0 .../vista/reportes => report}/Pedido.jrxml | 0 .../vista/reportes => report}/Recibo.jrxml | 0 .../vista/reportes => report}/Remito.jrxml | 0 .../vista/reportes => report}/Traspasos.jrxml | 0 .../sic/vista/reportes/CuentaCorriente.jasper | Bin 39491 -> 0 bytes .../sic/vista/reportes/FacturaVenta.jasper | Bin 79233 -> 0 bytes .../reportes/ListaPreciosProductos.jasper | Bin 32763 -> 0 bytes .../sic/vista/reportes/NotaCredito.jasper | Bin 82106 -> 0 bytes .../sic/vista/reportes/NotaDebito.jasper | Bin 66877 -> 0 bytes .../sic/vista/reportes/Pedido.jasper | Bin 58159 -> 0 bytes .../sic/vista/reportes/Recibo.jasper | Bin 36236 -> 0 bytes .../sic/vista/reportes/Remito.jasper | Bin 50909 -> 0 bytes .../sic/vista/reportes/Traspasos.jasper | Bin 31730 -> 0 bytes .../CuentaCorrienteControllerTest.java | 13 +- .../repository/ProductoRepositoryTest.java | 3 - .../impl/CuentaCorrienteServiceImplTest.java | 16 +- .../impl/FacturaVentaServiceImplTest.java | 4 +- .../service/impl/PedidoServiceImplTest.java | 3 +- .../service/impl/ProductoServiceImplTest.java | 13 +- .../service/impl/RemitoServiceImplTest.java | 3 +- .../service/impl/TraspasoServiceImplTest.java | 3 +- 42 files changed, 343 insertions(+), 493 deletions(-) create mode 100644 src/main/java/sic/util/FormatoReporte.java create mode 100644 src/main/java/sic/util/JasperReportsHandler.java rename src/main/resources/{sic/vista/reportes => report}/CuentaCorriente.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/FacturaVenta.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/ListaClientes.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/ListaPreciosProductos.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/NotaCredito.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/NotaDebito.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/Pedido.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/Recibo.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/Remito.jrxml (100%) rename src/main/resources/{sic/vista/reportes => report}/Traspasos.jrxml (100%) delete mode 100644 src/main/resources/sic/vista/reportes/CuentaCorriente.jasper delete mode 100644 src/main/resources/sic/vista/reportes/FacturaVenta.jasper delete mode 100644 src/main/resources/sic/vista/reportes/ListaPreciosProductos.jasper delete mode 100644 src/main/resources/sic/vista/reportes/NotaCredito.jasper delete mode 100644 src/main/resources/sic/vista/reportes/NotaDebito.jasper delete mode 100644 src/main/resources/sic/vista/reportes/Pedido.jasper delete mode 100644 src/main/resources/sic/vista/reportes/Recibo.jasper delete mode 100644 src/main/resources/sic/vista/reportes/Remito.jasper delete mode 100644 src/main/resources/sic/vista/reportes/Traspasos.jasper 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 7b1e823ebecb1c81cd56fffc32f7544c9429dfcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39491 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 S_SR8a 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 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 32b25b7759feeb23833de03cb9be76dba0564c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82106 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

Oq)w{y&Ut;?w@EqJfTLJ)EMiMWk`sqfR-qI^ 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%0Af5KM|9g-~zDsF$Ymu*1&vP})(W*Qi9& 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 ChUFpv 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 22e1464f7dfaea200fa1d16d2501db0fbbfe8df5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31730 zcmeHw3v?XCm3H;$HI_!QE%|MOWdn&Un~||GenCKwkv(SgU}j{4oJ5RfTGH5~nej}I zEjz$M2zd}fNC@E(_<4jZIlEa1f!I8D_b1_O$Yb}o@w=rHXF|Q&so`OP4}(3b?e?+w{G3K)$_SGSwpeFy0W?vEKUWFB#L>xP|)+a zf>8|W+39pv4<6tTqx>P`KX3o8kJUw3OENc`PiORjgpn}VipY_~@kCEL*AvqV=|m=d zDlwVS_eR)KS!_5ltH(-HQ|UQ_wTr@;M0UC-W)#xdX%uXg1q=O|M6q~`UB`TL1$Mp{ zZIg*22#ogOPdR~`!)*0vEHpMSG7$?!!@ZG-gP~|FJTg2n79I$*z+}!aa0&%>WOP|4%$hU$ zlpzT1V=cKtTF-*vXcwS7$B>?$0o9A>hSS&w0GMiw6o4A!7pQ>Q)kQ`wZ(?gZF{5XP zb0op|$-Ew6&6A1b(dh!%kTTf05%9jJIMw6OiyomDJ;e5G3UXU4xHXV2=t&~WVB0+_ z8fd8}TFP1#LfO(R@B{=N!3Pq5z4c5mi9b8c{3(!I)QzISx(<7`bRbGSLs7z>(x(!o zj1eT=?umZ(e0-}Qi5dpfQYa*3=V@7$HAwT*+e=kJ8Q6NWZ7J)&tg8O&TPpGh0NnN044o{F#zt^`DUXf9vSi$!iqx;^`Q zAZnKd|622f940U$trv$9d4ru_rShm+9Q6YQ-6$2ZoYfHE5@j$((nT7Li;6_E&@c(+ zlUUzLgXX$63oOO8)sq4~WH=Wr9mI^cy+*!=GWsm0f_<>o5HI}@|9vnS$(eK}RnW7f zNz2hKT`6g>EuJ)irAq0&b9rb&2TkokGD^YTLLqUIm@#+5x6iu!g~WYzObfI6V)~R$ zO2*iUdb(N)$Fw|tt}C#hSFeZ>K?frU3H`JKSAn&00*KQ=(q{n@K!~|17LSJF{rl0% z1yx%qpLkSU#ILgr_%`tZ(Rcjdx;Jk5`b|50LNH9@-c>ult_8`BTxgBx?p81UDcz0hbH-p= z&nN?brT4&Zoy_Hq!WTLk(U0qyKGvom$E?Ern0R_t?_-N+pag|XI(sw@r%X5cSgZX6 zpmDYwCd0rGP0o<>G;&-oOu=?U*s?@6Ig=}pgK3)sl4VDPt#mY70bXoV!N*Z`$AA~Z zQ17s768*KC=a8e{a_(xz=#e&06298%d@t`^1?elT0^|*pfe*6|1zZ4U;E_VLwpUZd z{iYD0W1<%Ny3WEC)u(hAmSlN*5w^xE6VK%`Mmk?c5kz5?a2k2p;l=4Ctj)1N^_iV)TF`oECiiZ zPoivuhU79SB6=&jn=XdYmvmCzx2B7usj1NHq@GIYW+5mQtuK%2@fl2$(=)PcfF8rs zOHmW@SxdS&mW59WW#TMH6HWBFFNXzdHIF(X3WCioR7b8H2{YKcM0q6HT7xT1C?y`V z|71Q(dBO^{#&WNam@XvpGX~q_$<_l=8qB;X5ts*;vdLTuOIwMG9u1ahTOlVFnX(V9 z=DqAdk7tWqFQO8Iq<$&vwUJI%YTt?qfNbN!>TMiUah5k^>5sv7)sD)l#nHj}sMQ6i z7~pHY26&iRuJB4|E-hxl*}*i7^r0D;I&um4jK?8ZDd<>Kq&Q=W<7|zrLAG*$FHp_d z5I{_mQGGUdTqg~p65Oozu|PgoOw$6LoJ~X$iefIMyD)1wLBWkM)8_Dd652(904&H6 z2{QfQ#0jGZ0gfEmnq}&08gBIQG)9iWyd{R^xUvQ}YXO_XK_!J-4Fa%W);R(6;2jZG zcT_(q^|gLBm*Qg-gKH6emI|}Ex|D}dTIxv)1`uo@Hw1*Z35HO4M5fo8?qtJDRTj!d zYY29XDvXznyRCMp5x6YNt%VTxHTq}Z_UhbMJHLF1Lp7FRu9xecllBx>%Umy)KT0jg zVu_*_vWGPoE9sY!F3AqomrBqmQ+IekV+@fuxUJSwR4zo>RhSd`XKvb-Qm4AP|4r+L z>K=VLcf|}VRtJO&9(~7P_{xcBDAF4b9}G>zNAQ1?S^$1ekC*INu&i$`=$nTTWE5)< z_|Rgp!dFYw<3GK-?$>wC-qeGo*#Q=S6H~-2KHZl#iU(NBY|gry%YWwBmu|S}?;_W4 zoP2io1ufwuF-q`3Tod zP?!eoWNxmX+zB*=pr1zOzvN=lY(prPlf@yYL&Gs!wLw5pIca5$jx?tmJ^qOHH zTyi|P$);9dL-_;C;K6#fQ3?J)j`bP>7NlFeiX7=2DUUl-D;GjDASz4N)inb>vPw(y zK>AL|uCOj4T8w+z0%dgyc1K9PR93M$!i6Z87*iJFEArg5x&mr<@X=zF;###fS;g)+ z`x57hYfF9pu5h*Xv}g)u%PF)mHzS%qMLr10I1F!CED>NQ_$GwoNx7rD3w60RiCq&~ zsSuN)5AB#$h5KpAxmtWyaapZ8WHtCGcaRY%iuQV^u;il#L2Rph)~AybAs+^e#AFOM zz|vF{^vh>l1(w4qNWBa3PvU|(;v%oH$>#{u4|O*g z7V#!3;|4DH>xM@TEnuM7{(`Lo4PoX>rw|KI&Xlr8;YVz(7BjH1^ivhcsh%h{SPj8y zyKda}9oml5h6CRuQ5L}M_S2}I$XE~_cWg&6Oc3f346_>(gw9^|%^#*O|MZw07po#` zW%QKcviaxh6Wu2+$knB9E?;MWp;&WG=M>cvqVK7yU0kbpoPtcQi`f1BWATZ2=*l=( zkwhO3@amB-{`9u|?0dfZ!4Ev~iyzId8hOpMnWU$?suF95 z1F8;&{?KqdBtosi3J;4vQL{xNiaY)MVhHG!l~5NOE~*K@;rVL3%LM=%O3hA~Ofl$# z{2>5$%S;*IIX#==Rc7$CqeS-^e5&WqvJm{@VkucF6cd>NYzw8cIRVfN*1X}8&MZP* zotJi2FWk_%r*q>*lM?Zl+A8p>l`@B$p#3e;S(D8F@Kcw*{P6mh?qT<@T(|l=ksT&u zc;yqKHQtb$h;AV|_~m975ecY^h*W?>L@K}`A_*uL(aj21h!k%TEpri3n<*k}U{32< zOF}K3E+U$*aQ(srbTJ0y7it#JCx7tts{Jn%3Cy*#X5qiTnU*d+`sMGR56GQwy5)* zE$5uGHF(ZBT-oOvPun1_pVcg`2VMOX$ zsQ`z#RDeTV5>PI##}_276)xgxoYhm1R*^cAg{5;HN9BboEnKa_(XN4D#%mVNgWq1% zb@A-I*RzAiUK_Z!Z?7dB*>6s^o1uGw`ok}O;UX9TbrFmTa0o^PI0PdB<%0Q(1qo)Q zB^a^cM{`k2N-ri0>3kA#Km{2-Qr8N0bcXNS(zEq|8LXbRVivL?DsxOoCSqf{-D|Bn z&Jf%mLMWk+tvrE{WmGTbN`<68ltvyvcA9)cc%)Ob;|PzmYIX+SnuH&^WGbD(vcUG$ zs6!pVG)G@L0J|!*3F|;GVJk=>XBoLq`Rmk4}yqc zqcJQ(gl>8)LWFMmF8;e0hP!{6H#3`JY=9CO*+xbWC7sYy zB(yk(kuz%!i9ZM;(GP;pcG?JnxUeI_HoxRFgU&l{`(LS6zsvb9_!mwkHT zROH|0{@&DWZ2`K?G1%(R;WcR>iDZhW+L}86<7_SMeewMhkuo}x4JDE@2!SG9qra0$D}GJ)4Xt_@OgO%#;2CLf7+6 z@fA-z3D!3da5ol42-dH;>I8kt_)S?1K)~+(0 zq{GQ6Y4&Oe&ei$bXQBru#!s3y$ux++1S43!o zyh4>c<0XojG&yH$lcx)U9Z_sfCrilQgcU{hQ97F}@C-ZhKE@fP5}Yg|zZ097h>oWE z*dolEI!^|Kr=ir9%&lSDtlw_X`wp&k$U`d4cj;w)#Jz=$< zl8m($F1?`UEGyH&`gw{t=7tDckQJzPI~DX@_RKGOaC)f>zyauw{_LiTO= zfx5ftt|^D9w}H*V8yIBeLEUO%NFjCYP5QVQx*-4jzr_oSj3sHl%tS59IPF@d~K1K zPa97N;ByVoHcOPtCCbs>Xzx%6(d*d6Q17VF5`npu>oMQ{hcD`^z2ZP`Y%~-_Dgx0J zb0f@C3)Hh%MOXS-9WAJI)qKdyN%B&ghr^-%I1W&$NJVCN@mMAZYO><|g|q$=S%0Ya zN?|$d>SROCa+YqFr3ZTBy%VvKv1mUwen|-gZ@v4#Py599O4fY|OV8chDZ@F#td6*%RqjNz{999QIL!(IH3B^12?S`!cy;OfIgS)tU$O^91-3{mesH+fn89KMnYpRC{H2$1&ns}kkH1Sux-^sB0S_^sp3^gQ^GWsQ zHiKzf>FGz!51&xMA6IYgR&Q>_S)>bsJE-c%)aQ4qH@B-dcbPZ*+*YjtMIH#|eG*5= zl;n@i)ncr?u9^4YJgkZ^96B&_EQ3KVMnvS&C>>RTp_%wveT0tmlTl{6_Buwl7~mCoQ@0tv_!qtP zSB*dUQegU=+3ACI!^gBi)^MDX-H-vSI7uP^{r=D0 zaaPMGUivV%cfCXfH$m(;jC?e_Z+~2n!fAKet=9gL=;fC;#mH1MrzBJW)a+LWK;5l& z0My-T6Cf?EnK`AsDd^)@;-7a~&MFrTowipmsT$GrKPj9IfK(7c+lQXDsox|MI>EW%Mpz}C$R8_l2IvjP};h^)?8Xo%)0}~F%9B)`A@7=QJ zzP{U+6@K`cYcBuMJ!kd4TPh*p`3I*C)ki{uRaD5=Obzi1t5hKgtyCcgKvf|JKvf|V zV5?9~@mHRTF7kip8TbLLhbJ)hC-(P728mBTT5^~_xUZs>t1YecaWPUdOY6qb=O3h( zzjSWw+$=Nq>dSluvjzT_nwd{~f)FRyp!u{%WM)X|e(;(7&1Y8s$HAjNo%^RnU$`9k zeU#45wM0sny66|JbAnwAgYPUV#4l@Hq$;2;QdI#Csj2{nR3*TcD({SMjlvx_5zu7A zkUuOPE#43ED%Q9N!@n`5FGvp7zEVI*ae=mZ#)0@G#*gChck0ZeY<|3AC>};2s3zqt zd;JLd$A8p$un(FGUU3H4bJh}WKbBx(snx;fi&BA}!o{6lyQ+Bok>kw#f9a?`vUwtj zQzx;fmdl0;gE(6|pFlwzS zz10Kac0ROSQSMFsKF;_Py*+Qyk$oJa9;5WEe(bUHj1A??G|{oMmecx66b+Hvd^PNx zVq@P_E6Gg1c|w_5-h-Bl6m;c0rzbe->Zf6T%n+ga#2W@;QeAMNHTXIl#l zw!6Cem?ul@YMc)Ei#xo$Ze<^QADt0TCo7I8*Lzt3Y}Fulj$#?axkdC@^33~`AQ{RY z1VJ;BTl@$;PDL5)9M8TYAqb}m`L5|DG^xQ@jaqIv&+H`gWzCVkZDI-``pS2J}f<_;|TO zUAos0ibhAoNe^&tXI0L*YrP9%d7uh&VXcP)k(7hi5YX8afsQ6boX1oS>yREG+nX!L zYEud8I#HZXDUa5qgpYmiv%5#Gxnk*m4F3ApH+><5mue}F+V!-QqgGB>QAqx7BN?Ut ztIopp|M%YC{0wxBo6EyIcUH&|@Ev6HI(AnPoL}Tdhq~eu0J*iJuJ{}Phk6KnLZKY$ zApzx%T}+Hhex?2;5!H?t@B+z1F;_%iJ#zvTlSO_#SdAZ&PMw#bLK;rWeDfeSimlJm zTGf#MLXA1!MM!4Iw_9p}R-pm!tw{qO{_HPzzPof@g!TX8&;HLx4}5<hMQqS9hxrgt7a6Gl zhm2H!Lq-x%E~AR0c1VadxBfcq#9E)J)wUSS1CDRG7~Wqgh6nF{VDM+D#J^`&l)l;0 zc%Vs)8K@t)%TClFhMTDjzuf3DR0PyT3@X4O1{L5Cg9Ma|;l|3LvcwVtwp-0JjJ|}l zE_er^ute4*dE0!$L2yAvGoJpzx;??O+MYf3-3NOgzNUZad?xbaydC1o^gP4x5(H`= z2Muqz{ITIyJ`5i_{?A|h)HjabcFoTp{mQZ5^gX>``QJ-D<(E5Lc;4`Kthj z{3W1V{&!T$-`}sKm0RPl&6K}pIrpD%;r@_)n$g@O zvUPtDb_Wt*hP%z5}+^USdz1ne*m=HI;aqY+^dqXYC-Vmpf$Msz-B5A}NeyeFk zo7J~+t>C#yHE6}3B%ZtOYv20tCw_IqU+&lu>0jll6*V~?uaH*o%Zn~rA)qc=p#mIQ zp#mIQApzxD@nX4FU<-hAVGn16`_QAsOf@Di{+*e8_Y zH2`Fds8|6&)9C}MiG!!%7@xq3lQ+a=%L(gH#rV?7IrVfCrrVfCr zrY4|FP3z9<|!Rp@qVoYN~gkHtlDx{-5XkF`~L zyRub^FrMf8uu^&vulmKevY4kRtS^Zn!N`anHtv!Igaq;at$zDkWT^F5u~m{1-`Y_L zS)qK*MHy5>#v|%m$r8-U&ScIwiUUw!m$=5F5u2f}wkZ^Yq8IkTHTzf#+z!|tvr9N~ zt$ra6bp=u7r6L|_SK^xWDt~vo?{MGeezo#n8vXH?eB#CIOW*kVzd!Tmz<42hq>1@7 z*6n)KXySs4w(Z`zZTqfmJ1^Y6bz=9ft=qP4Yhv{p-w&SmcnlvE@_r&V~sy!5dF0dZ1x{7JRQpDzzbw%LBg? zk%$IqEFd0>*Ntd65X_r14?&~aarq7ao;oSh8MP{J`&PPWC7)`n@nSm4_zsQLb!|GR zv3e}Y^k!DaIs$AlTe1k#!14fVV2$)?Wq>t_PpbpW&lb_MwE@;FKAja{E#lMq01Jpu z8v?AAwQ2YU7=)um{#TsdbAUc2@q+T)EDivq!XQ9nTf3Amrl9lg-nW|$Hly{o1=!nJ zm&Tf@6I^gbjkT9!5@ovsY_nCC3!q3S&JVC4J@yj{FsA5dTY=D4offQvE^K1kHO3D? z^-yYc4+spf9qc0T4Tq#bh-{O;)?J(i*t)mq=+k^pIr== zmT6xTgAljWh?;lb&n|-;Of*9G{HzZ;Ar#Ng2EZ0m>-=m`b7T%TvHcp)FR4Z0O^pLW z{W$-M1n9u>uCNP_(ACgfQpbV6T(;Q6hBWa_9X*`2^v3fOq(RMWCmRW1JM{{ngb4V~ z2u4Pi3&tiEgYr^_T@M|g=y4pNXl7&VP!ogh^UQhCjNG#dAXa>p#+ry?ePl{wE4s#2 z{Ib~IW_FmptBJi+6X}kk6_KJBVDDxVP#s66oR-^j47on_+1UssCoCAjv^RC=&>Q>L{CSVj1WNXC2pj zYAAsH0T{b_%3IXfc`AKoU5U@C0%Vu4ktPQ7%o9Qdm&NNV{0!pBI*4B^=?3wnSgO#-w{k=J*Ax=RLf#4{TW-)>%yB)ENs+Yg53mPlaJFD@ z;t?O8)bsn%ZL??y^CqONqryJ+aDaV=DlA0>3m}Jevp4{WsZ(bgV6^MtPQaI-i3y*4 zG%fMJn3VWmOiBDNCM5nB(-HrR$q0Y_z<|jOR|MzT)u;~zWL@27SbMkjMYfDCE9kO{ zE^FwrjxJ}@rIRA^8rz8L+c?&CR?k-B(;DDj%R1OPwu+sFe`ll2dQ4C4D18n)SGIN` zTBBswCEc6Pu=BdNoMD@~&p*Sq*jNc4!&KG4wqR;KACv}B2h*Iya4C8Z*NUz0-rU~v zG`qmZo?|do!D?b{VL!ZyyXi-2e+h}wn9m#wfD-}mr%zyw_j@CuEA}u zeY*~~{r2tIc2g@rHDi~dsa`bI2kQIT#cTjgVvdzfZjnub1MMM+WuJqu&Afj|ZDK>H z6J`f+e>w2h;||^@1YQCT=zw-w8(ND{iAEFz@Vf@TVf;?wm)@Rs2Yw&L?^k7+m+=>} z);8dGAAV6!o5t@c{NCC9BwKNs4L`@CUtvx4kFff>r&xUG5iM#1o?_#t+1006>M3>v zkX?W*bE~p`K0u=laN=Tb*sVC4XMYXAs?#k096Rsvd(2X^0IXB7$Qu(r^c1_kjN(1dviDup{{A!UgQ(kintk{= zcFSpY>uL6JP<0jue$oxN<@1n;kB^`NMhn9P>|=)@*~5_AJ28P>4cR5wAK=p+Y>M5* zjzES-+2bq+Ip*0nn89AgobU=e30a=f>ajlB07HK+O!+?cKJ5VeAY}R>?FcOFDR!%N zE&I53C%av{2e$4>c0cejcy4F^D~mL-yO&(1HLj+M^n3fV)~y}Tg4(p!qaD$6)Pd|3})Wl@%z_H)#rFYDY}C5(mFbMV7X zZhwj~SP9(DuV|J_auH#xy8wmh08-sWblE`>E&j~syyg1^b=&FTHmgj%vrGfs z?zW(fPH2-8O8c5hbBmnNW-!71O%--5kFVuJ#5{ghkawGB7*hVH^=2BLQ>AUNsA>Ub z_uM=ivlW1-4ZE+;!p@I%)b*k>;)E4v 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;