package net.conselldemallorca.helium.webapp.mvc; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomBooleanEditor; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.beans.propertyeditors.CustomNumberEditor; import org.springframework.security.acls.model.Permission; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; 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 org.springframework.web.multipart.support.ByteArrayMultipartFileEditor; import net.conselldemallorca.helium.core.model.dto.DefinicioProcesDto; import net.conselldemallorca.helium.core.model.dto.DocumentDto; import net.conselldemallorca.helium.core.model.dto.ExecucioMassivaDto; import net.conselldemallorca.helium.core.model.dto.ExpedientDto; import net.conselldemallorca.helium.core.model.dto.InstanciaProcesDto; import net.conselldemallorca.helium.core.model.dto.TascaDto; import net.conselldemallorca.helium.core.model.hibernate.Accio; import net.conselldemallorca.helium.core.model.hibernate.Camp; import net.conselldemallorca.helium.core.model.hibernate.Camp.TipusCamp; import net.conselldemallorca.helium.core.model.hibernate.CampTasca; import net.conselldemallorca.helium.core.model.hibernate.ConsultaCamp.TipusConsultaCamp; import net.conselldemallorca.helium.core.model.hibernate.Document; 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.Tasca; import net.conselldemallorca.helium.core.model.hibernate.Tasca.TipusTasca; import net.conselldemallorca.helium.core.model.service.DissenyService; import net.conselldemallorca.helium.core.model.service.DocumentService; 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.TascaService; import net.conselldemallorca.helium.core.security.ExtendedPermission; import net.conselldemallorca.helium.webapp.mvc.ExpedientConsultaDissenyController.ExpedientConsultaDissenyCommand; import net.conselldemallorca.helium.webapp.mvc.util.BaseController; import net.conselldemallorca.helium.webapp.mvc.util.TascaFormUtil; /** * Controlador per la tramitació massiva d'expedients * * @author Limit Tecnologies <limit@limit.es> */ @Controller public class ExpedientMassivaController extends BaseController { public static final String VARIABLE_SESSIO_IDS_MASSIUS = "consultaExpedientsIdsMassius"; public static final String VARIABLE_SESSIO_IDS_MASSIUS_TE = "consultaExpedientsIdsMassiusTE"; public static final String CLAU_SESSIO_PREFIX_INICI_MASS = "Inici_ex_massiva"; public static final String CLAU_SESSIO_PREFIX_CORREU_MASS = "Correu_ex_massiva"; private ExecucioMassivaService execucioMassivaService; private ExpedientService expedientService; private PermissionService permissionService; private DissenyService dissenyService; private TascaService tascaService; private Validator validator; private DocumentService documentService; // private OrganitzacioService organitzacioService; // // Variables para la barra de progreso // private Map<Long, List<OperacioMassivaDto>> listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(new ArrayList<OperacioMassivaDto>()); @Autowired public ExpedientMassivaController( ExecucioMassivaService execucioMassivaService, ExpedientService expedientService, PermissionService permissionService, DissenyService dissenyService, TascaService tascaService, DocumentService documentService) { this.execucioMassivaService = execucioMassivaService; this.expedientService = expedientService; this.permissionService = permissionService; this.dissenyService = dissenyService; this.tascaService = tascaService; this.documentService = documentService; this.validator = new TascaFormValidator(expedientService); } @ModelAttribute("execucioAccioCommand") public ExecucioAccioCommand populateExecucioAccioCommand() { return new ExecucioAccioCommand(); } @ModelAttribute("canviVersioProcesCommand") public CanviVersioProcesCommand populateCanviVersioProcesCommand() { return new CanviVersioProcesCommand(); } @ModelAttribute("scriptCommandMas") public ExpedientEinesScriptCommand populateScriptCommand() { return new ExpedientEinesScriptCommand(); } @ModelAttribute("aturarCommandMas") public ExpedientEinesAturarCommand populateAturarCommand() { return new ExpedientEinesAturarCommand(); } @ModelAttribute("modificarVariablesMasCommand") public ModificarVariablesCommand populateModificarVariablesCommand(){ return new ModificarVariablesCommand(); } @ModelAttribute("documentCommandForm") public DocumentExpedientCommand populateDocumentExpedientCommand(){ return new DocumentExpedientCommand(); } @ModelAttribute("reassignarCommandMas") public ExpedientEinesReassignarCommand populateReassignarCommand(){ return new ExpedientEinesReassignarCommand(); } @SuppressWarnings("rawtypes") @ModelAttribute("modificarVariableCommand") public Object populateCommand( HttpServletRequest request, @RequestParam(value = "id", required = false) String id, @RequestParam(value = "taskId", required = false) String taskId, @RequestParam(value = "var", required = false) String var) { if (var != null) { Entorn entorn = getEntornActiu(request); if (entorn != null) { Map<String, Object> campsAddicionals = new HashMap<String, Object>(); Map<String, Class> campsAddicionalsClasses = new HashMap<String, Class>(); if (id != null) { campsAddicionals.put("id", id); campsAddicionalsClasses.put("id", String.class); } if (taskId != null) { campsAddicionals.put("taskId", taskId); campsAddicionalsClasses.put("taskId", String.class); } campsAddicionals.put("var", var); campsAddicionalsClasses.put("var", String.class); Object command = TascaFormUtil.getCommandForTasca( createTascaAmbVar(request, entorn.getId(), id, taskId, var), campsAddicionals, campsAddicionalsClasses); return command; } } return null; } @ModelAttribute("documentCommandMas") public DocumentExpedientCommand populateCommand( HttpServletRequest request, @RequestParam(value = "id", required = false) String id, @RequestParam(value = "docId", required = false) Long docId, ModelMap model) { Entorn entorn = getEntornActiu(request); DocumentExpedientCommand command = new DocumentExpedientCommand(); command.setData(new Date()); if (entorn != null) { if(id!=null && docId!=null){ // DocumentExpedientCommand command = new DocumentExpedientCommand(); // command.setData(new Date()); DocumentDto dto = null; //documentService.documentInfo(docId); command.setDocId(docId); List<Long> ids = getIdsMassius(request); List<ExpedientDto> expedients = getExpedientsMassius( ids.subList(1, ids.size())); for(ExpedientDto expedient: expedients){ dto = documentService.documentPerProces( expedient.getProcessInstanceId(), docId, false); if (dto != null) { command.setCodi(dto.getDocumentCodi()); command.setNom(dto.getDocumentNom()); command.setData(dto.getDataDocument()); break; } } } return command; } return null; } //modificar documents massivament als expedients seleccionats @RequestMapping(value = "/expedient/documentModificarMas", method = RequestMethod.GET) public String documentModificarGet( HttpServletRequest request, @RequestParam(value = "submit", required = false) String submit, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "docId", required = true) Long docId, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, @RequestParam(value = "start", required = false) String start, ModelMap model) { Entorn entorn = getEntornActiu(request); Object command = model.get("documentCommandMas"); if (start != null) { setParamsMassiuSessio(request, inici, correu); } else { inici = getParamIniciMassiuSessio(request); correu = getParamCorreuMassiuSessio(request); } model.clear(); if (entorn != null) { List<Long> ids = getIdsMassius(request); List<ExpedientDto> expedients = getExpedientsMassius( ids.subList(1, ids.size())); int numExp = ids.size() - 1; // Modificar document // --------------------------------------------- if ("subdoc".equals(submit) || submit.length() == 0) { model.addAttribute("command", command); for(ExpedientDto expedient: expedients){ if (potModificarExpedient(expedient)) { DocumentDto doc = documentService.documentPerProces( expedient.getProcessInstanceId(), docId, false); if (doc != null) { model.addAttribute("document", doc); model.addAttribute( "documentDisseny", dissenyService.getDocumentById(docId)); return "expedient/documentFormMassiva"; } } else { missatgeError(request, getMessage("error.permisos.modificar.expedient")); return "/expedient/massivaInfo"; } } model.addAttribute( "documentDisseny", dissenyService.getDocumentById(docId)); return "expedient/documentFormMassiva"; // Adjuntar document // --------------------------------------------- } else if ("adjunt".equals(submit)) { ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { DocumentExpedientCommand cmd = new DocumentExpedientCommand(); cmd.setData(new Date()); model.addAttribute("command", cmd); return "expedient/documentAdjuntFormMassiva"; } else { missatgeError(request, getMessage("error.permisos.modificar.expedient")); return "/expedient/massivaInfo"; } // Esborrar document // --------------------------------------------- } else if ("delete".equals(submit)) { // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.MODIFICAR_DOCUMENT); for(ExpedientDto expedient: expedients){ DocumentDto doc = documentService.documentPerProces( expedient.getProcessInstanceId(), docId, false); if (doc != null) { dto.setParam1(doc.getDocumentNom()); break; } } Object[] params = new Object[4]; params[0] = docId; params[1] = null; params[2] = "delete"; dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); removeParamsMassiuSessio(request); missatgeInfo(request, getMessage("info.document.massiu.esborrar", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("error.permisos.modificar.expedient")); return "/expedient/massivaInfo"; } // Autogenerar document a partir de plantilla // --------------------------------------------- } else if ("generar".equals(submit)) { // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.MODIFICAR_DOCUMENT); for(ExpedientDto expedient: expedients){ DocumentDto doc = documentService.documentPerProces( expedient.getProcessInstanceId(), docId, false); if (doc != null) { dto.setParam1(doc.getDocumentNom()); break; } } Object[] params = new Object[4]; params[0] = docId; params[1] = new Date(); params[2] = "generate"; dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); removeParamsMassiuSessio(request); missatgeInfo(request, getMessage("info.document.massiu.generar", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("info.massiu.permisos.no")); } } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/documentModificarMas", method = RequestMethod.POST) public String documentModificarPost( HttpServletRequest request, @RequestParam(value = "submit", required = false) String submit, @RequestParam("contingut") final MultipartFile multipartFile, @ModelAttribute("documentCommandMas") DocumentExpedientCommand command, BindingResult result, SessionStatus status, ModelMap model) { Entorn entorn = getEntornActiu(request); String inici = getParamIniciMassiuSessio(request); String correu = getParamCorreuMassiuSessio(request); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { if ("submit".equals(submit) || submit.length() == 0) { try { new DocumentModificarValidator().validate(command, result); if (result.hasErrors()) { model.addAttribute( "document", documentService.documentInfo(command.getDocId())); return "expedient/documentFormMassiva"; } } catch(Exception ex) { Long entornId = entorn.getId(); String numeroExpedient = expedientPrimer.getIdentificador(); logger.error("ENTORNID:"+entornId+" NUMEROEXPEDIENT:"+numeroExpedient+" No s'ha pogut crear el document adjunt", ex); missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); } try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.MODIFICAR_DOCUMENT); Object[] params = new Object[4]; params[0] = command.getDocId(); // Modificar document if (multipartFile.getSize() > 0) { dto.setParam1(multipartFile.getOriginalFilename()); params[1] = command.getData(); params[2] = command.getCodi(); params[3] = command.getContingut(); // Modificar data } else { dto.setParam1(command.getCodi()); params[1] = command.getData(); params[2] = "date"; params[3] = null; } dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); removeParamsMassiuSessio(request); } catch(Exception ex) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", ex); } } else if ("adjunt".equals(submit)) { new DocumentAdjuntCrearValidator().validate(command, result); if (result.hasErrors()) return "expedient/documentAdjuntFormMassiva"; try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.MODIFICAR_DOCUMENT); Object[] params = new Object[4]; params[0] = null; params[1] = command.getData(); params[2] = command.getNom(); if (multipartFile.getSize() > 0) { dto.setParam1(multipartFile.getOriginalFilename()); params[3] = command.getContingut(); } dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); removeParamsMassiuSessio(request); } catch(Exception ex) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", ex); } } else if ("cancel".equals(submit)) { return getRedirMassius(request); } missatgeInfo(request, getMessage("info.document.massiu.guardat", new Object[] {numExp})); } else { missatgeError(request, getMessage("info.massiu.permisos.no")); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/documentGenerarMas", method = RequestMethod.GET) public String documentGenerarGet( HttpServletRequest request, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "docId", required = true) Long docId, @RequestParam(value = "inici", required = false) String inici, @RequestParam(value = "correu", required = false) String correu, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { setParamsMassiuSessio(request, inici, correu); try { //documentService.documentInfo(docId); DocumentDto doc = documentService.documentPerProces( id, docId, false); DocumentDto generat = documentService.generarDocumentPlantilla( entorn.getId(), doc.getDocumentId(), null, id, new Date(), false, false, null); if (generat != null) { model.addAttribute(ArxiuView.MODEL_ATTRIBUTE_FILENAME, generat.getArxiuNom()); model.addAttribute(ArxiuView.MODEL_ATTRIBUTE_DATA, generat.getArxiuContingut()); } return "arxiuView"; } catch (Exception ex) { missatgeError(request, getMessage("error.generar.document"), ex.getLocalizedMessage()); logger.error("Error generant el document " + docId + " per la instància de procés " + id, ex); return "redirect:/expedient/documentModificarMas.html?id=" + id + "&docId=" + docId + "&submit=subdoc"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } public class DocumentModificarValidator implements Validator { @SuppressWarnings({ "unchecked", "rawtypes" }) public boolean supports(Class clazz) { return clazz.isAssignableFrom(Object.class); } public void validate(Object command, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "data", "not.blank"); } } //executar un script massivament als expedients seleccionats @RequestMapping(value = "/expedient/scriptMas", method = RequestMethod.POST) public String script( HttpServletRequest request, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, @ModelAttribute("scriptCommandMas") ExpedientEinesScriptCommand command, BindingResult result, SessionStatus status, ModelMap model) { Entorn entorn = getEntornActiu(request); model.addAttribute("inici", inici); model.addAttribute("correu", correu); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; new ExpedientScriptValidator().validate(command, result); if (result.hasErrors()) { missatgeError(request, getMessage("error.executar.script"), result.toString()); return getRedirMassius(request); } // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potAdministrarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.EXECUTAR_SCRIPT); dto.setParam2(execucioMassivaService.serialize(command.getScript())); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); missatgeInfo(request, getMessage("info.script.massiu.executat", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("info.massiu.script.permisos.no")); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } //aturar massivament els expedients seleccionats @RequestMapping(value = "/expedient/aturarMas", method = RequestMethod.POST) public String aturar( HttpServletRequest request, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, @ModelAttribute("aturarCommandMas") ExpedientEinesAturarCommand command, BindingResult result, SessionStatus status, ModelMap model) { Entorn entorn = getEntornActiu(request); model.addAttribute("inici", inici); model.addAttribute("correu", correu); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { // Primer element de la llista: id tipus expedient missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; new ExpedientAturarValidator().validate(command, result); if (result.hasErrors()) { missatgeError(request, getMessage("error.aturar.expedient"), result.toString()); return getRedirMassius(request); } // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.ATURAR_EXPEDIENT); dto.setParam2(execucioMassivaService.serialize(command.getMotiu())); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); missatgeInfo(request, getMessage("info.expedient.massiu.aturats", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("info.massiu.permisos.no")); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/dadaModificarMas", method = RequestMethod.GET) public String dadaModificar( HttpServletRequest request, @RequestParam(value = "id", required = false) String id, @RequestParam(value = "taskId", required = false) String taskId, @RequestParam(value = "var", required = true) String var, @RequestParam(value = "inici", required = false) String inici, @RequestParam(value = "correu", required = false) String correu, @RequestParam(value = "start", required = false) String start, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { if (start != null) { setParamsMassiuSessio(request, inici, correu); } else { inici = getParamIniciMassiuSessio(request); correu = getParamCorreuMassiuSessio(request); } ExpedientDto expedient = getExpedient(entorn.getId(), id, taskId); if (potModificarExpedient(expedient)) { TascaDto tasca = createTascaAmbVar(request, entorn.getId(), id, taskId, var); Object command = model.get("modificarVariableCommand"); model.clear(); model.addAttribute("command", command); model.addAttribute("tasca", tasca); model.addAttribute("expedient", expedient); model.addAttribute("valorsPerSuggest", TascaFormUtil.getValorsPerSuggest(tasca, command)); return "/expedient/dadaFormMassiva"; } else { missatgeError(request, getMessage("error.permisos.modificar.expedient")); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/dadaModificarMas", method = RequestMethod.POST) public String dadaModificar( HttpServletRequest request, @RequestParam(value = "id", required = false) String id, @RequestParam(value = "taskId", required = false) String taskId, @RequestParam(value = "submit", required = false) String submit, @RequestParam(value = "var", required = false) String var, @RequestParam(value = "helMultipleIndex", required = false) Integer index, @RequestParam(value = "helMultipleField", required = false) String field, @ModelAttribute("modificarVariableCommand") Object command, BindingResult result, SessionStatus status, ModelMap model) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { Entorn entorn = getEntornActiu(request); if (entorn != null) { model.clear(); model.addAttribute("command", command); String inici = getParamIniciMassiuSessio(request); String correu = getParamCorreuMassiuSessio(request); List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; // List<ExpedientDto> expedients = getExpedientsMassius(ids.subList(1, ids.size())); ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { String idPI = expedientPrimer.getProcessInstanceId(); TascaDto tasca = createTascaAmbVar(request, entorn.getId(), idPI, taskId, var); List<Camp> camps = new ArrayList<Camp>(); for (CampTasca campTasca: tasca.getCamps()) camps.add(campTasca.getCamp()); // Executam la acció massiva if ("submit".equals(submit) || submit.length() == 0) { ((TascaFormValidator)validator).setTasca(tasca); validator.validate(command, result); if (result.hasErrors()) { // model.addAttribute("expedients", expedients); model.addAttribute("tasca", tasca); model.addAttribute("valorsPerSuggest", TascaFormUtil.getValorsPerSuggest(tasca, command)); missatgeError(request, getMessage("info.dada.massiu.error", new Object[] {var})); return getRedirMassius(request); } // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.MODIFICAR_VARIABLE); dto.setParam1(var); Object valors = ExpedientMassivaRegistreController.getRegistreMassiuSessio(request, id, var); if (valors == null) valors = PropertyUtils.getSimpleProperty(command, var); Object[] params = new Object[] {entorn.getId(), taskId, valors}; dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); removeParamsMassiuSessio(request); missatgeInfo(request, getMessage("info.dada.massiu.modificat", new Object[] {var, numExp})); } catch (Exception e) { ExpedientMassivaRegistreController.removeRegistreMassiuSessio(request, id, var); missatgeError(request, getMessage("info.dada.massiu.error", new Object[] {var}), e.getLocalizedMessage()); logger.error("Error al programar les accions massives", e); return getRedirMassius(request); } // Afegim elements a una variable múltiple } else if ("multipleAdd".equals(submit)) { try { if (field != null) PropertyUtils.setSimpleProperty( command, field, TascaFormUtil.addMultiple(field, command, camps)); } catch (Exception ex) { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); logger.error("No s'ha pogut afegir el camp múltiple", ex); } model.addAttribute("tasca", tasca); model.addAttribute("valorsPerSuggest", TascaFormUtil.getValorsPerSuggest(tasca, command)); return "/expedient/dadaFormMassiva"; } else if ("multipleRemove".equals(submit)) { try { if (field != null && index != null) PropertyUtils.setSimpleProperty( command, field, TascaFormUtil.deleteMultiple(field, command, camps, index)); } catch (Exception ex) { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); logger.error("No s'ha pogut modificar el camp múltiple", ex); } // model.addAttribute("expedient", expedient); model.addAttribute("tasca", tasca); model.addAttribute("valorsPerSuggest", TascaFormUtil.getValorsPerSuggest(tasca, command)); return "/expedient/dadaFormMassiva"; // Cancel·lam } else if("cancel".equals(submit)){ ExpedientMassivaRegistreController.removeRegistreMassiuSessio(request, id, var); return getRedirMassius(request); } } else { ExpedientMassivaRegistreController.removeRegistreMassiuSessio(request, id, var); missatgeError(request, getMessage("info.massiu.permisos.no")); } return getRedirMassius(request); } else { ExpedientMassivaRegistreController.removeRegistreMassiuSessio(request, id, var); missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/massivaIds", method = RequestMethod.POST) public String consultaMassiva( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "expedientId[]", required = true) Long[] expedientId, @RequestParam(value = "checked", required = true) boolean checked, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { List<Long> ids = getIdsMassius(request); // Emmagatzema els ids d'expedient seleccionats a dins una llista. // El primer element de la llista és l'id del tipus d'expedient. if (ids == null) { ids = new ArrayList<Long>(); request.getSession().setAttribute(VARIABLE_SESSIO_IDS_MASSIUS, ids); } // S'assegura que el primer element sigui l'id del tipus d'expedient if (ids.isEmpty()) { ids.add(expedientTipusId); } else if (!expedientTipusId.equals(ids.get(0))) { // Si el tipus d'expedient ha canviat reinicia la llista ids.clear(); ids.add(expedientTipusId); } for (Long eid: expedientId) { if (checked) { if (!ids.contains(eid)) ids.add(eid); } else { do {} while (ids.remove(eid)); if (ids.size() == 1) ids.clear(); } } } return "expedient/massivaInfo"; } @SuppressWarnings("unchecked") @RequestMapping(value = "/expedient/massivaIdsTE", method = RequestMethod.POST) public String consultaMassivaTE( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "expedientId[]", required = true) Long[] expedientId, @RequestParam(value = "checked", required = true) boolean checked, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { List<Long> ids = (List<Long>)request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE); // Emmagatzema els ids d'expedient seleccionats a dins una llista. // El primer element de la llista és l'id del tipus d'expedient. if (ids == null) { ids = new ArrayList<Long>(); request.getSession().setAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE, ids); } // S'assegura que el primer element sigui l'id del tipus d'expedient if (ids.isEmpty()) { ids.add(expedientTipusId); } else if (!expedientTipusId.equals(ids.get(0))) { // Si el tipus d'expedient ha canviat reinicia la llista ids.clear(); ids.add(expedientTipusId); } for (Long eid: expedientId) { if (checked) { if (!ids.contains(eid)) ids.add(eid); } else { do {} while (ids.remove(eid)); if (ids.size() == 1) ids.clear(); } } } return "expedient/massivaInfo"; } @RequestMapping(value = "/expedient/massivaInfo") public String infoMassiva( HttpServletRequest request, @RequestParam(value = "massivaInfoTots", required = false) boolean massivaInfoTots, @RequestParam(value = "expedientTipusId", required = false) Long expedientTipusId, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { List<ExpedientDto> expedients = null; if (!massivaInfoTots && expedientTipusId == null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.isEmpty() || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return "redirect:/expedient/consulta.html"; } expedients = getExpedientsMassius(ids.subList(1, ids.size())); } else { expedients = getExpedientsMassiusTots(request, expedientTipusId); if (expedients.isEmpty()) { missatgeError(request, getMessage("error.no.exp.execmasiv")); return "redirect:/expedient/consulta.html"; } if (expedients.size() >= 1000) { // no mostraremos la lista de expedientes model.addAttribute("massivaInfoTots", massivaInfoTots); } } model.addAttribute("expedients", expedients); if (!expedients.isEmpty()) { String piid = expedients.get(0).getProcessInstanceId(); getInfoMassiva(request, piid, model); } return "expedient/massivaInfo"; } else { missatgeError(request, getMessage("error.no.entorn.selec")); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/massivaInfoTE") public String infoMassivaTipusExpedient( HttpServletRequest request, @RequestParam(value = "massivaInfoTots", required = false) boolean massivaInfoTots, @RequestParam(value = "expedientTipusId", required = false) Long expedientTipusId, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { List<ExpedientDto> expedients = null; List<Long> ids = null; if (!massivaInfoTots) { ids = getIdsMassius(request); } else { ids = getIdsExpedientsMassiusTotsTe(request, expedientTipusId); } if (ids == null || ids.isEmpty() || ids.size() <= 1) { missatgeError(request, massivaInfoTots ? getMessage("error.no.exp.execmasiv") : getMessage("error.no.exp.selec")); return "redirect:/expedient/consultaDisseny.html"; } expedients = getExpedientsMassius(ids.subList(1, ids.size())); if (massivaInfoTots && expedients.size() >= 1000) { // no mostraremos la lista de expedientes model.addAttribute("massivaInfoTots", massivaInfoTots); } model.addAttribute("expedients", expedients); if (!expedients.isEmpty()) { String piid = expedients.get(0).getProcessInstanceId(); getInfoMassiva(request, piid, model); } return "/expedient/massivaInfo"; } else { missatgeError(request, getMessage("error.no.entorn.selec")); return "redirect:/index.html"; } } private void getInfoMassiva( HttpServletRequest request, String piid, ModelMap model) { // Definicions de procés per al canvi de versió DefinicioProcesDto definicioProces = dissenyService.findDefinicioProcesAmbProcessInstanceId(piid); model.addAttribute("definicioProces", definicioProces); List<DefinicioProcesDto> supProcessos = dissenyService.getSubprocessosByProces(definicioProces.getJbpmId()); model.addAttribute("subDefinicioProces", supProcessos); // Accions per a executar if (definicioProces != null) { List <Accio> accions = dissenyService.findAccionsVisiblesAmbDefinicioProces(definicioProces.getId()); // Filtra les accions sense permisos per a l'usuari actual Iterator<Accio> it = accions.iterator(); while (it.hasNext()) { Accio accio = it.next(); String rols = accio.getRols(); if (rols != null && rols.length() > 0) { boolean permesa = false; String[] llistaRols = rols.split(","); for (String rol: llistaRols) { if (request.isUserInRole(rol)) { permesa = true; break; } } if (!permesa) it.remove(); } } model.addAttribute("accions", accions); //findAccionsJbpmOrdenades(definicioProces.getId())); } // Documents InstanciaProcesDto instanciaProces = expedientService.getInstanciaProcesById( piid, false, true, true); model.addAttribute("instanciaProces", instanciaProces); // Variables List<Camp> variables = new ArrayList<Camp>(); if (instanciaProces != null) { for (Camp camp : instanciaProces.getCamps()){ if (camp.getTipus() != TipusCamp.ACCIO) { variables.add(camp); } } } Collections.sort(variables, new ComparadorCampCodi()); model.addAttribute("variables", variables); List<Document> documents = instanciaProces.getDocuments(); Collections.sort(documents, new ComparadorDocument()); model.addAttribute("documents", documents); } private String getTasquesJson(Long definicioProcesId) { List<Tasca> ts = dissenyService.findTasquesAmbDefinicioProces(definicioProcesId); Collections.sort(ts, new ComparadorTasca()); String json = "["; for (Tasca t: ts) { json += "{\"id\":\"" + t.getId() + "\", \"nom\":\"" + t.getNom() + "\"},"; } if (json.length() > 1) json = json.substring(0, json.length() - 1); json += "]"; return json; } public class ComparadorCampCodi implements Comparator<Camp> { public int compare(Camp c1, Camp c2) { return c1.getCodi().compareToIgnoreCase(c2.getCodi()); } } public class ComparadorDocument implements Comparator<Document> { public int compare(Document d1, Document d2) { return d1.getNom().compareToIgnoreCase(d2.getNom()); } } public class ComparadorTasca implements Comparator<Tasca> { public int compare(Tasca t1, Tasca t2) { return t1.getNom().compareToIgnoreCase(t2.getNom()); } } @RequestMapping(value = "/expedient/massivaCanviVersio") public String accioCanviVersio( HttpServletRequest request, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, @ModelAttribute("canviVersioProcesCommand") CanviVersioProcesCommand command, ModelMap model) { Entorn entorn = getEntornActiu(request); model.addAttribute("inici", inici); model.addAttribute("correu", correu); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return "redirect:/expedient/consulta.html"; } int numExp = ids.size() - 1; // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.ACTUALITZAR_VERSIO_DEFPROC); Object[] params = new Object[3]; params[0] = command.getDefinicioProcesId(); params[1] = command.getSubprocesId(); ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); DefinicioProcesDto definicioProces = dissenyService.findDefinicioProcesAmbProcessInstanceId(expedientPrimer.getProcessInstanceId()); List<DefinicioProcesDto> subProcessos = dissenyService.getSubprocessosByProces(definicioProces.getJbpmId()); String[] keys = new String[subProcessos.size()]; int i = 0; for (DefinicioProcesDto subproces: subProcessos) { keys[i++] = subproces.getJbpmKey(); } params[2] = keys; dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); missatgeInfo(request, getMessage("info.canvi.versio.massiu", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec")); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/massivaExecutarAccio") public String accioExecutarAccio( HttpServletRequest request, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, @ModelAttribute("execucioAccioCommand") ExecucioAccioCommand command, ModelMap model) { model.addAttribute("inici", inici); model.addAttribute("correu", correu); Entorn entorn = getEntornActiu(request); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return "redirect:/expedient/consulta.html"; } int numExp = ids.size() - 1; // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.EXECUTAR_ACCIO); Authentication auth = SecurityContextHolder.getContext().getAuthentication(); Object[] params = new Object[3]; params[0] = command.getAccioId(); params[1] = auth.getCredentials(); List<String> rols = new ArrayList<String>(); for (GrantedAuthority gauth : auth.getAuthorities()) { rols.add(gauth.getAuthority()); } params[2] = rols; dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); missatgeInfo(request, getMessage("info.accio.massiu.executat", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } // List<ExpedientDto> expedients = getExpedientsMassius( // ids.subList(1, ids.size())); // boolean error = false; // int numOk = 0; // for (ExpedientDto expedient: expedients) { // try { // expedientService.executarAccio(expedient.getProcessInstanceId(), command.getAccioId()); // numOk++; // } catch (Exception ex) { // missatgeError( // request, // getMessage("error.expedient.accio.masiva") + " " + expedient.getIdentificador(), // ex.getLocalizedMessage()); // logger.error("No s'ha pogut excutar l'acció " + command.getAccioId() + " del procés " + expedient.getProcessInstanceId(), ex); // error = true; // } // } // if (numOk > 0) { // if (!error) // missatgeInfo(request, getMessage("info.accio.executat")); // else // missatgeInfo(request, getMessage("info.accio.executat.nprimers", new Object[] {new Integer(numOk)})); // } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec")); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/reindexarMas") public String accioReindexar( HttpServletRequest request, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, ModelMap model) { model.addAttribute("inici", inici); model.addAttribute("correu", correu); Entorn entorn = getEntornActiu(request); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.REINDEXAR); execucioMassivaService.crearExecucioMassiva(dto); // // Recargamos la lista de ejecuciones masivas activas // listExecucionsMassivesActivesByUser = orderOperacioMassivaDto(execucioMassivaService.getExecucionsMassivesActivaByUser(request.getUserPrincipal().getName())); // getIdExecucionsMassivesActives(request); missatgeInfo(request, getMessage("info.reindexar.massiu.executat", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("info.massiu.permisos.no")); } /*boolean error = false; int numOk = 0; for (ExpedientDto exp: expedients) { if (potModificarExpedient(exp)) { String idPI = exp.getProcessInstanceId(); try { expedientService.luceneReindexarExpedient(idPI); numOk++; } catch (Exception ex) { missatgeError(request, getMessage("error.reindexar.expedient") + " " + exp.getIdentificador(), ex.getLocalizedMessage()); logger.error("No s'ha pogut reindexar l'expedient " + exp.getIdentificador(), ex); error = true; } } } if (numOk > 0) { if (!error) missatgeInfo(request, getMessage("info.reindexar.executat")); else missatgeInfo(request, getMessage("info.reindexar.executat.nprimers", new Object[] {new Integer(numOk)})); }*/ return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/reprendreMas") public String accioReprendreMas( HttpServletRequest request, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, ModelMap model) { model.addAttribute("inici", inici); model.addAttribute("correu", correu); Entorn entorn = getEntornActiu(request); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.REPRENDRE); execucioMassivaService.crearExecucioMassiva(dto); missatgeInfo(request, getMessage("info.accio.massiu.reprendre", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("info.massiu.permisos.no")); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/reprendreExpedientMas") public String accioReprendreExpedientMas( HttpServletRequest request, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, ModelMap model) { model.addAttribute("inici", inici); model.addAttribute("correu", correu); Entorn entorn = getEntornActiu(request); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.REPRENDRE_EXPEDIENT); execucioMassivaService.crearExecucioMassiva(dto); missatgeInfo(request, getMessage("info.accio.massiu.reprendre_expedient", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("info.massiu.permisos.no")); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedient/buidarlogMas") public String accioBuidarLog( HttpServletRequest request, @RequestParam(value = "inici", required = true) String inici, @RequestParam(value = "correu", required = true) String correu, ModelMap model) { model.addAttribute("inici", inici); model.addAttribute("correu", correu); Entorn entorn = getEntornActiu(request); if (entorn != null) { List<Long> ids = getIdsMassius(request); if (ids == null || ids.size() <= 1) { missatgeError(request, getMessage("error.no.exp.selec")); return getRedirMassius(request); } int numExp = ids.size() - 1; // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (inici != null) { try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (correu != null && correu.equals("true")) bCorreu = true; ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); if (potModificarExpedient(expedientPrimer)) { try { ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setExpedientIds(ids.subList(1, ids.size())); dto.setExpedientTipusId(ids.get(0)); dto.setTipus(ExecucioMassivaTipus.BUIDARLOG); execucioMassivaService.crearExecucioMassiva(dto); missatgeInfo(request, getMessage("info.buidarlog.massiu.executat", new Object[] {numExp})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); logger.error("Error al programar les accions massives", e); } } else { missatgeError(request, getMessage("info.massiu.permisos.no")); } return getRedirMassius(request); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } // @RequestMapping(value = "/expedient/reassignarMas") // public String accioReassignar( // HttpServletRequest request, // @RequestParam(value = "inici", required = true) String inici, // @RequestParam(value = "correu", required = true) String correu, // @ModelAttribute("reassignarCommandMas") ExpedientEinesReassignarCommand command, // BindingResult result, // ModelMap model) { // model.addAttribute("inici", inici); // model.addAttribute("correu", correu); // Entorn entorn = getEntornActiu(request); // if (entorn != null) { // List<Long> ids = getIdsMassius(request); // if (ids == null || ids.size() <= 1) { // missatgeError(request, getMessage("error.no.exp.selec")); // return getRedirMassius(request); // } // String tipus = request.getParameter("tipusExpressio"); // ExpedientReassignarValidator validator = new ExpedientReassignarValidator(); // validator.setTipus(tipus); // validator.validate(command, result); // if (result.hasErrors()) { // missatgeError(request, getMessage("error.executar.reassignacio"), result.toString()); // return getRedirMassius(request); // } // // int numExp = ids.size() - 1; // // Obtenim informació de l'execució massiva // // Data d'inici // SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); // Date dInici = new Date(); // if (inici != null) { // try { dInici = sdf.parse(inici); } catch (ParseException pe) {}; // } // // Enviar correu // Boolean bCorreu = false; // if (correu != null && correu.equals("true")) bCorreu = true; // // ExpedientDto expedientPrimer = expedientService.getById(ids.get(1)); // if (potModificarOReassignarExpedient(expedientPrimer)) { // String expression = command.getExpression(); // if ("user".equals(tipus)) { // expression = "user(" + command.getUsuari() + ")"; // } else if ("grup".equals(tipus)) { // Area grup = organitzacioService.getAreaById(command.getGrup()); // expression = "group(" + grup.getCodi() + ")"; // } // try { // ExecucioMassivaDto dto = new ExecucioMassivaDto(); // dto.setDataInici(dInici); // dto.setEnviarCorreu(bCorreu); // dto.setExpedientIds(ids.subList(1, ids.size())); // dto.setExpedientTipusId(ids.get(0)); // dto.setTipus(ExecucioMassivaTipus.REASSIGNAR); // dto.setParam1(expression); // Object[] params = new Object[] {entorn.getId(), command.getTasca()}; // dto.setParam2(execucioMassivaService.serialize(params)); // execucioMassivaService.crearExecucioMassiva(dto); // // missatgeInfo(request, getMessage("info.accio.massiu.reassignat", new Object[] {numExp})); // } catch (Exception e) { // missatgeError(request, getMessage("error.no.massiu")); // logger.error("Error al programar les accions massives", e); // } // } else { // missatgeError(request, getMessage("info.massiu.permisos.no")); // } // return getRedirMassius(request); // } else { // missatgeError(request, getMessage("error.no.entorn.selec") ); // return "redirect:/index.html"; // } // } private boolean potModificarExpedient(ExpedientDto expedient) { return permissionService.filterAllowed( expedient.getTipus(), ExpedientTipus.class, new Permission[] { ExtendedPermission.ADMINISTRATION, ExtendedPermission.WRITE}) != null; } private boolean potAdministrarExpedient(ExpedientDto expedient) { return permissionService.filterAllowed( expedient.getTipus(), ExpedientTipus.class, new Permission[] { ExtendedPermission.ADMINISTRATION}) != null; } // private boolean potModificarOReassignarExpedient(ExpedientDto expedient) { // return permissionService.filterAllowed( // expedient.getTipus(), // ExpedientTipus.class, // new Permission[] { // ExtendedPermission.ADMINISTRATION, // ExtendedPermission.WRITE, // ExtendedPermission.REASSIGNMENT}) != null; // } private class ExpedientScriptValidator implements Validator { @SuppressWarnings({ "unchecked", "rawtypes" }) public boolean supports(Class clazz) { return clazz.isAssignableFrom(ExpedientEinesScriptCommand.class); } public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "script", "not.blank"); } } // private class ExpedientReassignarValidator implements Validator { // // private String tipus; // // @SuppressWarnings({ "unchecked", "rawtypes" }) // public boolean supports(Class clazz) { // return clazz.isAssignableFrom(ExpedientEinesReassignarCommand.class); // } // public void validate(Object obj, Errors errors) { // if ("user".equals(tipus)) { // ValidationUtils.rejectIfEmpty(errors, "usuari", "not.blank"); // } else if ("grup".equals(tipus)) { // ValidationUtils.rejectIfEmpty(errors, "grup", "not.blank"); // } else if ("expr".equals(tipus)) { // ValidationUtils.rejectIfEmpty(errors, "expression", "not.blank"); // } // ValidationUtils.rejectIfEmpty(errors, "tasca", "not.blank"); // } // public void setTipus(String tipus) { // this.tipus = tipus; // } // } // private String getMissageFinalCadenaExcepcions(Throwable ex) { // if (ex.getCause() == null) { // return ex.getClass().getName() + ": " + ex.getMessage(); // } else { // return getMissageFinalCadenaExcepcions(ex.getCause()); // } // } private List<ExpedientDto> getExpedientsMassius(List<Long> ids) { List<ExpedientDto> resposta = new ArrayList<ExpedientDto>(); for (Long id: ids) { resposta.add(expedientService.getById(id)); } return resposta; } private class ExpedientAturarValidator implements Validator { @SuppressWarnings({ "unchecked", "rawtypes" }) public boolean supports(Class clazz) { return clazz.isAssignableFrom(ExpedientEinesAturarCommand.class); } public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "motiu", "not.blank"); } } public List<String> getVariablesProces( Set<Camp> camps, Map<String, Object> varsComText) { List<String> resposta = new ArrayList<String>(); for (String codi: varsComText.keySet()) { boolean trobat = false; for (Camp camp: camps) { if (camp.getCodi().equals(codi)) { resposta.add(codi); trobat = true; break; } } if (!trobat) resposta.add(codi); } return resposta; } private TascaDto createTascaAmbVar( HttpServletRequest request, Long entornId, String id, String taskId, String var) { Camp camp = null; Object valor = null; InstanciaProcesDto instanciaProces = null; TascaDto tasca = null; Object[] valorsRegistre = ExpedientMassivaRegistreController.getRegistreMassiuSessio(request, id, var); if (taskId == null) { if (valorsRegistre == null) { instanciaProces = expedientService.getInstanciaProcesById( id, false, true, false); } else { instanciaProces = expedientService.getInstanciaProcesByIdReg( id, false, true, false, var, valorsRegistre); } camp = dissenyService.findCampAmbDefinicioProcesICodi( instanciaProces.getDefinicioProces().getId(), var); valor = instanciaProces.getVariable(var); } else { tasca = tascaService.getById( entornId, taskId, null, null, true, true); if (valorsRegistre == null) { instanciaProces = expedientService.getInstanciaProcesById( tasca.getProcessInstanceId(), false, true, false); } else { instanciaProces = expedientService.getInstanciaProcesByIdReg( tasca.getProcessInstanceId(), false, true, false, var, valorsRegistre); } for (CampTasca campTasca: tasca.getCamps()) { if (campTasca.getCamp().getCodi().equals(var)) { camp = campTasca.getCamp(); break; } } valor = tasca.getVariable(var); } if (camp == null) { camp = new Camp(); camp.setTipus(TipusCamp.STRING); camp.setCodi(var); camp.setEtiqueta(var); valor = tasca.getVariable(var); } if (camp.getTipus() == TipusCamp.REGISTRE && valorsRegistre != null) valor = valorsRegistre; TascaDto tascaNova = new TascaDto(); tascaNova.setId(taskId); tascaNova.setTipus(TipusTasca.FORM); tascaNova.setProcessInstanceId(instanciaProces.getId()); List<CampTasca> camps = new ArrayList<CampTasca>(); CampTasca campTasca = new CampTasca(); campTasca.setCamp(camp); camps.add(campTasca); tascaNova.setCamps(camps); if (taskId == null) tascaNova.setDefinicioProces(instanciaProces.getDefinicioProces()); else tascaNova.setDefinicioProces(tasca.getDefinicioProces()); if (valor != null) { Map<String, Object> variables = new HashMap<String, Object>(); variables.put(camp.getCodi(), valor); tascaNova.setVariables(variables); if (taskId == null) { tascaNova.setValorsDomini(instanciaProces.getValorsDomini()); tascaNova.setValorsMultiplesDomini(instanciaProces.getValorsMultiplesDomini()); tascaNova.setVarsComText(instanciaProces.getVarsComText()); } else { tascaNova.setValorsDomini(tasca.getValorsDomini()); tascaNova.setValorsMultiplesDomini(tasca.getValorsMultiplesDomini()); tascaNova.setVarsComText(tasca.getVarsComText()); } } return tascaNova; } private ExpedientDto getExpedient(Long entornId, String id, String taskId) { if (id != null) return expedientService.findExpedientAmbProcessInstanceId(id); if (taskId != null) { TascaDto tasca = tascaService.getById( entornId, taskId, null, null, false, false); return expedientService.findExpedientAmbProcessInstanceId(tasca.getProcessInstanceId()); } return null; } @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor( byte[].class, new ByteArrayMultipartFileEditor()); binder.registerCustomEditor( Date.class, new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true)); binder.registerCustomEditor( Long.class, new CustomNumberEditor(Long.class, true)); binder.registerCustomEditor( Double.class, new CustomNumberEditor(Double.class, true)); binder.registerCustomEditor( BigDecimal.class, new CustomNumberEditor( BigDecimal.class, new DecimalFormat("#,##0.00"), true)); binder.registerCustomEditor( Boolean.class, new CustomBooleanEditor(false)); } public class DocumentAdjuntCrearValidator implements Validator { @SuppressWarnings({ "unchecked", "rawtypes" }) public boolean supports(Class clazz) { return clazz.isAssignableFrom(Object.class); } public void validate(Object command, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "nom", "not.blank"); ValidationUtils.rejectIfEmpty(errors, "data", "not.blank"); ValidationUtils.rejectIfEmpty(errors, "contingut", "not.blank"); } } // public byte[] serialize(Object obj) throws Exception{ // byte[] bytes = null; // if (obj != null) { // ByteArrayOutputStream bos = new ByteArrayOutputStream(); //// try { // ObjectOutputStream oos = new ObjectOutputStream(bos); // oos.writeObject(obj); // oos.flush(); // oos.close(); // bos.close(); // bytes = bos.toByteArray(); //// } catch (IOException ex) { //// // TODO: Handle the exception // } // return bytes; // } // public Object deserialize(byte[] bytes) { // Object obj = null; // try { // ByteArrayInputStream bis = new ByteArrayInputStream(bytes); // ObjectInputStream ois = new ObjectInputStream(bis); // obj = ois.readObject(); // } catch (IOException ex) { // // TODO: Handle the exception // } catch (ClassNotFoundException ex) { // // TODO: Handle the exception // } // return obj; // } private static final Log logger = LogFactory.getLog(ExpedientMassivaController.class); /** * Refresca la barra de progreso de las acciones masivas */ @RequestMapping(value="/expedient/refreshBarExpedientMassive", method = RequestMethod.POST) @ResponseBody public String refreshBarExpedientMassiveActVersionByTip(@RequestParam(value = "idExp", required = false) Long idExp,HttpServletRequest request,HttpServletResponse response,ModelMap model, HttpSession session) throws ServletException, IOException { Long progres = execucioMassivaService.getProgresExecucioMassivaByUser(request.getUserPrincipal().getName()); if (progres == null) return "100"; return String.valueOf(progres); } @RequestMapping(value="/expedient/refreshBarsExpedientMassive", method = RequestMethod.GET, produces={"application/json; charset=UTF-8"}) @ResponseBody public String refreshBarsExpedientMassiveAct(@RequestParam(value = "results", required = false) Integer numResults, HttpServletRequest request,HttpServletResponse response,ModelMap model, HttpSession session) throws ServletException, IOException { return execucioMassivaService.getJsonExecucionsMassivesByUser(request.getUserPrincipal().getName(), numResults); } @RequestMapping(value="/expedient/getTasques", method = RequestMethod.GET) @ResponseBody public String getTasques(@RequestParam(value = "definicioProces", required = false) Long definicioProces,HttpServletRequest request,HttpServletResponse response,ModelMap model, HttpSession session) throws ServletException, IOException { return getTasquesJson(definicioProces); } /** * Recupera la lista de Ids dependiendo si se ha venido de la pantalla "listado de expedientes" o "consulta por tipos". */ @SuppressWarnings("unchecked") private List<Long> getIdsMassius(HttpServletRequest request) { List<Long> ids = null; if (request.getParameter("targetConsulta") == null) { if (request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS) == null) { ids = (List<Long>)request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE); } else { ids = (List<Long>)request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS); } } else { if(request.getParameter("targetConsulta").contains("massivaInfoTE.html")){ ids = (List<Long>)request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE); }else{ ids = (List<Long>)request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS); } } return ids; } /** * Recupera la lista de Ids de la consulta de expedientes. */ private List<ExpedientDto> getExpedientsMassiusTots(HttpServletRequest request, Long expedientTipusId) { ExpedientConsultaGeneralCommand command; if (expedientTipusId == null) { command = (ExpedientConsultaGeneralCommand) request.getSession().getAttribute(ExpedientConsultaController.VARIABLE_SESSIO_COMMAND); } else { command = new ExpedientConsultaGeneralCommand(); ExpedientTipus expedientTipus = new ExpedientTipus(); expedientTipus.setId(expedientTipusId); command.setExpedientTipus(expedientTipus); } boolean iniciat = false; boolean finalitzat = false; Long estatId = null; if (command.getEstat() != null) { iniciat = (command.getEstat() == 0); finalitzat = (command.getEstat() == -1); estatId = (!iniciat && !finalitzat) ? command.getEstat() : null; } List<ExpedientDto> expedientsDto = expedientService.findAmbEntornConsultaGeneral( getEntornActiu(request).getId(), command.getTitol(), command.getNumero(), command.getDataInici1(), command.getDataInici2(), (command.getExpedientTipus() != null) ? command.getExpedientTipus().getId() : null, estatId, iniciat, finalitzat, command.getGeoPosX(), command.getGeoPosY(), command.getGeoReferencia(), command.isMostrarAnulats()); List<Long> ids = new ArrayList<Long>(); ids.add(0L); for (ExpedientDto expedientDto: expedientsDto) { ids.add(expedientDto.getId()); } request.getSession().setAttribute(VARIABLE_SESSIO_IDS_MASSIUS, ids); return expedientsDto; } /** * Recupera la lista de Ids del tipo de expediente seleccionado. * @param expedientTipusId */ private List<Long> getIdsExpedientsMassiusTotsTe(HttpServletRequest request, Long expedientTipusId) { List<Long> ids = new ArrayList<Long>(); if (request.getSession().getAttribute(ExpedientConsultaDissenyController.VARIABLE_SESSIO_SELCON_COMMAND) != null && request.getSession().getAttribute(ExpedientConsultaDissenyController.VARIABLE_SESSIO_SELCON_COMMAND) != null) { ExpedientConsultaDissenyCommand commandSeleccioConsulta = (ExpedientConsultaDissenyCommand) request.getSession().getAttribute(ExpedientConsultaDissenyController.VARIABLE_SESSIO_SELCON_COMMAND); Object commandFiltre = null; if (expedientTipusId == null) { commandFiltre = request.getSession().getAttribute(ExpedientConsultaDissenyController.VARIABLE_SESSIO_FILTRE_COMMAND); } List<Camp> camps = dissenyService.findCampsPerCampsConsulta( commandSeleccioConsulta.getConsultaId(), TipusConsultaCamp.FILTRE, true); Map<String, Object> valors = new HashMap<String, Object>(); if (commandFiltre != null) { valors = TascaFormUtil.getValorsFromCommand( camps, commandFiltre, true, true); } ids.add(commandSeleccioConsulta.getExpedientTipusId()); ids.addAll(expedientService.findIdsAmbEntornConsultaDisseny( getEntornActiu(request).getId(), commandSeleccioConsulta.getConsultaId(), ExpedientConsultaDissenyController.getValorsPerService(camps, valors), "dataInici", true, 0, -1)); request.getSession().setAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE, ids); } return ids; } /** * Indica a dónde debe redirigirse dependiendo si se ha venido de la pantalla "listado de expedientes" o "consulta por tipos". */ private String getRedirMassius(HttpServletRequest request) { String redir = null; if (request.getParameter("targetConsulta") == null) { if (request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS) == null) { redir = "redirect:/expedient/massivaInfoTE.html"; } else { redir = "redirect:/expedient/massivaInfo.html"; } } else { if(request.getParameter("targetConsulta").contains("massivaInfoTE.html")){ redir = "redirect:/expedient/massivaInfoTE.html"; }else{ redir = "redirect:/expedient/massivaInfo.html"; } } return redir; } /** * Refresca las barras de progreso de detalle de las acciones masivas * @throws Exception */ @RequestMapping(value = "/expedient/cancelExpedientMassiveAct", method = RequestMethod.POST) @ResponseBody public void cancelExpedientMassiveAct( @RequestParam(value = "idExp", required = false) Long idExp, HttpServletRequest request, HttpServletResponse response, ModelMap model, HttpSession session ) throws Exception { execucioMassivaService.cancelarExecucio(idExp); } public static void setParamsMassiuSessio(HttpServletRequest request, String inici, String correu) { request.getSession().setAttribute(getParamIniciMassiuSessioKey(), inici); request.getSession().setAttribute(getParamCorreuMassiuSessioKey(), correu); } public static String getParamIniciMassiuSessio(HttpServletRequest request) { return (String)request.getSession().getAttribute(getParamIniciMassiuSessioKey()); } public static String getParamCorreuMassiuSessio(HttpServletRequest request) { return (String)request.getSession().getAttribute(getParamCorreuMassiuSessioKey()); } public static void removeParamsMassiuSessio(HttpServletRequest request) { request.getSession().removeAttribute(getParamIniciMassiuSessioKey()); request.getSession().removeAttribute(getParamCorreuMassiuSessioKey()); } public static String getParamIniciMassiuSessioKey() { return CLAU_SESSIO_PREFIX_INICI_MASS; } public static String getParamCorreuMassiuSessioKey() { return CLAU_SESSIO_PREFIX_CORREU_MASS; } }