package net.conselldemallorca.helium.webapp.v3.controller; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.beans.propertyeditors.StringTrimmerEditor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; 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.v3.core.api.dto.ConsultaDto; import net.conselldemallorca.helium.v3.core.api.dto.EntornDto; import net.conselldemallorca.helium.v3.core.api.dto.EstatDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTipusDto; import net.conselldemallorca.helium.v3.core.api.dto.MostrarAnulatsDto; import net.conselldemallorca.helium.v3.core.api.dto.PaginaDto; import net.conselldemallorca.helium.v3.core.api.dto.ParellaCodiValorDto; import net.conselldemallorca.helium.v3.core.api.service.ExpedientService; import net.conselldemallorca.helium.webapp.v3.command.ExpedientConsultaCommand; import net.conselldemallorca.helium.webapp.v3.datatables.DatatablesPagina; import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper; import net.conselldemallorca.helium.webapp.v3.helper.PaginacioHelper; import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper; import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper.SessionManager; /** * Controlador per al llistat d'expedients. * * @author Limit Tecnologies <limit@limit.es> */ @Controller @RequestMapping("/v3/expedient") public class ExpedientLlistatController extends BaseExpedientController { @Autowired private ExpedientService expedientService; @RequestMapping(method = RequestMethod.GET) public String get( HttpServletRequest request, Model model) { ExpedientConsultaCommand filtreCommand = getFiltreCommand(request); model.addAttribute(filtreCommand); if (filtreCommand.isConsultaRealitzada()) { omplirModelGet(request, model); } return "v3/expedientLlistat"; } @RequestMapping(method = RequestMethod.POST) public String post( HttpServletRequest request, @Valid ExpedientConsultaCommand filtreCommand, BindingResult bindingResult, @RequestParam(value = "accio", required = false) String accio) { if ("netejar".equals(accio)) { SessionHelper.getSessionManager(request).removeFiltreConsultaGeneral(); } else { ExpedientConsultaCommand filtreAnterior = SessionHelper.getSessionManager(request).getFiltreConsultaGeneral(); if (filtreAnterior != null && filtreCommand.getExpedientTipusId() != null) { if (!filtreCommand.getExpedientTipusId().equals(filtreAnterior.getExpedientTipusId())) { // Netejar selecció d'expedients SessionManager sessionManager = SessionHelper.getSessionManager(request); Set<Long> ids = sessionManager.getSeleccioConsultaGeneral(); if (ids != null) ids.clear(); } } SessionHelper.getSessionManager(request).setFiltreConsultaGeneral(filtreCommand); } return "redirect:expedient"; } @RequestMapping(value = "/datatable", method = RequestMethod.GET) @ResponseBody public DatatablesPagina<ExpedientDto> datatable( HttpServletRequest request, Model model) { EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual(); ExpedientConsultaCommand filtreCommand = getFiltreCommand(request); SessionHelper.getSessionManager(request).setFiltreConsultaGeneral(filtreCommand); DatatablesPagina<ExpedientDto> result = null; try { result = PaginacioHelper.getPaginaPerDatatables( request, expedientService.findAmbFiltrePaginat( entornActual.getId(), filtreCommand.getExpedientTipusId(), filtreCommand.getTitol(), filtreCommand.getNumero(), filtreCommand.getDataIniciInicial(), filtreCommand.getDataIniciFinal(), filtreCommand.getDataFiInicial(), filtreCommand.getDataFiFinal(), filtreCommand.getEstatTipus(), filtreCommand.getEstatId(), filtreCommand.getGeoPosX(), filtreCommand.getGeoPosY(), filtreCommand.getGeoReferencia(), filtreCommand.isNomesTasquesPersonals(), filtreCommand.isNomesTasquesGrup(), filtreCommand.isNomesAlertes(), filtreCommand.isNomesErrors(), filtreCommand.getMostrarAnulats(), PaginacioHelper.getPaginacioDtoFromDatatable(request))); } catch (Exception e) { if (entornActual == null) MissatgesHelper.error(request, getMessage(request, "error.cap.entorn")); else { MissatgesHelper.error(request, e.getMessage()); logger.error("No se pudo obtener la lista de expedientes", e); } result = PaginacioHelper.getPaginaPerDatatables( request, new PaginaDto<ExpedientDto>()); } return result; } @RequestMapping(value = "/selection", method = RequestMethod.POST) @ResponseBody public Set<Long> seleccio( HttpServletRequest request, @RequestParam(value = "ids", required = false) String ids) { SessionManager sessionManager = SessionHelper.getSessionManager(request); Set<Long> seleccio = sessionManager.getSeleccioConsultaGeneral(); if (seleccio == null) { seleccio = new HashSet<Long>(); sessionManager.setSeleccioConsultaGeneral(seleccio); } if (ids != null) { String[] idsparts = (ids.contains(",")) ? ids.split(",") : new String[] {ids}; for (String id: idsparts) { try { long l = Long.parseLong(id.trim()); if (l >= 0) { seleccio.add(l); } else { seleccio.remove(-l); } } catch (NumberFormatException ex) {} } } return seleccio; } @RequestMapping(value = "/seleccioTots") @ResponseBody public Set<Long> seleccioTots(HttpServletRequest request) { EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual(); ExpedientConsultaCommand filtreCommand = getFiltreCommand(request); List<Long> ids = expedientService.findIdsAmbFiltre( entornActual.getId(), filtreCommand.getExpedientTipusId(), filtreCommand.getTitol(), filtreCommand.getNumero(), filtreCommand.getDataIniciInicial(), filtreCommand.getDataIniciFinal(), filtreCommand.getDataFiInicial(), filtreCommand.getDataFiFinal(), filtreCommand.getEstatTipus(), filtreCommand.getEstatId(), filtreCommand.getGeoPosX(), filtreCommand.getGeoPosY(), filtreCommand.getGeoReferencia(), filtreCommand.isNomesTasquesPersonals(), filtreCommand.isNomesTasquesGrup(), filtreCommand.isNomesAlertes(), filtreCommand.isNomesErrors(), filtreCommand.getMostrarAnulats()); SessionManager sessionManager = SessionHelper.getSessionManager(request); Set<Long> seleccio = sessionManager.getSeleccioConsultaGeneral(); if (seleccio == null) { seleccio = new HashSet<Long>(); sessionManager.setSeleccioConsultaGeneral(seleccio); } if (ids != null) { for (Long id: ids) { try { if (id >= 0) { seleccio.add(id); } else { seleccio.remove(-id); } } catch (NumberFormatException ex) {} } Iterator<Long> iterador = seleccio.iterator(); while( iterador.hasNext() ) { if (!ids.contains(iterador.next())) { iterador.remove(); } } } return seleccio; } @ModelAttribute("anulats") public List<ParellaCodiValorDto> populateEstats(HttpServletRequest request) { List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>(); resposta.add(new ParellaCodiValorDto(getMessage(request, "enum.no"), MostrarAnulatsDto.NO)); resposta.add(new ParellaCodiValorDto(getMessage(request, "enum.si"), MostrarAnulatsDto.SI)); resposta.add(new ParellaCodiValorDto(getMessage(request, "enum.si.only"), MostrarAnulatsDto.NOMES_ANULATS)); return resposta; } @RequestMapping(value = "/consultas/{expedientTipusId}", method = RequestMethod.GET) @ResponseBody public List<ConsultaDto> consultasTipus( HttpServletRequest request, @PathVariable Long expedientTipusId) { EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual(); return dissenyService.findConsultesActivesAmbEntornIExpedientTipusOrdenat(entornActual.getId(),expedientTipusId); } @RequestMapping(value = "/seleccioNetejar") @ResponseBody public Set<Long> seleccioNetejar(HttpServletRequest request) { SessionManager sessionManager = SessionHelper.getSessionManager(request); Set<Long> ids = sessionManager.getSeleccioConsultaGeneral(); ids.clear(); return ids; } @RequestMapping(value = "/estatsPerTipus/{expedientTipusId}", method = RequestMethod.GET) @ResponseBody public List<EstatDto> estatsPerExpedientTipus( HttpServletRequest request, @PathVariable Long expedientTipusId) { return dissenyService.findEstatByExpedientTipus(expedientTipusId); } @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); } private void omplirModelGet( HttpServletRequest request, Model model) { ExpedientConsultaCommand filtreCommand = getFiltreCommand(request); if (filtreCommand.getExpedientTipusId() != null) { model.addAttribute( "estats", dissenyService.findEstatByExpedientTipus( filtreCommand.getExpedientTipusId())); } } private ExpedientConsultaCommand getFiltreCommand( HttpServletRequest request) { ExpedientConsultaCommand filtreCommand = SessionHelper.getSessionManager(request).getFiltreConsultaGeneral(); if (filtreCommand == null) { filtreCommand = new ExpedientConsultaCommand(); // UsuariPreferenciesDto preferenciesUsuari = SessionHelper.getSessionManager(request).getPreferenciesUsuari(); // boolean nomesPendents = false; // if (preferenciesUsuari != null) // nomesPendents = preferenciesUsuari.isFiltroTareasActivas(); // filtreCommand.setNomesPendents(nomesPendents); filtreCommand.setConsultaRealitzada(true); SessionHelper.getSessionManager(request).setFiltreConsultaGeneral(filtreCommand); } ExpedientTipusDto expedientTipusActual = SessionHelper.getSessionManager(request).getExpedientTipusActual(); if (expedientTipusActual != null) { filtreCommand.setExpedientTipusId(expedientTipusActual.getId()); } return filtreCommand; } protected static final Log logger = LogFactory.getLog(ExpedientLlistatController.class); }