Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.ideaspymes.proyecttemplate.stock.web; import com.ideaspymes.proyecttemplate.configuracion.model.EtiquetaConf; import com.ideaspymes.proyecttemplate.configuracion.servicio.interfaces.IEtiquetaConfDAO; import com.ideaspymes.proyecttemplate.generico.AbstractDAO; import com.ideaspymes.proyecttemplate.generico.ConsultaGenerico; import com.ideaspymes.proyecttemplate.stock.enums.TipoRegalo; import com.ideaspymes.proyecttemplate.stock.model.Deposito; import com.ideaspymes.proyecttemplate.stock.model.Existencia; import com.ideaspymes.proyecttemplate.stock.model.Familia; import com.ideaspymes.proyecttemplate.stock.model.Producto; import com.ideaspymes.proyecttemplate.stock.model.Ubicacion; import com.ideaspymes.proyecttemplate.stock.servicio.interfaces.IFamiliaDAO; import com.ideaspymes.proyecttemplate.stock.servicio.interfaces.IProductoDAO; import com.ideaspymes.proyecttemplate.stock.web.reporte.pojo.CatalogoProductos; import com.lowagie.text.Chunk; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.FontFactory; import com.lowagie.text.Paragraph; import com.lowagie.text.Rectangle; import com.lowagie.text.Utilities; import com.lowagie.text.pdf.Barcode39; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; import java.awt.Color; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Locale; import javax.annotation.PostConstruct; import javax.ejb.EJB; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.view.ViewScoped; import javax.inject.Named; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.util.CellRangeAddress; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.Drawing; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Picture; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.SortOrder; import org.primefaces.model.TreeNode; /** * * @author Christian */ @Named @ViewScoped public class ProductoConsultaBean extends ConsultaGenerico<Producto> { @EJB private IProductoDAO ejb; @EJB private IEtiquetaConfDAO etiquetaConfDAO; @EJB private IFamiliaDAO familiaDAO; //Filtros private String codigo; private String nombre; private Familia familia; private Deposito deposito; private Ubicacion ubicacion; private Boolean esRegalo; private TipoRegalo tipoRegalo; private Date fechaIngresoInicio; private Date fechaIngresoFin; private Date fechaCargaInicio; private Date fechaCargaFin; private TreeNode rootNode; private TreeNode selectedNode; @PostConstruct public void init() { List<Familia> principales = familiaDAO.findSinPadre(); rootNode = new DefaultTreeNode("Todos", null); Familia fa = new Familia(); fa.setNombre("Todos"); TreeNode nodeTodos = new DefaultTreeNode(fa, rootNode); nodeTodos.setExpanded(true); for (Familia f : principales) { TreeNode t1 = createTreeFamilia(f, nodeTodos); } } public TreeNode createTreeFamilia(Familia treeObj, TreeNode rootNode) { TreeNode newNode = new DefaultTreeNode(treeObj, rootNode); List<Familia> childNodes1 = familiaDAO.findHijos(treeObj); for (Familia f : childNodes1) { TreeNode newNode2 = createTreeFamilia(f, newNode); } return newNode; } public Date getFechaIngresoInicio() { return fechaIngresoInicio; } public void setFechaIngresoInicio(Date fechaIngresoInicio) { this.fechaIngresoInicio = fechaIngresoInicio; } public Date getFechaIngresoFin() { return fechaIngresoFin; } public void setFechaIngresoFin(Date fechaIngresoFin) { this.fechaIngresoFin = fechaIngresoFin; } public Date getFechaCargaInicio() { return fechaCargaInicio; } public void setFechaCargaInicio(Date fechaCargaInicio) { this.fechaCargaInicio = fechaCargaInicio; } public Date getFechaCargaFin() { return fechaCargaFin; } public void setFechaCargaFin(Date fechaCargaFin) { this.fechaCargaFin = fechaCargaFin; } public Boolean getEsRegalo() { return esRegalo; } public void setEsRegalo(Boolean esRegalo) { this.esRegalo = esRegalo; } public TipoRegalo getTipoRegalo() { return tipoRegalo; } public void setTipoRegalo(TipoRegalo tipoRegalo) { this.tipoRegalo = tipoRegalo; } public String getCodigo() { return codigo; } public void setCodigo(String codigo) { this.codigo = codigo; } public TreeNode getRootNode() { return rootNode; } public void setRootNode(TreeNode rootNode) { this.rootNode = rootNode; } public TreeNode getSelectedNode() { return selectedNode; } public void setSelectedNode(TreeNode selectedNode) { this.selectedNode = selectedNode; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public Familia getFamilia() { return familia; } public void setFamilia(Familia familia) { this.familia = familia; } public Deposito getDeposito() { return deposito; } public void setDeposito(Deposito deposito) { this.deposito = deposito; } public Ubicacion getUbicacion() { return ubicacion; } public void setUbicacion(Ubicacion ubicacion) { this.ubicacion = ubicacion; } @Override public Class<Producto> getClazz() { return Producto.class; } @Override public AbstractDAO<Producto> getEjb() { return ejb; } @Override public String construyeFilters(String sortField, SortOrder sortOrder) { StringBuilder consulta = new StringBuilder("select * from producto WHERE estado = 'ACTIVO' "); if (getCredencial().getEmpresa() != null) { consulta.append(" and empresa_id = ").append(getCredencial().getEmpresa().getId()); } if (codigo != null && codigo.length() > 0) { consulta.append(" and upper(codigo) like '%").append(codigo.toUpperCase()).append("%'"); } if (nombre != null && nombre.length() > 0) { consulta.append(" and upper(nombre) like '%").append(nombre.toUpperCase()).append("%'"); } if (esRegalo != null && esRegalo) { consulta.append(" and esregalo = true"); } if (esRegalo != null && esRegalo && tipoRegalo != null) { consulta.append(" and tiporegalo = '").append(tipoRegalo.toString()).append("'"); } if (selectedNode != null && selectedNode.getData() instanceof Familia && ((Familia) selectedNode.getData()).getId() != null) { familia = (Familia) selectedNode.getData(); } else { familia = null; } if (fechaIngresoInicio != null && fechaIngresoFin != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String R = " AND fechaingreso between '" + sdf.format(fechaIngresoInicio) + "' AND '" + sdf.format(fechaIngresoFin) + "' "; consulta.append(R); } if (fechaCargaInicio != null && fechaCargaFin != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String R = " AND fecharegitro between '" + sdf.format(fechaCargaInicio) + "' AND '" + sdf.format(fechaCargaFin) + "' "; consulta.append(R); } if (familia != null) { consulta.append(" and familia_id in ("); List<Familia> lista = creaFiltroFamilia(familia, null); for (Familia f : lista) { consulta.append(f.getId()).append(","); } consulta.append("0)"); } if (deposito != null && ubicacion == null) { consulta.append(" and id in (SELECT distinct p.id from producto p"); consulta.append(" left join existencia e on e.producto_id = p.id"); consulta.append(" where e.deposito_id = ").append(deposito.getId()).append(")"); } else if (deposito != null && ubicacion != null) { consulta.append(" and id in (SELECT distinct p.id from producto p"); consulta.append(" left join existencia e on e.producto_id = p.id"); consulta.append(" where e.deposito_id = ").append(deposito.getId()); consulta.append(" and e.ubicacion_id = ").append(ubicacion.getId()).append(")"); } if (sortField != null) { consulta.append(" ORDER BY "); consulta.append(sortField); consulta.append(SortOrder.ASCENDING.equals(sortOrder) ? " ASC " : " DESC "); } System.out.println("Contruye Consulta: " + consulta.toString()); return consulta.toString(); } public List<Familia> creaFiltroFamilia(Familia f, List<Familia> lista) { if (lista == null) { lista = new ArrayList<>(); } List<Familia> childNodes1 = familiaDAO.findHijos(f); lista.add(f); for (Familia fa : childNodes1) { lista = creaFiltroFamilia(fa, lista); } return lista; } @Override public String construyeCount() { StringBuilder consulta = new StringBuilder("select count(*) from producto WHERE estado = 'ACTIVO' "); if (getCredencial().getEmpresa() != null) { consulta.append(" and empresa_id = ").append(getCredencial().getEmpresa().getId()); } if (codigo != null && codigo.length() > 0) { consulta.append(" and upper(codigo) like '%").append(codigo.toUpperCase()).append("%'"); } if (nombre != null && nombre.length() > 0) { consulta.append(" and upper(nombre) like '%").append(nombre.toUpperCase()).append("%'"); } if (esRegalo != null && esRegalo) { consulta.append(" and esregalo = true"); } if (esRegalo != null && esRegalo && tipoRegalo != null) { consulta.append(" and tiporegalo = '").append(tipoRegalo.toString()).append("'"); } if (selectedNode != null && selectedNode.getData() instanceof Familia && ((Familia) selectedNode.getData()).getId() != null) { familia = (Familia) selectedNode.getData(); } else { familia = null; } if (fechaIngresoInicio != null && fechaIngresoFin != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String R = " AND fechaingreso between '" + sdf.format(fechaIngresoInicio) + "' AND '" + sdf.format(fechaIngresoFin) + "' "; consulta.append(R); } if (fechaCargaInicio != null && fechaCargaFin != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String R = " AND fecharegitro between '" + sdf.format(fechaCargaInicio) + "' AND '" + sdf.format(fechaCargaFin) + "' "; consulta.append(R); } if (familia != null) { consulta.append(" and familia_id in ("); List<Familia> lista = creaFiltroFamilia(familia, null); for (Familia f : lista) { consulta.append(f.getId()).append(","); } consulta.append("0)"); } if (deposito != null && ubicacion == null) { consulta.append(" and id in (SELECT distinct p.id from producto p"); consulta.append(" left join existencia e on e.producto_id = p.id"); consulta.append(" where e.deposito_id = ").append(deposito.getId()).append(")"); } else if (deposito != null && ubicacion != null) { consulta.append(" and id in (SELECT distinct p.id from producto p"); consulta.append(" left join existencia e on e.producto_id = p.id"); consulta.append(" where e.deposito_id = ").append(deposito.getId()); consulta.append(" and e.ubicacion_id = ").append(ubicacion.getId()).append(")"); } return consulta.toString(); } public String createPdf() throws IOException, DocumentException { EtiquetaConf conf = etiquetaConfDAO.getEtiquetaConfDefault(); if (hayParaImprimir() && conf != null) { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance() .getExternalContext().getResponse(); response.setContentType("application/x-pdf"); response.setHeader("Content-Disposition", "attachment; filename=\"etiquetas.pdf\""); float ancho = Utilities.millimetersToPoints(conf.getAnchoHoja().floatValue()); System.out.println("Ancho: " + ancho); float largo = Utilities.millimetersToPoints(conf.getLargoHoja().floatValue()); System.out.println("Alto: " + largo); // step 1 Document document = new Document(new Rectangle(ancho, largo)); // step 2 document.setMargins(0f, 0f, 0f, 0f); PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream()); // step 3 document.open(); // step 4 PdfContentByte cb = writer.getDirectContent(); for (Producto p : getLista()) { if (p.getCantidadEtiquetas() > 0) { PdfPTable table = new PdfPTable(2); table.setWidthPercentage(96); Font fontbold = FontFactory.getFont("Times-Roman", 8, Font.NORMAL); Chunk productTitle = new Chunk("HC", fontbold); Paragraph pTitile = new Paragraph(productTitle); pTitile.setAlignment(Element.ALIGN_LEFT); pTitile.setLeading(6, 0); PdfPCell cellTitle = new PdfPCell(); cellTitle.setHorizontalAlignment(Element.ALIGN_LEFT); cellTitle.setVerticalAlignment(Element.ALIGN_TOP); cellTitle.setBorder(Rectangle.NO_BORDER); cellTitle.addElement(pTitile); Font font2 = FontFactory.getFont("Times-Roman", conf.getTamDescripcion().floatValue(), Font.NORMAL); Chunk productName = new Chunk(p.getNombre(), font2); Paragraph pName = new Paragraph(productName); pName.setAlignment(Element.ALIGN_CENTER); //pTitile.setLeading(0, 1); cellTitle.addElement(pName); table.addCell(cellTitle); Barcode39 code39 = new Barcode39(); code39.setCode(p.getCodigo()); //code39.setCodeType(Barcode.EAN13); code39.setBarHeight(conf.getAltoCodBarra().floatValue()); //codeEan.setX(0.7f); code39.setSize(conf.getTamDescripcion().floatValue()); //code39.setAltText("HC - " + p.getNombre()); PdfPCell cellBarcode = new PdfPCell(); cellBarcode.setHorizontalAlignment(Element.ALIGN_CENTER); cellBarcode.setBorder(Rectangle.NO_BORDER); cellBarcode.addElement(code39.createImageWithBarcode(cb, null, Color.BLACK)); table.addCell(cellBarcode); for (int i = 0; i < p.getCantidadEtiquetas(); i++) { document.add(table); document.newPage(); } } } // step 5 document.close(); response.getOutputStream().flush(); response.getOutputStream().close(); FacesContext.getCurrentInstance().responseComplete(); } else { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No hay nada que imprimir", "")); } return null; } private boolean hayParaImprimir() { boolean R = false; for (Producto p : getLista()) { if (p.getCantidadEtiquetas() > 0) { R = true; break; } } return R; } @Override public String getPath() { return "reportes/stock/CatalogoProducto.jasper"; } @Override public String getNombreReporte() { return "catalogo"; } @Override public Collection getDetalles() { ArrayList<CatalogoProductos> detalles = new ArrayList<>(); List<Producto> lista = ejb.findFilterAll(construyeFilters("nombre", SortOrder.ASCENDING)); for (Producto p : lista) { String ubicaciones = ""; double stock = 0; for (Existencia e : ejb.findExistenciasPorProducto(p)) { ubicaciones += e.getCantidad() + " " + e.getUnidadMedida().getNombre() + " en " + e.getDeposito().getNombre() + " - " + (e.getUbicacion() == null ? "" : e.getUbicacion().getNombre()) + "\n"; stock += e.getCantidad(); } detalles.add(new CatalogoProductos(p.getImagen(), p.getFechaIngreso(), p.getFechaRegitro(), p.getNombre(), p.getDescripcion(), ubicaciones, stock, p.getCodigo(), p.getFamilia() != null ? p.getFamilia().getNombre() : "No definido", (p.getEsRegalo() == null ? false : p.getEsRegalo()))); } Comparator<CatalogoProductos> comp = new Comparator<CatalogoProductos>() { @Override public int compare(CatalogoProductos o1, CatalogoProductos o2) { String x1 = o1.getFamilia(); String x2 = o2.getFamilia(); int sComp = x1.compareTo(x2); if (sComp != 0) { return sComp; } else { String y1 = o1.getProducto(); String y2 = o2.getProducto(); return y1.compareTo(y2); } } }; Collections.sort(detalles, comp); return detalles; } @Override public void cargaParams() { SimpleDateFormat date = new SimpleDateFormat("dd-MM-yyyy", new Locale("es", "PY")); getParams().put("fecha", date.format(new Date())); getParams().put("ubicacion", (ubicacion != null ? ubicacion.getNombre() : "todos")); getParams().put("deposito", (deposito != null ? deposito.getNombre() : "todos")); } @Override public Workbook getWorkBook() { Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("My Sample Excel"); List<CatalogoProductos> lista = (List<CatalogoProductos>) getDetalles(); sheet.setDefaultRowHeight((short) (sheet.getDefaultRowHeight() * new Short("6"))); org.apache.poi.ss.usermodel.Font fontTitulo = wb.createFont(); fontTitulo.setFontHeightInPoints((short) 12); fontTitulo.setBoldweight(org.apache.poi.ss.usermodel.Font.BOLDWEIGHT_BOLD); org.apache.poi.ss.usermodel.Font fontTituloPricipal = wb.createFont(); fontTituloPricipal.setFontHeightInPoints((short) 22); fontTituloPricipal.setBoldweight(org.apache.poi.ss.usermodel.Font.BOLDWEIGHT_BOLD); DataFormat format = wb.createDataFormat(); CellStyle styleTituloPrincipal = wb.createCellStyle(); styleTituloPrincipal.setFont(fontTituloPricipal); styleTituloPrincipal.setVerticalAlignment(CellStyle.VERTICAL_CENTER); styleTituloPrincipal.setAlignment(CellStyle.ALIGN_CENTER); CellStyle styleTitulo = wb.createCellStyle(); styleTitulo.setFont(fontTitulo); styleTitulo.setVerticalAlignment(CellStyle.VERTICAL_CENTER); styleTitulo.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex()); styleTitulo.setFillPattern(CellStyle.SOLID_FOREGROUND); styleTitulo.setWrapText(true); CellStyle styleNumero = wb.createCellStyle(); styleNumero.setDataFormat(format.getFormat("#,##0")); styleNumero.setWrapText(true); styleNumero.setVerticalAlignment(CellStyle.VERTICAL_CENTER); styleNumero.setAlignment(CellStyle.ALIGN_CENTER); CellStyle styleFecha = wb.createCellStyle(); styleFecha.setDataFormat(format.getFormat("dd/MM/yyyy")); styleFecha.setVerticalAlignment(CellStyle.VERTICAL_CENTER); styleFecha.setAlignment(CellStyle.ALIGN_CENTER); CellStyle style = wb.createCellStyle(); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setWrapText(true); CellStyle styleCenter = wb.createCellStyle(); styleCenter.setVerticalAlignment(CellStyle.VERTICAL_CENTER); styleCenter.setAlignment(CellStyle.ALIGN_CENTER); styleCenter.setWrapText(true); Row rowTitle = sheet.createRow(0); Cell cellTitle = rowTitle.createCell(1); cellTitle.setCellStyle(styleTituloPrincipal); sheet.addMergedRegion(new CellRangeAddress(0, //first row (0-based) 1, //last row (0-based) 1, //first column (0-based) 11 //last column (0-based) )); cellTitle.setCellValue("Listado de Activos"); int i = 2; Row row0 = sheet.createRow(i); row0.setHeight((short) 500); Cell cell1 = row0.createCell(1); cell1.setCellValue("Foto"); cell1.setCellStyle(styleTitulo); Cell cellFecha = row0.createCell(3); cellFecha.setCellValue("Fecha Ingreso"); cellFecha.setCellStyle(styleTitulo); Cell cellFechaCarga = row0.createCell(4); cellFechaCarga.setCellValue("Fecha Carga"); cellFechaCarga.setCellStyle(styleTitulo); Cell cell3 = row0.createCell(5); cell3.setCellValue("Nombre"); cell3.setCellStyle(styleTitulo); Cell cell4 = row0.createCell(6); cell4.setCellValue("Cdigo"); cell4.setCellStyle(styleTitulo); Cell cell5 = row0.createCell(7); cell5.setCellValue("Descripcin"); cell5.setCellStyle(styleTitulo); Cell cell6 = row0.createCell(8); cell6.setCellValue("Es Regalo?"); cell6.setCellStyle(styleTitulo); Cell cell7 = row0.createCell(9); cell7.setCellValue("Familia"); cell7.setCellStyle(styleTitulo); Cell cell8 = row0.createCell(10); cell8.setCellValue("Ubicaciones"); cell8.setCellStyle(styleTitulo); Cell cell9 = row0.createCell(11); cell9.setCellValue("Stock"); cell9.setCellStyle(styleTitulo); for (CatalogoProductos cp : lista) { int indexFila = i + 1; if (cp.getImagen() != null) { int pictureIdx = wb.addPicture(cp.getImagen(), Workbook.PICTURE_TYPE_PNG); CreationHelper helper = wb.getCreationHelper(); //Creates the top-level drawing patriarch. Drawing drawing = sheet.createDrawingPatriarch(); //Create an anchor that is attached to the worksheet ClientAnchor anchor = helper.createClientAnchor(); //set top-left corner for the image anchor.setCol1(1); anchor.setRow1(indexFila); //Creates a picture Picture pict = drawing.createPicture(anchor, pictureIdx); //Reset the image to the original size pict.resize(0.4); } Row row1 = sheet.createRow(indexFila); row1.setHeightInPoints(80f); Cell cellColFecha = row1.createCell(3); if (cp.getFecha() != null) { cellColFecha.setCellValue(cp.getFecha()); cellColFecha.setCellStyle(styleFecha); } else { cellColFecha.setCellValue(""); cellColFecha.setCellStyle(styleFecha); } Cell cellColFechaCarga = row1.createCell(4); if (cp.getFechaCarga() != null) { cellColFechaCarga.setCellValue(cp.getFechaCarga()); cellColFechaCarga.setCellStyle(styleFecha); } else { cellColFechaCarga.setCellValue(""); cellColFechaCarga.setCellStyle(styleFecha); } Cell cellCol1 = row1.createCell(5); cellCol1.setCellValue(cp.getProducto()); cellCol1.setCellStyle(style); Cell cellCol2 = row1.createCell(6); cellCol2.setCellValue(cp.getCodigo()); cellCol2.setCellStyle(styleNumero); Cell cellCol3 = row1.createCell(7); cellCol3.setCellValue(cp.getDescripcion()); cellCol3.setCellStyle(style); Cell cellCol4 = row1.createCell(8); cellCol4.setCellValue(cp.isEsRegalo() ? "SI" : "NO"); cellCol4.setCellStyle(styleCenter); Cell cellCol5 = row1.createCell(9); cellCol5.setCellValue(cp.getFamilia()); cellCol5.setCellStyle(style); Cell cellCol6 = row1.createCell(10); cellCol6.setCellValue(cp.getUbicaciones()); cellCol6.setCellStyle(style); Cell cellCol7 = row1.createCell(11); cellCol7.setCellValue(cp.getStock()); cellCol7.setCellStyle(styleNumero); i++; } sheet.setColumnWidth(1, 4000); sheet.setColumnWidth(2, 0); sheet.setColumnWidth(3, 4000); sheet.setColumnWidth(4, 4000); sheet.setColumnWidth(5, 10000); sheet.setColumnWidth(6, 3000); sheet.setColumnWidth(7, 10000); sheet.setColumnWidth(8, 3500); sheet.setColumnWidth(9, 6000); sheet.setColumnWidth(10, 10000); sheet.setColumnWidth(11, 2000); return wb; } }