diff --git a/Desenvolvimento/Codificacao/e-Selo/WebContent/WEB-INF/jsp/parametroCalculo/lista.jsp b/Desenvolvimento/Codificacao/e-Selo/WebContent/WEB-INF/jsp/parametroCalculo/lista.jsp index 6696478..592bb03 100644 --- a/Desenvolvimento/Codificacao/e-Selo/WebContent/WEB-INF/jsp/parametroCalculo/lista.jsp +++ b/Desenvolvimento/Codificacao/e-Selo/WebContent/WEB-INF/jsp/parametroCalculo/lista.jsp @@ -67,10 +67,10 @@ ${parametroCalculo.usuario.nome}
- " class="btn btn-default btn-sm">Relatório " class="btn btn-default btn-sm">Consultar " class="btn btn-default btn-sm btn-confirm" data-msg="Deseja realmente excluir o Parametro de Avaliação selecionado?">Excluir + " class="btn btn-default btn-sm">Exportar
diff --git a/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/controller/ParametroCalculoController.java b/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/controller/ParametroCalculoController.java index 386cf11..49d834e 100644 --- a/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/controller/ParametroCalculoController.java +++ b/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/controller/ParametroCalculoController.java @@ -1,7 +1,24 @@ package br.com.eselo.controller; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.IndexedColors; +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.ss.util.CellRangeAddress; import br.com.caelum.vraptor.Get; import br.com.caelum.vraptor.Path; @@ -17,7 +34,9 @@ import br.com.eselo.component.Messages; import br.com.eselo.component.UsuarioWeb; import br.com.eselo.dao.ParametroCalculoDAO; import br.com.eselo.dao.RecomendacaoDAO; +import br.com.eselo.model.Criterio; import br.com.eselo.model.ParametroCalculo; +import br.com.eselo.model.Recomendacao; @Resource public class ParametroCalculoController { @@ -26,15 +45,15 @@ public class ParametroCalculoController { private final Result result; private final Validator validator; private final UsuarioWeb usuarioWeb; - + protected static final int MODO_ADD = 1; protected static final int MODO_EDIT = 2; protected static final int MODO_DELETE = 3; protected static final int MODO_IMPORT = 4; public ParametroCalculoController(ParametroCalculoDAO _dao, - RecomendacaoDAO _daoRecomendacao, Result _result, Validator _validator, - UsuarioWeb _usuarioWeb) { + RecomendacaoDAO _daoRecomendacao, Result _result, + Validator _validator, UsuarioWeb _usuarioWeb) { dao = _dao; result = _result; validator = _validator; @@ -49,24 +68,27 @@ public class ParametroCalculoController { parametroCalculo.setTsInicio(new java.util.Date()); inserirParametroCalculo(parametroCalculo); - result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId()); + result.redirectTo(ParametroCalculoController.class) + .form(dao.getMaxId()); } @Get("/parametrosCalculo/importar/") @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR") public void importar(long idParametroCalculo) { String mensagem; - if(idParametroCalculo==0){ - criarNovoParametroCalculo(new ParametroCalculo(),MODO_ADD); + if (idParametroCalculo == 0) { + criarNovoParametroCalculo(new ParametroCalculo(), MODO_ADD); mensagem = "Novo parâmetro criado [sem recomendações ou critérios associados]!"; - }else{ + } else { ParametroCalculo pc = dao.load(idParametroCalculo); - this.criarNovoParametroCalculo(pc,MODO_IMPORT); - mensagem = "Parâmetro de Cálculo criado com base no parametro "+pc.getDescricao()+" com sucesso."; + this.criarNovoParametroCalculo(pc, MODO_IMPORT); + mensagem = "Parâmetro de Cálculo criado com base no parametro " + + pc.getDescricao() + " com sucesso."; } - + result.include("mensagem", mensagem); - result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId()); + result.redirectTo(ParametroCalculoController.class) + .form(dao.getMaxId()); } @Post("/parametrosCalculo") @@ -103,7 +125,7 @@ public class ParametroCalculoController { if (ultimo != null) { ultimo.setTsFim(parametroCalculo.getTsInicio()); dao.update(ultimo); - }else if (parametroCalculo.getDescricao() == null) { + } else if (parametroCalculo.getDescricao() == null) { validator.add(new ValidationMessage(Messages .getString("parametro_calculo.validacao.descricao"), "parametroCalculo.descricao")); @@ -116,10 +138,12 @@ public class ParametroCalculoController { @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR") public void atualizar(ParametroCalculo parametroCalculo) { - ParametroCalculo parametroCalculoCadastrado = dao.load(parametroCalculo.getId()); + ParametroCalculo parametroCalculoCadastrado = dao.load(parametroCalculo + .getId()); parametroCalculoCadastrado.setTsFim(parametroCalculo.getTsFim()); parametroCalculoCadastrado.setUsuario(parametroCalculo.getUsuario()); - parametroCalculoCadastrado.setDescricao(parametroCalculo.getDescricao()); + parametroCalculoCadastrado + .setDescricao(parametroCalculo.getDescricao()); if (parametroCalculo.getTsFim() != null) { if (parametroCalculo.getTsFim().before( @@ -129,48 +153,52 @@ public class ParametroCalculoController { "O campo \"Fim\" deve ser maior que o campo \"Início\"!", "parametroCalculo.tsFim")); } - }else if (parametroCalculo.getDescricao() == null) { + } else if (parametroCalculo.getDescricao() == null) { validator.add(new ValidationMessage(Messages .getString("parametro_calculo.validacao.descricao"), "parametroCalculo.descricao")); } - // result.include("usuarioList", dao.getAllUsuarios()); - // result.include("recomendacaoList", new RecomendacaoDAO(dao.getSession()).listAllAtivas(this.dao.load(parametroCalculo.getId()))); - System.err.println(parametroCalculo.getId()+"Id do parametro de calculo"); - - validator.onErrorUsePageOf(ParametroCalculoController.class).form(parametroCalculo.getId()); + // result.include("usuarioList", dao.getAllUsuarios()); + // result.include("recomendacaoList", new + // RecomendacaoDAO(dao.getSession()).listAllAtivas(this.dao.load(parametroCalculo.getId()))); + System.err.println(parametroCalculo.getId() + + "Id do parametro de calculo"); + + validator.onErrorUsePageOf(ParametroCalculoController.class).form( + parametroCalculo.getId()); dao.saveOrUpdate(parametroCalculoCadastrado); - result.include("mensagem", - "Parâmetro de Cálculo alterado com sucesso."); + result.include("mensagem", "Parâmetro de Cálculo alterado com sucesso."); result.redirectTo(ParametroCalculoController.class).index(1); } @Path("/parametrosCalculo/delete/{id}") @Restrito(descricao = "PARAMETRO_CALCULO_EXCLUIR") public void excluir(Long id) { - - if(dao.listAll().size()>1){ + if (dao.listAll().size() > 1) { ParametroCalculo pa = dao.load(id); - if((pa.getTsFim()==null)){ - dao.remove(id); - - pa = dao.getLastParametrosCalculo(); - pa.setTsFim(null); - dao.update(pa); - result.include("mensagem", "Parametro de Cálculo excluído com sucesso."); - }else{ - result.include("mensagem", "Parametro de Cálculo não pode ser excluído pois não está ativo."); + if ((pa.getTsFim() == null)) { + dao.remove(id); + + pa = dao.getLastParametrosCalculo(); + pa.setTsFim(null); + dao.update(pa); + result.include("mensagem", + "Parametro de Cálculo excluído com sucesso."); + } else { + result.include("mensagem", + "Parametro de Cálculo não pode ser excluído pois não está ativo."); } - }else{ - result.include("mensagem", "Este é o único Parametro de Cálculo cadastrado e ele não pode ser excluído."); + } else { + result.include("mensagem", + "Este é o único Parametro de Cálculo cadastrado e ele não pode ser excluído."); } - + result.redirectTo(ParametroCalculoController.class).lista(); } - + @Get("/parametrosCalculo") @Restrito(descricao = "PARAMETRO_CALCULO_LISTA") public List lista() { @@ -225,13 +253,15 @@ public class ParametroCalculoController { result.include("parametroCalculo", parametroCalculo); return dao.listAll(parametroCalculo); } - + @Get("/parametrosCalculo/atualizar/{id}") @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR") public ParametroCalculo form(Long id) { ParametroCalculo parametroCalculo = this.dao.load(id); result.include("usuarioList", dao.getAllUsuarios()); - result.include("recomendacaoList", new RecomendacaoDAO(dao.getSession()).listAllAtivas(parametroCalculo)); + result.include("recomendacaoList", + new RecomendacaoDAO(dao.getSession()) + .listAllAtivas(parametroCalculo)); return parametroCalculo; } @@ -244,37 +274,168 @@ public class ParametroCalculoController { result.include("parametroCalculo", parametroCalculo); } - private void criarNovoParametroCalculo(ParametroCalculo parametroCalculo, int tipo) { - + private void criarNovoParametroCalculo(ParametroCalculo parametroCalculo, + int tipo) { boolean ok = false; switch (tipo) { - case ParametroCalculoController.MODO_ADD: - parametroCalculo.setId(0L); - ok=true; - break; - - case ParametroCalculoController.MODO_IMPORT: - ok=true; - break; + case ParametroCalculoController.MODO_ADD: + parametroCalculo.setId(0L); + ok = true; + break; + + case ParametroCalculoController.MODO_IMPORT: + ok = true; + break; } - - if(ok){ - new CopiadorParametroCalculo().criarNovoParametroCalculo(parametroCalculo, usuarioWeb, dao.getSession()); - } - - - + + if (ok) { + new CopiadorParametroCalculo().criarNovoParametroCalculo( + parametroCalculo, usuarioWeb, dao.getSession()); + } + } - + @Get("/parametrosCalculo/relatorio/{id}") @Restrito(descricao = "PARAMETRO_CALCULO_RELATORIO") public ParametroCalculo relatorio(Long id) { ParametroCalculo parametroCalculo = this.dao.load(id); result.include("usuarioList", dao.getAllUsuarios()); - result.include("recomendacaoList", new RecomendacaoDAO(dao.getSession()).listAllAtivas(parametroCalculo)); + result.include("recomendacaoList", + new RecomendacaoDAO(dao.getSession()) + .listAllAtivas(parametroCalculo)); return parametroCalculo; } + @Get("/parametrosCalculo/exportar/{id}/*") + @Restrito(descricao = "PARAMETRO_CALCULO_LISTA") + public File exportar(Long id) { + File relatorio = new File("workbook.ods"); + ParametroCalculo parametroCalculo = this.dao.load(id); + List recomendacaoList = new RecomendacaoDAO( + dao.getSession()).listAllAtivas(parametroCalculo); + + Workbook wb = new HSSFWorkbook(); + FileOutputStream fileOut; + + Map styles = createStyles(wb); + CreationHelper createHelper = wb.getCreationHelper(); + Sheet sheet = wb.createSheet("new sheet"); + sheet.setPrintGridlines(false); + sheet.setDisplayGridlines(false); + + short rows = 0; + Row row = sheet.createRow(rows); + Cell cell = row.createCell(0); + cell.setCellValue(createHelper.createRichTextString(parametroCalculo + .getDescricao())); + cell.setCellStyle(styles.get("title")); + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1")); + rows += 3; + + for (Recomendacao recomendacao : recomendacaoList) { + row = sheet.createRow(rows); + cell = row.createCell(0); + cell.setCellValue( + createHelper.createRichTextString("Recomendação " + + recomendacao.getNumeroRecomendacao())); + cell.setCellStyle(styles.get("subtitle")); + rows++; + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$"+rows+":$L$"+rows)); + + row = sheet.createRow(rows); + cell = row.createCell(1); + cell.setCellValue("Descrição"); + cell.setCellStyle(styles.get("label")); + row.createCell(2).setCellValue(recomendacao.getDescricao()); + rows++; + + row = sheet.createRow(rows); + cell = row.createCell(1); + cell.setCellValue("Peso"); + cell.setCellStyle(styles.get("label")); + cell = row.createCell(2); + cell.setCellValue(recomendacao.getPeso()); + cell.setCellStyle(styles.get("numeric")); + rows += 2; + + row = sheet.createRow(rows); + cell = row.createCell(1); + cell.setCellValue("Código"); + cell.setCellStyle(styles.get("label")); + cell = row.createCell(2); + cell.setCellValue("Peso"); + cell.setCellStyle(styles.get("label")); + cell = row.createCell(3); + cell.setCellValue("Critério"); + cell.setCellStyle(styles.get("label")); + rows++; + + for (Criterio criterio : recomendacao.getCriterios()) { + row = sheet.createRow(rows); + row.createCell(1).setCellValue(criterio.getNumeroCriterio()); + row.createCell(2).setCellValue(criterio.getPeso()); + row.createCell(3).setCellValue(criterio.getDescricao()); + rows++; + } + + rows += 2; + } + + try { + fileOut = new FileOutputStream(relatorio); + wb.write(fileOut); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + return relatorio; + } + + private static Map createStyles(Workbook wb) { + Map styles = new HashMap(); + + CellStyle style; + Font fontLargeBold = wb.createFont(); + fontLargeBold.setFontHeightInPoints((short) 12); + fontLargeBold.setFontName("Arial"); + fontLargeBold.setBoldweight(Font.BOLDWEIGHT_BOLD); + + Font fontMediumBold = wb.createFont(); + fontMediumBold.setFontHeightInPoints((short) 11); + fontMediumBold.setFontName("Arial"); + fontMediumBold.setBoldweight(Font.BOLDWEIGHT_BOLD); + + Font fontNormalBold = wb.createFont(); + fontNormalBold.setFontHeightInPoints((short) 10); + fontNormalBold.setFontName("Arial"); + fontNormalBold.setBoldweight(Font.BOLDWEIGHT_BOLD); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setFont(fontLargeBold); + styles.put("title", style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setFont(fontMediumBold); + style.setBorderBottom(CellStyle.BORDER_DOTTED); + style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); + styles.put("subtitle", style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setFont(fontNormalBold); + styles.put("label", style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setDataFormat(wb.createDataFormat().getFormat("0")); + styles.put("numeric", style); + + return styles; + } } diff --git a/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/model/ParametroCalculo.java b/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/model/ParametroCalculo.java index 08478dc..087665a 100644 --- a/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/model/ParametroCalculo.java +++ b/Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/model/ParametroCalculo.java @@ -23,6 +23,8 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.ForeignKey; +import br.com.eselo.component.Util; + @Entity @Table(name = "sel_parametro_calculo") public class ParametroCalculo { @@ -30,7 +32,7 @@ public class ParametroCalculo { public ParametroCalculo() { this.recomendacoes = new ArrayList(); } - + @Id @SequenceGenerator(name = "sel_parametro_calculo_id_parametro_calculo_seq", sequenceName = "sel_parametro_calculo_id_parametro_calculo_seq") @GeneratedValue(strategy = GenerationType.AUTO, generator = "sel_parametro_calculo_id_parametro_calculo_seq") @@ -44,7 +46,7 @@ public class ParametroCalculo { @Column(name = "ts_fim", columnDefinition = "timestamp without time zone") @Temporal(TemporalType.TIMESTAMP) private Date tsFim; - + @Column(name = "ds_descricao", nullable = false) private String descricao; @@ -56,7 +58,7 @@ public class ParametroCalculo { @OneToMany(mappedBy = "parametroCalculo", targetEntity = br.com.eselo.model.Recomendacao.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List recomendacoes; - + @OneToMany(mappedBy = "parametroCalculo", targetEntity = br.com.eselo.model.Avaliacao.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List avaliacoes; @@ -67,15 +69,14 @@ public class ParametroCalculo { public void setAvaliacoes(List avaliacoes) { this.avaliacoes = avaliacoes; } - - public void addAvaliacao(Avaliacao avaliacao){ + + public void addAvaliacao(Avaliacao avaliacao) { this.avaliacoes.add(avaliacao); } - - public void removeAvaliacao(Avaliacao avaliacao){ + + public void removeAvaliacao(Avaliacao avaliacao) { this.avaliacoes.remove(avaliacao); } - public List getRecomendacoes() { return recomendacoes; @@ -85,14 +86,14 @@ public class ParametroCalculo { this.recomendacoes = recomendacoes; } - public void addRecomendacao(Recomendacao recomendacao){ + public void addRecomendacao(Recomendacao recomendacao) { this.recomendacoes.add(recomendacao); } - - public void removeRecomendacao(Recomendacao recomendacao){ + + public void removeRecomendacao(Recomendacao recomendacao) { this.recomendacoes.remove(recomendacao); } - + public Long getId() { return id; } @@ -124,7 +125,7 @@ public class ParametroCalculo { public void setUsuario(Usuario usuario) { this.usuario = usuario; } - + public String getDescricao() { return descricao; } @@ -132,4 +133,9 @@ public class ParametroCalculo { public void setDescricao(String descricao) { this.descricao = descricao; } + + public String getSlug() { + return Util.toSlug(descricao); + } + } -- libgit2 0.21.2