/**
*
*/
package net.conselldemallorca.helium.core.helper;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import net.conselldemallorca.helium.core.common.ExpedientIniciantDto;
import net.conselldemallorca.helium.core.helperv26.LuceneHelper;
import net.conselldemallorca.helium.core.helperv26.MesuresTemporalsHelper;
import net.conselldemallorca.helium.core.model.hibernate.Alerta;
import net.conselldemallorca.helium.core.model.hibernate.Camp;
import net.conselldemallorca.helium.core.model.hibernate.Camp.TipusCamp;
import net.conselldemallorca.helium.core.model.hibernate.DefinicioProces;
import net.conselldemallorca.helium.core.model.hibernate.Entorn;
import net.conselldemallorca.helium.core.model.hibernate.Estat;
import net.conselldemallorca.helium.core.model.hibernate.Expedient;
import net.conselldemallorca.helium.core.model.hibernate.Expedient.IniciadorTipus;
import net.conselldemallorca.helium.core.model.hibernate.ExpedientLog;
import net.conselldemallorca.helium.core.model.hibernate.ExpedientLog.ExpedientLogAccioTipus;
import net.conselldemallorca.helium.core.model.hibernate.ExpedientLog.ExpedientLogEstat;
import net.conselldemallorca.helium.core.model.hibernate.ExpedientLog.LogInfo;
import net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus;
import net.conselldemallorca.helium.core.model.hibernate.SequenciaAny;
import net.conselldemallorca.helium.core.model.hibernate.SequenciaDefaultAny;
import net.conselldemallorca.helium.core.security.ExtendedPermission;
import net.conselldemallorca.helium.core.util.ExpedientCamps;
import net.conselldemallorca.helium.core.util.GlobalProperties;
import net.conselldemallorca.helium.jbpm3.integracio.JbpmHelper;
import net.conselldemallorca.helium.jbpm3.integracio.JbpmProcessInstance;
import net.conselldemallorca.helium.jbpm3.integracio.JbpmToken;
import net.conselldemallorca.helium.v3.core.api.dto.EntornDto;
import net.conselldemallorca.helium.v3.core.api.dto.EstatDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto.IniciadorTipusDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTipusDto;
import net.conselldemallorca.helium.v3.core.api.exception.NoTrobatException;
import net.conselldemallorca.helium.v3.core.api.exception.PermisDenegatException;
import net.conselldemallorca.helium.v3.core.repository.AlertaRepository;
import net.conselldemallorca.helium.v3.core.repository.DefinicioProcesRepository;
import net.conselldemallorca.helium.v3.core.repository.EstatRepository;
import net.conselldemallorca.helium.v3.core.repository.ExpedientRepository;
import org.apache.commons.lang.StringUtils;
import org.jbpm.graph.exe.ProcessInstanceExpedient;
import org.jbpm.jpdl.el.ELException;
import org.jbpm.jpdl.el.ExpressionEvaluator;
import org.jbpm.jpdl.el.VariableResolver;
import org.jbpm.jpdl.el.impl.ExpressionEvaluatorImpl;
import org.springframework.security.acls.model.Permission;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
/**
* Helper per a gestionar els expedients.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Component
public class ExpedientHelper {
@Resource
private DefinicioProcesRepository definicioProcesRepository;
@Resource
private ExpedientRepository expedientRepository;
@Resource
private EstatRepository estatRepository;
@Resource(name = "permisosHelperV3")
private PermisosHelper permisosHelper;
@Resource
private JbpmHelper jbpmHelper;
@Resource
private ExpedientRegistreHelper expedientRegistreHelper;
@Resource
private ExpedientLoggerHelper expedientLoggerHelper;
@Resource
private PluginHelper pluginHelper;
@Resource
private LuceneHelper luceneHelper;
@Resource
private MessageHelper messageHelper;
@Resource
private ConversioTipusHelper conversioTipusHelper;
@Resource
private MesuresTemporalsHelper mesuresTemporalsHelper;
@Resource
private AlertaRepository alertaRepository;
public ExpedientDto toExpedientDto(Expedient expedient) {
ExpedientDto dto = new ExpedientDto();
dto.setId(expedient.getId());
dto.setProcessInstanceId(expedient.getProcessInstanceId());
dto.setTitol(expedient.getTitol());
dto.setNumero(expedient.getNumero());
dto.setNumeroDefault(expedient.getNumeroDefault());
dto.setComentari(expedient.getComentari());
dto.setInfoAturat(expedient.getInfoAturat());
dto.setComentariAnulat(expedient.getComentariAnulat());
dto.setAnulat(expedient.isAnulat());
dto.setDataInici(expedient.getDataInici());
dto.setIniciadorCodi(expedient.getIniciadorCodi());
dto.setIniciadorTipus(conversioTipusHelper.convertir(expedient.getIniciadorTipus(), IniciadorTipusDto.class));
dto.setResponsableCodi(expedient.getResponsableCodi());
dto.setGrupCodi(expedient.getGrupCodi());
if (expedient.getIniciadorTipus().equals(IniciadorTipus.INTERN)) {
if (expedient.getIniciadorCodi() != null)
dto.setIniciadorPersona(
pluginHelper.personaFindAmbCodi(expedient.getIniciadorCodi()));
if (expedient.getResponsableCodi() != null)
dto.setResponsablePersona(
pluginHelper.personaFindAmbCodi(expedient.getResponsableCodi()));
}
if (expedient.getIniciadorTipus().equals(IniciadorTipus.SISTRA))
dto.setBantelEntradaNum(expedient.getNumeroEntradaSistra());
dto.setTipus(conversioTipusHelper.convertir(expedient.getTipus(), ExpedientTipusDto.class));
dto.setEntorn(conversioTipusHelper.convertir(expedient.getEntorn(), EntornDto.class));
if (expedient.getEstat() != null)
dto.setEstat(conversioTipusHelper.convertir(expedient.getEstat(), EstatDto.class));
dto.setGeoPosX(expedient.getGeoPosX());
dto.setGeoPosY(expedient.getGeoPosY());
dto.setGeoReferencia(expedient.getGeoReferencia());
dto.setRegistreNumero(expedient.getRegistreNumero());
dto.setRegistreData(expedient.getRegistreData());
dto.setUnitatAdministrativa(expedient.getUnitatAdministrativa());
dto.setIdioma(expedient.getIdioma());
dto.setAutenticat(expedient.isAutenticat());
dto.setTramitadorNif(expedient.getTramitadorNif());
dto.setTramitadorNom(expedient.getTramitadorNom());
dto.setInteressatNif(expedient.getInteressatNif());
dto.setInteressatNom(expedient.getInteressatNom());
dto.setRepresentantNif(expedient.getRepresentantNif());
dto.setRepresentantNom(expedient.getRepresentantNom());
dto.setAvisosHabilitats(expedient.isAvisosHabilitats());
dto.setAvisosEmail(expedient.getAvisosEmail());
dto.setAvisosMobil(expedient.getAvisosMobil());
dto.setErrorDesc(expedient.getErrorDesc());
dto.setErrorFull(expedient.getErrorFull());
dto.setErrorsIntegracions(expedient.isErrorsIntegracions());
dto.setNotificacioTelematicaHabilitada(expedient.isNotificacioTelematicaHabilitada());
dto.setTramitExpedientIdentificador(expedient.getTramitExpedientIdentificador());
dto.setTramitExpedientClau(expedient.getTramitExpedientClau());
dto.setErrorsIntegracions(expedient.isErrorsIntegracions());
dto.setDataFi(expedient.getDataFi());
dto.setAmbRetroaccio(expedient.isAmbRetroaccio());
dto.setReindexarData(expedient.getReindexarData());
dto.setReindexarError(expedient.isReindexarError());
return dto;
}
public Expedient getExpedientComprovantPermisos(
Long id,
Permission[] permisos) {
Expedient expedient = expedientRepository.findOne(id);
if (expedient == null) {
throw new NoTrobatException(
Expedient.class,
id);
}
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
// Si no te accés a l'entorn no te accés a l'expedient
Entorn entorn = expedient.getEntorn();
if (!permisosHelper.isGrantedAny(
entorn.getId(),
Entorn.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Entorn.class,
permisos);
}
ExpedientTipus expedientTipus = expedient.getTipus();
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
return expedient;
}
public Expedient getExpedientComprovantPermisos(
Long id,
boolean comprovarPermisRead,
boolean comprovarPermisWrite,
boolean comprovarPermisDelete,
boolean comprovarPermisAdministration) {
return getExpedientComprovantPermisos(
id,
comprovarPermisRead,
comprovarPermisWrite,
comprovarPermisDelete,
false,
false,
comprovarPermisAdministration,
false);
}
public Expedient getExpedientComprovantPermisos(
Long id,
boolean comprovarPermisRead,
boolean comprovarPermisWrite,
boolean comprovarPermisDelete,
boolean comprovarPermisSupervision,
boolean comprovarPermisReassignment,
boolean comprovarPermisAdministration,
boolean comprovarPermisReassignmentOrWrite) {
Expedient expedient = expedientRepository.findOne(id);
if (expedient == null) {
throw new NoTrobatException(
Expedient.class,
id);
}
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
Entorn entorn = expedient.getEntorn();
Permission[] permisos = new Permission[] {
ExtendedPermission.READ,
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
entorn.getId(),
Entorn.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Entorn.class,
permisos);
}
ExpedientTipus expedientTipus = expedient.getTipus();
if (comprovarPermisRead) {
permisos = new Permission[] {
ExtendedPermission.READ,
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
}
if (comprovarPermisWrite) {
permisos = new Permission[] {
ExtendedPermission.WRITE,
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
}
if (comprovarPermisDelete) {
permisos = new Permission[] {
ExtendedPermission.DELETE,
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
}
if (comprovarPermisSupervision) {
permisos = new Permission[] {
ExtendedPermission.SUPERVISION,
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
}
if (comprovarPermisReassignment) {
permisos = new Permission[] {
ExtendedPermission.REASSIGNMENT,
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
}
if (comprovarPermisAdministration) {
permisos = new Permission[] {
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
}
if (comprovarPermisReassignmentOrWrite) {
permisos = new Permission[] {
ExtendedPermission.WRITE,
ExtendedPermission.REASSIGNMENT,
ExtendedPermission.ADMINISTRATION};
if (!permisosHelper.isGrantedAny(
expedientTipus.getId(),
ExpedientTipus.class,
permisos,
auth)) {
throw new PermisDenegatException(
id,
Expedient.class,
permisos);
}
}
return expedient;
}
public void update(
Expedient expedient,
String numero,
String titol,
String responsableCodi,
Date dataInici,
String comentari,
Long estatId,
Double geoPosX,
Double geoPosY,
String geoReferencia,
String grupCodi,
boolean execucioDinsHandler) {
boolean ambRetroaccio = expedient.isAmbRetroaccio();
if (!execucioDinsHandler) {
ExpedientLog elog = expedientLoggerHelper.afegirLogExpedientPerExpedient(
expedient.getId(),
ExpedientLogAccioTipus.EXPEDIENT_MODIFICAR,
null);
elog.setEstat(ExpedientLogEstat.IGNORAR);
}
// Numero
if (expedient.getTipus().getTeNumero()) {
if (!StringUtils.equals(expedient.getNumero(), numero)) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.NUMERO + "#@#" + expedient.getNumero());
expedient.setNumero(numero);
}
}
// Titol
if (expedient.getTipus().getTeTitol()) {
if (!StringUtils.equals(expedient.getTitol(), titol)) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.TITOL + "#@#" + expedient.getTitol());
expedient.setTitol(titol);
}
}
// Responsable
if (!StringUtils.equals(expedient.getResponsableCodi(), responsableCodi)) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.RESPONSABLE + "#@#" + expedient.getResponsableCodi());
expedient.setResponsableCodi(responsableCodi);
}
// Data d'inici
if (expedient.getDataInici() != dataInici) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String inici = sdf.format(dataInici);
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.INICI + "#@#" + inici);
expedient.setDataInici(dataInici);
}
// Comentari
if (!StringUtils.equals(expedient.getComentari(), comentari)) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.COMENTARI + "#@#" + expedient.getComentari());
expedient.setComentari(comentari);
}
// Estat
if (estatId != null) {
if (expedient.getEstat() == null || !expedient.getEstat().getId().equals(estatId)) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.ESTAT + "#@#" + "---");
Estat estat = estatRepository.findByExpedientTipusAndId(
expedient.getTipus(),
estatId);
if (estat == null)
throw new NoTrobatException(Estat.class, estatId);
expedient.setEstat(estat);
}
} else if (expedient.getEstat() != null) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.ESTAT + "#@#" + expedient.getEstat().getId());
expedient.setEstat(null);
}
// Geoposició
if (expedient.getGeoPosX() != geoPosX) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.GEOPOSICIOX + "#@#" + expedient.getGeoPosX());
expedient.setGeoPosX(geoPosX);
}
if (expedient.getGeoPosY() != geoPosY) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.GEOPOSICIOY + "#@#" + expedient.getGeoPosY());
expedient.setGeoPosY(geoPosY);
}
// Georeferencia
if (!StringUtils.equals(expedient.getGeoReferencia(), geoReferencia)) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.GEOREFERENCIA + "#@#" + expedient.getGeoReferencia());
expedient.setGeoReferencia(geoReferencia);
}
// Grup
if (!StringUtils.equals(expedient.getGrupCodi(), grupCodi)) {
expedientLoggerHelper.afegirProcessLogInfoExpedient(
ambRetroaccio,
expedient.getProcessInstanceId(),
LogInfo.GRUP + "#@#" + expedient.getGrupCodi());
expedient.setGrupCodi(grupCodi);
}
luceneHelper.updateExpedientCapsalera(
expedient,
isFinalitzat(expedient));
// TODO
/*String informacioNova = getInformacioExpedient(expedient);
registreDao.crearRegistreModificarExpedient(
expedient.getId(),
getUsuariPerRegistre(),
informacioVella,
informacioNova);
actualizarCacheExpedient(expedient);*/
}
public List<Expedient> findByFiltreGeneral(
Entorn entorn,
String titol,
String numero,
Date dataInici1,
Date dataInici2,
ExpedientTipus expedientTipus,
Estat estat,
boolean nomesIniciats,
boolean nomesFinalitzats) {
List<ExpedientTipus> tipusPermesos = new ArrayList<ExpedientTipus>();
tipusPermesos.add(expedientTipus);
return expedientRepository.findByFiltreGeneral(
entorn,
tipusPermesos,
expedientTipus == null,
expedientTipus,
titol == null,
titol,
numero == null,
numero,
dataInici1 == null,
dataInici1,
dataInici2 == null,
dataInici2,
nomesIniciats,
nomesFinalitzats,
estat == null,
estat,
true,
null,
true,
null,
true,
null,
false,
null,
null,
null,
null,
null,
false,
false);
}
public void aturar(
Expedient expedient,
String motiu,
String usuari) {
mesuresTemporalsHelper.mesuraIniciar(
"Aturar",
"expedient",
expedient.getTipus().getNom());
ExpedientLog expedientLog = expedientLoggerHelper.afegirLogExpedientPerExpedient(
expedient.getId(),
ExpedientLogAccioTipus.EXPEDIENT_ATURAR,
motiu);
expedientLog.setEstat(ExpedientLogEstat.IGNORAR);
List<JbpmProcessInstance> processInstancesTree = jbpmHelper.getProcessInstanceTree(
expedient.getProcessInstanceId());
String[] ids = new String[processInstancesTree.size()];
int i = 0;
for (JbpmProcessInstance pi: processInstancesTree)
ids[i++] = pi.getId();
jbpmHelper.suspendProcessInstances(ids);
expedient.setInfoAturat(motiu);
expedientRegistreHelper.crearRegistreAturarExpedient(
expedient.getId(),
(usuari != null) ? usuari : SecurityContextHolder.getContext().getAuthentication().getName(),
motiu);
mesuresTemporalsHelper.mesuraCalcular(
"Aturar",
"expedient",
expedient.getTipus().getNom());
}
public void reprendre(
Expedient expedient,
String usuari) {
mesuresTemporalsHelper.mesuraIniciar(
"Reprendre",
"expedient",
expedient.getTipus().getNom());
ExpedientLog expedientLog = expedientLoggerHelper.afegirLogExpedientPerExpedient(
expedient.getId(),
ExpedientLogAccioTipus.EXPEDIENT_REPRENDRE,
null);
expedientLog.setEstat(ExpedientLogEstat.IGNORAR);
List<JbpmProcessInstance> processInstancesTree = jbpmHelper.getProcessInstanceTree(
expedient.getProcessInstanceId());
String[] ids = new String[processInstancesTree.size()];
int i = 0;
for (JbpmProcessInstance pi: processInstancesTree)
ids[i++] = pi.getId();
jbpmHelper.resumeProcessInstances(ids);
expedient.setInfoAturat(null);
expedientRegistreHelper.crearRegistreReprendreExpedient(
expedient.getId(),
(usuari != null) ? usuari : SecurityContextHolder.getContext().getAuthentication().getName());
mesuresTemporalsHelper.mesuraCalcular(
"Reprendre",
"expedient",
expedient.getTipus().getNom());
}
public void relacioCrear(
Expedient origen,
Expedient desti) {
ExpedientLog expedientLog = expedientLoggerHelper.afegirLogExpedientPerExpedient(
origen.getId(),
ExpedientLogAccioTipus.EXPEDIENT_RELACIO_AFEGIR,
desti.getId().toString());
expedientLog.setEstat(ExpedientLogEstat.IGNORAR);
boolean existeix = false;
for (Expedient relacionat: origen.getRelacionsOrigen()) {
if (relacionat.getId().longValue() == desti.getId().longValue()) {
existeix = true;
break;
}
}
if (!existeix)
origen.addRelacioOrigen(desti);
existeix = false;
for (Expedient relacionat: desti.getRelacionsOrigen()) {
if (relacionat.getId().longValue() == origen.getId().longValue()) {
existeix = true;
break;
}
}
if (!existeix)
desti.addRelacioOrigen(origen);
}
public void tokenRetrocedir(
String tokenId,
String nodeName,
boolean cancelTasks) {
JbpmToken token = jbpmHelper.getTokenById(tokenId);
String nodeNameVell = token.getNodeName();
ProcessInstanceExpedient piexp = jbpmHelper.expedientFindByProcessInstanceId(
token.getProcessInstanceId());
jbpmHelper.tokenRedirect(
new Long(tokenId).longValue(),
nodeName,
cancelTasks,
true,
false);
expedientRegistreHelper.crearRegistreRedirigirToken(
piexp.getId(),
token.getProcessInstanceId(),
SecurityContextHolder.getContext().getAuthentication().getName(),
token.getFullName(),
nodeNameVell,
nodeName);
}
public void comprovarInstanciaProces(
Expedient expedient,
String processInstanceId) {
if (!expedient.getProcessInstanceId().equals(processInstanceId)) {
List<JbpmProcessInstance> processInstanceFills = jbpmHelper.getProcessInstanceTree(
expedient.getProcessInstanceId());
boolean trobada = false;
for (JbpmProcessInstance processInstance: processInstanceFills) {
if (expedient.getProcessInstanceId().equals(processInstance.getId())) {
trobada = true;
break;
}
}
if (!trobada) {
throw new NoTrobatException(
JbpmProcessInstance.class,
new Long(processInstanceId));
}
}
}
public Expedient findAmbEntornIId(Long entornId, Long id) {
return expedientRepository.findByEntornIdAndId(entornId, id);
}
public Expedient findExpedientByProcessInstanceId(String processInstanceId) {
Expedient expedient = null;
ProcessInstanceExpedient piexp = jbpmHelper.expedientFindByProcessInstanceId(
processInstanceId);
if (piexp != null)
expedient = expedientRepository.findOne(piexp.getId());
if (expedient == null) {
Expedient expedientIniciant = ExpedientIniciantDto.getExpedient();
if (expedientIniciant != null && expedientIniciant.getProcessInstanceId().equals(processInstanceId)) {
expedient = expedientIniciant;
} else {
throw new NoTrobatException(Expedient.class, "PID:" + processInstanceId);
}
}
return expedient;
}
public DefinicioProces findDefinicioProcesByProcessInstanceId(String processInstanceId) {
String processDefinitionId = jbpmHelper.getProcessInstance(processInstanceId).getProcessDefinitionId();
return definicioProcesRepository.findByJbpmId(processDefinitionId);
}
public boolean isFinalitzat(Expedient expedient) {
return expedient.getDataFi() != null;
}
public List<Camp> findAllCampsExpedientConsulta() {
List<Camp> resposta = new ArrayList<Camp>();
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_ID));
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_NUMERO));
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_TITOL));
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_COMENTARI));
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_INICIADOR));
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_RESPONSABLE));
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_DATA_INICI));
resposta.add(
getCampExpedient(ExpedientCamps.EXPEDIENT_CAMP_ESTAT));
return resposta;
}
public void omplirPermisosExpedientsTipus(List<ExpedientTipusDto> expedientsTipus) {
List<Long> expedientTipusIds = new ArrayList<Long>();
for (ExpedientTipusDto expedientTipus: expedientsTipus) {
expedientTipusIds.add(expedientTipus.getId());
}
permisosHelper.omplirControlPermisosSegonsUsuariActual(
expedientTipusIds,
expedientsTipus,
ExpedientTipus.class);
}
public void omplirPermisosExpedients(List<ExpedientDto> expedients) {
List<Long> expedientTipusIds = new ArrayList<Long>();
for (ExpedientDto expedient: expedients) {
expedientTipusIds.add(expedient.getTipus().getId());
}
permisosHelper.omplirControlPermisosSegonsUsuariActual(
expedientTipusIds,
expedients,
ExpedientTipus.class);
}
public void omplirPermisosExpedient(ExpedientDto expedient) {
List<ExpedientDto> expedients = new ArrayList<ExpedientDto>();
expedients.add(expedient);
omplirPermisosExpedients(expedients);
}
public void trobarAlertesExpedients(List<ExpedientDto> expedients) {
List<Long> expedientIds = new ArrayList<Long>();
for (ExpedientDto expedient: expedients) {
expedientIds.add(expedient.getId());
}
omplirNumAlertes(
expedientIds,
expedients);
}
public void trobarAlertesExpedient(ExpedientDto dto) {
Expedient expedient = this.getExpedientComprovantPermisos(
dto.getId(),
true,
false,
false,
false);
List<Alerta> alertes = alertaRepository.findByExpedientAndDataEliminacioNull(expedient);
long pendents = 0L;
if (!alertes.isEmpty()) {
dto.setAlertesTotals(new Long(alertes.size()));
dto.setAlertesPendents(0L);
for (Alerta alerta: alertes) {
if (alerta.getDataLectura() == null)
pendents ++;
}
dto.setAlertesPendents(pendents);
}
}
public String getNumeroExpedientActual(
ExpedientTipus expedientTipus,
int any,
long increment) {
long seq = expedientTipus.getSequencia();
return getNumeroExpedientExpressio(
expedientTipus,
expedientTipus.getExpressioNumero(),
seq,
increment,
any,
expedientTipus.isReiniciarCadaAny(),
false);
}
public String getNumeroExpedientDefaultActual(
ExpedientTipus expedientTipus,
int any,
long increment) {
long seq = expedientTipus.getSequenciaDefault();
return getNumeroExpedientExpressio(
expedientTipus,
getNumexpDefaultExpression(),
seq,
increment,
any,
expedientTipus.isReiniciarCadaAny(),
true);
}
private String getNumeroExpedientExpressio(
ExpedientTipus expedientTipus,
String expressio,
long seq,
long increment,
int any,
boolean reiniciarCadaAny,
boolean numeroDefault) {
if (reiniciarCadaAny) {
if (any != 0) {
if (numeroDefault) {
if (expedientTipus.getSequenciaDefaultAny().containsKey(any)) {
seq = expedientTipus.getSequenciaDefaultAny().get(any).getSequenciaDefault() + increment;
} else {
// TODO: podriem comprovar, segons el format del número per defecte si hi ha expedients ja creats de
// l'any, i d'aquesta manera assignar com a número inicial el major utilitzat + 1
SequenciaDefaultAny sda = new SequenciaDefaultAny(
expedientTipus, any, 1L);
expedientTipus.getSequenciaDefaultAny().put(any, sda);
seq = 1;
}
} else {
if (expedientTipus.getSequenciaAny().containsKey(any)) {
seq = expedientTipus.getSequenciaAny().get(any).getSequencia() + increment;
} else {
SequenciaAny sa = new SequenciaAny(expedientTipus, any, 1L);
expedientTipus.getSequenciaAny().put(any, sa);
seq = 1;
}
}
}
} else {
seq = seq + increment;
}
if (expressio != null) {
try {
final Map<String, Object> context = new HashMap<String, Object>();
context.put("entorn_cod", expedientTipus.getEntorn().getCodi());
context.put("tipexp_cod", expedientTipus.getCodi());
context.put("any", any);
context.put("seq", seq);
ExpressionEvaluator evaluator = new ExpressionEvaluatorImpl();
String resultat = (String)evaluator.evaluate(
expressio,
String.class,
new VariableResolver() {
public Object resolveVariable(String name)
throws ELException {
return context.get(name);
}
},
null);
return resultat;
} catch (Exception ex) {
return "#invalid expression#";
}
} else {
return new Long(seq).toString();
}
}
private Camp getCampExpedient(String campCodi) {
if (ExpedientCamps.EXPEDIENT_CAMP_ID.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.INTEGER);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.id"));
return campExpedient;
}
if (ExpedientCamps.EXPEDIENT_CAMP_NUMERO.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.STRING);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.numero"));
return campExpedient;
}
if (ExpedientCamps.EXPEDIENT_CAMP_TITOL.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.STRING);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.titol"));
return campExpedient;
}
if (ExpedientCamps.EXPEDIENT_CAMP_COMENTARI.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.STRING);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.comentari"));
return campExpedient;
}
if (ExpedientCamps.EXPEDIENT_CAMP_INICIADOR.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.SUGGEST);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.iniciador"));
return campExpedient;
}
if (ExpedientCamps.EXPEDIENT_CAMP_RESPONSABLE.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.SUGGEST);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.responsable"));
return campExpedient;
}
if (ExpedientCamps.EXPEDIENT_CAMP_DATA_INICI.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.DATE);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.data_ini"));
return campExpedient;
}
if (ExpedientCamps.EXPEDIENT_CAMP_ESTAT.equals(campCodi)) {
Camp campExpedient = new Camp();
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.SELECCIO);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.estat"));
return campExpedient;
}
return null;
}
private void omplirNumAlertes(List<Long> ids, List<ExpedientDto> dtos) {
List<Object[]> comptadorsAlertes = alertaRepository.findByExpedientIds(ids);
for (Object[] comptadorsAlerta: comptadorsAlertes) {
long id = (Long)comptadorsAlerta[0];
for (ExpedientDto dto: dtos) {
if (id == dto.getId()) {
dto.setAlertesTotals((Long)comptadorsAlerta[1]);
dto.setAlertesPendents((Long)comptadorsAlerta[2]);
}
}
}
}
private String getNumexpDefaultExpression() {
return GlobalProperties.getInstance().getProperty("app.numexp.expression");
}
}