package net.conselldemallorca.helium.webapp.v3.controller; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; 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.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import net.conselldemallorca.helium.core.model.dto.ParellaCodiValorDto; import net.conselldemallorca.helium.v3.core.api.dto.ConsultaDto; import net.conselldemallorca.helium.v3.core.api.dto.EntornDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTipusDto; import net.conselldemallorca.helium.v3.core.api.dto.PersonaDto; import net.conselldemallorca.helium.v3.core.api.dto.PersonaDto.Sexe; import net.conselldemallorca.helium.v3.core.api.dto.UsuariPreferenciesDto; import net.conselldemallorca.helium.v3.core.api.service.AdminService; import net.conselldemallorca.helium.v3.core.api.service.AplicacioService; import net.conselldemallorca.helium.v3.core.api.service.DissenyService; import net.conselldemallorca.helium.v3.core.api.service.EntornService; import net.conselldemallorca.helium.webapp.v3.command.PersonaUsuariCommand; import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper; import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper; /** * Controlador per la gestiĆ³ d'perfils * * @author Limit Tecnologies <limit@limit.es> */ @Controller @RequestMapping("/v3/perfil") public class PerfilesController extends BaseController { @Resource(name="entornServiceV3") private EntornService entornService; @Autowired private AplicacioService aplicacioService; @Autowired private AdminService adminService; @Autowired private DissenyService dissenyService; @RequestMapping(method = RequestMethod.GET) public String get( HttpServletRequest request, Model model) { model.addAttribute(getFiltreCommand(request, model)); return "v3/persona/perfil"; } @RequestMapping(value = "/consulta/{entornCodi}", method = RequestMethod.GET) @ResponseBody public List<ExpedientTipusDto> getExpedientTipus( HttpServletRequest request, @PathVariable String entornCodi) { for (EntornDto entorn: entornService.findActiusAmbPermisAcces()) { if (entorn.getCodi().equals(entornCodi)) { List<ExpedientTipusDto> expedientsTipus = dissenyService.findExpedientTipusAmbPermisReadUsuariActual(entorn.getId()); // Iterator<ExpedientTipusDto> it = expedientsTipus.iterator(); // while (it.hasNext()) { // ExpedientTipusDto expTip = it.next(); // if (expTip.getConsultes().isEmpty()) { // it.remove(); // } // } return expedientsTipus; } } return null; } @RequestMapping(value = "/consulta/{expedientTipusId}/{entornCodi}", method = RequestMethod.GET) @ResponseBody public List<ConsultaDto> getConsultas( HttpServletRequest request, @PathVariable Long expedientTipusId, @PathVariable String entornCodi) { for (EntornDto entorn: entornService.findActiusAmbPermisAcces()) { if (entorn.getCodi().equals(entornCodi)) { return dissenyService.findConsultesActivesAmbEntornIExpedientTipusOrdenat(entorn.getId(),expedientTipusId); } } return null; } @ModelAttribute("numElementsPagina") public List<ParellaCodiValorDto> numElementsPagina(HttpServletRequest request) { List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>(); resposta.add(new ParellaCodiValorDto("10", "10")); resposta.add(new ParellaCodiValorDto("50", "50")); resposta.add(new ParellaCodiValorDto("100", "100")); return resposta; } @ModelAttribute("cabeceras") public List<ParellaCodiValorDto> cabeceras(HttpServletRequest request) { List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>(); resposta.add(new ParellaCodiValorDto("0", getMessage(request, "perfil.usuari.completa"))); resposta.add(new ParellaCodiValorDto("1", getMessage(request, "perfil.usuari.reducida"))); return resposta; } @ModelAttribute("pantallas") public List<ParellaCodiValorDto> paginas(HttpServletRequest request) { List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>(); resposta.add(new ParellaCodiValorDto("0", getMessage(request, "perfil.usuari.expedients"))); resposta.add(new ParellaCodiValorDto("1", getMessage(request, "perfil.usuari.tasques"))); resposta.add(new ParellaCodiValorDto("2", getMessage(request, "perfil.usuari.informes"))); return resposta; } @ModelAttribute("sexes") public List<ParellaCodiValorDto> sexes(HttpServletRequest request) { List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>(); resposta.add(new ParellaCodiValorDto("0", getMessage(request, "txt.dona"))); resposta.add(new ParellaCodiValorDto("1", getMessage(request, "txt.home"))); return resposta; } private PersonaUsuariCommand getFiltreCommand(HttpServletRequest request, Model model) { PersonaUsuariCommand filtreCommand = new PersonaUsuariCommand(); UsuariPreferenciesDto preferencies = SessionHelper.getSessionManager(request).getPreferenciesUsuari(); if (preferencies == null) preferencies = new UsuariPreferenciesDto(); EntornDto entornUsuari = null; List<EntornDto> entorns = entornService.findActiusAmbPermisAcces(); for (EntornDto entorn: entorns) { if (entorn.getCodi().equals(preferencies.getDefaultEntornCodi())) { entornUsuari = entorn; break; } } List<ExpedientTipusDto> expedientTipusConConsultas = new ArrayList<ExpedientTipusDto>(); // if (entornUsuari == null) // entornUsuari = SessionHelper.getSessionManager(request).getEntornActual(); if (entornUsuari != null) { List<ExpedientTipusDto> expedientTipus = dissenyService.findExpedientTipusAmbPermisReadUsuariActual(entornUsuari.getId()); model.addAttribute("expedientTipus", expedientTipus); for (ExpedientTipusDto expTip : expedientTipus) { if (!expTip.getConsultes().isEmpty()) { expedientTipusConConsultas.add(expTip); } } } filtreCommand.setCabeceraReducida(preferencies.isCabeceraReducida()); filtreCommand.setEntornCodi(preferencies.getDefaultEntornCodi()); if (preferencies.getConsultaId() != null) { ConsultaDto consulta = dissenyService.findConsulteById(preferencies.getConsultaId()); if (consulta != null) { filtreCommand.setConsultaId(preferencies.getConsultaId()); filtreCommand.setExpedientTipusId(consulta.getExpedientTipus().getId()); } model.addAttribute("consultes", dissenyService.findConsultesActivesAmbEntornIExpedientTipusOrdenat(entornUsuari.getId(),filtreCommand.getExpedientTipusId())); } else { model.addAttribute("consultes", new ArrayList<ConsultaDto>()); } model.addAttribute("expedientTipusConConsultas", expedientTipusConConsultas); filtreCommand.setFiltroExpedientesActivos(preferencies.isFiltroTareasActivas()); filtreCommand.setListado(preferencies.getListado()); filtreCommand.setNumElementosPagina(preferencies.getNumElementosPagina()); filtreCommand.setExpedientTipusDefecteId(preferencies.getExpedientTipusDefecteId()); PersonaDto usuari = getPersonaActual(request); filtreCommand.setNom(usuari.getNom()); filtreCommand.setDni(usuari.getDni()); filtreCommand.setEmail(usuari.getEmail()); filtreCommand.setLlinatge1(usuari.getLlinatge1()); filtreCommand.setLlinatge2(usuari.getLlinatge2()); filtreCommand.setHombre(usuari.getSexe().equals(Sexe.SEXE_HOME)); return filtreCommand; } @RequestMapping(method = RequestMethod.POST) public String formPost( HttpServletRequest request, @RequestParam(value = "accio", required = false) String accio, @Valid @ModelAttribute PersonaUsuariCommand personaUsuariCommand, BindingResult result, Model model) { try { if ("Guardar".equals(accio)) { UsuariPreferenciesDto preferencies = new UsuariPreferenciesDto(); preferencies.setCodi(request.getUserPrincipal().getName()); preferencies.setCabeceraReducida(personaUsuariCommand.isCabeceraReducida()); preferencies.setConsultaId(personaUsuariCommand.getConsultaId()); preferencies.setExpedientTipusDefecteId(personaUsuariCommand.getExpedientTipusDefecteId()); preferencies.setDefaultEntornCodi(personaUsuariCommand.getEntornCodi()); preferencies.setFiltroTareasActivas(personaUsuariCommand.isFiltroExpedientesActivos()); preferencies.setListado(personaUsuariCommand.getListado()); preferencies.setNumElementosPagina(personaUsuariCommand.getNumElementosPagina()); adminService.updatePerfil(preferencies); SessionHelper.getSessionManager(request).setPreferenciesUsuari(preferencies); } else if ("Modificar".equals(accio) && !result.hasErrors()) { PersonaDto persona = new PersonaDto(); persona.setCodi(request.getUserPrincipal().getName()); persona.setDni(personaUsuariCommand.getDni()); persona.setEmail(personaUsuariCommand.getEmail()); persona.setLlinatge1(personaUsuariCommand.getLlinatge1()); persona.setLlinatge2(personaUsuariCommand.getLlinatge2()); persona.setNom(personaUsuariCommand.getNom()); persona.setSexe(personaUsuariCommand.isHombre() ? Sexe.SEXE_HOME : Sexe.SEXE_DONA); adminService.updatePersona(persona); } else { MissatgesHelper.error(request, getMessage(request, "error.guardar.perfil")); PersonaUsuariCommand pars = getFiltreCommand(request, model); personaUsuariCommand.setCabeceraReducida(pars.isCabeceraReducida()); personaUsuariCommand.setConsultaId(pars.getConsultaId()); personaUsuariCommand.setEntornCodi(pars.getEntornCodi()); personaUsuariCommand.setExpedientTipusId(pars.getExpedientTipusId()); personaUsuariCommand.setExpedientTipusDefecteId(pars.getExpedientTipusDefecteId()); personaUsuariCommand.setFiltroExpedientesActivos(pars.isFiltroExpedientesActivos()); personaUsuariCommand.setListado(pars.getListado()); personaUsuariCommand.setNumElementosPagina(pars.getNumElementosPagina()); return "v3/persona/perfil"; } SessionHelper.getSessionManager(request).setFiltreConsultaGeneral(null); MissatgesHelper.success(request,getMessage(request, "info.perfil.guardat")); } catch (Exception ex) { MissatgesHelper.error(request, getMessage(request, "error.guardar.perfil")); logger.error("No s'ha pogut guardar el perfil", ex); } return get(request, model); } private PersonaDto getPersonaActual( HttpServletRequest request) { String usuariCodi = request.getUserPrincipal().getName(); return aplicacioService.findPersonaAmbCodi(usuariCodi); } private static final Logger logger = LoggerFactory.getLogger(PerfilesController.class); }