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 br.ifes.leds.sincap.web.controller; import br.ifes.leds.reuse.ledsExceptions.CRUDExceptions.ViolacaoDeRIException; import br.ifes.leds.sincap.controleInterno.cln.cgt.AplCadastroInterno; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.Comentario; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.EstadoNotificacaoEnum; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.ProcessoNotificacao; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.TipoNaoDoacao; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.dto.CausaNaoDoacaoDTO; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.dto.ComentarioDTO; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.dto.ProcessoNotificacaoDTO; import br.ifes.leds.sincap.gerenciaNotificacao.cln.cgt.AplProcessoNotificacao; import br.ifes.leds.sincap.web.annotations.DefaultTimeZone; import br.ifes.leds.sincap.web.model.UsuarioSessao; import br.ifes.leds.sincap.web.utility.UtilityWeb; import org.dozer.Mapper; import org.joda.time.LocalDate; import org.joda.time.LocalTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.faces.bean.SessionScoped; import javax.faces.model.SelectItem; import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; import java.util.Locale; import static br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.TipoNaoDoacao.PROBLEMAS_ESTRUTURAIS; import static br.ifes.leds.sincap.gerenciaNotificacao.cln.cdp.TipoNaoDoacao.RECUSA_FAMILIAR; import static br.ifes.leds.sincap.web.controller.ContextUrls.*; import static org.springframework.web.bind.annotation.RequestMethod.GET; import static org.springframework.web.bind.annotation.RequestMethod.POST; /** * @author Breno Grillo */ @Controller @RequestMapping(APP_NOTIFICACAO_ENTREVISTA) @SessionScoped public class NotificacaoEntrevistaController { @Autowired AplProcessoNotificacao aplProcessoNotificacao; @Autowired private AplCadastroInterno aplCadastroInterno; @Autowired private UtilityWeb utilityWeb; @Autowired private Mapper mapper; @RequestMapping(value = ADICIONAR + "/{idProcesso}", method = GET) public String loadFormEntrevistaGetMethod(ModelMap model, @PathVariable Long idProcesso) { try { ProcessoNotificacaoDTO processo = aplProcessoNotificacao.obter(idProcesso); utilityWeb.preencherEstados(model); model.addAttribute("processo", processo); model.addAttribute("listaAspectoEstrutural", getListaCausaNDoacaoSelectItem(PROBLEMAS_ESTRUTURAIS)); model.addAttribute("listaRecusaFamiliar", getListaCausaNDoacaoSelectItem(RECUSA_FAMILIAR)); model.addAttribute("listaParentescos", utilityWeb.getParentescoSelectItem()); model.addAttribute("listaEstadosCivis", utilityWeb.getEstadoCivilSelectItem()); model.addAttribute("recusaFamiliar", (long) 0); model.addAttribute("problemasEstruturais", (long) 0); model.addAttribute("tipoDocumentos", utilityWeb.getTipoDocumentoComFotoSelectItem()); model.addAttribute("grauEscolaridade", utilityWeb.getEscolaridadeSelectItem()); model.addAttribute("menorIdade", utilityWeb.getIdade(processo.getObito().getPaciente().getDataNascimento().getTime(), processo.getObito().getDataObito().getTime()) < 18); } catch (Exception ignored) { } return "form-entrevista"; } @DefaultTimeZone @RequestMapping(value = SALVAR, method = POST) public String salvarEntrevista(ModelMap model, HttpSession session, @DateTimeFormat(pattern = "dd/MM/yyyy") @RequestParam("dataEntrevista") LocalDate dataEntrevista, @DateTimeFormat(pattern = "HH:mm") @RequestParam("horaEntrevista") LocalTime horaEntrevista, @RequestParam(value = "recusaFamiliar", defaultValue = "") Long recusaFamiliar, @RequestParam(value = "problemasEstruturais", defaultValue = "") Long problemasEstruturais, @ModelAttribute("processo") ProcessoNotificacaoDTO processo, @RequestParam(value = "descricaoComentario", defaultValue = "") String descricaoComentario) { UsuarioSessao usuarioSessao = (UsuarioSessao) session.getAttribute("user"); if (!descricaoComentario.isEmpty()) { String momento = EstadoNotificacaoEnum.AGUARDANDOENTREVISTA.toString(); ComentarioDTO comentario = utilityWeb.criarComentario(momento, descricaoComentario, usuarioSessao); processo.getComentarios().add(comentario); } if (dataEntrevista != null && horaEntrevista != null) { processo.getEntrevista() .setDataEntrevista(dataEntrevista.toDateTime(horaEntrevista).toCalendar(Locale.getDefault())); } if (!processo.getEntrevista().isEntrevistaRealizada()) { processo.setCausaNaoDoacao(problemasEstruturais); processo.getEntrevista().setResponsavel(null); processo.getEntrevista().setResponsavel2(null); processo.getEntrevista().setTestemunha1(null); processo.getEntrevista().setTestemunha2(null); processo.getEntrevista().setDataEntrevista(null); } else if (!processo.getEntrevista().isDoacaoAutorizada()) { processo.setCausaNaoDoacao(recusaFamiliar); } try { processo.getEntrevista().setFuncionario(usuarioSessao.getIdUsuario()); aplProcessoNotificacao.salvarEntrevista(processo, usuarioSessao.getIdUsuario()); } catch (ViolacaoDeRIException e) { addAtributosIniciais(model, processo); utilityWeb.addConstraintViolations(e.getConstraintViolations(), model); utilityWeb.preencherEndereco(processo.getObito().getPaciente().getEndereco(), model); if (processo.getEntrevista().getResponsavel() != null && processo.getEntrevista().getResponsavel().getEndereco() != null) { utilityWeb.preencherEndereco(processo.getEntrevista().getResponsavel().getEndereco(), model); } model.addAttribute("tipoDocumentos", utilityWeb.getTipoDocumentoComFotoSelectItem()); model.addAttribute("grauEscolaridade", utilityWeb.getEscolaridadeSelectItem()); return "form-entrevista"; } if (processo.getEntrevista().isDoacaoAutorizada()) { return "redirect:" + INDEX + "?sucessoEntrevista=true&idEntrevista=" + processo.getId(); } else { return "redirect:" + INDEX + "?doacaoNaoAutorizada=true&idEntrevista=" + processo.getId(); } } private void addAtributosIniciais(ModelMap model, ProcessoNotificacaoDTO processo) { model.addAttribute("processo", processo); model.addAttribute("listaAspectoEstrutural", getListaCausaNDoacaoSelectItem(PROBLEMAS_ESTRUTURAIS)); model.addAttribute("listaRecusaFamiliar", getListaCausaNDoacaoSelectItem(RECUSA_FAMILIAR)); model.addAttribute("listaParentescos", utilityWeb.getParentescoSelectItem()); model.addAttribute("listaEstadosCivis", utilityWeb.getEstadoCivilSelectItem()); } @DefaultTimeZone @RequestMapping(value = EDITAR + "/{idProcesso}", method = GET) public String editarNotificacaoEntrevista(ModelMap model, @PathVariable Long idProcesso) { ProcessoNotificacaoDTO processo = aplProcessoNotificacao.obter(idProcesso); if (processo.getEntrevista().getResponsavel() != null && processo.getEntrevista().getResponsavel().getEndereco() != null) { utilityWeb.preencherEndereco(processo.getEntrevista().getResponsavel().getEndereco(), model); } else { utilityWeb.preencherEstados(model); } model.addAttribute("listaAspectoEstrutural", getListaCausaNDoacaoSelectItem(PROBLEMAS_ESTRUTURAIS)); model.addAttribute("listaRecusaFamiliar", getListaCausaNDoacaoSelectItem(RECUSA_FAMILIAR)); model.addAttribute("listaParentescos", utilityWeb.getParentescoSelectItem()); model.addAttribute("listaEstadosCivis", utilityWeb.getEstadoCivilSelectItem()); model.addAttribute("recusaFamiliar", processo.getCausaNaoDoacao()); model.addAttribute("problemasEstruturais", processo.getCausaNaoDoacao()); model.addAttribute("tipoDocumentos", utilityWeb.getTipoDocumentoComFotoSelectItem()); model.addAttribute("processo", processo); model.addAttribute("entrevistaRealizada", processo.getEntrevista().isEntrevistaRealizada()); model.addAttribute("doacaoAutorizada", processo.getEntrevista().isDoacaoAutorizada()); if (processo.getObito().getPaciente().getDataNascimento() != null) { model.addAttribute("menorIdade", utilityWeb.getIdade(processo.getObito().getPaciente().getDataNascimento().getTime(), processo.getObito().getDataObito().getTime()) < 18); } model.addAttribute("grauEscolaridade", utilityWeb.getEscolaridadeSelectItem()); return "form-entrevista"; } /** * Fornece a pgina para anlise. * * @param idProcesso ID do ProcessoNotificacao */ @DefaultTimeZone @RequestMapping(value = APP_ANALISAR + "/{idProcesso}", method = GET) public String analisar(ModelMap model, @PathVariable Long idProcesso) { // Pega o processo do banco. ProcessoNotificacao processo = aplProcessoNotificacao.getProcessoNotificacao(idProcesso); // Adiciona o processo ao modelo da pgina. model.addAttribute("processo", processo); model.addAttribute("entrevista", true); if (processo.getObito().getPaciente().getDataNascimento() != null) { model.addAttribute("menorIdade", utilityWeb.getIdade(processo.getObito().getPaciente().getDataNascimento().getTime(), processo.getObito().getDataObito().getTime()) < 18); } return "analise-processo-notificacao"; } /** * Confirma a anlise. * * @param idProcesso ID do ProcessoNotificacao */ @RequestMapping(value = APP_ANALISAR + CONFIRMAR, method = POST) public String confirmarAnalise(@RequestParam("id") Long idProcesso, HttpSession session, @RequestParam(value = "descricaoComentario", defaultValue = "") String descricaoComentario) { UsuarioSessao usuarioSessao = (UsuarioSessao) session.getAttribute("user"); if (!descricaoComentario.isEmpty()) { String momento = EstadoNotificacaoEnum.EMANALISEENTREVISTA.toString(); ComentarioDTO comentario = utilityWeb.criarComentario(momento, descricaoComentario, usuarioSessao); aplProcessoNotificacao.salvarComentario(idProcesso, mapper.map(comentario, Comentario.class)); } aplProcessoNotificacao.validarAnaliseEntrevista(idProcesso, usuarioSessao.getIdUsuario()); return "redirect:" + INDEX + "?entrevistaConfirmada=true"; } /** * Recusa a anlise. * * @param idProcesso ID do ProcessoNotificacao */ @RequestMapping(value = APP_ANALISAR + RECUSAR, method = POST) public String recusarEntrevista(@RequestParam("id") Long idProcesso, HttpSession session, @RequestParam(value = "descricaoComentario", defaultValue = "") String descricaoComentario) { UsuarioSessao usuarioSessao = (UsuarioSessao) session.getAttribute("user"); if (!descricaoComentario.isEmpty()) { String momento = EstadoNotificacaoEnum.EMANALISEENTREVISTA.toString(); ComentarioDTO comentario = utilityWeb.criarComentario(momento, descricaoComentario, usuarioSessao); aplProcessoNotificacao.salvarComentario(idProcesso, mapper.map(comentario, Comentario.class)); } aplProcessoNotificacao.recusarAnaliseEntrevista(idProcesso, usuarioSessao.getIdUsuario()); return "redirect:" + INDEX + "?entrevistaRecusada=true"; } /** * Envia o processo para arquivamento * * @param idProcesso ID do ProcessoNotificacao */ @RequestMapping(value = APP_ANALISAR + ARQUIVAR, method = POST) public String arquivarEntrevista(@RequestParam("id") Long idProcesso, HttpSession session, @RequestParam(value = "descricaoComentario", defaultValue = "") String descricaoComentario) { UsuarioSessao usuarioSessao = (UsuarioSessao) session.getAttribute("user"); if (!descricaoComentario.isEmpty()) { String momento = EstadoNotificacaoEnum.EMANALISEENTREVISTA.toString(); ComentarioDTO comentario = utilityWeb.criarComentario(momento, descricaoComentario, usuarioSessao); aplProcessoNotificacao.salvarComentario(idProcesso, mapper.map(comentario, Comentario.class)); } aplProcessoNotificacao.finalizarProcesso(idProcesso, usuarioSessao.getIdUsuario()); return "redirect:" + INDEX; } private List<SelectItem> getListaCausaNDoacaoSelectItem(TipoNaoDoacao tipo) { List<CausaNaoDoacaoDTO> listaCausas = aplCadastroInterno.obterCausaNaoDoacao(tipo); List<SelectItem> listaCausasSelIt = new ArrayList<>(); for (CausaNaoDoacaoDTO causa : listaCausas) { listaCausasSelIt.add(new SelectItem(causa.getId(), causa.getNome())); } return listaCausasSelIt; } }