package net.conselldemallorca.helium.webapp.v3.controller;
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.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
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.stereotype.Controller;
import org.springframework.ui.Model;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;
import net.conselldemallorca.helium.core.model.dto.ParellaCodiValorDto;
import net.conselldemallorca.helium.v3.core.api.dto.ArxiuDto;
import net.conselldemallorca.helium.v3.core.api.dto.CampDto;
import net.conselldemallorca.helium.v3.core.api.dto.CampTipusDto;
import net.conselldemallorca.helium.v3.core.api.dto.DefinicioProcesExpedientDto;
import net.conselldemallorca.helium.v3.core.api.dto.DocumentDto;
import net.conselldemallorca.helium.v3.core.api.dto.EntornDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExecucioMassivaDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExecucioMassivaDto.ExecucioMassivaTipusDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDadaDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto;
import net.conselldemallorca.helium.v3.core.api.dto.InstanciaProcesDto;
import net.conselldemallorca.helium.v3.core.api.dto.SeleccioOpcioDto;
import net.conselldemallorca.helium.v3.core.api.dto.TascaDadaDto;
import net.conselldemallorca.helium.v3.core.api.exception.NoTrobatException;
import net.conselldemallorca.helium.v3.core.api.service.ExecucioMassivaService;
import net.conselldemallorca.helium.v3.core.api.service.ExpedientService;
import net.conselldemallorca.helium.v3.core.api.service.TascaService;
import net.conselldemallorca.helium.webapp.mvc.ArxiuView;
import net.conselldemallorca.helium.webapp.v3.command.CanviVersioProcesCommand;
import net.conselldemallorca.helium.webapp.v3.command.DocumentExpedientCommand;
import net.conselldemallorca.helium.webapp.v3.command.ExecucioAccioCommand;
import net.conselldemallorca.helium.webapp.v3.command.ExpedientEinesAturarCommand;
import net.conselldemallorca.helium.webapp.v3.command.ExpedientEinesReassignarCommand;
import net.conselldemallorca.helium.webapp.v3.command.ExpedientEinesScriptCommand;
import net.conselldemallorca.helium.webapp.v3.command.ModificarVariablesCommand;
import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper;
import net.conselldemallorca.helium.webapp.v3.helper.ObjectTypeEditorHelper;
import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper;
import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper.SessionManager;
import net.conselldemallorca.helium.webapp.v3.helper.TascaFormHelper;
import net.conselldemallorca.helium.webapp.v3.helper.TascaFormValidatorHelper;
/**
* Controlador per iniciar un expedient
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Controller
@RequestMapping("/v3/expedient/massiva")
public class MassivaExpedientController extends BaseExpedientController {
@Autowired
private ExpedientService expedientService;
@Autowired
private TascaService tascaService;
@Autowired
private ExecucioMassivaService execucioMassivaService;
private Set<Long> guardarIdsAccionesMasivas(HttpServletRequest request, Long consultaId) {
SessionManager sessionManager = SessionHelper.getSessionManager(request);
sessionManager.removeSeleccioMassives();
Set<Long> ids = null;
if (consultaId == null) {
ids = sessionManager.getSeleccioConsultaGeneral();
} else {
ids = sessionManager.getSeleccioInforme(consultaId);
}
sessionManager.setSeleccioMassives(ids);
return ids;
}
private Set<Long> recuperarIdsAccionesMasivas(HttpServletRequest request) {
SessionManager sessionManager = SessionHelper.getSessionManager(request);
return sessionManager.getSeleccioMassives();
}
@RequestMapping(value = "/expedientsSeleccio", method = RequestMethod.GET)
public String documentGenerarGet(
HttpServletRequest request,
Model model) {
List<ExpedientDto> expedients = null;
try {
Set<Long> ids = recuperarIdsAccionesMasivas(request);
expedients = expedientService.findAmbIds(ids);
model.addAttribute("expedients", expedientService.findAmbIds(ids));
} catch (Exception e) {
expedients = new ArrayList<ExpedientDto>();
MissatgesHelper.error(request, getMessage(request, "error.no.massiu.expedients"));
logger.error("Error en recuperar la llista dels expedients seleccionats", e);
}
model.addAttribute("expedients", expedients);
return "v3/massivaInfoExpedients";
}
@RequestMapping(method = RequestMethod.GET)
public String getExpedient(
HttpServletRequest request,
@RequestParam(value = "consultaId", required = false) Long consultaId,
@RequestParam(value = "readIdsAccionesMasivas", required = false) Boolean readIdsAccionesMasivas,
Model model) {
Set<Long> ids = null;
if (readIdsAccionesMasivas != null && readIdsAccionesMasivas.equals(true))
ids = recuperarIdsAccionesMasivas(request);
else
ids = guardarIdsAccionesMasivas(request, consultaId);
if (ids == null || ids.isEmpty()) {
MissatgesHelper.error(request, getMessage(request, "error.no.exp.selec"));
return "redirect:/v3";
} if (expedientService.isDiferentsTipusExpedients(ids)) {
MissatgesHelper.error(request, getMessage(request, "error.no.exp.selec.diferenttipus"));
return "redirect:/v3";
} else {
List<Long> listIds = new ArrayList<Long>(ids);
ExpedientDto expedient = expedientService.findAmbId(listIds.get(0));
model.addAttribute("consultaId", consultaId);
model.addAttribute("numExpedients", ids.size());
model.addAttribute("inici", null);
model.addAttribute("correu", false);
model.addAttribute(new ExpedientEinesScriptCommand());
model.addAttribute(new ExecucioAccioCommand());
model.addAttribute(new CanviVersioProcesCommand());
model.addAttribute(new ExpedientEinesAturarCommand());
model.addAttribute(new ModificarVariablesCommand());
model.addAttribute(new DocumentExpedientCommand());
model.addAttribute(new ExpedientEinesReassignarCommand());
model.addAttribute("accions",expedientService.findAccionsVisibles(listIds.get(0)));
CanviVersioProcesCommand canviVersioProcesCommand = new CanviVersioProcesCommand();
DefinicioProcesExpedientDto definicioProces = dissenyService.getDefinicioProcesByTipusExpedientById(expedient.getTipus().getId());
canviVersioProcesCommand.setDefinicioProcesId(definicioProces.getId());
model.addAttribute(canviVersioProcesCommand);
model.addAttribute("definicioProces",definicioProces);
model.addAttribute("subDefinicioProces", dissenyService.getSubprocessosByProces(definicioProces.getJbpmId()));
// Documents
InstanciaProcesDto instanciaProces = expedientService.getInstanciaProcesById(expedient.getProcessInstanceId());
model.addAttribute("instanciaProces", instanciaProces);
// Variables
List<CampDto> variables = new ArrayList<CampDto>();
if (instanciaProces != null) {
for (CampDto camp : expedientService.getCampsInstanciaProcesById(expedient.getProcessInstanceId())){
if (!CampTipusDto.ACCIO.equals(camp.getTipus())) {
variables.add(camp);
}
}
}
Collections.sort(variables, new ComparadorCampCodi());
model.addAttribute("variables", variables);
List<DocumentDto> documents = expedientService.findListDocumentsPerDefinicioProces(
definicioProces.getId(),
expedient.getProcessInstanceId(),
expedient.getTipus().getNom());
Collections.sort(documents, new ComparadorDocument());
model.addAttribute("documents", documents);
//Permisos
model.addAttribute("permisAdministrador", expedient.isPermisAdministration());
return "v3/massivaInfo";
}
}
public class ComparadorCampCodi implements Comparator<CampDto> {
public int compare(CampDto c1, CampDto c2) {
return c1.getCodi().compareToIgnoreCase(c2.getCodi());
}
}
public class ComparadorDocument implements Comparator<DocumentDto> {
public int compare(DocumentDto d1, DocumentDto d2) {
return d1.getDocumentNom().compareToIgnoreCase(d2.getDocumentNom());
}
}
@RequestMapping(value="reindexarMas", method = RequestMethod.POST)
public String reindexarMasPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@RequestParam(value = "accio", required = true) String accio,
Model model) {
return massivaPost(request, inici, correu, null, accio, null, null, model, null, null);
}
@RequestMapping(value="buidarlogMas", method = RequestMethod.POST)
public String buidarlogMasPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@RequestParam(value = "accio", required = true) String accio,
Model model) {
return massivaPost(request, inici, correu, null, accio, null, null, model, null, null);
}
@RequestMapping(value="reprendreExpedientMas", method = RequestMethod.POST)
public String reprendreExpedientMasPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@RequestParam(value = "accio", required = true) String accio,
Model model) {
return massivaPost(request, inici, correu, null, accio, null, null, model, null, null);
}
@RequestMapping(value="massivaExecutarAccio", method = RequestMethod.POST)
public String execucioAccioCommandPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@ModelAttribute ExecucioAccioCommand command,
@RequestParam(value = "accio", required = true) String accio,
BindingResult result,
SessionStatus status,
Model model) {
return massivaPost(request, inici, correu, command, accio, result, status, model, null, null);
}
@RequestMapping(value="aturarMas", method = RequestMethod.POST)
public String expedientEinesAturarCommandPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@ModelAttribute ExpedientEinesAturarCommand command,
@RequestParam(value = "accio", required = true) String accio,
BindingResult result,
SessionStatus status,
Model model) {
return massivaPost(request, inici, correu, command, accio, result, status, model, null, null);
}
@RequestMapping(value="scriptMas", method = RequestMethod.POST)
public String expedientEinesScriptCommandPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@ModelAttribute ExpedientEinesScriptCommand command,
@RequestParam(value = "accio", required = true) String accio,
BindingResult result,
SessionStatus status,
Model model) {
return massivaPost(request, inici, correu, command, accio, result, status, model, null, null);
}
@RequestMapping(value="massivaCanviVersio", method = RequestMethod.POST)
public String canviVersioProcesCommandPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@ModelAttribute CanviVersioProcesCommand command,
@RequestParam(value = "accio", required = true) String accio,
BindingResult result,
SessionStatus status,
Model model) {
return massivaPost(request, inici, correu, command, accio, result, status, model, null, null);
}
public String massivaPost(
HttpServletRequest request,
String inici,
boolean correu,
Object command,
String accio,
BindingResult result,
SessionStatus status,
Model model,
String multipartName,
Long campId) {
getExpedient(request, null, true, model);
Set<Long> ids = recuperarIdsAccionesMasivas(request);
if (ids == null || ids.isEmpty()) {
MissatgesHelper.error(request, getMessage(request, "error.no.exp.selec"));
return "redirect:/v3";
}
Date dInici = new Date();
if (inici != null) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
try {
dInici = sdf.parse(inici);
} catch (ParseException e) {}
}
model.addAttribute("inici", inici);
model.addAttribute("correu", correu);
List<Long> listIds = new ArrayList<Long>(ids);
ExecucioMassivaDto dto = new ExecucioMassivaDto();
dto.setDataInici(dInici);
dto.setEnviarCorreu(correu);
dto.setExpedientIds(listIds);
dto.setExpedientTipusId(listIds.get(0));
try {
if ("reindexar".equals(accio)) {
dto.setTipus(ExecucioMassivaTipusDto.REINDEXAR);
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.reindexar.massiu.executat", new Object[] {listIds.size()}));
} else if ("buidarlog".equals(accio)) {
dto.setTipus(ExecucioMassivaTipusDto.BUIDARLOG);
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.buidarlog.massiu.executat", new Object[] {listIds.size()}));
} else if ("reprendreExpedient".equals(accio)) {
dto.setTipus(ExecucioMassivaTipusDto.REPRENDRE_EXPEDIENT);
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.accio.massiu.reprendre_expedient", new Object[] {listIds.size()}));
} else if ("executar".equals(accio)) {
new ExpedientScriptValidator().validate(command, result);
if (result.hasErrors()) {
model.addAttribute("expedientEinesScriptCommand", command);
MissatgesHelper.error(request, getMessage(request, "error.executar.script"));
} else {
dto.setTipus(ExecucioMassivaTipusDto.EXECUTAR_SCRIPT);
dto.setParam2(execucioMassivaService.serialize(((ExpedientEinesScriptCommand) command).getScript()));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.script.massiu.executat", new Object[] {listIds.size()}));
model.addAttribute("expedientEinesScriptCommand", command);
}
} else if ("aturar".equals(accio)) {
new ExpedientAturarValidator().validate(command, result);
if (result.hasErrors()) {
model.addAttribute("expedientEinesAturarCommand", command);
MissatgesHelper.error(request, getMessage(request, "error.aturar.expedient"));
} else {
dto.setTipus(ExecucioMassivaTipusDto.ATURAR_EXPEDIENT);
dto.setParam2(execucioMassivaService.serialize(((ExpedientEinesAturarCommand) command).getMotiu()));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.expedient.massiu.aturats", new Object[] {listIds.size()}));
model.addAttribute("expedientEinesAturarCommand", command);
}
} else if ("executar_accio".equals(accio)) {
dto.setTipus(ExecucioMassivaTipusDto.EXECUTAR_ACCIO);
// Authentication auth = SecurityContextHolder.getContext().getAuthentication();
Object[] params = new Object[1];
params[0] = ((ExecucioAccioCommand) 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);
MissatgesHelper.success(request, getMessage(request, "info.accio.massiu.executat", new Object[] {listIds.size()}));
model.addAttribute("execucioAccioCommand", command);
} else if ("canviar_versio".equals(accio)) {
dto.setTipus(ExecucioMassivaTipusDto.ACTUALITZAR_VERSIO_DEFPROC);
Object[] params = new Object[3];
params[0] = ((CanviVersioProcesCommand) command).getDefinicioProcesId();
params[1] = ((CanviVersioProcesCommand) command).getSubprocesId();
ExpedientDto expedient = expedientService.findAmbId(listIds.get(0));
DefinicioProcesExpedientDto definicioProces = dissenyService.getDefinicioProcesByTipusExpedientById(expedient.getTipus().getId());
List<DefinicioProcesExpedientDto> supProcessos = dissenyService.getSubprocessosByProces(definicioProces.getJbpmId());
String[] keys = new String[supProcessos.size()];
int i = 0;
for (DefinicioProcesExpedientDto subproces: supProcessos) {
keys[i++] = subproces.getJbpmKey();
}
params[2] = keys;
dto.setParam2(execucioMassivaService.serialize(params));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.canvi.versio.massiu", new Object[] {listIds.size()}));
model.addAttribute("canviVersioProcesCommand", command);
} else if ("document_esborrar".equals(accio)) {
dto.setTipus(ExecucioMassivaTipusDto.MODIFICAR_DOCUMENT);
Long docId = ((DocumentExpedientCommand) command).getDocId();
DocumentDto document = expedientService.findDocumentsPerId(docId);
dto.setParam1(document.getDocumentNom());
Object[] params = new Object[4];
params[0] = docId;
params[1] = null;
params[2] = "delete";
dto.setParam2(execucioMassivaService.serialize(params));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.document.massiu.esborrar", new Object[] {listIds.size()}));
model.addAttribute("documentExpedientCommand", command);
} else if ("document_generar".equals(accio)) {
dto.setTipus(ExecucioMassivaTipusDto.MODIFICAR_DOCUMENT);
Long docId = ((DocumentExpedientCommand) command).getDocId();
DocumentDto document = expedientService.findDocumentsPerId(docId);
dto.setParam1(document.getDocumentNom());
Object[] params = new Object[4];
params[0] = docId;
params[1] = new Date();
params[2] = "generate";
dto.setParam2(execucioMassivaService.serialize(params));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.document.massiu.generar", new Object[] {listIds.size()}));
model.addAttribute("documentExpedientCommand", command);
} else if ("document_adjuntar".equals(accio)) {
new DocumentAdjuntCrearValidator().validate(command, result);
if (result.hasErrors()) {
model.addAttribute("documentExpedientCommand", command);
return "v3/massivaInfoDocumentAdjunt";
}
dto.setTipus(ExecucioMassivaTipusDto.MODIFICAR_DOCUMENT);
Object[] params = new Object[4];
params[0] = null;
params[1] = ((DocumentExpedientCommand) command).getData();
params[2] = ((DocumentExpedientCommand) command).getNom();
if (((DocumentExpedientCommand) command).getContingut().length > 0) {
dto.setParam1(multipartName);
params[3] = ((DocumentExpedientCommand) command).getContingut();
}
dto.setParam2(execucioMassivaService.serialize(params));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.document.massiu.guardat", new Object[] {listIds.size()}));
return modalUrlTancar();
} else if ("document_modificar".equals(accio)) {
new DocumentModificarValidator().validate(command, result);
if (result.hasErrors()) {
model.addAttribute("documentExpedientCommand", command);
return "v3/massivaInfoDocumentModificar";
}
dto.setTipus(ExecucioMassivaTipusDto.MODIFICAR_DOCUMENT);
Long docId = ((DocumentExpedientCommand) command).getDocId();
Object[] params = new Object[4];
params[0] = docId;
if (((DocumentExpedientCommand) command).getContingut().length > 0) {
// Modificar document
dto.setParam1(multipartName);
params[1] = ((DocumentExpedientCommand) command).getData();
params[2] = ((DocumentExpedientCommand) command).getCodi();
params[3] = ((DocumentExpedientCommand) command).getContingut();
} else {
// Modificar data
dto.setParam1(((DocumentExpedientCommand) command).getCodi());
params[1] = ((DocumentExpedientCommand) command).getData();
params[2] = "date";
params[3] = null;
}
dto.setParam2(execucioMassivaService.serialize(params));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.document.massiu.guardat", new Object[] {listIds.size()}));
return modalUrlTancar();
} else if ("modificar_variable".equals(accio)) {
EntornDto entorn = SessionHelper.getSessionManager(request).getEntornActual();
ExpedientDto expedient = expedientService.findAmbId(listIds.get(0));
String varCodi = null;
String processInstanceId = expedient.getProcessInstanceId();
for (CampDto camp : expedientService.getCampsInstanciaProcesById(processInstanceId)){
if (!CampTipusDto.ACCIO.equals(camp.getTipus()) && campId.equals(camp.getId())) {
varCodi = camp.getCodi();
}
}
List<ExpedientDadaDto> expedientDades = expedientService.findDadesPerInstanciaProces(
expedient.getId(),
processInstanceId);
List<TascaDadaDto> tascaDades = new ArrayList<TascaDadaDto>();
for (ExpedientDadaDto expedientDada: expedientDades) {
if (expedientDada.getVarCodi().equals(varCodi)) {
tascaDades.add(
TascaFormHelper.toTascaDadaDto(expedientDada));
break;
}
}
Map<String, Object> variables = TascaFormHelper.getValorsFromCommand(
tascaDades,
command,
false);
TascaFormValidatorHelper validator = new TascaFormValidatorHelper(
expedientService,
tascaDades);
Object commandPerValidacio = TascaFormHelper.getCommandForCampsExpedient(
expedientDades,
variables);
validator.validate(commandPerValidacio, result);
if (result.hasErrors()) {
model.addAttribute("modificarVariablesCommand", command);
return "v3/massivaInfoModificarVariables";
}
dto.setTipus(ExecucioMassivaTipusDto.MODIFICAR_VARIABLE);
dto.setParam1(varCodi);
Object valors = PropertyUtils.getSimpleProperty(command, varCodi);
Object[] params = new Object[] {entorn.getId(), null, valors};
dto.setParam2(execucioMassivaService.serialize(params));
execucioMassivaService.crearExecucioMassiva(dto);
MissatgesHelper.success(request, getMessage(request, "info.dada.massiu.modificat", new Object[] {varCodi, listIds.size()}));
return modalUrlTancar();
}
} catch (Exception e) {
MissatgesHelper.error(request, getMessage(request, "error.no.massiu"));
logger.error("Error al programar les accions massives", e);
}
return "redirect:/v3/expedient/massiva?readIdsAccionesMasivas=true";
}
@ModelAttribute("modificarVariablesCommand")
public Object populateCommand(
HttpServletRequest request,
Long campId,
Model model) {
try {
Map<String, Object> campsAddicionals = new HashMap<String, Object>();
Map<String, Class<?>> campsAddicionalsClasses = new HashMap<String, Class<?>>();
Set<Long> ids = recuperarIdsAccionesMasivas(request);
List<Long> listIds = new ArrayList<Long>(ids);
ExpedientDto expedient = expedientService.findAmbId(listIds.get(0));
CampDto campo = null;
for (CampDto camp : expedientService.getCampsInstanciaProcesById(expedient.getProcessInstanceId())){
if (!CampTipusDto.ACCIO.equals(camp.getTipus()) && campId.equals(camp.getId())) {
campo = camp;
}
}
List<TascaDadaDto> listTasca = new ArrayList<TascaDadaDto>();
TascaDadaDto tascaDada = new TascaDadaDto();
tascaDada.setCampId(campo.getId());
tascaDada.setVarCodi(campo.getCodi());
tascaDada.setCampEtiqueta(campo.getEtiqueta());
tascaDada.setCampTipus(campo.getTipus());
listTasca.add(tascaDada);
model.addAttribute("campId", campId);
model.addAttribute("dada", tascaDada);
return TascaFormHelper.getCommandForCamps(
listTasca,
null,
campsAddicionals,
campsAddicionalsClasses, false);
} catch (NoTrobatException ex) {
MissatgesHelper.error(request, ex.getMessage());
logger.error("No s'han pogut encontrar la tasca: " + ex.getMessage(), ex);
} catch (Exception ignored) {}
return null;
}
@RequestMapping(value = "/{campId}/modificarVariables", method = RequestMethod.GET)
public String modificarVariablesGet(
HttpServletRequest request,
@PathVariable Long campId,
Model model) {
Object command = populateCommand(request, campId, model);
model.addAttribute("modificarVariablesCommand", command);
return "v3/massivaInfoModificarVariables";
}
@RequestMapping(value = "/documentAdjunt", method = RequestMethod.GET)
public String documentAdjuntGet(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
Model model) {
DocumentExpedientCommand command = new DocumentExpedientCommand();
command.setData(new Date());
model.addAttribute("inici", inici);
model.addAttribute("correu", correu);
model.addAttribute("documentExpedientCommand", command);
return "v3/massivaInfoDocumentAdjunt";
}
@RequestMapping(value="/documentModificarMas", method = RequestMethod.POST)
public String documentAdjuntarMasPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@ModelAttribute DocumentExpedientCommand command,
@RequestParam(value = "accio", required = true) String accio,
BindingResult result,
SessionStatus status,
Model model) {
return massivaPost(request, inici, correu, command, accio, result, status, model, request.getParameter("contingut"), null);
}
@RequestMapping(value="/{docId}/documentModificarMas", method = RequestMethod.POST)
public String documentModificarMasPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@ModelAttribute DocumentExpedientCommand command,
@RequestParam(value = "accio", required = true) String accio,
BindingResult result,
SessionStatus status,
Model model) {
return massivaPost(request, inici, correu, command, accio, result, status, model, request.getParameter("contingut"), null);
}
@RequestMapping(value = "/documentGenerarMas", method = RequestMethod.GET)
public String documentGenerarGet(
HttpServletRequest request,
@RequestParam(value = "docId", required = true) Long docId,
@RequestParam(value = "codi", required = true) String documentCodi,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
Model model) {
Set<Long> ids = recuperarIdsAccionesMasivas(request);
List<Long> listIds = new ArrayList<Long>(ids);
ExpedientDto expedient = expedientService.findAmbId(listIds.get(0));
try {
ArxiuDto generat = expedientService.generarDocumentAmbPlantillaProces(
expedient.getId(),
expedient.getProcessInstanceId(),
documentCodi);
if (generat != null) {
model.addAttribute(ArxiuView.MODEL_ATTRIBUTE_FILENAME, generat.getNom());
model.addAttribute(ArxiuView.MODEL_ATTRIBUTE_DATA, generat.getContingut());
} else {
MissatgesHelper.error(request, getMessage(request, "error.generar.document"));
logger.error("Error generant el document " + docId);
return documentModificarGet(request, docId, inici, correu, model);
}
} catch (Exception ex) {
MissatgesHelper.error(request, getMessage(request, "error.generar.document") + ": " + ex.getLocalizedMessage());
logger.error("Error generant el document " + docId, ex);
}
return "arxiuView";
}
@RequestMapping(value = "/{docId}/documentModificar", method = RequestMethod.GET)
public String documentModificarGet(
HttpServletRequest request,
@PathVariable Long docId,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
Model model) {
DocumentDto document = expedientService.findDocumentsPerId(docId);
DocumentExpedientCommand command = new DocumentExpedientCommand();
command.setDocId(docId);
command.setNom(document.getDocumentNom());
command.setCodi(document.getCodi());
command.setContingut(document.getArxiuContingut());
command.setData(new Date());
model.addAttribute("inici", inici);
model.addAttribute("correu", correu);
model.addAttribute("documentExpedientCommand", command);
model.addAttribute("document", document);
return "v3/massivaInfoDocumentModificar";
}
@RequestMapping(value="/{campId}/modificarVariablesMas", method = RequestMethod.POST)
public String modificarVariablesMasPost(
HttpServletRequest request,
@RequestParam(value = "inici", required = false) String inici,
@RequestParam(value = "correu", required = false) boolean correu,
@PathVariable Long campId,
@Valid @ModelAttribute("modificarVariablesCommand") Object command,
@RequestParam(value = "accio", required = true) String accio,
BindingResult result,
SessionStatus status,
Model model) {
return massivaPost(request, inici, correu, command, accio, result, status, model, null, campId);
}
@RequestMapping(value = "/{campId}/camp/{campId}/valorsSeleccio", method = RequestMethod.GET)
@ResponseBody
public List<SeleccioOpcioDto> valorsSeleccio(
HttpServletRequest request,
@PathVariable Long campId,
Model model) {
return tascaService.findValorsPerCampDesplegable(
null,
null,
campId,
null,
null,
null,
null,
new HashMap<String, Object>());
}
@RequestMapping(value = "/{campId}/camp/{campId}/valorsSeleccio/{valor}", method = RequestMethod.GET)
@ResponseBody
public List<SeleccioOpcioDto> valorsSeleccio(
HttpServletRequest request,
@PathVariable Long campId,
@PathVariable String valor,
Model model) {
return tascaService.findValorsPerCampDesplegable(
null,
null,
campId,
valor,
null,
null,
null,
new HashMap<String, Object>());
}
@ModelAttribute("listTerminis")
public List<ParellaCodiValorDto> valors12(HttpServletRequest request) {
List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>();
for (int i=0; i <= 12 ; i++)
resposta.add(new ParellaCodiValorDto(String.valueOf(i), i));
return resposta;
}
@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));
binder.registerCustomEditor(
Object.class,
new ObjectTypeEditorHelper());
}
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 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");
}
}
private 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");
}
}
private 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");
}
}
private static final Log logger = LogFactory.getLog(MassivaExpedientController.class);
}