package net.conselldemallorca.helium.core.helper;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import net.conselldemallorca.helium.core.common.ExpedientCamps;
import net.conselldemallorca.helium.core.model.hibernate.Camp;
import net.conselldemallorca.helium.core.model.hibernate.Camp.TipusCamp;
import net.conselldemallorca.helium.core.model.hibernate.Consulta;
import net.conselldemallorca.helium.core.model.hibernate.ConsultaCamp;
import net.conselldemallorca.helium.core.model.hibernate.ConsultaCamp.TipusConsultaCamp;
import net.conselldemallorca.helium.core.model.hibernate.ConsultaCamp.TipusParamConsultaCamp;
import net.conselldemallorca.helium.core.model.hibernate.DefinicioProces;
import net.conselldemallorca.helium.core.model.hibernate.Expedient;
import net.conselldemallorca.helium.v3.core.api.dto.CampTipusDto;
import net.conselldemallorca.helium.v3.core.api.dto.DadaIndexadaDto;
import net.conselldemallorca.helium.v3.core.api.dto.PersonaDto;
import net.conselldemallorca.helium.v3.core.api.dto.TascaDadaDto;
import net.conselldemallorca.helium.v3.core.repository.CampRepository;
import net.conselldemallorca.helium.v3.core.repository.ConsultaCampRepository;
import net.conselldemallorca.helium.v3.core.repository.DefinicioProcesRepository;
/**
* Helper per a gestionar els consultes.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Component
public class ConsultaHelper {
@Resource
private VariableHelper variableHelper;
@Resource
private MessageHelper messageHelper;
@Resource
private CampRepository campRepository;
@Resource
private DefinicioProcesRepository definicioProcesRepository;
@Resource
private ConsultaCampRepository consultaCampRepository;
@Resource
private ConversioTipusHelper conversioTipusHelper;
@Resource
private PluginHelper pluginHelper;
/**
* Mètodes per a obtenir els camps de les consultes per tipus
*/
public List<TascaDadaDto> findCampsPerCampsConsulta(Consulta consulta, TipusConsultaCamp tipus) {
List<TascaDadaDto> resposta = new ArrayList<TascaDadaDto>();
List<ConsultaCamp> camps = null;
if (tipus != null)
camps = consultaCampRepository.findCampsConsulta(consulta.getId(), tipus);
else
camps = new ArrayList<ConsultaCamp>(consulta.getCamps());
for (ConsultaCamp camp: camps) {
TascaDadaDto tascaDadaDto = null;
DefinicioProces definicioProces = null;
Camp campRes = null;
if (camp.getCampCodi().startsWith(ExpedientCamps.EXPEDIENT_PREFIX)) {
campRes = getCampExpedient(camp.getCampCodi());
} else {
definicioProces = definicioProcesRepository.findByJbpmKeyAndVersio(
camp.getDefprocJbpmKey(),
camp.getDefprocVersio());
if (definicioProces != null) {
campRes = campRepository.findByDefinicioProcesAndCodi(
definicioProces,
camp.getCampCodi());
}
}
if (campRes != null) {
tascaDadaDto = variableHelper.getTascaDadaDtoParaConsultaDisseny(campRes,tipus);
} else {
tascaDadaDto = getTascaDadaPerCampsConsulta(camp);
}
if (definicioProces != null) {
tascaDadaDto.setDefinicioProcesKey(definicioProces.getJbpmKey());
}
resposta.add(tascaDadaDto);
}
return resposta;
}
private TascaDadaDto getTascaDadaPerCampsConsulta(ConsultaCamp camp) {
TascaDadaDto tascaDadaDto = null;
if (TipusConsultaCamp.PARAM.equals(camp.getTipus())) {
if (TipusParamConsultaCamp.SENCER.equals(camp.getParamTipus())) {
tascaDadaDto = (new TascaDadaDto(camp.getCampCodi(), CampTipusDto.INTEGER, camp.getCampCodi()));
} else if (TipusParamConsultaCamp.FLOTANT.equals(camp.getParamTipus())) {
tascaDadaDto = (new TascaDadaDto(camp.getCampCodi(), CampTipusDto.FLOAT, camp.getCampCodi()));
} else if (TipusParamConsultaCamp.DATA.equals(camp.getParamTipus())) {
tascaDadaDto = (new TascaDadaDto(camp.getCampCodi(), CampTipusDto.DATE, camp.getCampCodi()));
} else if (TipusParamConsultaCamp.BOOLEAN.equals(camp.getParamTipus())) {
tascaDadaDto = (new TascaDadaDto(camp.getCampCodi(), CampTipusDto.BOOLEAN, camp.getCampCodi()));
} else {
tascaDadaDto = (new TascaDadaDto(camp.getCampCodi(), CampTipusDto.STRING, camp.getCampCodi()));
}
} else {
String description = camp.getCampDescripcio() == null ? camp.getCampCodi() : camp.getCampDescripcio();
tascaDadaDto = (new TascaDadaDto(camp.getCampCodi(), CampTipusDto.STRING, description));
}
return tascaDadaDto;
}
private String getValueCampExpedient(Expedient expedient, String campCodi) {
String text = null;
if (ExpedientCamps.EXPEDIENT_CAMP_ID.equals(campCodi)) {
text = expedient.getId().toString();
} else if (ExpedientCamps.EXPEDIENT_CAMP_NUMERO.equals(campCodi)) {
text = expedient.getNumeroIdentificador();
} else if (ExpedientCamps.EXPEDIENT_CAMP_TITOL.equals(campCodi)) {
text = expedient.getTitol();
} else if (ExpedientCamps.EXPEDIENT_CAMP_COMENTARI.equals(campCodi)) {
text = expedient.getComentari();
} else if (ExpedientCamps.EXPEDIENT_CAMP_INICIADOR.equals(campCodi)) {
PersonaDto persona = pluginHelper.personaFindAmbCodi(expedient.getIniciadorCodi());
if (persona != null)
text = persona.getNomSencer();
else
text = expedient.getIniciadorCodi();
} else if (ExpedientCamps.EXPEDIENT_CAMP_RESPONSABLE.equals(campCodi)) {
PersonaDto persona = pluginHelper.personaFindAmbCodi(expedient.getResponsableCodi());
if (persona != null)
text = persona.getNomSencer();
else
text = expedient.getResponsableCodi();
} else if (ExpedientCamps.EXPEDIENT_CAMP_DATA_INICI.equals(campCodi)) {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm");
text = df.format(expedient.getDataInici());
} else if (ExpedientCamps.EXPEDIENT_CAMP_ESTAT_JSP.equals(campCodi)) {
if (expedient.getDataFi() != null)
text = messageHelper.getMessage("expedient.consulta.finalitzat");
else if (expedient.getEstat() != null)
text = expedient.getEstat().getNom();
else
text = messageHelper.getMessage("expedient.consulta.iniciat");
// if (expedient.getEstat() != null)
// text = expedient.getEstat().getNom();
// else if (expedient.getDataFi() != null)
// text = messageHelper.getMessage("expedient.consulta.finalitzat");
// else
// text = messageHelper.getMessage("expedient.consulta.iniciat");
}
return text;
}
private Camp getCampExpedient(String campCodi) {
Camp campExpedient = new Camp();
if (ExpedientCamps.EXPEDIENT_CAMP_ID.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.STRING);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.id"));
} else if (ExpedientCamps.EXPEDIENT_CAMP_NUMERO.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.STRING);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.numero"));
} else if (ExpedientCamps.EXPEDIENT_CAMP_TITOL.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.STRING);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.titol"));
} else if (ExpedientCamps.EXPEDIENT_CAMP_COMENTARI.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.STRING);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.comentari"));
} else if (ExpedientCamps.EXPEDIENT_CAMP_INICIADOR.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.SUGGEST);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.iniciador"));
} else if (ExpedientCamps.EXPEDIENT_CAMP_RESPONSABLE.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.SUGGEST);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.responsable"));
} else if (ExpedientCamps.EXPEDIENT_CAMP_DATA_INICI.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.DATE);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.data_ini"));
} else if (ExpedientCamps.EXPEDIENT_CAMP_ESTAT.equals(campCodi)) {
campExpedient.setCodi(campCodi);
campExpedient.setTipus(TipusCamp.SELECCIO);
campExpedient.setEtiqueta(messageHelper.getMessage("etiqueta.exp.estat"));
}
return campExpedient;
}
public void revisarDadesExpedientAmbValorsEnumeracionsODominis(
Map<String, DadaIndexadaDto> dadesExpedient,
List<Camp> campsInforme,
Expedient expedient) {
String dadaIndexadaClau = null;
for (Camp camp: campsInforme) {
if (camp != null && camp.getDefinicioProces() != null) {
dadaIndexadaClau = camp.getDefinicioProces().getJbpmKey() + "/" + camp.getCodi();
if (!dadesExpedient.containsKey(dadaIndexadaClau)) {
dadesExpedient.put(dadaIndexadaClau, new DadaIndexadaDto(camp.getCodi(), camp.getEtiqueta()));
}
DadaIndexadaDto dadaIndexada = dadesExpedient.get(dadaIndexadaClau);
if (camp.getEnumeracio() != null && camp.getDefinicioProces() != null) {
String text = variableHelper.getTextPerCamp(
camp,
dadaIndexada.getValorIndex(),
null,
expedient.getProcessInstanceId());
dadaIndexada.setValorMostrar(text);
}
} else {
if (!dadesExpedient.containsKey(camp.getCodi())) {
dadesExpedient.put(camp.getCodi(), new DadaIndexadaDto(camp.getCodi(), camp.getEtiqueta()));
}
dadesExpedient.get(camp.getCodi()).setValorMostrar(getValueCampExpedient(expedient, camp.getCodi()));
}
}
}
public List<Camp> toListCamp(List<TascaDadaDto> listTascaDadaDto) {
List<Camp> listCamp = new ArrayList<Camp>();
for (TascaDadaDto tascaDadaDto : listTascaDadaDto) {
Camp camp = campRepository.findById(tascaDadaDto.getCampId());
if (camp == null) {
camp = new Camp(
null,
tascaDadaDto.getVarCodi(),
conversioTipusHelper.convertir(tascaDadaDto.getCampTipus(), TipusCamp.class),
tascaDadaDto.getCampEtiqueta() == null ? tascaDadaDto.getVarCodi() : tascaDadaDto.getCampEtiqueta());
}
listCamp.add(camp);
}
return listCamp;
}
}