/** * */ package net.conselldemallorca.helium.webapp.mvc; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.exception.ConstraintViolationException; import org.jbpm.db.GraphSession; import org.jbpm.graph.exe.ProcessInstanceExpedient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.security.acls.model.Permission; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; 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.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.support.SessionStatus; import org.springframework.web.multipart.MultipartFile; import net.conselldemallorca.helium.core.model.dto.DefinicioProcesDto; import net.conselldemallorca.helium.core.model.dto.ExecucioMassivaDto; import net.conselldemallorca.helium.core.model.dto.ExpedientDto; import net.conselldemallorca.helium.core.model.dto.PersonaDto; import net.conselldemallorca.helium.core.model.exportacio.ExpedientTipusExportacio; import net.conselldemallorca.helium.core.model.hibernate.Consulta; import net.conselldemallorca.helium.core.model.hibernate.ConsultaCamp; import net.conselldemallorca.helium.core.model.hibernate.Entorn; import net.conselldemallorca.helium.core.model.hibernate.ExecucioMassiva.ExecucioMassivaTipus; import net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus; import net.conselldemallorca.helium.core.model.hibernate.Reassignacio; import net.conselldemallorca.helium.core.model.service.DissenyService; import net.conselldemallorca.helium.core.model.service.ExecucioMassivaService; import net.conselldemallorca.helium.core.model.service.ExpedientService; import net.conselldemallorca.helium.core.model.service.PermissionService; import net.conselldemallorca.helium.core.model.service.PersonaService; import net.conselldemallorca.helium.core.model.service.PluginService; import net.conselldemallorca.helium.core.model.service.ReassignacioService; import net.conselldemallorca.helium.core.security.ExtendedPermission; import net.conselldemallorca.helium.webapp.mvc.util.BaseController; /** * Controlador per la gestió de tipus d'expedient * * @author Limit Tecnologies <limit@limit.es> */ @Controller public class ExpedientTipusController extends BaseController { private DissenyService dissenyService; private ExpedientService expedientService; private PermissionService permissionService; private PluginService pluginService; private ReassignacioService reassignacioService; // private Validator additionalValidator; private PersonaService personaService; private ExecucioMassivaService execucioMassivaService; @Autowired public ExpedientTipusController( DissenyService dissenyService, ExpedientService expedientService, PermissionService permissionService, PluginService pluginService) { this.dissenyService = dissenyService; this.expedientService = expedientService; this.permissionService = permissionService; this.pluginService = pluginService; } public PersonaService getPersonaService() { return personaService; } public void setPersonaService(PersonaService personaService) { this.personaService = personaService; } // @Autowired // public Validator getAdditionalValidator() { // return additionalValidator; // } // @Autowired // public void setAdditionalValidator(Validator additionalValidator) { // this.additionalValidator = additionalValidator; // } @ModelAttribute("expedientTipus") public ExpedientTipus populateExpedientTipus( @RequestParam(value = "expedientTipusId", required = false) Long id) { if (id != null) { return dissenyService.getExpedientTipusById(id); } return null; } @RequestMapping(value = "/expedientTipus/llistat") public String llistat( HttpServletRequest request, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { model.addAttribute("llistat", llistatExpedientTipusAmbPermisos(entorn)); model.addAttribute("command", new DeployCommand()); return "expedientTipus/llistat"; } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/delete") public String delete( HttpServletRequest request, @RequestParam(value = "id", required = true) Long id) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(id); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { try { int numExpedients = expedientService.countAmbExpedientTipusId(id); if (numExpedients == 0) { dissenyService.deleteExpedientTipus(id); missatgeInfo(request, getMessage("info.tipus.exp.esborrat") ); } else { missatgeError(request, getMessage("error.exist.exp.tipexp") ); } } catch (Exception ex) { missatgeError(request, getMessage("error.esborrar.tipus.exp"), ex.getLocalizedMessage()); logger.error("No s'ha pogut esborrar el tipus d'expedient", ex); } return "redirect:/expedientTipus/llistat.html"; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/info") public String info( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long id, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(id); if (potDissenyarExpedientTipus(entorn, expedientTipus) || potGestionarExpedientTipus(entorn, expedientTipus)) { model.addAttribute("command", new DeployCommand()); model.addAttribute( "responsableDefecte", getResponsableDefecte(expedientTipus.getResponsableDefecteCodi())); model.addAttribute( "definicioProcesInicial", dissenyService.findDarreraDefinicioProcesForExpedientTipus(id, false)); return "expedientTipus/info"; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/exportar") public String export( HttpServletRequest request, ModelMap model, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { String filename = expedientTipus.getJbpmProcessDefinitionKey(); if (filename == null) { filename = expedientTipus.getCodi(); } filename = filename + ".exp"; model.addAttribute("filename", filename); model.addAttribute("data", dissenyService.exportarExpedientTipus(expedientTipusId)); return "serialitzarView"; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/importar") public String importar( HttpServletRequest request, @RequestParam(value = "submit", required = false) String submit, @RequestParam("arxiu") final MultipartFile multipartFile, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId) { Entorn entorn = getEntornActiu(request); if (entorn != null) { try { if (multipartFile.getBytes() == null || multipartFile.getBytes().length == 0) { missatgeError(request, getMessage("error.especificar.arxiu.importar") ); if (expedientTipusId != null) { return "redirect:/expedientTipus/info.html?expedientTipusId=" + expedientTipusId; } else { return "redirect:/expedientTipus/llistat.html"; } } InputStream is = new ByteArrayInputStream(multipartFile.getBytes()); ObjectInputStream input = new ObjectInputStream(is); Object deserialitzat = input.readObject(); if (deserialitzat instanceof ExpedientTipusExportacio) { ExpedientTipusExportacio exportacio = (ExpedientTipusExportacio)deserialitzat; dissenyService.importarExpedientTipus( entorn.getId(), expedientTipusId, exportacio); missatgeInfo(request, getMessage("info.dades.importat") ); if (expedientTipusId != null) { return "redirect:/expedientTipus/info.html?expedientTipusId=" + expedientTipusId; } else { return "redirect:/expedientTipus/llistat.html"; } } else { missatgeError(request, getMessage("error.arxiu.no.valid") ); } } catch (IOException ex) { logger.error("Error llegint l'arxiu a importar", ex); missatgeError(request, getMessage("error.arxiu.importar") ); } catch (ClassNotFoundException ex) { logger.error("Error llegint l'arxiu a importar", ex); missatgeError(request, getMessage("error.arxiu.importar") ); } catch (Exception ex) { missatgeError(request, getMessage("error.import.dades") + ex.getMessage()); } if (expedientTipusId != null) { return "redirect:/expedientTipus/info.html?expedientTipusId=" + expedientTipusId; } else { return "redirect:/expedientTipus/llistat.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/definicioProcesLlistat") public String definicioProcesLlistat( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long id, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(id); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { model.addAttribute( "llistat", dissenyService.findDarreresAmbExpedientTipusEntorn(entorn.getId(), id, true)); return "expedientTipus/definicioProcesLlistat"; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/definicioProcesInicial") public String definicioProcesInicial( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long id, @RequestParam(value = "jbpmKey", required = true) String jbpmKey, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(id); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { try { dissenyService.setDefinicioProcesInicialPerExpedientTipus(id, jbpmKey); missatgeInfo(request, getMessage("info.defproc.marcat.inicial", new Object[] {jbpmKey} ) ); } catch (Exception ex) { missatgeError(request, getMessage("error.configurar.defproc.inicial"), ex.getLocalizedMessage()); logger.error("No s'ha pogut configurar la definició de procés inicial", ex); } return "redirect:/expedientTipus/definicioProcesLlistat.html?expedientTipusId=" + id; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/definicioProcesEsborrar") public String definicioProcesEsborrar( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long id, @RequestParam(value = "definicioProcesId", required = true) Long definicioProcesId, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(id); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { DefinicioProcesDto definicioProces = dissenyService.getByIdAmbComprovacio(entorn.getId(), definicioProcesId); if (potDissenyarDefinicioProces(entorn, definicioProces)) { try { List<ExpedientDto> expedients = expedientService.findAmbDefinicioProcesId(definicioProcesId); if (expedients.size() == 0) { dissenyService.undeploy(entorn.getId(), null, definicioProcesId); missatgeInfo(request, getMessage("info.defproc.esborrat") ); } else { missatgeError(request, getMessage("error.exist.exp.defproc") ); } } catch (Exception ex) { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); logger.error("No s'ha pogut esborrar la definició de procés", ex); return "redirect:/definicioProces/info.html?definicioProcesId=" + definicioProcesId; } return "redirect:/expedientTipus/definicioProcesLlistat.html?expedientTipusId=" + id; } else { missatgeError(request, getMessage("error.permisos.disseny.defproc")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } // CODI DE LA FUNCIONALITAT DE BORRAT DE DEFINICIONS DE PROCÉS -- Inici @RequestMapping(value = "/expedientTipus/netejar_df", method = RequestMethod.GET) public String netejar_df( HttpServletRequest request, @RequestParam(value = "id", required = true) Long id, ModelMap model) { model.addAttribute("expedientTipusId", id); model.addAttribute("llistat", dissenyService.findDefinicionsProcesNoUtilitzadesExpedientTipus(id)); return "/expedientTipus/llistatDpNoUs"; } @RequestMapping(value = "/expedientTipus/netejar_df", method = RequestMethod.POST) public String netejar_df( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "dpId", required = false) Long[] dpId, ModelMap model) { Entorn entorn = getEntornActiu(request); // ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); List<Long> dfBorrar = new ArrayList<Long>(); for (Long definicioProcesId : dpId) { DefinicioProcesDto definicioProces = dissenyService.getByIdAmbComprovacio(entorn.getId(), definicioProcesId); try { List<Consulta> consultes = dissenyService.findConsultesAmbEntorn(entorn.getId()); boolean esborrar = true; if (consultes.isEmpty()) { if (!dfBorrar.contains(definicioProcesId)) { dfBorrar.add(definicioProcesId); } } else { for(Consulta consulta: consultes){ Set<ConsultaCamp> llistat = consulta.getCamps(); for(ConsultaCamp c: llistat){ if((definicioProces.getVersio() == c.getDefprocVersio()) && (definicioProces.getJbpmKey().equals(c.getDefprocJbpmKey()))){ esborrar = false; } } if(!esborrar){ missatgeError(request, getMessage("error.exist.cons.df", new Object[]{consulta.getNom(), definicioProces.getJbpmName(), definicioProces.getVersio()}) ); } else { if (!dfBorrar.contains(definicioProcesId)) { dfBorrar.add(definicioProcesId); } } } } if (dfBorrar.contains(definicioProcesId)) { try { dissenyService.undeploy(entorn.getId(), expedientTipusId, definicioProcesId); missatgeInfo(request, getMessage("info.defproc.esborrada", new Object[]{definicioProces.getJbpmName(), definicioProces.getVersio()}) ); } catch (Exception ex) { if (ex instanceof DataIntegrityViolationException || ex.getCause() instanceof DataIntegrityViolationException || (ex.getCause() != null && ex.getCause().getCause() instanceof DataIntegrityViolationException) || ex instanceof ConstraintViolationException || ex.getCause() instanceof ConstraintViolationException || (ex.getCause() != null && ex.getCause().getCause() instanceof ConstraintViolationException)) { String msg = (ex instanceof DataIntegrityViolationException || ex instanceof ConstraintViolationException) ? getErrorMsg(ex) : (ex.getCause() instanceof DataIntegrityViolationException || ex.getCause() instanceof ConstraintViolationException) ? getErrorMsg(ex.getCause()) : getErrorMsg(ex.getCause().getCause()); if (msg.contains("HELIUM.FK_TASKINST_TASK")) msg = getMessage("error.defpro.eliminar.constraint.taskinstance"); if (msg.contains("HELIUM.FK_JOB_ACTION")) msg = getMessage("error.defpro.eliminar.constraint.job"); if (msg.contains("HELIUM.FK_LOG_")) msg = getMessage("error.defpro.eliminar.constraint.log"); Long processInstanceId = Long.parseLong(definicioProces.getJbpmId()); if (GraphSession.errorsDelete.containsKey(processInstanceId)){ msg += "<div><div class=\"expafectats\">" + getMessage("info.defproc.esborrar.afectats") + "</div>"; for (ProcessInstanceExpedient expedient: GraphSession.errorsDelete.get(processInstanceId)) { msg += "<div class=\"expborrarlog\"><span>" + (expedient.getIdentificador().equals("[null] null") ? expedient.getNumeroDefault() : expedient.getIdentificador()) + "</span><button class=\"bexpborrarlog\" data-id=\"" + expedient.getId() + "\">Borrar logs</button></div>"; } msg += "<hr/><div class=\"expborrartotslogs\"><button class=\"bexpborrartotslogs\">" + getMessage("info.defproc.esborrar.afectats.programar") + "</button></div></div>"; GraphSession.errorsDelete.remove(processInstanceId); } missatgeError(request, getMessage("error.defpro.eliminar.constraint", new Object[] {definicioProces.getJbpmName(), definicioProces.getVersio()}), msg); } else { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); } logger.error("No s'han pogut esborrar les definicions de procés", ex); } } } catch (Exception ex) { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); logger.error("No s'han pogut esborrar les definicions de procés", ex); } } model.addAttribute("expedientTipusId", expedientTipusId); model.addAttribute("llistat", dissenyService.findDefinicionsProcesNoUtilitzadesExpedientTipus(expedientTipusId)); return "/expedientTipus/llistatDpNoUs"; } private String getErrorMsg(Throwable ex) { StringWriter errors = new StringWriter(); ex.printStackTrace(new PrintWriter(errors)); String errorFull = errors.toString(); errorFull = errorFull.replace("'", "’").replace("\"", "“").replace("\n", "<br>").replace("\t", "    "); errorFull = StringEscapeUtils.escapeJavaScript(errorFull); return errorFull; } @RequestMapping(value = "/expedientTipus/afectats_df", method = RequestMethod.GET) public String afectats_df( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "definicioProcesId", required = true) Long definicioProcesId, ModelMap model) { model.addAttribute("expedientTipusId", expedientTipusId); model.addAttribute("definicioProcesId", definicioProcesId); DefinicioProcesDto definicioProces = dissenyService.getById(definicioProcesId, false); model.addAttribute("definicioProces", definicioProces); model.addAttribute("llistat", dissenyService.findExpedientsAfectatsPerDefinicionsProcesNoUtilitzada(expedientTipusId, Long.parseLong(definicioProces.getJbpmId()))); return "/expedientTipus/llistatExpedientsDpNoUs"; } @RequestMapping(value = "/expedientTipus/canvi_versio", method = RequestMethod.POST) public String canvi_versio( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "definicioProcesId", required = true) Long definicioProcesId, @RequestParam(value = "novaDefinicioProcesId", required = true) Long novaDefinicioProcesId, @RequestParam(value = "expedientId", required = false) String[] expedients, ModelMap model) { if (expedients == null || expedients.length == 0) { missatgeError(request, getMessage("error.no.exp.selec")); } else { try { DefinicioProcesDto definicioProces = dissenyService.getById(novaDefinicioProcesId, false); List<String> processInstanceIds = new ArrayList<String>(); for (String expedient: expedients) { String processInstanceId = expedient.substring(expedient.indexOf("-") + 1, expedient.length()); processInstanceIds.add(processInstanceId); } ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(new Date()); dto.setEnviarCorreu(false); dto.setProcInstIds(processInstanceIds); // dto.setExpedientTipusId(expedientTipusId); dto.setTipus(ExecucioMassivaTipus.ACTUALITZAR_VERSIO_DEFPROC); dto.setParam1(definicioProces.getJbpmKey()); dto.setParam2(execucioMassivaService.serialize(Integer.valueOf(definicioProces.getVersio()))); // Object[] params = new Object[3]; // params[0] = novaDefinicioProcesId; // params[1] = null; // dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); missatgeInfo(request, getMessage("info.canvi.versio.massiu", new Object[] {expedients.length})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } return "redirect:/expedientTipus/afectats_df.html?expedientTipusId=" + expedientTipusId + "&definicioProcesId=" + definicioProcesId; } @RequestMapping(value = "/expedientTipus/borrar_logs", method = RequestMethod.POST) public String borrar_logs( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "definicioProcesId", required = true) Long definicioProcesId, @RequestParam(value = "expedientId", required = false) String[] expedients, ModelMap model) { if (expedients == null || expedients.length == 0) { missatgeError(request, getMessage("error.no.exp.selec")); } else { List<Long> expedientIds = new ArrayList<Long>(); for (String expedient: expedients) { Long expedientId = Long.parseLong(expedient.substring(0, expedient.indexOf("-"))); expedientIds.add(expedientId); } ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(new Date()); dto.setEnviarCorreu(false); dto.setExpedientIds(expedientIds); dto.setExpedientTipusId(expedientTipusId); dto.setTipus(ExecucioMassivaTipus.BUIDARLOG); try { execucioMassivaService.crearExecucioMassiva(dto); missatgeInfo(request, getMessage("info.buidarlog.massiu.executat", new Object[] {expedients.length})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } return "redirect:/expedientTipus/afectats_df.html?expedientTipusId=" + expedientTipusId + "&definicioProcesId=" + definicioProcesId; } @RequestMapping(value = "/expedientTipus/borra_logsexps", method = RequestMethod.POST) @ResponseBody public String borra_logsExps( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "expedientsId", required = false) String expedients, ModelMap model) throws Exception { String response = "{\"resultat\":\""; if (expedients == null || expedients.isEmpty()) { response += getMessage("error.no.exp.selec"); } else { List<Long> expedientIds = new ArrayList<Long>(); expedients = expedients.substring(1, expedients.length() - 1); String[] expedientsId = expedients.split(","); for (String expedient: expedientsId) { Long expedientId = Long.parseLong(expedient); expedientIds.add(expedientId); } ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(new Date()); dto.setEnviarCorreu(false); dto.setExpedientIds(expedientIds); dto.setExpedientTipusId(expedientTipusId); dto.setTipus(ExecucioMassivaTipus.BUIDARLOG); try { execucioMassivaService.crearExecucioMassiva(dto); response += getMessage("info.defproc.esborrar.massiu.executat", new Object[] {expedientIds.size()}); } catch (Exception e) { logger.error("Error al programar les accions massives", e); response += getMessage("error.no.massiu"); } } response += "\"}"; return response; } @RequestMapping(value = "/expedientTipus/borra_logsexp", method = RequestMethod.POST) @ResponseBody public String borra_logsExp( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "expedientId", required = true) String expedient, ModelMap model) throws Exception { String response = "{\"resultat\":\""; if (expedient == null || expedient.isEmpty()) { response += getMessage("error.no.exp.selec"); } else { List<Long> expedientIds = new ArrayList<Long>(); expedientIds.add(Long.parseLong(expedient)); ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(new Date()); dto.setEnviarCorreu(false); dto.setExpedientIds(expedientIds); dto.setExpedientTipusId(expedientTipusId); dto.setTipus(ExecucioMassivaTipus.BUIDARLOG); try { execucioMassivaService.crearExecucioMassiva(dto); response += getMessage("info.defproc.esborrar.massiu.expedient.executat"); } catch (Exception e) { logger.error("Error al programar les accions massives", e); response += getMessage("error.no.massiu"); } } response += "\"}"; return response; } // @RequestMapping(value = "/expedientTipus/borra_logsexp", method = RequestMethod.POST) // @ResponseBody // public String borra_logsExp( // HttpServletRequest request, // @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, // @RequestParam(value = "expedientId", required = true) String expedient, // ModelMap model) throws Exception { // String response = "{\"resultat\":"; // if (expedient == null || expedient.isEmpty()) { // response += "\"" + getMessage("error.no.exp.selec") + "\""; // } else { // try { // expedientService.buidarLogByExpedientId(Long.parseLong(expedient)); // response += "\"" + getMessage("info.defproc.esborrar.log.executat") + "\""; // } catch (Exception e) { // logger.error("Error al programar les accions massives", e); // response += "\"" + getMessage("error.buidarlog.expedient") + "\""; // } // } // response += "}"; // return response; // } // @RequestMapping(value = "/expedientTipus/borra_logsexps", method = RequestMethod.POST) // @ResponseBody // public String borra_logsExps( // HttpServletRequest request, // @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, // @RequestParam(value = "expedientsId", required = true) String expedients, // ModelMap model) throws Exception { // String response = "{\"resultats\":["; // if (expedients == null || expedients.isEmpty()) { // response += "\"" + getMessage("error.no.exp.selec") + "\""; // } else { // expedients = expedients.substring(1, expedients.length() - 1); // String[] expedientsId = expedients.split(","); // for (String expedient: expedientsId) { // response += "{\"id\":\"" + expedient + "\", \"resultat\":\""; // try { // expedientService.buidarLogByExpedientId(Long.parseLong(expedient.trim())); // response += getMessage("info.buidarlog.executat"); // } catch (Exception e) { // logger.error("Error al programar les accions massives", e); // response += getMessage("error.buidarlog.expedient"); // } // response += "\"}"; // } // } // response += "]}"; // return response; // } // CODI DE LA FUNCIONALITAT DE BORRAT DE DEFINICIONS DE PROCÉS -- Fi @Autowired public ReassignacioService getReassignacioService() { return reassignacioService; } @Autowired public void setReassignacioService(ReassignacioService reassignacioService) { this.reassignacioService = reassignacioService; } @Autowired public void setExecucioMassivaService(ExecucioMassivaService execucioMassivaService) { this.execucioMassivaService = execucioMassivaService; } @RequestMapping(value = "/expedientTipus/modificar", method = RequestMethod.GET) public String formGet( HttpServletRequest request, @RequestParam(value = "id", required = false) Long id, @ModelAttribute("command") ReassignacioCommand command, BindingResult result, SessionStatus status, ModelMap model) { List<Reassignacio> reassignacions = reassignacioService.llistaReassignacionsMod(id); Long id2 = reassignacions.get(0).getTipusExpedientId(); model.addAttribute("llistat", reassignacions); return "redirect:/expedientTipus/redireccioLlistat.html?expedientTipusId="+id2; } @RequestMapping(value = "/expedientTipus/redireccioLlistat", method = RequestMethod.GET) public String reassignarGet( HttpServletRequest request, @RequestParam(value = "submit", required = false) String submit, @RequestParam(value = "expedientTipusId", required = false) Long expedientTipusId, @RequestParam(value = "id", required = false) String id, @ModelAttribute("command") ReassignacioCommand command, ModelMap model) { if("cancel".equals(submit)){ return "expedientTipus/redireccioLlistat"; } Set<PersonaDto> destinataris = personaService.findPersonesAmbPermisosPerExpedientTipus(expedientTipusId.longValue()); model.addAttribute( "destinataris", destinataris); List<Reassignacio> reassignacions = reassignacioService.llistaReassignacions(expedientTipusId); model.addAttribute("llistat", reassignacions); return "expedientTipus/redireccioLlistat"; } @RequestMapping(value = "/expedientTipus/redireccioLlistat", method = RequestMethod.POST) public String formPost( HttpServletRequest request, @RequestParam(value = "submit", required = false) String submit, @RequestParam(value = "expedientTipusId", required = false) Long id, @ModelAttribute("command") ReassignacioCommand command, BindingResult result, SessionStatus status) { if(id!=null){ ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(id); command.setTipusExpedientId(expedientTipus.getId()); } if ("submit".equals(submit) || submit.length() == 0) { // additionalValidator.validate(command, result); // if (result.hasErrors()) { // return "expedientTipus/redireccioLlistat"; // } Set<PersonaDto> destinataris = personaService.findPersonesAmbPermisosPerExpedientTipus(id); request.setAttribute( "destinataris", destinataris); try { if (command.getId() == null) { reassignacioService.createReassignacio( command.getUsuariOrigen(), command.getUsuariDesti(), command.getDataInici(), command.getDataFi(), command.getDataCancelacio(), command.getTipusExpedientId()); } else { reassignacioService.updateReassignacio( command.getId(), command.getUsuariOrigen(), command.getUsuariDesti(), command.getDataInici(), command.getDataFi(), command.getDataCancelacio(), command.getTipusExpedientId()); } missatgeInfo(request, getMessage("info.reassignacio.produit") ); status.setComplete(); } catch (Exception ex) { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); logger.error("No s'ha pogut guardar el registre", ex); return "expedientTipus/redireccioLlistat"; } return "redirect:/expedientTipus/redireccioLlistat.html?expedientTipusId="+command.getTipusExpedientId(); }else if("cancel".equals(submit)){ return "redirect:/expedientTipus/llistat.html"; } else { return "redirect:/expedientTipus/redireccioLlistat.html?expedientTipusId="+command.getTipusExpedientId(); } } @RequestMapping(value = "/expedientTipus/cancelar") public String deleteAction( HttpServletRequest request, @RequestParam(value = "id", required = true) Long id, @RequestParam(value = "expedientTipusId", required = false) String expedientTipusId) { reassignacioService.deleteReassignacio(id); missatgeInfo(request, getMessage("info.reassignacio.cancelat") ); return "redirect:/expedientTipus/redireccioLlistat.html?expedientTipusId="+expedientTipusId; } private PersonaDto getResponsableDefecte(String codi) { if (codi == null) return null; return pluginService.findPersonaAmbCodi(codi); } private List<ExpedientTipus> llistatExpedientTipusAmbPermisos(Entorn entorn) { List<ExpedientTipus> resposta = new ArrayList<ExpedientTipus>(); List<ExpedientTipus> llistat = dissenyService.findExpedientTipusAmbEntorn(entorn.getId()); for (ExpedientTipus expedientTipus: llistat) { if (potDissenyarExpedientTipus(entorn, expedientTipus) || potGestionarExpedientTipus(entorn, expedientTipus)) resposta.add(expedientTipus); } return resposta; } private boolean potDissenyarExpedientTipus(Entorn entorn, ExpedientTipus expedientTipus) { if (potDissenyarEntorn(entorn)) return true; return permissionService.filterAllowed( expedientTipus, ExpedientTipus.class, new Permission[] { ExtendedPermission.ADMINISTRATION, ExtendedPermission.DESIGN}) != null; } private boolean potGestionarExpedientTipus(Entorn entorn, ExpedientTipus expedientTipus) { if (potDissenyarEntorn(entorn)) return true; return permissionService.filterAllowed( expedientTipus, ExpedientTipus.class, new Permission[] { ExtendedPermission.ADMINISTRATION, ExtendedPermission.MANAGE}) != null; } private boolean potDissenyarDefinicioProces(Entorn entorn, DefinicioProcesDto definicioProces) { if (potDissenyarEntorn(entorn)) return true; if (definicioProces.getExpedientTipus() != null) { return permissionService.filterAllowed( definicioProces.getExpedientTipus(), ExpedientTipus.class, new Permission[] { ExtendedPermission.ADMINISTRATION, ExtendedPermission.DESIGN}) != null; } return false; } private boolean potDissenyarEntorn(Entorn entorn) { return permissionService.filterAllowed( entorn, Entorn.class, new Permission[] { ExtendedPermission.ADMINISTRATION, ExtendedPermission.DESIGN}) != null; } public class DeployCommand { private Long expedientTipusId; private byte[] arxiu; public Long getExpedientTipusId() { return expedientTipusId; } public void setExpedientTipusId(Long expedientTipusId) { this.expedientTipusId = expedientTipusId; } public byte[] getArxiu() { return arxiu; } public void setArxiu(byte[] arxiu) { this.arxiu = arxiu; } } @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor( Date.class, new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true)); } private static final Log logger = LogFactory.getLog(ExpedientTipusController.class); }