Commit f84d6633e0d43eb847652ee967a59e59a57aae5d

Authored by vitor.pacheco
1 parent 02fab9b1
Exists in master

Codificação #3290: Exportar para ODS

git-svn-id: https://svn.bento.ifrs.edu.br/default/ASES/e-selo@9823 c2178572-b5ca-4887-91d2-9e3a90c7d55b
Desenvolvimento/Codificacao/e-Selo/WebContent/WEB-INF/jsp/parametroCalculo/lista.jsp
... ... @@ -67,10 +67,10 @@
67 67 <td>${parametroCalculo.usuario.nome}</td>
68 68 <td>
69 69 <div class="btn-group">
70   - <a href="<c:url value="/parametrosCalculo/relatorio/${parametroCalculo.id}" />" class="btn btn-default btn-sm">Relatório</a>
71 70 <a href="<c:url value="/parametrosCalculo/atualizar/${parametroCalculo.id}" />" class="btn btn-default btn-sm">Consultar</a>
72 71 <c:if test="${parametroCalculo.tsFim == null}">
73 72 <a href="<c:url value="/parametrosCalculo/delete/${parametroCalculo.id}" />" class="btn btn-default btn-sm btn-confirm" data-msg="Deseja realmente excluir o Parametro de Avaliação selecionado?">Excluir</a>
  73 + <a href="<c:url value="/parametrosCalculo/exportar/${parametroCalculo.id}/${parametroCalculo.slug}.ods" />" class="btn btn-default btn-sm">Exportar</a>
74 74 </c:if>
75 75 </div>
76 76 </td>
... ...
Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/controller/ParametroCalculoController.java
1 1 package br.com.eselo.controller;
2 2  
  3 +import java.io.File;
  4 +import java.io.FileNotFoundException;
  5 +import java.io.FileOutputStream;
  6 +import java.io.IOException;
3 7 import java.util.ArrayList;
  8 +import java.util.HashMap;
4 9 import java.util.List;
  10 +import java.util.Map;
  11 +
  12 +import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  13 +import org.apache.poi.ss.usermodel.Cell;
  14 +import org.apache.poi.ss.usermodel.CellStyle;
  15 +import org.apache.poi.ss.usermodel.CreationHelper;
  16 +import org.apache.poi.ss.usermodel.Font;
  17 +import org.apache.poi.ss.usermodel.IndexedColors;
  18 +import org.apache.poi.ss.usermodel.Row;
  19 +import org.apache.poi.ss.usermodel.Sheet;
  20 +import org.apache.poi.ss.usermodel.Workbook;
  21 +import org.apache.poi.ss.util.CellRangeAddress;
5 22  
6 23 import br.com.caelum.vraptor.Get;
7 24 import br.com.caelum.vraptor.Path;
... ... @@ -17,7 +34,9 @@ import br.com.eselo.component.Messages;
17 34 import br.com.eselo.component.UsuarioWeb;
18 35 import br.com.eselo.dao.ParametroCalculoDAO;
19 36 import br.com.eselo.dao.RecomendacaoDAO;
  37 +import br.com.eselo.model.Criterio;
20 38 import br.com.eselo.model.ParametroCalculo;
  39 +import br.com.eselo.model.Recomendacao;
21 40  
22 41 @Resource
23 42 public class ParametroCalculoController {
... ... @@ -26,15 +45,15 @@ public class ParametroCalculoController {
26 45 private final Result result;
27 46 private final Validator validator;
28 47 private final UsuarioWeb usuarioWeb;
29   -
  48 +
30 49 protected static final int MODO_ADD = 1;
31 50 protected static final int MODO_EDIT = 2;
32 51 protected static final int MODO_DELETE = 3;
33 52 protected static final int MODO_IMPORT = 4;
34 53  
35 54 public ParametroCalculoController(ParametroCalculoDAO _dao,
36   - RecomendacaoDAO _daoRecomendacao, Result _result, Validator _validator,
37   - UsuarioWeb _usuarioWeb) {
  55 + RecomendacaoDAO _daoRecomendacao, Result _result,
  56 + Validator _validator, UsuarioWeb _usuarioWeb) {
38 57 dao = _dao;
39 58 result = _result;
40 59 validator = _validator;
... ... @@ -49,24 +68,27 @@ public class ParametroCalculoController {
49 68 parametroCalculo.setTsInicio(new java.util.Date());
50 69 inserirParametroCalculo(parametroCalculo);
51 70  
52   - result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId());
  71 + result.redirectTo(ParametroCalculoController.class)
  72 + .form(dao.getMaxId());
53 73 }
54 74  
55 75 @Get("/parametrosCalculo/importar/")
56 76 @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")
57 77 public void importar(long idParametroCalculo) {
58 78 String mensagem;
59   - if(idParametroCalculo==0){
60   - criarNovoParametroCalculo(new ParametroCalculo(),MODO_ADD);
  79 + if (idParametroCalculo == 0) {
  80 + criarNovoParametroCalculo(new ParametroCalculo(), MODO_ADD);
61 81 mensagem = "Novo parâmetro criado [sem recomendações ou critérios associados]!";
62   - }else{
  82 + } else {
63 83 ParametroCalculo pc = dao.load(idParametroCalculo);
64   - this.criarNovoParametroCalculo(pc,MODO_IMPORT);
65   - mensagem = "Parâmetro de Cálculo criado com base no parametro "+pc.getDescricao()+" com sucesso.";
  84 + this.criarNovoParametroCalculo(pc, MODO_IMPORT);
  85 + mensagem = "Parâmetro de Cálculo criado com base no parametro "
  86 + + pc.getDescricao() + " com sucesso.";
66 87 }
67   -
  88 +
68 89 result.include("mensagem", mensagem);
69   - result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId());
  90 + result.redirectTo(ParametroCalculoController.class)
  91 + .form(dao.getMaxId());
70 92 }
71 93  
72 94 @Post("/parametrosCalculo")
... ... @@ -103,7 +125,7 @@ public class ParametroCalculoController {
103 125 if (ultimo != null) {
104 126 ultimo.setTsFim(parametroCalculo.getTsInicio());
105 127 dao.update(ultimo);
106   - }else if (parametroCalculo.getDescricao() == null) {
  128 + } else if (parametroCalculo.getDescricao() == null) {
107 129 validator.add(new ValidationMessage(Messages
108 130 .getString("parametro_calculo.validacao.descricao"),
109 131 "parametroCalculo.descricao"));
... ... @@ -116,10 +138,12 @@ public class ParametroCalculoController {
116 138 @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR")
117 139 public void atualizar(ParametroCalculo parametroCalculo) {
118 140  
119   - ParametroCalculo parametroCalculoCadastrado = dao.load(parametroCalculo.getId());
  141 + ParametroCalculo parametroCalculoCadastrado = dao.load(parametroCalculo
  142 + .getId());
120 143 parametroCalculoCadastrado.setTsFim(parametroCalculo.getTsFim());
121 144 parametroCalculoCadastrado.setUsuario(parametroCalculo.getUsuario());
122   - parametroCalculoCadastrado.setDescricao(parametroCalculo.getDescricao());
  145 + parametroCalculoCadastrado
  146 + .setDescricao(parametroCalculo.getDescricao());
123 147  
124 148 if (parametroCalculo.getTsFim() != null) {
125 149 if (parametroCalculo.getTsFim().before(
... ... @@ -129,48 +153,52 @@ public class ParametroCalculoController {
129 153 "O campo \"Fim\" deve ser maior que o campo \"Início\"!",
130 154 "parametroCalculo.tsFim"));
131 155 }
132   - }else if (parametroCalculo.getDescricao() == null) {
  156 + } else if (parametroCalculo.getDescricao() == null) {
133 157 validator.add(new ValidationMessage(Messages
134 158 .getString("parametro_calculo.validacao.descricao"),
135 159 "parametroCalculo.descricao"));
136 160 }
137 161  
138   - // result.include("usuarioList", dao.getAllUsuarios());
139   - // result.include("recomendacaoList", new RecomendacaoDAO(dao.getSession()).listAllAtivas(this.dao.load(parametroCalculo.getId())));
140   - System.err.println(parametroCalculo.getId()+"Id do parametro de calculo");
141   -
142   - validator.onErrorUsePageOf(ParametroCalculoController.class).form(parametroCalculo.getId());
  162 + // result.include("usuarioList", dao.getAllUsuarios());
  163 + // result.include("recomendacaoList", new
  164 + // RecomendacaoDAO(dao.getSession()).listAllAtivas(this.dao.load(parametroCalculo.getId())));
  165 + System.err.println(parametroCalculo.getId()
  166 + + "Id do parametro de calculo");
  167 +
  168 + validator.onErrorUsePageOf(ParametroCalculoController.class).form(
  169 + parametroCalculo.getId());
143 170  
144 171 dao.saveOrUpdate(parametroCalculoCadastrado);
145 172  
146   - result.include("mensagem",
147   - "Parâmetro de Cálculo alterado com sucesso.");
  173 + result.include("mensagem", "Parâmetro de Cálculo alterado com sucesso.");
148 174 result.redirectTo(ParametroCalculoController.class).index(1);
149 175 }
150 176  
151 177 @Path("/parametrosCalculo/delete/{id}")
152 178 @Restrito(descricao = "PARAMETRO_CALCULO_EXCLUIR")
153 179 public void excluir(Long id) {
154   -
155   - if(dao.listAll().size()>1){
  180 + if (dao.listAll().size() > 1) {
156 181 ParametroCalculo pa = dao.load(id);
157   - if((pa.getTsFim()==null)){
158   - dao.remove(id);
159   -
160   - pa = dao.getLastParametrosCalculo();
161   - pa.setTsFim(null);
162   - dao.update(pa);
163   - result.include("mensagem", "Parametro de Cálculo excluído com sucesso.");
164   - }else{
165   - result.include("mensagem", "Parametro de Cálculo não pode ser excluído pois não está ativo.");
  182 + if ((pa.getTsFim() == null)) {
  183 + dao.remove(id);
  184 +
  185 + pa = dao.getLastParametrosCalculo();
  186 + pa.setTsFim(null);
  187 + dao.update(pa);
  188 + result.include("mensagem",
  189 + "Parametro de Cálculo excluído com sucesso.");
  190 + } else {
  191 + result.include("mensagem",
  192 + "Parametro de Cálculo não pode ser excluído pois não está ativo.");
166 193 }
167   - }else{
168   - result.include("mensagem", "Este é o único Parametro de Cálculo cadastrado e ele não pode ser excluído.");
  194 + } else {
  195 + result.include("mensagem",
  196 + "Este é o único Parametro de Cálculo cadastrado e ele não pode ser excluído.");
169 197 }
170   -
  198 +
171 199 result.redirectTo(ParametroCalculoController.class).lista();
172 200 }
173   -
  201 +
174 202 @Get("/parametrosCalculo")
175 203 @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")
176 204 public List<ParametroCalculo> lista() {
... ... @@ -225,13 +253,15 @@ public class ParametroCalculoController {
225 253 result.include("parametroCalculo", parametroCalculo);
226 254 return dao.listAll(parametroCalculo);
227 255 }
228   -
  256 +
229 257 @Get("/parametrosCalculo/atualizar/{id}")
230 258 @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR")
231 259 public ParametroCalculo form(Long id) {
232 260 ParametroCalculo parametroCalculo = this.dao.load(id);
233 261 result.include("usuarioList", dao.getAllUsuarios());
234   - result.include("recomendacaoList", new RecomendacaoDAO(dao.getSession()).listAllAtivas(parametroCalculo));
  262 + result.include("recomendacaoList",
  263 + new RecomendacaoDAO(dao.getSession())
  264 + .listAllAtivas(parametroCalculo));
235 265  
236 266 return parametroCalculo;
237 267 }
... ... @@ -244,37 +274,168 @@ public class ParametroCalculoController {
244 274 result.include("parametroCalculo", parametroCalculo);
245 275 }
246 276  
247   - private void criarNovoParametroCalculo(ParametroCalculo parametroCalculo, int tipo) {
248   -
  277 + private void criarNovoParametroCalculo(ParametroCalculo parametroCalculo,
  278 + int tipo) {
249 279 boolean ok = false;
250 280  
251 281 switch (tipo) {
252   - case ParametroCalculoController.MODO_ADD:
253   - parametroCalculo.setId(0L);
254   - ok=true;
255   - break;
256   -
257   - case ParametroCalculoController.MODO_IMPORT:
258   - ok=true;
259   - break;
  282 + case ParametroCalculoController.MODO_ADD:
  283 + parametroCalculo.setId(0L);
  284 + ok = true;
  285 + break;
  286 +
  287 + case ParametroCalculoController.MODO_IMPORT:
  288 + ok = true;
  289 + break;
260 290 }
261   -
262   - if(ok){
263   - new CopiadorParametroCalculo().criarNovoParametroCalculo(parametroCalculo, usuarioWeb, dao.getSession());
264   - }
265   -
266   -
267   -
  291 +
  292 + if (ok) {
  293 + new CopiadorParametroCalculo().criarNovoParametroCalculo(
  294 + parametroCalculo, usuarioWeb, dao.getSession());
  295 + }
  296 +
268 297 }
269   -
  298 +
270 299 @Get("/parametrosCalculo/relatorio/{id}")
271 300 @Restrito(descricao = "PARAMETRO_CALCULO_RELATORIO")
272 301 public ParametroCalculo relatorio(Long id) {
273 302 ParametroCalculo parametroCalculo = this.dao.load(id);
274 303 result.include("usuarioList", dao.getAllUsuarios());
275   - result.include("recomendacaoList", new RecomendacaoDAO(dao.getSession()).listAllAtivas(parametroCalculo));
  304 + result.include("recomendacaoList",
  305 + new RecomendacaoDAO(dao.getSession())
  306 + .listAllAtivas(parametroCalculo));
276 307  
277 308 return parametroCalculo;
278 309 }
279 310  
  311 + @Get("/parametrosCalculo/exportar/{id}/*")
  312 + @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")
  313 + public File exportar(Long id) {
  314 + File relatorio = new File("workbook.ods");
  315 + ParametroCalculo parametroCalculo = this.dao.load(id);
  316 + List<Recomendacao> recomendacaoList = new RecomendacaoDAO(
  317 + dao.getSession()).listAllAtivas(parametroCalculo);
  318 +
  319 + Workbook wb = new HSSFWorkbook();
  320 + FileOutputStream fileOut;
  321 +
  322 + Map<String, CellStyle> styles = createStyles(wb);
  323 + CreationHelper createHelper = wb.getCreationHelper();
  324 + Sheet sheet = wb.createSheet("new sheet");
  325 + sheet.setPrintGridlines(false);
  326 + sheet.setDisplayGridlines(false);
  327 +
  328 + short rows = 0;
  329 + Row row = sheet.createRow(rows);
  330 + Cell cell = row.createCell(0);
  331 + cell.setCellValue(createHelper.createRichTextString(parametroCalculo
  332 + .getDescricao()));
  333 + cell.setCellStyle(styles.get("title"));
  334 + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1"));
  335 + rows += 3;
  336 +
  337 + for (Recomendacao recomendacao : recomendacaoList) {
  338 + row = sheet.createRow(rows);
  339 + cell = row.createCell(0);
  340 + cell.setCellValue(
  341 + createHelper.createRichTextString("Recomendação "
  342 + + recomendacao.getNumeroRecomendacao()));
  343 + cell.setCellStyle(styles.get("subtitle"));
  344 + rows++;
  345 + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$"+rows+":$L$"+rows));
  346 +
  347 + row = sheet.createRow(rows);
  348 + cell = row.createCell(1);
  349 + cell.setCellValue("Descrição");
  350 + cell.setCellStyle(styles.get("label"));
  351 + row.createCell(2).setCellValue(recomendacao.getDescricao());
  352 + rows++;
  353 +
  354 + row = sheet.createRow(rows);
  355 + cell = row.createCell(1);
  356 + cell.setCellValue("Peso");
  357 + cell.setCellStyle(styles.get("label"));
  358 + cell = row.createCell(2);
  359 + cell.setCellValue(recomendacao.getPeso());
  360 + cell.setCellStyle(styles.get("numeric"));
  361 + rows += 2;
  362 +
  363 + row = sheet.createRow(rows);
  364 + cell = row.createCell(1);
  365 + cell.setCellValue("Código");
  366 + cell.setCellStyle(styles.get("label"));
  367 + cell = row.createCell(2);
  368 + cell.setCellValue("Peso");
  369 + cell.setCellStyle(styles.get("label"));
  370 + cell = row.createCell(3);
  371 + cell.setCellValue("Critério");
  372 + cell.setCellStyle(styles.get("label"));
  373 + rows++;
  374 +
  375 + for (Criterio criterio : recomendacao.getCriterios()) {
  376 + row = sheet.createRow(rows);
  377 + row.createCell(1).setCellValue(criterio.getNumeroCriterio());
  378 + row.createCell(2).setCellValue(criterio.getPeso());
  379 + row.createCell(3).setCellValue(criterio.getDescricao());
  380 + rows++;
  381 + }
  382 +
  383 + rows += 2;
  384 + }
  385 +
  386 + try {
  387 + fileOut = new FileOutputStream(relatorio);
  388 + wb.write(fileOut);
  389 + } catch (FileNotFoundException e) {
  390 + e.printStackTrace();
  391 + } catch (IOException e) {
  392 + e.printStackTrace();
  393 + }
  394 +
  395 + return relatorio;
  396 + }
  397 +
  398 + private static Map<String, CellStyle> createStyles(Workbook wb) {
  399 + Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
  400 +
  401 + CellStyle style;
  402 + Font fontLargeBold = wb.createFont();
  403 + fontLargeBold.setFontHeightInPoints((short) 12);
  404 + fontLargeBold.setFontName("Arial");
  405 + fontLargeBold.setBoldweight(Font.BOLDWEIGHT_BOLD);
  406 +
  407 + Font fontMediumBold = wb.createFont();
  408 + fontMediumBold.setFontHeightInPoints((short) 11);
  409 + fontMediumBold.setFontName("Arial");
  410 + fontMediumBold.setBoldweight(Font.BOLDWEIGHT_BOLD);
  411 +
  412 + Font fontNormalBold = wb.createFont();
  413 + fontNormalBold.setFontHeightInPoints((short) 10);
  414 + fontNormalBold.setFontName("Arial");
  415 + fontNormalBold.setBoldweight(Font.BOLDWEIGHT_BOLD);
  416 +
  417 + style = wb.createCellStyle();
  418 + style.setAlignment(CellStyle.ALIGN_CENTER);
  419 + style.setFont(fontLargeBold);
  420 + styles.put("title", style);
  421 +
  422 + style = wb.createCellStyle();
  423 + style.setAlignment(CellStyle.ALIGN_LEFT);
  424 + style.setFont(fontMediumBold);
  425 + style.setBorderBottom(CellStyle.BORDER_DOTTED);
  426 + style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
  427 + styles.put("subtitle", style);
  428 +
  429 + style = wb.createCellStyle();
  430 + style.setAlignment(CellStyle.ALIGN_LEFT);
  431 + style.setFont(fontNormalBold);
  432 + styles.put("label", style);
  433 +
  434 + style = wb.createCellStyle();
  435 + style.setAlignment(CellStyle.ALIGN_LEFT);
  436 + style.setDataFormat(wb.createDataFormat().getFormat("0"));
  437 + styles.put("numeric", style);
  438 +
  439 + return styles;
  440 + }
280 441 }
... ...
Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/model/ParametroCalculo.java
... ... @@ -23,6 +23,8 @@ import org.hibernate.annotations.Fetch;
23 23 import org.hibernate.annotations.FetchMode;
24 24 import org.hibernate.annotations.ForeignKey;
25 25  
  26 +import br.com.eselo.component.Util;
  27 +
26 28 @Entity
27 29 @Table(name = "sel_parametro_calculo")
28 30 public class ParametroCalculo {
... ... @@ -30,7 +32,7 @@ public class ParametroCalculo {
30 32 public ParametroCalculo() {
31 33 this.recomendacoes = new ArrayList<Recomendacao>();
32 34 }
33   -
  35 +
34 36 @Id
35 37 @SequenceGenerator(name = "sel_parametro_calculo_id_parametro_calculo_seq", sequenceName = "sel_parametro_calculo_id_parametro_calculo_seq")
36 38 @GeneratedValue(strategy = GenerationType.AUTO, generator = "sel_parametro_calculo_id_parametro_calculo_seq")
... ... @@ -44,7 +46,7 @@ public class ParametroCalculo {
44 46 @Column(name = "ts_fim", columnDefinition = "timestamp without time zone")
45 47 @Temporal(TemporalType.TIMESTAMP)
46 48 private Date tsFim;
47   -
  49 +
48 50 @Column(name = "ds_descricao", nullable = false)
49 51 private String descricao;
50 52  
... ... @@ -56,7 +58,7 @@ public class ParametroCalculo {
56 58  
57 59 @OneToMany(mappedBy = "parametroCalculo", targetEntity = br.com.eselo.model.Recomendacao.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
58 60 private List<Recomendacao> recomendacoes;
59   -
  61 +
60 62 @OneToMany(mappedBy = "parametroCalculo", targetEntity = br.com.eselo.model.Avaliacao.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
61 63 private List<Avaliacao> avaliacoes;
62 64  
... ... @@ -67,15 +69,14 @@ public class ParametroCalculo {
67 69 public void setAvaliacoes(List<Avaliacao> avaliacoes) {
68 70 this.avaliacoes = avaliacoes;
69 71 }
70   -
71   - public void addAvaliacao(Avaliacao avaliacao){
  72 +
  73 + public void addAvaliacao(Avaliacao avaliacao) {
72 74 this.avaliacoes.add(avaliacao);
73 75 }
74   -
75   - public void removeAvaliacao(Avaliacao avaliacao){
  76 +
  77 + public void removeAvaliacao(Avaliacao avaliacao) {
76 78 this.avaliacoes.remove(avaliacao);
77 79 }
78   -
79 80  
80 81 public List<Recomendacao> getRecomendacoes() {
81 82 return recomendacoes;
... ... @@ -85,14 +86,14 @@ public class ParametroCalculo {
85 86 this.recomendacoes = recomendacoes;
86 87 }
87 88  
88   - public void addRecomendacao(Recomendacao recomendacao){
  89 + public void addRecomendacao(Recomendacao recomendacao) {
89 90 this.recomendacoes.add(recomendacao);
90 91 }
91   -
92   - public void removeRecomendacao(Recomendacao recomendacao){
  92 +
  93 + public void removeRecomendacao(Recomendacao recomendacao) {
93 94 this.recomendacoes.remove(recomendacao);
94 95 }
95   -
  96 +
96 97 public Long getId() {
97 98 return id;
98 99 }
... ... @@ -124,7 +125,7 @@ public class ParametroCalculo {
124 125 public void setUsuario(Usuario usuario) {
125 126 this.usuario = usuario;
126 127 }
127   -
  128 +
128 129 public String getDescricao() {
129 130 return descricao;
130 131 }
... ... @@ -132,4 +133,9 @@ public class ParametroCalculo {
132 133 public void setDescricao(String descricao) {
133 134 this.descricao = descricao;
134 135 }
  136 +
  137 + public String getSlug() {
  138 + return Util.toSlug(descricao);
  139 + }
  140 +
135 141 }
... ...