Commit 4ee502daa80f86f7224a1265bfd25356fee01e92

Authored by magno.oliveira
1 parent 9ebced99
Exists in master

Correção para cadastro e ativação manual do primeiro parametro de cálculo

git-svn-id: https://svn.bento.ifrs.edu.br/default/ASES/e-selo@10329 c2178572-b5ca-4887-91d2-9e3a90c7d55b
Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/controller/ParametroCalculoController.java
1 -package br.com.eselo.controller;  
2 -  
3 -import java.io.File;  
4 -import java.io.FileNotFoundException;  
5 -import java.io.FileOutputStream;  
6 -import java.io.IOException;  
7 -import java.util.ArrayList;  
8 -import java.util.Date;  
9 -import java.util.HashMap;  
10 -import java.util.List;  
11 -import java.util.Map;  
12 -  
13 -import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
14 -import org.apache.poi.ss.usermodel.Cell;  
15 -import org.apache.poi.ss.usermodel.CellStyle;  
16 -import org.apache.poi.ss.usermodel.CreationHelper;  
17 -import org.apache.poi.ss.usermodel.Font;  
18 -import org.apache.poi.ss.usermodel.IndexedColors;  
19 -import org.apache.poi.ss.usermodel.Row;  
20 -import org.apache.poi.ss.usermodel.Sheet;  
21 -import org.apache.poi.ss.usermodel.Workbook;  
22 -import org.apache.poi.ss.util.CellRangeAddress;  
23 -  
24 -import br.com.caelum.vraptor.Get;  
25 -import br.com.caelum.vraptor.Path;  
26 -import br.com.caelum.vraptor.Post;  
27 -import br.com.caelum.vraptor.Put;  
28 -import br.com.caelum.vraptor.Resource;  
29 -import br.com.caelum.vraptor.Result;  
30 -import br.com.caelum.vraptor.Validator;  
31 -import br.com.caelum.vraptor.ioc.spring.VRaptorRequestHolder;  
32 -import br.com.caelum.vraptor.validator.ValidationMessage;  
33 -import br.com.eselo.annotations.Restrito;  
34 -import br.com.eselo.component.CopiadorParametroCalculo;  
35 -import br.com.eselo.component.Messages;  
36 -import br.com.eselo.component.UsuarioWeb;  
37 -import br.com.eselo.dao.AvaliacaoDAO;  
38 -import br.com.eselo.dao.ParametroCalculoDAO;  
39 -import br.com.eselo.dao.RecomendacaoDAO;  
40 -import br.com.eselo.dao.UsuarioDAO;  
41 -import br.com.eselo.integracao.CriterioAvaliado;  
42 -import br.com.eselo.model.Criterio;  
43 -import br.com.eselo.model.Faixa;  
44 -import br.com.eselo.model.ParametroCalculo;  
45 -import br.com.eselo.model.Recomendacao;  
46 -import br.com.eselo.model.Usuario;  
47 -  
48 -@Resource  
49 -public class ParametroCalculoController {  
50 -  
51 - private final ParametroCalculoDAO dao;  
52 - private final Result result;  
53 - private final Validator validator;  
54 - private final UsuarioWeb usuarioWeb;  
55 -  
56 - protected static final int MODO_ADD = 1;  
57 - protected static final int MODO_EDIT = 2;  
58 - protected static final int MODO_DELETE = 3;  
59 - protected static final int MODO_IMPORT = 4;  
60 -  
61 - public ParametroCalculoController(ParametroCalculoDAO _dao,  
62 - RecomendacaoDAO _daoRecomendacao, Result _result,  
63 - Validator _validator, UsuarioWeb _usuarioWeb) {  
64 - dao = _dao;  
65 - result = _result;  
66 - validator = _validator;  
67 - usuarioWeb = _usuarioWeb;  
68 - }  
69 -  
70 - @Get("/parametrosCalculo/novo")  
71 - @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")  
72 - public void novo() {  
73 - ParametroCalculo parametroCalculo = new ParametroCalculo();  
74 - parametroCalculo.setUsuario(dao.getUsuario(usuarioWeb.getId()));  
75 - parametroCalculo.setTsInicio(new java.util.Date());  
76 - inserirParametroCalculo(parametroCalculo);  
77 -  
78 - result.redirectTo(ParametroCalculoController.class)  
79 - .form(dao.getMaxId());  
80 - }  
81 -  
82 - @Get("/parametrosCalculo/importar/")  
83 - @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")  
84 - public void importar(long idParametroCalculo) {  
85 -  
86 - String acao = VRaptorRequestHolder.currentRequest().getRequest().getParameter("acao");  
87 -  
88 - String mensagem="";  
89 -  
90 - if(acao.equals("Importar")){  
91 - ParametroCalculo pc = dao.load(idParametroCalculo);  
92 - this.criarNovoParametroCalculo(pc, MODO_IMPORT);  
93 - mensagem = Messages.getString("parametro_calculo.criado")  
94 - + pc.getDescricao() + ".";  
95 -  
96 - result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId());  
97 -  
98 - }else if(acao.equals("Não Importar")){  
99 - criarNovoParametroCalculo(new ParametroCalculo(), MODO_ADD);  
100 - mensagem = Messages.getString("parametro_calculo.criado.limpo");  
101 -  
102 - result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId());  
103 -  
104 - }else if(acao.equals("Cancelar")){  
105 - mensagem = Messages.getString("validacao.acao_cancelada");  
106 - result.redirectTo(ParametroCalculoController.class).lista();  
107 - }  
108 -  
109 - result.include("mensagem", mensagem);  
110 - }  
111 -  
112 - @Post("/parametrosCalculo")  
113 - @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")  
114 - public void adicionar(ParametroCalculo parametroCalculo) {  
115 -  
116 - inserirParametroCalculo(parametroCalculo);  
117 -  
118 - result.include("mensagem", "Parâmetro de Cálculo salvo com sucesso.");  
119 - result.redirectTo(ParametroCalculoController.class).index(1);  
120 - }  
121 -  
122 - protected void inserirParametroCalculo(ParametroCalculo parametroCalculo) {  
123 - if (parametroCalculo.getDescricao() == null) {  
124 - validator.add(new ValidationMessage(Messages  
125 - .getString("parametro_calculo.validacao.descricao"),  
126 - "parametroCalculo.descricao"));  
127 - }  
128 -  
129 - dao.save(parametroCalculo);  
130 - }  
131 -  
132 - @Put("/parametrosCalculo")  
133 - @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR")  
134 - public void atualizar(ParametroCalculo parametroCalculo) {  
135 -  
136 - @SuppressWarnings("unused")  
137 - List<Usuario> usuarios = dao.getAllUsuarios();  
138 - ParametroCalculo parametroCalculoCadastrado = dao.load(parametroCalculo.getId());  
139 -  
140 - parametroCalculo.setTsInicio(parametroCalculoCadastrado.getTsInicio());  
141 - parametroCalculoCadastrado.setUsuario(new UsuarioDAO(dao.getSession()).load(usuarioWeb.getId()));  
142 - parametroCalculo.setUsuario(parametroCalculoCadastrado.getUsuario());  
143 - parametroCalculoCadastrado.setDescricao(parametroCalculo.getDescricao());  
144 -  
145 - result.include("mensagem", "Parâmetro de Cálculo atualizado com sucesso.");  
146 - result.redirectTo(ParametroCalculoController.class).form(parametroCalculo.getId());  
147 - }  
148 -  
149 - @Path("/parametrosCalculo/ativar/{id}")  
150 - @Restrito(descricao = "PARAMETRO_CALCULO_ATIVAR")  
151 - public void ativar(Long id) {  
152 -  
153 - ParametroCalculo pc = dao.load(id);  
154 -  
155 - if(validarParametroCalculoAtivacao(pc)){  
156 - ativarParametroCalculo(id);  
157 - result.redirectTo(ParametroCalculoController.class).lista();  
158 - }else{  
159 - result.redirectTo(ParametroCalculoController.class).errosAtivacao(id);  
160 - }  
161 - }  
162 -  
163 - @Path("/parametrosCalculo/delete/{id}")  
164 - @Restrito(descricao = "PARAMETRO_CALCULO_EXCLUIR")  
165 - public void excluir(Long id) {  
166 - if (dao.listAll().size() > 1) {  
167 - ParametroCalculo pc = dao.load(id);  
168 -  
169 - if(!(new AvaliacaoDAO(dao.getSession()).existeAvaliacao(pc))){  
170 - if ((pc.getTsFim() == null)) {  
171 -  
172 - if(pc.getTsInicio()!=null){  
173 - pc = dao.getLastParametrosCalculoAtivavel(pc);  
174 - pc.setTsFim(null);  
175 - dao.remove(id);  
176 - dao.update(pc);  
177 - }else{  
178 - dao.remove(id);  
179 - }  
180 -  
181 - result.include("mensagem",  
182 - Messages.getString("parametro_calculo.validacao.excluido"));  
183 - } else {  
184 - result.include("mensagem",  
185 - Messages.getString("parametro_calculo.validacao.nao_pode_excluir"));  
186 - }  
187 - }else{  
188 -  
189 - result.include("mensagem",  
190 - Messages.getString("parametro_calculo.validacao.nao_pode_excluir.em_uso"));  
191 - }  
192 -  
193 - } else {  
194 - result.include("mensagem",  
195 - Messages.getString("parametro_calculo.validacao.nao_pode_excluir.unico"));  
196 - }  
197 -  
198 - result.redirectTo(ParametroCalculoController.class).lista();  
199 - }  
200 -  
201 - @Get("/parametrosCalculo")  
202 - @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")  
203 - public List<ParametroCalculo> lista() {  
204 - return this.index(1);  
205 - }  
206 -  
207 - @Get("/parametrosCalculo/{pagina}")  
208 - @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")  
209 - public List<ParametroCalculo> index(int pagina) {  
210 - ParametroCalculo ultimoParametro = dao.load(dao.getMaxId());  
211 -  
212 - // Paginação  
213 - // quantidade de registros por pagina  
214 - int exibi = 7;  
215 - // Informa a quantidade de registros  
216 - int registros = dao.numLinhas();  
217 - // Quantidade de paginas na paginação  
218 - int totalPag = registros / exibi;  
219 - // se houver resto na divisao acima acrescenta uma pagina na paginação  
220 - if ((registros - (totalPag * exibi)) > 0)  
221 - totalPag++;  
222 -  
223 - // Calculo do registro inicial e final  
224 - int regIni = ((exibi * pagina) - exibi);  
225 - int regFim = (regIni + exibi);  
226 -  
227 - if (regFim > registros)  
228 - regFim = registros;  
229 -  
230 - // fim paginação  
231 -  
232 - List<ParametroCalculo> resultado = dao.listAll(regIni, regFim);  
233 - List<ParametroCalculo> paginacao = new ArrayList<ParametroCalculo>();  
234 -  
235 - for (int i = regIni; i < regFim; i++) {  
236 - paginacao.add(resultado.get(i));  
237 - }  
238 -  
239 - result.include("paginas", totalPag);  
240 - result.include("registros", registros);  
241 - result.include("regInic", ++regIni);  
242 - result.include("regFim", regFim);  
243 - result.include("controle", "parametrosCalculo");  
244 - result.include("ultimoParametro", ultimoParametro);  
245 -  
246 - return paginacao;  
247 - }  
248 -  
249 - @Get("/parametrosCalculo/lista")  
250 - @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")  
251 - public List<ParametroCalculo> lista(ParametroCalculo parametroCalculo) {  
252 - result.include("parametroCalculo", parametroCalculo);  
253 - return dao.listAll(parametroCalculo);  
254 - }  
255 -  
256 - @Get("/parametrosCalculo/atualizar/{id}")  
257 - @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR")  
258 - public ParametroCalculo form(Long id) {  
259 - ParametroCalculo parametroCalculo = this.dao.load(id);  
260 - result.include("usuarioList", dao.getAllUsuarios());  
261 - return parametroCalculo;  
262 - }  
263 -  
264 - @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")  
265 - public void form() {  
266 - ParametroCalculo parametroCalculo = new ParametroCalculo();  
267 - parametroCalculo.setUsuario(dao.getUsuario(usuarioWeb.getId()));  
268 - //parametroCalculo.setTsInicio(new java.util.Date());  
269 - result.include("parametroCalculo", parametroCalculo);  
270 - }  
271 -  
272 - private void criarNovoParametroCalculo(ParametroCalculo parametroCalculo,  
273 - int tipo) {  
274 - boolean ok = false;  
275 -  
276 - switch (tipo) {  
277 - case ParametroCalculoController.MODO_ADD:  
278 - parametroCalculo.setId(0L);  
279 - ok = true;  
280 - break;  
281 -  
282 - case ParametroCalculoController.MODO_IMPORT:  
283 - ok = true;  
284 - break;  
285 - }  
286 -  
287 - if (ok) {  
288 - new CopiadorParametroCalculo().criarNovoParametroCalculo(  
289 - parametroCalculo, usuarioWeb, dao.getSession());  
290 - }  
291 -  
292 - }  
293 -  
294 - private boolean validarParametroCalculoAtivacao(ParametroCalculo parametroCalculo){  
295 - boolean resultado = true;  
296 - String mensagem="";  
297 - String aviso= " Não foi possível ativar este parâmetro de cálculo!<br/> Antes da ativação será necessário resolver as pendências listadas abaixo.";  
298 -  
299 - if(parametroCalculo.getRecomendacoes().size()>0){  
300 - for(Recomendacao r: parametroCalculo.getRecomendacoes()){  
301 - if(r.getCriterios().size()>0){  
302 - for(Criterio c: r.getCriterios()){  
303 - if((c.getTipoTeste().getId().intValue()==CriterioAvaliado.TIPO_DESCRESCENTE) && (c.getFaixas().size() < 1)){  
304 - mensagem = mensagem+" O criterio "+c.getNumeroCriterio()+" da recomendação "+r.getNumeroRecomendacao()+" é do tipo DECRESCENTE e não possui nenhuma faixa cadastrada.<br/>";  
305 - resultado = false;  
306 - }  
307 - }  
308 - }else{  
309 - mensagem = mensagem+" A recomendação "+r.getNumeroRecomendacao()+" não possui nenhum critério cadastrado.<br/>";  
310 - resultado = false;  
311 - }  
312 - }  
313 - }else{  
314 - mensagem = "Nenhuma recomendação foi cadastrada.";  
315 - resultado = false;  
316 - }  
317 -  
318 - if(resultado){  
319 - result.include("mensagem", Messages.getString("parametro_calculo.validacao.ativado"));  
320 - }else{  
321 - result.include("mensagem",aviso);  
322 - System.out.println(mensagem);  
323 - }  
324 -  
325 - return resultado;  
326 - }  
327 -  
328 - private void ativarParametroCalculo(Long id){  
329 - ParametroCalculo parametroCalculoelegivel, parametroCalculoAtivo;  
330 - parametroCalculoelegivel = dao.load(id);  
331 - parametroCalculoAtivo = dao.getLastParametrosCalculoAtivo();  
332 -  
333 - parametroCalculoelegivel.setTsInicio(new Date());  
334 - parametroCalculoAtivo.setTsFim(parametroCalculoelegivel.getTsInicio());  
335 -  
336 - dao.update(parametroCalculoelegivel);  
337 - dao.update(parametroCalculoAtivo);  
338 - }  
339 -  
340 - @Get("/parametrosCalculo/relatorio/{id}")  
341 - @Restrito(descricao = "PARAMETRO_CALCULO_RELATORIO")  
342 - public ParametroCalculo relatorio(Long id) {  
343 - ParametroCalculo parametroCalculo = this.dao.load(id);  
344 - result.include("usuarioList", dao.getAllUsuarios());  
345 - result.include("recomendacaoList",  
346 - new RecomendacaoDAO(dao.getSession())  
347 - .listAllAtivas(parametroCalculo));  
348 -  
349 - return parametroCalculo;  
350 - }  
351 -  
352 - @Get("/parametrosCalculo/errosAtivacao/{id}")  
353 - @Restrito(descricao = "PARAMETRO_CALCULO_RELATORIO")  
354 - public ParametroCalculo errosAtivacao(Long id) {  
355 - ParametroCalculo parametroCalculo = this.dao.load(id);  
356 - result.include("usuarioList", dao.getAllUsuarios());  
357 -  
358 -  
359 - List<Recomendacao> recomendacaoList = parametroCalculo.getRecomendacoes();  
360 - List<Recomendacao> recomendacaoListErros = new ArrayList<Recomendacao>();  
361 -  
362 - for(Recomendacao r: recomendacaoList){  
363 - if(r.getCriterios().size()<1){  
364 - recomendacaoListErros.add(r);  
365 - }else{  
366 - boolean add = false;  
367 - List<Criterio> criterios = new ArrayList<Criterio>();  
368 - for(Criterio c: r.getCriterios()){  
369 - if(c.getTipoTeste().getId().intValue()==CriterioAvaliado.TIPO_DESCRESCENTE && c.getFaixas().size()<1){  
370 - criterios.add(c);  
371 - add = true;  
372 - }  
373 - }  
374 - if(add){  
375 - r.setCriterios(criterios);  
376 - recomendacaoListErros.add(r);  
377 - }  
378 - }  
379 - }  
380 -  
381 -  
382 - result.include("recomendacaoList", recomendacaoListErros);  
383 -  
384 - return parametroCalculo;  
385 - }  
386 -  
387 - @Get("/parametroAtivo.xls")  
388 - public File exportarAtivo(){  
389 - Long id = dao.getLastParametrosCalculoAtivo().getId();  
390 - return exportar(id);  
391 - }  
392 -  
393 - @Get("/parametrosCalculo/exportar/{id}/*")  
394 - @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")  
395 - public File exportar(Long id) {  
396 - File relatorio = new File("workbook.ods");  
397 - ParametroCalculo parametroCalculo = this.dao.load(id);  
398 - List<Recomendacao> recomendacaoList = new RecomendacaoDAO(  
399 - dao.getSession()).listAllAtivas(parametroCalculo);  
400 - String msgAtivacao="";  
401 -  
402 - if(parametroCalculo.getTsInicio() != null){  
403 - msgAtivacao = "Ativado em: "+parametroCalculo.getTsInicio()+".";  
404 - }  
405 - if(parametroCalculo.getTsFim() != null){  
406 - msgAtivacao = msgAtivacao +" Encerrado em: "+parametroCalculo.getTsFim();  
407 - }  
408 -  
409 - Workbook wb = new HSSFWorkbook();  
410 - FileOutputStream fileOut;  
411 -  
412 - Map<String, CellStyle> styles = createStyles(wb);  
413 - CreationHelper createHelper = wb.getCreationHelper();  
414 - Sheet sheet = wb.createSheet("new sheet");  
415 - sheet.setPrintGridlines(false);  
416 - sheet.setDisplayGridlines(false);  
417 -  
418 - short rows = 0;  
419 - Row row = sheet.createRow(rows);  
420 - Cell cell = row.createCell(0);  
421 - cell.setCellValue(createHelper.createRichTextString(parametroCalculo.getDescricao()));  
422 - cell.setCellStyle(styles.get("title"));  
423 - sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1"));  
424 - rows++;  
425 -  
426 - row = sheet.createRow(rows);  
427 - cell = row.createCell(0);  
428 - cell.setCellValue(createHelper.createRichTextString(msgAtivacao));  
429 - CellStyle style = wb.createCellStyle();  
430 - style.setAlignment(CellStyle.ALIGN_CENTER);  
431 - cell.setCellStyle(style);  
432 -  
433 - sheet.addMergedRegion(CellRangeAddress.valueOf("$A$2:$L$2"));  
434 - rows += 3;  
435 -  
436 - for (Recomendacao recomendacao : recomendacaoList) {  
437 - row = sheet.createRow(rows);  
438 - cell = row.createCell(0);  
439 - cell.setCellValue(  
440 - createHelper.createRichTextString("Recomendação "  
441 - + recomendacao.getNumeroRecomendacao())  
442 - + ": " + recomendacao.getDescricao()  
443 - + " (Peso: "+recomendacao.getPeso()+")"  
444 - );  
445 - cell.setCellStyle(styles.get("subtitle"));  
446 - rows++;  
447 - sheet.addMergedRegion(CellRangeAddress.valueOf("$A$"+rows+":$L$"+rows));  
448 -  
449 - /*  
450 - row = sheet.createRow(rows);  
451 - cell = row.createCell(1);  
452 - cell.setCellValue("Descrição");  
453 - cell.setCellStyle(styles.get("label"));  
454 - row.createCell(2).setCellValue(recomendacao.getDescricao());  
455 - rows++;  
456 -  
457 - row = sheet.createRow(rows);  
458 - cell = row.createCell(1);  
459 - cell.setCellValue("Peso");  
460 - cell.setCellStyle(styles.get("label"));  
461 - cell = row.createCell(2);  
462 - cell.setCellValue(recomendacao.getPeso());  
463 - cell.setCellStyle(styles.get("numeric"));  
464 - rows += 2;  
465 - */  
466 -  
467 - row = sheet.createRow(rows);  
468 - cell = row.createCell(1);  
469 - cell.setCellValue("Número Critério");  
470 - cell.setCellStyle(styles.get("label"));  
471 - cell = row.createCell(2);  
472 - cell.setCellValue("Peso");  
473 - cell.setCellStyle(styles.get("label"));  
474 - cell = row.createCell(3);  
475 - cell.setCellValue("Descrição");  
476 - cell.setCellStyle(styles.get("label"));  
477 - cell = row.createCell(4);  
478 - cell.setCellValue("Requisito");  
479 - cell.setCellStyle(styles.get("label"));  
480 - cell = row.createCell(5);  
481 - cell.setCellValue("Tipo de Verificação");  
482 - cell.setCellStyle(styles.get("label"));  
483 - cell = row.createCell(6);  
484 - cell.setCellValue("Tipo de Mensagem");  
485 - cell.setCellStyle(styles.get("label"));  
486 - rows++;  
487 -  
488 - for (Criterio criterio : recomendacao.getCriterios()) {  
489 - row = sheet.createRow(rows);  
490 - row.createCell(1).setCellValue(criterio.getNumeroCriterio());  
491 - row.createCell(2).setCellValue(criterio.getPeso());  
492 - row.createCell(3).setCellValue(criterio.getDescricao());  
493 -  
494 - row.createCell(4).setCellValue(criterio.getRequisito());  
495 -  
496 - String tipoVetificacao;  
497 - if(criterio.isVerificacaoAutomatica()){  
498 - tipoVetificacao = "Automática";  
499 - }else if(!criterio.isVerificacaoAutomatica()){  
500 - tipoVetificacao="Humana";  
501 - }else{  
502 - tipoVetificacao="";  
503 - }  
504 -  
505 - String tipoErro;  
506 - if(criterio.isErro()){  
507 - tipoErro = "Erro";  
508 - }else if(!criterio.isErro()){  
509 - tipoErro="Aviso";  
510 - }else{  
511 - tipoErro="";  
512 - }  
513 -  
514 - row.createCell(5).setCellValue(tipoVetificacao);  
515 - row.createCell(6).setCellValue(tipoErro);  
516 -  
517 - if(criterio.getTipoTeste().getId().intValue()==3){  
518 - rows++;  
519 - row = sheet.createRow(rows);  
520 - cell = row.createCell(2);  
521 - cell.setCellValue("Faixa");  
522 - cell.setCellStyle(styles.get("label"));  
523 - cell = row.createCell(3);  
524 - cell.setCellValue("Descrição");  
525 - cell.setCellStyle(styles.get("label"));  
526 - cell = row.createCell(4);  
527 - cell.setCellValue("Início");  
528 - cell.setCellStyle(styles.get("label"));  
529 - cell = row.createCell(5);  
530 - cell.setCellValue("Fim");  
531 - cell.setCellStyle(styles.get("label"));  
532 - cell = row.createCell(6);  
533 - cell.setCellValue("%");  
534 - cell.setCellStyle(styles.get("label"));  
535 - rows++;  
536 -  
537 - for(Faixa faixa:criterio.getFaixas()){  
538 - row = sheet.createRow(rows);  
539 - row.createCell(2).setCellValue(faixa.getFaixa());  
540 - row.createCell(3).setCellValue(faixa.getDescricao());  
541 - row.createCell(4).setCellValue(faixa.getFaixaInicio());  
542 - row.createCell(5).setCellValue(faixa.getFaixaFim());  
543 - row.createCell(6).setCellValue(faixa.getPercentualConformidade());  
544 - rows++;  
545 -  
546 - }  
547 -  
548 - }  
549 -  
550 -  
551 - rows++;  
552 - }  
553 -  
554 - rows += 2;  
555 - }  
556 -  
557 - try {  
558 - fileOut = new FileOutputStream(relatorio);  
559 - wb.write(fileOut);  
560 - } catch (FileNotFoundException e) {  
561 - e.printStackTrace();  
562 - } catch (IOException e) {  
563 - e.printStackTrace();  
564 - }  
565 -  
566 - return relatorio;  
567 - }  
568 -  
569 - private static Map<String, CellStyle> createStyles(Workbook wb) {  
570 - Map<String, CellStyle> styles = new HashMap<String, CellStyle>();  
571 -  
572 - CellStyle style;  
573 - Font fontLargeBold = wb.createFont();  
574 - fontLargeBold.setFontHeightInPoints((short) 12);  
575 - fontLargeBold.setFontName("Arial");  
576 - fontLargeBold.setBoldweight(Font.BOLDWEIGHT_BOLD);  
577 -  
578 - Font fontMediumBold = wb.createFont();  
579 - fontMediumBold.setFontHeightInPoints((short) 11);  
580 - fontMediumBold.setFontName("Arial");  
581 - fontMediumBold.setBoldweight(Font.BOLDWEIGHT_BOLD);  
582 -  
583 - Font fontNormalBold = wb.createFont();  
584 - fontNormalBold.setFontHeightInPoints((short) 10);  
585 - fontNormalBold.setFontName("Arial");  
586 - fontNormalBold.setBoldweight(Font.BOLDWEIGHT_BOLD);  
587 -  
588 - style = wb.createCellStyle();  
589 - style.setAlignment(CellStyle.ALIGN_CENTER);  
590 - style.setFont(fontLargeBold);  
591 - styles.put("title", style);  
592 -  
593 - style = wb.createCellStyle();  
594 - style.setAlignment(CellStyle.ALIGN_LEFT);  
595 - style.setFont(fontMediumBold);  
596 - style.setBorderBottom(CellStyle.BORDER_DOTTED);  
597 - style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());  
598 - styles.put("subtitle", style);  
599 -  
600 - style = wb.createCellStyle();  
601 - style.setAlignment(CellStyle.ALIGN_LEFT);  
602 - style.setFont(fontNormalBold);  
603 - styles.put("label", style);  
604 -  
605 - style = wb.createCellStyle();  
606 - style.setAlignment(CellStyle.ALIGN_LEFT);  
607 - style.setDataFormat(wb.createDataFormat().getFormat("0"));  
608 - styles.put("numeric", style);  
609 -  
610 - return styles;  
611 - }  
612 -} 1 +package br.com.eselo.controller;
  2 +
  3 +import java.io.File;
  4 +import java.io.FileNotFoundException;
  5 +import java.io.FileOutputStream;
  6 +import java.io.IOException;
  7 +import java.util.ArrayList;
  8 +import java.util.Date;
  9 +import java.util.HashMap;
  10 +import java.util.List;
  11 +import java.util.Map;
  12 +
  13 +import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  14 +import org.apache.poi.ss.usermodel.Cell;
  15 +import org.apache.poi.ss.usermodel.CellStyle;
  16 +import org.apache.poi.ss.usermodel.CreationHelper;
  17 +import org.apache.poi.ss.usermodel.Font;
  18 +import org.apache.poi.ss.usermodel.IndexedColors;
  19 +import org.apache.poi.ss.usermodel.Row;
  20 +import org.apache.poi.ss.usermodel.Sheet;
  21 +import org.apache.poi.ss.usermodel.Workbook;
  22 +import org.apache.poi.ss.util.CellRangeAddress;
  23 +
  24 +import br.com.caelum.vraptor.Get;
  25 +import br.com.caelum.vraptor.Path;
  26 +import br.com.caelum.vraptor.Post;
  27 +import br.com.caelum.vraptor.Put;
  28 +import br.com.caelum.vraptor.Resource;
  29 +import br.com.caelum.vraptor.Result;
  30 +import br.com.caelum.vraptor.Validator;
  31 +import br.com.caelum.vraptor.ioc.spring.VRaptorRequestHolder;
  32 +import br.com.caelum.vraptor.validator.ValidationMessage;
  33 +import br.com.eselo.annotations.Restrito;
  34 +import br.com.eselo.component.CopiadorParametroCalculo;
  35 +import br.com.eselo.component.Messages;
  36 +import br.com.eselo.component.UsuarioWeb;
  37 +import br.com.eselo.dao.AvaliacaoDAO;
  38 +import br.com.eselo.dao.ParametroCalculoDAO;
  39 +import br.com.eselo.dao.RecomendacaoDAO;
  40 +import br.com.eselo.dao.UsuarioDAO;
  41 +import br.com.eselo.integracao.CriterioAvaliado;
  42 +import br.com.eselo.model.Criterio;
  43 +import br.com.eselo.model.Faixa;
  44 +import br.com.eselo.model.ParametroCalculo;
  45 +import br.com.eselo.model.Recomendacao;
  46 +import br.com.eselo.model.Usuario;
  47 +
  48 +@Resource
  49 +public class ParametroCalculoController {
  50 +
  51 + private final ParametroCalculoDAO dao;
  52 + private final Result result;
  53 + private final Validator validator;
  54 + private final UsuarioWeb usuarioWeb;
  55 +
  56 + protected static final int MODO_ADD = 1;
  57 + protected static final int MODO_EDIT = 2;
  58 + protected static final int MODO_DELETE = 3;
  59 + protected static final int MODO_IMPORT = 4;
  60 +
  61 + public ParametroCalculoController(ParametroCalculoDAO _dao,
  62 + RecomendacaoDAO _daoRecomendacao, Result _result,
  63 + Validator _validator, UsuarioWeb _usuarioWeb) {
  64 + dao = _dao;
  65 + result = _result;
  66 + validator = _validator;
  67 + usuarioWeb = _usuarioWeb;
  68 + }
  69 +
  70 + @Get("/parametrosCalculo/novo")
  71 + @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")
  72 + public void novo() {
  73 + ParametroCalculo parametroCalculo = new ParametroCalculo();
  74 + parametroCalculo.setUsuario(dao.getUsuario(usuarioWeb.getId()));
  75 + parametroCalculo.setTsInicio(new java.util.Date());
  76 + inserirParametroCalculo(parametroCalculo);
  77 +
  78 + result.redirectTo(ParametroCalculoController.class)
  79 + .form(dao.getMaxId());
  80 + }
  81 +
  82 + @Get("/parametrosCalculo/importar/")
  83 + @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")
  84 + public void importar(long idParametroCalculo) {
  85 +
  86 + String acao = VRaptorRequestHolder.currentRequest().getRequest().getParameter("acao");
  87 +
  88 + String mensagem="";
  89 +
  90 + if(acao.equals("Importar")){
  91 + ParametroCalculo pc = dao.load(idParametroCalculo);
  92 + this.criarNovoParametroCalculo(pc, MODO_IMPORT);
  93 + mensagem = Messages.getString("parametro_calculo.criado")
  94 + + pc.getDescricao() + ".";
  95 +
  96 + result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId());
  97 +
  98 + }else if(acao.equals("Não Importar")){
  99 + criarNovoParametroCalculo(new ParametroCalculo(), MODO_ADD);
  100 + mensagem = Messages.getString("parametro_calculo.criado.limpo");
  101 +
  102 + result.redirectTo(ParametroCalculoController.class).form(dao.getMaxId());
  103 +
  104 + }else if(acao.equals("Cancelar")){
  105 + mensagem = Messages.getString("validacao.acao_cancelada");
  106 + result.redirectTo(ParametroCalculoController.class).lista();
  107 + }
  108 +
  109 + result.include("mensagem", mensagem);
  110 + }
  111 +
  112 + @Post("/parametrosCalculo")
  113 + @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")
  114 + public void adicionar(ParametroCalculo parametroCalculo) {
  115 +
  116 + inserirParametroCalculo(parametroCalculo);
  117 +
  118 + result.include("mensagem", "Parâmetro de Cálculo salvo com sucesso.");
  119 + result.redirectTo(ParametroCalculoController.class).index(1);
  120 + }
  121 +
  122 + protected void inserirParametroCalculo(ParametroCalculo parametroCalculo) {
  123 + if (parametroCalculo.getDescricao() == null) {
  124 + validator.add(new ValidationMessage(Messages
  125 + .getString("parametro_calculo.validacao.descricao"),
  126 + "parametroCalculo.descricao"));
  127 + }
  128 +
  129 + dao.save(parametroCalculo);
  130 + }
  131 +
  132 + @Put("/parametrosCalculo")
  133 + @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR")
  134 + public void atualizar(ParametroCalculo parametroCalculo) {
  135 +
  136 + @SuppressWarnings("unused")
  137 + List<Usuario> usuarios = dao.getAllUsuarios();
  138 + ParametroCalculo parametroCalculoCadastrado = dao.load(parametroCalculo.getId());
  139 +
  140 + parametroCalculo.setTsInicio(parametroCalculoCadastrado.getTsInicio());
  141 + parametroCalculoCadastrado.setUsuario(new UsuarioDAO(dao.getSession()).load(usuarioWeb.getId()));
  142 + parametroCalculo.setUsuario(parametroCalculoCadastrado.getUsuario());
  143 + parametroCalculoCadastrado.setDescricao(parametroCalculo.getDescricao());
  144 +
  145 + result.include("mensagem", "Parâmetro de Cálculo atualizado com sucesso.");
  146 + result.redirectTo(ParametroCalculoController.class).form(parametroCalculo.getId());
  147 + }
  148 +
  149 + @Path("/parametrosCalculo/ativar/{id}")
  150 + @Restrito(descricao = "PARAMETRO_CALCULO_ATIVAR")
  151 + public void ativar(Long id) {
  152 +
  153 + ParametroCalculo pc = dao.load(id);
  154 +
  155 + if(validarParametroCalculoAtivacao(pc)){
  156 + ativarParametroCalculo(id);
  157 + result.redirectTo(ParametroCalculoController.class).lista();
  158 + }else{
  159 + result.redirectTo(ParametroCalculoController.class).errosAtivacao(id);
  160 + }
  161 + }
  162 +
  163 + @Path("/parametrosCalculo/delete/{id}")
  164 + @Restrito(descricao = "PARAMETRO_CALCULO_EXCLUIR")
  165 + public void excluir(Long id) {
  166 + if (dao.listAll().size() > 1) {
  167 + ParametroCalculo pc = dao.load(id);
  168 +
  169 + if(!(new AvaliacaoDAO(dao.getSession()).existeAvaliacao(pc))){
  170 + if ((pc.getTsFim() == null)) {
  171 +
  172 + if(pc.getTsInicio()!=null){
  173 + pc = dao.getLastParametrosCalculoAtivavel(pc);
  174 + pc.setTsFim(null);
  175 + dao.remove(id);
  176 + dao.update(pc);
  177 + }else{
  178 + dao.remove(id);
  179 + }
  180 +
  181 + result.include("mensagem",
  182 + Messages.getString("parametro_calculo.validacao.excluido"));
  183 + } else {
  184 + result.include("mensagem",
  185 + Messages.getString("parametro_calculo.validacao.nao_pode_excluir"));
  186 + }
  187 + }else{
  188 +
  189 + result.include("mensagem",
  190 + Messages.getString("parametro_calculo.validacao.nao_pode_excluir.em_uso"));
  191 + }
  192 +
  193 + } else {
  194 + result.include("mensagem",
  195 + Messages.getString("parametro_calculo.validacao.nao_pode_excluir.unico"));
  196 + }
  197 +
  198 + result.redirectTo(ParametroCalculoController.class).lista();
  199 + }
  200 +
  201 + @Get("/parametrosCalculo")
  202 + @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")
  203 + public List<ParametroCalculo> lista() {
  204 + return this.index(1);
  205 + }
  206 +
  207 + @Get("/parametrosCalculo/{pagina}")
  208 + @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")
  209 + public List<ParametroCalculo> index(int pagina) {
  210 + ParametroCalculo ultimoParametro = dao.load(dao.getMaxId());
  211 +
  212 + // Paginação
  213 + // quantidade de registros por pagina
  214 + int exibi = 7;
  215 + // Informa a quantidade de registros
  216 + int registros = dao.numLinhas();
  217 + // Quantidade de paginas na paginação
  218 + int totalPag = registros / exibi;
  219 + // se houver resto na divisao acima acrescenta uma pagina na paginação
  220 + if ((registros - (totalPag * exibi)) > 0)
  221 + totalPag++;
  222 +
  223 + // Calculo do registro inicial e final
  224 + int regIni = ((exibi * pagina) - exibi);
  225 + int regFim = (regIni + exibi);
  226 +
  227 + if (regFim > registros)
  228 + regFim = registros;
  229 +
  230 + // fim paginação
  231 +
  232 + List<ParametroCalculo> resultado = dao.listAll(regIni, regFim);
  233 + List<ParametroCalculo> paginacao = new ArrayList<ParametroCalculo>();
  234 +
  235 + for (int i = regIni; i < regFim; i++) {
  236 + paginacao.add(resultado.get(i));
  237 + }
  238 +
  239 + result.include("paginas", totalPag);
  240 + result.include("registros", registros);
  241 + result.include("regInic", ++regIni);
  242 + result.include("regFim", regFim);
  243 + result.include("controle", "parametrosCalculo");
  244 + result.include("ultimoParametro", ultimoParametro);
  245 +
  246 + return paginacao;
  247 + }
  248 +
  249 + @Get("/parametrosCalculo/lista")
  250 + @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")
  251 + public List<ParametroCalculo> lista(ParametroCalculo parametroCalculo) {
  252 + result.include("parametroCalculo", parametroCalculo);
  253 + return dao.listAll(parametroCalculo);
  254 + }
  255 +
  256 + @Get("/parametrosCalculo/atualizar/{id}")
  257 + @Restrito(descricao = "PARAMETRO_CALCULO_ATUALIZAR")
  258 + public ParametroCalculo form(Long id) {
  259 + ParametroCalculo parametroCalculo = this.dao.load(id);
  260 + result.include("usuarioList", dao.getAllUsuarios());
  261 + return parametroCalculo;
  262 + }
  263 +
  264 + @Restrito(descricao = "PARAMETRO_CALCULO_ADICIONAR")
  265 + public void form() {
  266 + ParametroCalculo parametroCalculo = new ParametroCalculo();
  267 + parametroCalculo.setUsuario(dao.getUsuario(usuarioWeb.getId()));
  268 + //parametroCalculo.setTsInicio(new java.util.Date());
  269 + result.include("parametroCalculo", parametroCalculo);
  270 + }
  271 +
  272 + private void criarNovoParametroCalculo(ParametroCalculo parametroCalculo,
  273 + int tipo) {
  274 + boolean ok = false;
  275 +
  276 + switch (tipo) {
  277 + case ParametroCalculoController.MODO_ADD:
  278 + parametroCalculo.setId(0L);
  279 + ok = true;
  280 + break;
  281 +
  282 + case ParametroCalculoController.MODO_IMPORT:
  283 + ok = true;
  284 + break;
  285 + }
  286 +
  287 + if (ok) {
  288 + new CopiadorParametroCalculo().criarNovoParametroCalculo(
  289 + parametroCalculo, usuarioWeb, dao.getSession());
  290 + }
  291 +
  292 + }
  293 +
  294 + private boolean validarParametroCalculoAtivacao(ParametroCalculo parametroCalculo){
  295 + boolean resultado = true;
  296 + String mensagem="";
  297 + String aviso= " Não foi possível ativar este parâmetro de cálculo!<br/> Antes da ativação será necessário resolver as pendências listadas abaixo.";
  298 +
  299 + if(parametroCalculo.getRecomendacoes().size()>0){
  300 + for(Recomendacao r: parametroCalculo.getRecomendacoes()){
  301 + if(r.getCriterios().size()>0){
  302 + for(Criterio c: r.getCriterios()){
  303 + if((c.getTipoTeste().getId().intValue()==CriterioAvaliado.TIPO_DESCRESCENTE) && (c.getFaixas().size() < 1)){
  304 + mensagem = mensagem+" O criterio "+c.getNumeroCriterio()+" da recomendação "+r.getNumeroRecomendacao()+" é do tipo DECRESCENTE e não possui nenhuma faixa cadastrada.<br/>";
  305 + resultado = false;
  306 + }
  307 + }
  308 + }else{
  309 + mensagem = mensagem+" A recomendação "+r.getNumeroRecomendacao()+" não possui nenhum critério cadastrado.<br/>";
  310 + resultado = false;
  311 + }
  312 + }
  313 + }else{
  314 + mensagem = "Nenhuma recomendação foi cadastrada.";
  315 + resultado = false;
  316 + }
  317 +
  318 + if(resultado){
  319 + result.include("mensagem", Messages.getString("parametro_calculo.validacao.ativado"));
  320 + }else{
  321 + result.include("mensagem",aviso);
  322 + System.out.println(mensagem);
  323 + }
  324 +
  325 + return resultado;
  326 + }
  327 +
  328 + private void ativarParametroCalculo(Long id){
  329 + ParametroCalculo parametroCalculoelegivel, parametroCalculoAtivo;
  330 + parametroCalculoelegivel = dao.load(id);
  331 + parametroCalculoAtivo = dao.getLastParametrosCalculoAtivo();
  332 +
  333 + parametroCalculoelegivel.setTsInicio(new Date());
  334 +
  335 + dao.update(parametroCalculoelegivel);
  336 +
  337 + if(parametroCalculoAtivo!=null){
  338 + parametroCalculoAtivo.setTsFim(parametroCalculoelegivel.getTsInicio());
  339 + dao.update(parametroCalculoAtivo);
  340 + }
  341 + }
  342 +
  343 + @Get("/parametrosCalculo/relatorio/{id}")
  344 + @Restrito(descricao = "PARAMETRO_CALCULO_RELATORIO")
  345 + public ParametroCalculo relatorio(Long id) {
  346 + ParametroCalculo parametroCalculo = this.dao.load(id);
  347 + result.include("usuarioList", dao.getAllUsuarios());
  348 + result.include("recomendacaoList",
  349 + new RecomendacaoDAO(dao.getSession())
  350 + .listAllAtivas(parametroCalculo));
  351 +
  352 + return parametroCalculo;
  353 + }
  354 +
  355 + @Get("/parametrosCalculo/errosAtivacao/{id}")
  356 + @Restrito(descricao = "PARAMETRO_CALCULO_RELATORIO")
  357 + public ParametroCalculo errosAtivacao(Long id) {
  358 + ParametroCalculo parametroCalculo = this.dao.load(id);
  359 + result.include("usuarioList", dao.getAllUsuarios());
  360 +
  361 + List<Recomendacao> recomendacaoList = new RecomendacaoDAO(dao.getSession()).listAllAtivas(parametroCalculo);
  362 + List<Recomendacao> recomendacaoListErros = new ArrayList<Recomendacao>();
  363 +
  364 + for(Recomendacao r: recomendacaoList){
  365 + if(r.getCriterios().size()<1){
  366 + recomendacaoListErros.add(r);
  367 + }else{
  368 + List<Criterio> criterios = new ArrayList<Criterio>();
  369 + for(Criterio c: r.getCriterios()){
  370 + if(c.getTipoTeste().getId().intValue()==CriterioAvaliado.TIPO_DESCRESCENTE && c.getFaixas().size()<1){
  371 + criterios.add(c);
  372 + }
  373 + }
  374 + r.setCriterios(criterios);
  375 + recomendacaoListErros.add(r);
  376 + }
  377 + }
  378 +
  379 +
  380 + result.include("recomendacaoList", recomendacaoListErros);
  381 +
  382 + return parametroCalculo;
  383 + }
  384 +
  385 + @Get("/parametroAtivo.xls")
  386 + public File exportarAtivo(){
  387 + Long id = dao.getLastParametrosCalculoAtivo().getId();
  388 + return exportar(id);
  389 + }
  390 +
  391 + @Get("/parametrosCalculo/exportar/{id}/*")
  392 + @Restrito(descricao = "PARAMETRO_CALCULO_LISTA")
  393 + public File exportar(Long id) {
  394 + File relatorio = new File("workbook.ods");
  395 + ParametroCalculo parametroCalculo = this.dao.load(id);
  396 + List<Recomendacao> recomendacaoList = new RecomendacaoDAO(
  397 + dao.getSession()).listAllAtivas(parametroCalculo);
  398 + String msgAtivacao="";
  399 +
  400 + if(parametroCalculo.getTsInicio() != null){
  401 + msgAtivacao = "Ativado em: "+parametroCalculo.getTsInicio()+".";
  402 + }
  403 + if(parametroCalculo.getTsFim() != null){
  404 + msgAtivacao = msgAtivacao +" Encerrado em: "+parametroCalculo.getTsFim();
  405 + }
  406 +
  407 + Workbook wb = new HSSFWorkbook();
  408 + FileOutputStream fileOut;
  409 +
  410 + Map<String, CellStyle> styles = createStyles(wb);
  411 + CreationHelper createHelper = wb.getCreationHelper();
  412 + Sheet sheet = wb.createSheet("new sheet");
  413 + sheet.setPrintGridlines(false);
  414 + sheet.setDisplayGridlines(false);
  415 +
  416 + short rows = 0;
  417 + Row row = sheet.createRow(rows);
  418 + Cell cell = row.createCell(0);
  419 + cell.setCellValue(createHelper.createRichTextString(parametroCalculo.getDescricao()));
  420 + cell.setCellStyle(styles.get("title"));
  421 + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1"));
  422 + rows++;
  423 +
  424 + row = sheet.createRow(rows);
  425 + cell = row.createCell(0);
  426 + cell.setCellValue(createHelper.createRichTextString(msgAtivacao));
  427 + CellStyle style = wb.createCellStyle();
  428 + style.setAlignment(CellStyle.ALIGN_CENTER);
  429 + cell.setCellStyle(style);
  430 +
  431 + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$2:$L$2"));
  432 + rows += 3;
  433 +
  434 + for (Recomendacao recomendacao : recomendacaoList) {
  435 + row = sheet.createRow(rows);
  436 + cell = row.createCell(0);
  437 + cell.setCellValue(
  438 + createHelper.createRichTextString("Recomendação "
  439 + + recomendacao.getNumeroRecomendacao())
  440 + + ": " + recomendacao.getDescricao()
  441 + + " (Peso: "+recomendacao.getPeso()+")"
  442 + );
  443 + cell.setCellStyle(styles.get("subtitle"));
  444 + rows++;
  445 + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$"+rows+":$L$"+rows));
  446 +
  447 + /*
  448 + row = sheet.createRow(rows);
  449 + cell = row.createCell(1);
  450 + cell.setCellValue("Descrição");
  451 + cell.setCellStyle(styles.get("label"));
  452 + row.createCell(2).setCellValue(recomendacao.getDescricao());
  453 + rows++;
  454 +
  455 + row = sheet.createRow(rows);
  456 + cell = row.createCell(1);
  457 + cell.setCellValue("Peso");
  458 + cell.setCellStyle(styles.get("label"));
  459 + cell = row.createCell(2);
  460 + cell.setCellValue(recomendacao.getPeso());
  461 + cell.setCellStyle(styles.get("numeric"));
  462 + rows += 2;
  463 + */
  464 +
  465 + row = sheet.createRow(rows);
  466 + cell = row.createCell(1);
  467 + cell.setCellValue("Número Critério");
  468 + cell.setCellStyle(styles.get("label"));
  469 + cell = row.createCell(2);
  470 + cell.setCellValue("Peso");
  471 + cell.setCellStyle(styles.get("label"));
  472 + cell = row.createCell(3);
  473 + cell.setCellValue("Descrição");
  474 + cell.setCellStyle(styles.get("label"));
  475 + cell = row.createCell(4);
  476 + cell.setCellValue("Requisito");
  477 + cell.setCellStyle(styles.get("label"));
  478 + cell = row.createCell(5);
  479 + cell.setCellValue("Tipo de Verificação");
  480 + cell.setCellStyle(styles.get("label"));
  481 + cell = row.createCell(6);
  482 + cell.setCellValue("Tipo de Mensagem");
  483 + cell.setCellStyle(styles.get("label"));
  484 + rows++;
  485 +
  486 + for (Criterio criterio : recomendacao.getCriterios()) {
  487 + row = sheet.createRow(rows);
  488 + row.createCell(1).setCellValue(criterio.getNumeroCriterio());
  489 + row.createCell(2).setCellValue(criterio.getPeso());
  490 + row.createCell(3).setCellValue(criterio.getDescricao());
  491 +
  492 + row.createCell(4).setCellValue(criterio.getRequisito());
  493 +
  494 + String tipoVetificacao;
  495 + if(criterio.isVerificacaoAutomatica()){
  496 + tipoVetificacao = "Automática";
  497 + }else if(!criterio.isVerificacaoAutomatica()){
  498 + tipoVetificacao="Humana";
  499 + }else{
  500 + tipoVetificacao="";
  501 + }
  502 +
  503 + String tipoErro;
  504 + if(criterio.isErro()){
  505 + tipoErro = "Erro";
  506 + }else if(!criterio.isErro()){
  507 + tipoErro="Aviso";
  508 + }else{
  509 + tipoErro="";
  510 + }
  511 +
  512 + row.createCell(5).setCellValue(tipoVetificacao);
  513 + row.createCell(6).setCellValue(tipoErro);
  514 +
  515 + if(criterio.getTipoTeste().getId().intValue()==3){
  516 + rows++;
  517 + row = sheet.createRow(rows);
  518 + cell = row.createCell(2);
  519 + cell.setCellValue("Faixa");
  520 + cell.setCellStyle(styles.get("label"));
  521 + cell = row.createCell(3);
  522 + cell.setCellValue("Descrição");
  523 + cell.setCellStyle(styles.get("label"));
  524 + cell = row.createCell(4);
  525 + cell.setCellValue("Início");
  526 + cell.setCellStyle(styles.get("label"));
  527 + cell = row.createCell(5);
  528 + cell.setCellValue("Fim");
  529 + cell.setCellStyle(styles.get("label"));
  530 + cell = row.createCell(6);
  531 + cell.setCellValue("%");
  532 + cell.setCellStyle(styles.get("label"));
  533 + rows++;
  534 +
  535 + for(Faixa faixa:criterio.getFaixas()){
  536 + row = sheet.createRow(rows);
  537 + row.createCell(2).setCellValue(faixa.getFaixa());
  538 + row.createCell(3).setCellValue(faixa.getDescricao());
  539 + row.createCell(4).setCellValue(faixa.getFaixaInicio());
  540 + row.createCell(5).setCellValue(faixa.getFaixaFim());
  541 + row.createCell(6).setCellValue(faixa.getPercentualConformidade());
  542 + rows++;
  543 +
  544 + }
  545 +
  546 + }
  547 +
  548 +
  549 + rows++;
  550 + }
  551 +
  552 + rows += 2;
  553 + }
  554 +
  555 + try {
  556 + fileOut = new FileOutputStream(relatorio);
  557 + wb.write(fileOut);
  558 + } catch (FileNotFoundException e) {
  559 + e.printStackTrace();
  560 + } catch (IOException e) {
  561 + e.printStackTrace();
  562 + }
  563 +
  564 + return relatorio;
  565 + }
  566 +
  567 + private static Map<String, CellStyle> createStyles(Workbook wb) {
  568 + Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
  569 +
  570 + CellStyle style;
  571 + Font fontLargeBold = wb.createFont();
  572 + fontLargeBold.setFontHeightInPoints((short) 12);
  573 + fontLargeBold.setFontName("Arial");
  574 + fontLargeBold.setBoldweight(Font.BOLDWEIGHT_BOLD);
  575 +
  576 + Font fontMediumBold = wb.createFont();
  577 + fontMediumBold.setFontHeightInPoints((short) 11);
  578 + fontMediumBold.setFontName("Arial");
  579 + fontMediumBold.setBoldweight(Font.BOLDWEIGHT_BOLD);
  580 +
  581 + Font fontNormalBold = wb.createFont();
  582 + fontNormalBold.setFontHeightInPoints((short) 10);
  583 + fontNormalBold.setFontName("Arial");
  584 + fontNormalBold.setBoldweight(Font.BOLDWEIGHT_BOLD);
  585 +
  586 + style = wb.createCellStyle();
  587 + style.setAlignment(CellStyle.ALIGN_CENTER);
  588 + style.setFont(fontLargeBold);
  589 + styles.put("title", style);
  590 +
  591 + style = wb.createCellStyle();
  592 + style.setAlignment(CellStyle.ALIGN_LEFT);
  593 + style.setFont(fontMediumBold);
  594 + style.setBorderBottom(CellStyle.BORDER_DOTTED);
  595 + style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
  596 + styles.put("subtitle", style);
  597 +
  598 + style = wb.createCellStyle();
  599 + style.setAlignment(CellStyle.ALIGN_LEFT);
  600 + style.setFont(fontNormalBold);
  601 + styles.put("label", style);
  602 +
  603 + style = wb.createCellStyle();
  604 + style.setAlignment(CellStyle.ALIGN_LEFT);
  605 + style.setDataFormat(wb.createDataFormat().getFormat("0"));
  606 + styles.put("numeric", style);
  607 +
  608 + return styles;
  609 + }
  610 +}
613 \ No newline at end of file 611 \ No newline at end of file