package br.com.centralit.citcorpore.negocio.alcada; import java.sql.Date; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import br.com.centralit.bpm.dto.FluxoDTO; import br.com.centralit.bpm.dto.TipoFluxoDTO; import br.com.centralit.bpm.integracao.TipoFluxoDao; import br.com.centralit.citcorpore.bean.AlcadaProcessoNegocioDTO; import br.com.centralit.citcorpore.bean.CentroResultadoDTO; import br.com.centralit.citcorpore.bean.DelegacaoCentroResultadoDTO; import br.com.centralit.citcorpore.bean.DelegacaoCentroResultadoFluxoDTO; import br.com.centralit.citcorpore.bean.DelegacaoCentroResultadoProcessoDTO; import br.com.centralit.citcorpore.bean.EmpregadoDTO; import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO; import br.com.centralit.citcorpore.bean.GrupoNivelAutoridadeDTO; import br.com.centralit.citcorpore.bean.LimiteAprovacaoAutoridadeDTO; import br.com.centralit.citcorpore.bean.LimiteAprovacaoDTO; import br.com.centralit.citcorpore.bean.LimiteAprovacaoProcessoDTO; import br.com.centralit.citcorpore.bean.NivelAutoridadeDTO; import br.com.centralit.citcorpore.bean.ParametroDTO; import br.com.centralit.citcorpore.bean.ProcessoNegocioDTO; import br.com.centralit.citcorpore.bean.ProcessoNivelAutoridadeDTO; import br.com.centralit.citcorpore.bean.ResponsavelCentroResultadoDTO; import br.com.centralit.citcorpore.bean.ResponsavelCentroResultadoProcessoDTO; import br.com.centralit.citcorpore.bean.SimulacaoAlcadaDTO; import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.bean.ValorLimiteAprovacaoDTO; import br.com.centralit.citcorpore.bpm.negocio.ExecucaoSolicitacao; import br.com.centralit.citcorpore.integracao.CentroResultadoDao; import br.com.centralit.citcorpore.integracao.DelegacaoCentroResultadoDao; import br.com.centralit.citcorpore.integracao.DelegacaoCentroResultadoFluxoDao; import br.com.centralit.citcorpore.integracao.DelegacaoCentroResultadoProcessoDao; import br.com.centralit.citcorpore.integracao.EmpregadoDao; import br.com.centralit.citcorpore.integracao.ExecucaoSolicitacaoDao; import br.com.centralit.citcorpore.integracao.GrupoEmpregadoDao; import br.com.centralit.citcorpore.integracao.GrupoNivelAutoridadeDao; import br.com.centralit.citcorpore.integracao.LimiteAprovacaoAutoridadeDao; import br.com.centralit.citcorpore.integracao.LimiteAprovacaoDao; import br.com.centralit.citcorpore.integracao.LimiteAprovacaoProcessoDao; import br.com.centralit.citcorpore.integracao.NivelAutoridadeDao; import br.com.centralit.citcorpore.integracao.ParametroDao; import br.com.centralit.citcorpore.integracao.ProcessoNegocioDao; import br.com.centralit.citcorpore.integracao.ProcessoNivelAutoridadeDao; import br.com.centralit.citcorpore.integracao.ResponsavelCentroResultadoDao; import br.com.centralit.citcorpore.integracao.ResponsavelCentroResultadoProcessoDao; import br.com.centralit.citcorpore.integracao.UsuarioDao; import br.com.centralit.citcorpore.integracao.ValorLimiteAprovacaoDao; import br.com.centralit.citcorpore.negocio.SolicitacaoServicoServiceEjb; import br.com.centralit.citcorpore.util.Enumerados.MotivoRejeicaoAlcada; import br.com.citframework.comparacao.ObjectSimpleComparator; import br.com.citframework.excecao.LogicException; import br.com.citframework.integracao.CrudDAO; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.util.Reflexao; import br.com.citframework.util.UtilDatas; @SuppressWarnings({"unchecked","rawtypes"}) public class AlcadaProcessoNegocio { TransactionControler transacao = null; protected CrudDAO atribuiTransacaoDao(CrudDAO dao) throws Exception { if (this.transacao != null) dao.setTransactionControler(this.transacao); return dao; } private static String getNomeClasse() throws Exception { ParametroDTO parametroDto = new ParametroDao().getValue("ALCADA", "NOME_CLASSE_ALCADA", new Integer(1)); if (parametroDto != null && parametroDto.getValor() != null && !parametroDto.getValor().trim().equals("")) return parametroDto.getValor(); return "br.com.centralit.citcorpore.negocio.alcada.AlcadaProcessoNegocio"; } private HashMap<String, ProcessoNegocioDTO> mapProcessosNegocio = null; private HashMap<String, NivelAutoridadeDTO> mapAutoridades = null; public static AlcadaProcessoNegocio getInstance() throws Exception { return (AlcadaProcessoNegocio) Class.forName(getNomeClasse()).newInstance(); } protected EmpregadoDTO recuperaEmpregado(Integer idEmpregado) throws Exception { EmpregadoDTO empregadoDto = new EmpregadoDTO(); empregadoDto.setIdEmpregado(idEmpregado); return (EmpregadoDTO) this.atribuiTransacaoDao(new EmpregadoDao()).restore(empregadoDto); } protected CentroResultadoDTO recuperaCentroResultado(Integer idCentroResultado) throws Exception { CentroResultadoDTO centroResultadoDto = new CentroResultadoDTO(); centroResultadoDto.setIdCentroResultado(idCentroResultado); return (CentroResultadoDTO) this.atribuiTransacaoDao(new CentroResultadoDao()).restore(centroResultadoDto); } protected ProcessoNegocioDTO recuperaProcessoNegocio(Integer idProcessoNegocio) throws Exception { ProcessoNegocioDTO processoNegocioDto = new ProcessoNegocioDTO(); processoNegocioDto.setIdProcessoNegocio(idProcessoNegocio); return (ProcessoNegocioDTO) this.atribuiTransacaoDao(new ProcessoNegocioDao()).restore(processoNegocioDto); } protected FluxoDTO recuperaFluxo(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception { return new SolicitacaoServicoServiceEjb().recuperaFluxo(solicitacaoServicoDto); } protected boolean isSimulacao(SolicitacaoServicoDTO solicitacaoServicoDto) { return SimulacaoAlcadaDTO.class.isInstance(solicitacaoServicoDto); } public ProcessoNegocioDTO recuperaProcessoNegocio(FluxoDTO fluxoDto) throws Exception { ProcessoNegocioDTO result = null; if (fluxoDto != null && fluxoDto.getIdProcessoNegocio() != null) result = recuperaProcessoNegocio(fluxoDto.getIdProcessoNegocio()); if (result != null) recuperaAutoridadesProcesso(result, (ProcessoNivelAutoridadeDao) this.atribuiTransacaoDao(new ProcessoNivelAutoridadeDao())); fluxoDto.setProcessoNegocioDto(result); return result; } public ExecucaoSolicitacao recuperaExecucaoSolicitacao(FluxoDTO fluxoDto, SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception { ExecucaoSolicitacao execucaoSolicitacao = (ExecucaoSolicitacao) Class.forName(fluxoDto.getNomeClasseFluxo()).newInstance(); execucaoSolicitacao.setTransacao(transacao); execucaoSolicitacao.setObjetoNegocioDto(solicitacaoServicoDto); ExecucaoSolicitacaoDao execucaoSolicitacaoDao = new ExecucaoSolicitacaoDao(); atribuiTransacaoDao(execucaoSolicitacaoDao); execucaoSolicitacao.setExecucaoSolicitacaoDto(execucaoSolicitacaoDao.findBySolicitacaoServico(solicitacaoServicoDto)); return execucaoSolicitacao; } protected void recuperaLimitesAprovacao(ProcessoNegocioDTO processoNegocioDto) throws Exception { LimiteAprovacaoProcessoDao limiteAprovacaoProcessoDao = new LimiteAprovacaoProcessoDao(); atribuiTransacaoDao(limiteAprovacaoProcessoDao); Collection<LimiteAprovacaoDTO> colLimitesAprovacao = new ArrayList(); // recupera os limites de aprova��o associados ao processo Collection<LimiteAprovacaoProcessoDTO> colLimiteAprovacaoProcesso = limiteAprovacaoProcessoDao.findByIdProcessoNegocio(processoNegocioDto.getIdProcessoNegocio()); if (colLimiteAprovacaoProcesso != null) { LimiteAprovacaoDao limiteAprovacaoDao = new LimiteAprovacaoDao(); atribuiTransacaoDao(limiteAprovacaoDao); ValorLimiteAprovacaoDao valorLimiteAprovacaoDao = new ValorLimiteAprovacaoDao(); atribuiTransacaoDao(valorLimiteAprovacaoDao); for (LimiteAprovacaoProcessoDTO limiteAprovacaoProcessoDto : colLimiteAprovacaoProcesso) { LimiteAprovacaoDTO limiteAprovacaoDto = new LimiteAprovacaoDTO(); limiteAprovacaoDto.setIdLimiteAprovacao(limiteAprovacaoProcessoDto.getIdLimiteAprovacao()); limiteAprovacaoDto = (LimiteAprovacaoDTO) limiteAprovacaoDao.restore(limiteAprovacaoDto); // recupera os valores de cada limite limiteAprovacaoDto.setColValores(valorLimiteAprovacaoDao.findByIdLimiteAprovacao(limiteAprovacaoProcessoDto.getIdLimiteAprovacao())); Collection<LimiteAprovacaoProcessoDTO> colLimiteAprovacao = limiteAprovacaoProcessoDao.findByIdLimiteAprovacao(limiteAprovacaoProcessoDto.getIdLimiteAprovacao()); Collection<ProcessoNegocioDTO> colProcessos = new ArrayList(); colProcessos.add(processoNegocioDto); if (colLimiteAprovacao != null) { // recupera os outros processos associados ao limite for (LimiteAprovacaoProcessoDTO limiteDto : colLimiteAprovacao) { if (limiteDto.getIdProcessoNegocio().intValue() == processoNegocioDto.getIdProcessoNegocio().intValue()) continue; ProcessoNegocioDTO processoDto = getHashMapProcessosNegocio().get(""+limiteDto.getIdProcessoNegocio()); if (processoDto != null) colProcessos.add(processoDto); } } limiteAprovacaoDto.setColProcessos(colProcessos); colLimitesAprovacao.add(limiteAprovacaoDto); } } processoNegocioDto.setColLimitesAprovacao(colLimitesAprovacao); } protected void associaLimiteAutoridadeEValores(ProcessoNegocioDTO processoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao, CentroResultadoDTO centroResultadoDto) throws Exception { if (processoNegocioDto.getColAutoridades() == null || processoNegocioDto.getColAutoridades().isEmpty()) return; // recupera os limites de aprova��o do processo // para cada limite, recupera os outros processos associados recuperaLimitesAprovacao(processoNegocioDto); Collection<LimiteAprovacaoDTO> colLimites = processoNegocioDto.getColLimitesAprovacao(); if (colLimites == null || colLimites.isEmpty()) return; // cria hashMap com os limites HashMap<String, LimiteAprovacaoDTO> mapLimites = new HashMap(); for (LimiteAprovacaoDTO limiteAprovacaoDto : colLimites) { mapLimites.put(""+limiteAprovacaoDto.getIdLimiteAprovacao(), limiteAprovacaoDto); } LimiteAprovacaoAutoridadeDao limiteAprovacaoAutoridadeDao = new LimiteAprovacaoAutoridadeDao(); atribuiTransacaoDao(limiteAprovacaoAutoridadeDao); for (ProcessoNivelAutoridadeDTO processoNivelAutoridadeDto : processoNegocioDto.getColAutoridades()) { // recupera os limites de aprova��o de cada autoridade do processo de neg�cio Collection<LimiteAprovacaoAutoridadeDTO> colLimiteAprovacaoAutoridade = limiteAprovacaoAutoridadeDao.findByIdNivelAutoridade(processoNivelAutoridadeDto.getIdNivelAutoridade()); if (colLimiteAprovacaoAutoridade != null) { for (LimiteAprovacaoAutoridadeDTO limiteAprovacaoAutoridadeDto : colLimiteAprovacaoAutoridade) { LimiteAprovacaoDTO limiteAprovacaoDto = mapLimites.get(""+limiteAprovacaoAutoridadeDto.getIdLimiteAprovacao()); if (limiteAprovacaoDto != null) { // associa o limite de aprova��o da autoridade, considerando que uma autoridade s� pode ter um limite para determinado processo limiteAprovacaoDto.setValido(true); processoNivelAutoridadeDto.setLimiteAprovacaoDto(mapLimites.get(""+limiteAprovacaoAutoridadeDto.getIdLimiteAprovacao())); break; } } } } boolean bAtendimentoCliente = false; double valorIndividual = 0.0; if (isSimulacao(execucaoSolicitacao.getSolicitacaoServicoDto())) { bAtendimentoCliente = ((SimulacaoAlcadaDTO) execucaoSolicitacao.getSolicitacaoServicoDto()).getFinalidade().equalsIgnoreCase("C"); valorIndividual = ((SimulacaoAlcadaDTO) execucaoSolicitacao.getSolicitacaoServicoDto()).getValor(); }else{ bAtendimentoCliente = execucaoSolicitacao.isAtendimentoCliente(execucaoSolicitacao.getSolicitacaoServicoDto()); valorIndividual = execucaoSolicitacao.calculaValorAprovado(execucaoSolicitacao.getSolicitacaoServicoDto(), this.transacao); } recuperaValores(colLimites, execucaoSolicitacao, centroResultadoDto, bAtendimentoCliente); for (ProcessoNivelAutoridadeDTO processoNivelAutoridadeDto : processoNegocioDto.getColAutoridades()) { if (processoNivelAutoridadeDto.getNivelAutoridadeDto() == null) continue; processoNivelAutoridadeDto.getNivelAutoridadeDto().setAlcadaRejeitada(false); LimiteAprovacaoDTO limiteAprovacaoDto = processoNivelAutoridadeDto.getLimiteAprovacaoDto(); // ignora os limites que n�o s�o por faixa de valor if (limiteAprovacaoDto == null || !limiteAprovacaoDto.getTipoLimitePorValor().equalsIgnoreCase("V") || limiteAprovacaoDto.getColValores() == null) continue; for (ValorLimiteAprovacaoDTO valorDto : limiteAprovacaoDto.getColValores()) { if (!bAtendimentoCliente && valorDto.getTipoUtilizacao().equalsIgnoreCase("C")) continue; if (bAtendimentoCliente && !valorDto.getTipoUtilizacao().equalsIgnoreCase("C")) continue; double valorRef = 0.0; if (valorDto.getTipoLimite().equalsIgnoreCase("I")) { valorRef = valorIndividual; }else if (limiteAprovacaoDto.getAbrangenciaCentroResultado().equalsIgnoreCase("R")) { if (valorDto.getTipoLimite().equalsIgnoreCase("M")) { if (bAtendimentoCliente) valorRef = limiteAprovacaoDto.getValorMensalAtendCliente() - valorIndividual; else valorRef = limiteAprovacaoDto.getValorMensalUsoInterno() - valorIndividual; }else if (valorDto.getTipoLimite().equalsIgnoreCase("A")) { if (bAtendimentoCliente) valorRef = limiteAprovacaoDto.getValorAnualAtendCliente() - valorIndividual; else valorRef = limiteAprovacaoDto.getValorAnualUsoInterno() - valorIndividual; } } // invalida autoridades fora do valor limite if (valorRef > valorDto.getValorLimite()) { processoNivelAutoridadeDto.getNivelAutoridadeDto().setAlcadaRejeitada(true); processoNivelAutoridadeDto.getNivelAutoridadeDto().setMotivoRejeicao(MotivoRejeicaoAlcada.LimiteValor); break; } } } } protected void recuperaValores(Collection<LimiteAprovacaoDTO> colLimites, ExecucaoSolicitacao execucaoSolicitacaoProcesso, CentroResultadoDTO centroResultadoDto, boolean bAtendimentoCliente) throws Exception { SolicitacaoServicoDTO solicitacaoServicoDto = execucaoSolicitacaoProcesso.getSolicitacaoServicoDto(); Date dataAux = UtilDatas.getDataAtual(); int mes = UtilDatas.getMonth(dataAux); int ano = UtilDatas.getYear(dataAux); HashMap<String, ExecucaoSolicitacao> mapExecucaoSolicitacao = new HashMap(); TipoFluxoDao tipoFluxoDao = new TipoFluxoDao(); atribuiTransacaoDao(tipoFluxoDao); for (LimiteAprovacaoDTO limiteAprovacaoDto : colLimites) { // ignora os limites n�o associados a alguma autoridade if (!limiteAprovacaoDto.isValido()) continue; double valorMensalUsoInterno = 0.0; double valorAnualUsoInterno = 0.0; double valorMensalAtendCliente = 0.0; double valorAnualAtendCliente = 0.0; if (limiteAprovacaoDto.getColProcessos() != null) { for (ProcessoNegocioDTO processoNegocioDto : limiteAprovacaoDto.getColProcessos()) { // recupera os fluxos de cada processo associado ao limite de aprova��o Collection<TipoFluxoDTO> colFluxos = tipoFluxoDao.findByIdProcessoNegocio(processoNegocioDto.getIdProcessoNegocio()); if (colFluxos != null) { for (TipoFluxoDTO tipoFluxoDto : colFluxos) { if (tipoFluxoDto.getNomeClasseFluxo() == null || tipoFluxoDto.getNomeClasseFluxo().trim().equals("")) tipoFluxoDto.setNomeClasseFluxo(ExecucaoSolicitacao.class.getName()); ExecucaoSolicitacao execucaoSolicitacao = mapExecucaoSolicitacao.get(tipoFluxoDto.getNomeClasseFluxo()); if (execucaoSolicitacao == null) { // calcula os valores mensais e anuais try { execucaoSolicitacao = (ExecucaoSolicitacao) Class.forName(tipoFluxoDto.getNomeClasseFluxo()).newInstance(); execucaoSolicitacao.setObjetoNegocioDto(solicitacaoServicoDto); mapExecucaoSolicitacao.put(tipoFluxoDto.getNomeClasseFluxo(), execucaoSolicitacao); if (isSimulacao(solicitacaoServicoDto)) { double valor = 0.0; if (execucaoSolicitacaoProcesso.getClass().getName().equals(execucaoSolicitacao.getClass().getName())) { valor = ((SimulacaoAlcadaDTO) solicitacaoServicoDto).getValorMensal(); }else{ valor = ((SimulacaoAlcadaDTO) solicitacaoServicoDto).getValorOutrasAlcadas(); } if (bAtendimentoCliente) { execucaoSolicitacao.setValorAnualAtendCliente(valor); execucaoSolicitacao.setValorMensalAtendCliente(valor); }else{ execucaoSolicitacao.setValorAnualUsoInterno(valor); execucaoSolicitacao.setValorMensalUsoInterno(valor); } }else{ execucaoSolicitacao.calculaValorAprovadoMensal(centroResultadoDto, mes, ano, this.transacao); execucaoSolicitacao.calculaValorAprovadoAnual(centroResultadoDto, mes, this.transacao); } } catch (Exception e) { } } if (execucaoSolicitacao != null) { valorMensalUsoInterno += execucaoSolicitacao.getValorMensalUsoInterno(); valorMensalAtendCliente += execucaoSolicitacao.getValorMensalAtendCliente(); valorAnualUsoInterno += execucaoSolicitacao.getValorAnualUsoInterno(); valorAnualAtendCliente += execucaoSolicitacao.getValorAnualAtendCliente(); } } } } } limiteAprovacaoDto.setValorMensalUsoInterno(valorMensalUsoInterno); limiteAprovacaoDto.setValorAnualUsoInterno(valorAnualUsoInterno); limiteAprovacaoDto.setValorMensalAtendCliente(valorMensalAtendCliente); limiteAprovacaoDto.setValorAnualAtendCliente(valorAnualAtendCliente); } } protected void recuperaAutoridadesProcesso(ProcessoNegocioDTO processoNegocioDto, ProcessoNivelAutoridadeDao processoNivelAutoridadeDao) throws Exception { Collection<ProcessoNivelAutoridadeDTO> colAutoridades = processoNivelAutoridadeDao.findByIdProcessoNegocio(processoNegocioDto.getIdProcessoNegocio()); for (ProcessoNivelAutoridadeDTO processoNivelAutoridadeDto : colAutoridades) { NivelAutoridadeDTO nivelDto = getHashMapNivelAutoridade().get(""+processoNivelAutoridadeDto.getIdNivelAutoridade()); if (nivelDto != null) { processoNivelAutoridadeDto.setNivelAutoridadeDto(nivelDto); processoNivelAutoridadeDto.setHierarquia(nivelDto.getHierarquia()); } } Collections.sort((List) colAutoridades, new ObjectSimpleComparator("getHierarquia", ObjectSimpleComparator.ASC)); processoNegocioDto.setColAutoridades(colAutoridades); } protected HashMap<String, GrupoEmpregadoDTO> getHashMapGruposEmpregado(EmpregadoDTO empregadoDto) throws Exception { HashMap<String, GrupoEmpregadoDTO> result = new HashMap(); GrupoEmpregadoDao grupoEmpregadoDao = new GrupoEmpregadoDao(); atribuiTransacaoDao(grupoEmpregadoDao); Collection<GrupoEmpregadoDTO> colGrupos = grupoEmpregadoDao.findAtivosByIdEmpregado(empregadoDto.getIdEmpregado()); if (colGrupos != null) { for (GrupoEmpregadoDTO grupoEmpregadoDto : colGrupos) { result.put(""+grupoEmpregadoDto.getIdGrupo(), grupoEmpregadoDto); } } return result; } protected AlcadaProcessoNegocioDTO getAlcadaProcessoNegocio(CentroResultadoDTO centroResultadoDto, EmpregadoDTO empregadoDto, HashMap<String, GrupoEmpregadoDTO> mapGruposEmpregado, ResponsavelCentroResultadoProcessoDao responsavelCentroResultadoProcessoDao, ProcessoNegocioDTO processoNegocioRefDto) throws Exception { AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto = null; List<ProcessoNegocioDTO> processosNegocio = new ArrayList(); Collection<ResponsavelCentroResultadoProcessoDTO> colResponsavelProcesso = responsavelCentroResultadoProcessoDao.findByIdCentroResultadoAndIdResponsavel(centroResultadoDto.getIdCentroResultado(), empregadoDto.getIdEmpregado()); if (colResponsavelProcesso != null) { for (ResponsavelCentroResultadoProcessoDTO responsavelCentroResultadoProcessoDto : colResponsavelProcesso) { if (processoNegocioRefDto != null && processoNegocioRefDto.getIdProcessoNegocio() != null && processoNegocioRefDto.getIdProcessoNegocio().intValue() != responsavelCentroResultadoProcessoDto.getIdProcessoNegocio().intValue()) continue; ProcessoNegocioDTO processoNegocioDto = getHashMapProcessosNegocio().get(""+responsavelCentroResultadoProcessoDto.getIdProcessoNegocio()); if (processoNegocioDto != null && processoNegocioDto.getColAutoridades() != null) { for (ProcessoNivelAutoridadeDTO processoNivelAutoridadeDto : processoNegocioDto.getColAutoridades()) { if (processoNivelAutoridadeDto.getNivelAutoridadeDto() != null && processoNivelAutoridadeDto.getNivelAutoridadeDto().getColGrupos() != null) { for (GrupoNivelAutoridadeDTO grupoNivelAutoridadeDto : processoNivelAutoridadeDto.getNivelAutoridadeDto().getColGrupos()) { if (mapGruposEmpregado.get(""+grupoNivelAutoridadeDto.getIdGrupo()) != null) { ProcessoNegocioDTO processoDto = new ProcessoNegocioDTO(); Reflexao.copyPropertyValues(processoNegocioDto, processoDto); processoDto.setNivelAutoridadeDto(getHashMapNivelAutoridade().get(""+processoNivelAutoridadeDto.getIdNivelAutoridade())); processosNegocio.add(processoDto); } } } } } } if (processosNegocio.size() > 0) { alcadaProcessoNegocioDto = new AlcadaProcessoNegocioDTO(); alcadaProcessoNegocioDto.setCentroResultadoDto(centroResultadoDto); alcadaProcessoNegocioDto.setEmpregadoDto(empregadoDto); alcadaProcessoNegocioDto.setProcessosNegocio(processosNegocio); alcadaProcessoNegocioDto.setMapGruposEmpregado(mapGruposEmpregado); } } return alcadaProcessoNegocioDto; } protected HashMap<String, ProcessoNegocioDTO> getHashMapProcessosNegocio() throws Exception { if (mapProcessosNegocio == null) { mapProcessosNegocio = new HashMap(); Collection<ProcessoNegocioDTO> colProcessos = this.atribuiTransacaoDao(new ProcessoNegocioDao()).list(); if (colProcessos != null) { ProcessoNivelAutoridadeDao processoNivelAutoridadeDao = new ProcessoNivelAutoridadeDao(); atribuiTransacaoDao(processoNivelAutoridadeDao); for (ProcessoNegocioDTO processoNegocioDto : colProcessos) { recuperaAutoridadesProcesso(processoNegocioDto, processoNivelAutoridadeDao); mapProcessosNegocio.put(""+processoNegocioDto.getIdProcessoNegocio(), processoNegocioDto); } } } return mapProcessosNegocio; } protected HashMap<String, NivelAutoridadeDTO> getHashMapNivelAutoridade() throws Exception { if (mapAutoridades == null) { mapAutoridades = new HashMap(); Collection<NivelAutoridadeDTO> colAutoridades = this.atribuiTransacaoDao(new NivelAutoridadeDao()).list(); if (colAutoridades != null) { GrupoNivelAutoridadeDao grupoNivelAutoridadeDao = new GrupoNivelAutoridadeDao(); atribuiTransacaoDao(grupoNivelAutoridadeDao); for (NivelAutoridadeDTO nivelDto : colAutoridades) { nivelDto.setColGrupos(grupoNivelAutoridadeDao.findByIdNivelAutoridade(nivelDto.getIdNivelAutoridade())); mapAutoridades.put(""+nivelDto.getIdNivelAutoridade(), nivelDto); } } } return mapAutoridades; } public List<AlcadaProcessoNegocioDTO> getAlcadasCentroResultado(CentroResultadoDTO centroResultadoDto, ProcessoNegocioDTO processoNegocioDto) throws Exception { List<AlcadaProcessoNegocioDTO> result = new ArrayList(); ResponsavelCentroResultadoDao responsavelCentroResultadoDao = new ResponsavelCentroResultadoDao(); atribuiTransacaoDao(responsavelCentroResultadoDao); Collection<ResponsavelCentroResultadoDTO> colCentrosResultado = responsavelCentroResultadoDao.findByIdCentroResultado(centroResultadoDto.getIdCentroResultado()); if (colCentrosResultado != null) { EmpregadoDao empregadoDao = new EmpregadoDao(); atribuiTransacaoDao(empregadoDao); ResponsavelCentroResultadoProcessoDao responsavelCentroResultadoProcessoDao = new ResponsavelCentroResultadoProcessoDao(); for (ResponsavelCentroResultadoDTO responsavelCentroResultadoDto : colCentrosResultado) { EmpregadoDTO empregadoDto = new EmpregadoDTO(); empregadoDto.setIdEmpregado(responsavelCentroResultadoDto.getIdResponsavel()); empregadoDto = (EmpregadoDTO) empregadoDao.restore(empregadoDto); HashMap<String, GrupoEmpregadoDTO> mapGruposEmpregado = getHashMapGruposEmpregado(empregadoDto); AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto = getAlcadaProcessoNegocio(centroResultadoDto, empregadoDto, mapGruposEmpregado, responsavelCentroResultadoProcessoDao, processoNegocioDto); if (alcadaProcessoNegocioDto != null) result.add(alcadaProcessoNegocioDto); } } return result; } public List<AlcadaProcessoNegocioDTO> getAlcadasEmpregado(EmpregadoDTO empregadoDto, ProcessoNegocioDTO processoNegocioDto) throws Exception { List<AlcadaProcessoNegocioDTO> result = new ArrayList(); ResponsavelCentroResultadoDao responsavelCentroResultadoDao = new ResponsavelCentroResultadoDao(); atribuiTransacaoDao(responsavelCentroResultadoDao); Collection<ResponsavelCentroResultadoDTO> colCentrosResultado = responsavelCentroResultadoDao.findByIdResponsavel(empregadoDto.getIdEmpregado()); if (colCentrosResultado != null) { CentroResultadoDao centroResultadoDao = new CentroResultadoDao(); atribuiTransacaoDao(centroResultadoDao); ResponsavelCentroResultadoProcessoDao responsavelCentroResultadoProcessoDao = new ResponsavelCentroResultadoProcessoDao(); atribuiTransacaoDao(responsavelCentroResultadoProcessoDao); HashMap<String, GrupoEmpregadoDTO> mapGruposEmpregado = getHashMapGruposEmpregado(empregadoDto); for (ResponsavelCentroResultadoDTO responsavelCentroResultadoDto : colCentrosResultado) { CentroResultadoDTO centroResultadoDto = new CentroResultadoDTO(); centroResultadoDto.setIdCentroResultado(responsavelCentroResultadoDto.getIdCentroResultado()); centroResultadoDto = (CentroResultadoDTO) centroResultadoDao.restore(centroResultadoDto); AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto = getAlcadaProcessoNegocio(centroResultadoDto, empregadoDto, mapGruposEmpregado, responsavelCentroResultadoProcessoDao, processoNegocioDto); if (alcadaProcessoNegocioDto != null) result.add(alcadaProcessoNegocioDto); } } return result; } public List<AlcadaProcessoNegocioDTO> getAlcadasNivelSuperior(ProcessoNegocioDTO processoNegocioDto, List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { List<AlcadaProcessoNegocioDTO> result = new ArrayList(); if (processoNegocioDto.getColLimitesAprovacao() != null) { Collection<NivelAutoridadeDTO> colAutoridades = new ArrayList(); LimiteAprovacaoAutoridadeDao limiteAprovacaoAutoridadeDao = new LimiteAprovacaoAutoridadeDao(); atribuiTransacaoDao(limiteAprovacaoAutoridadeDao); for (LimiteAprovacaoDTO limiteAprovacaoDto : processoNegocioDto.getColLimitesAprovacao()) { if (limiteAprovacaoDto.getAbrangenciaCentroResultado().equalsIgnoreCase("R")) continue; if (limiteAprovacaoDto.getTipoLimitePorValor().equalsIgnoreCase("V")) continue; Collection<LimiteAprovacaoAutoridadeDTO> colLimiteAprovacaoAutoridade = limiteAprovacaoAutoridadeDao.findByIdLimiteAprovacao(limiteAprovacaoDto.getIdLimiteAprovacao()); if (colLimiteAprovacaoAutoridade != null) { for (LimiteAprovacaoAutoridadeDTO limiteAprovacaoAutoridadeDto : colLimiteAprovacaoAutoridade) { colAutoridades.add(getHashMapNivelAutoridade().get(""+limiteAprovacaoAutoridadeDto.getIdNivelAutoridade())); } } } HashMap<String, EmpregadoDTO> mapEmpregados = new HashMap(); if (colAlcadas != null) { for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { mapEmpregados.put(""+alcadaProcessoNegocioDto.getEmpregadoDto().getIdEmpregado(), alcadaProcessoNegocioDto.getEmpregadoDto()); } } GrupoEmpregadoDao grupoEmpregadoDao = new GrupoEmpregadoDao(); atribuiTransacaoDao(grupoEmpregadoDao); for (NivelAutoridadeDTO nivelAutoridadeDto : colAutoridades) { for (GrupoNivelAutoridadeDTO grupoNivelAutoridadeDto : nivelAutoridadeDto.getColGrupos()) { Collection<GrupoEmpregadoDTO> colGrupoEmpregado = grupoEmpregadoDao.findByIdGrupo(grupoNivelAutoridadeDto.getIdGrupo()); if (colGrupoEmpregado != null) { for (GrupoEmpregadoDTO grupoEmpregadoDto : colGrupoEmpregado) { if (mapEmpregados.get(""+grupoEmpregadoDto.getIdEmpregado()) != null) continue; EmpregadoDTO empregadoDto = recuperaEmpregado(grupoEmpregadoDto.getIdEmpregado()); mapEmpregados.put(""+grupoEmpregadoDto.getIdEmpregado(), empregadoDto); List<ProcessoNegocioDTO> colProcessos = new ArrayList(); ProcessoNegocioDTO procDto = new ProcessoNegocioDTO(); Reflexao.copyPropertyValues(processoNegocioDto, procDto); procDto.setNivelAutoridadeDto(nivelAutoridadeDto); colProcessos.add(procDto); AlcadaProcessoNegocioDTO alcadaDto = new AlcadaProcessoNegocioDTO(); alcadaDto.setEmpregadoDto(empregadoDto); alcadaDto.setProcessosNegocio(colProcessos); result.add(alcadaDto); } } } } } return result; } public ProcessoNegocioDTO recuperaProcessoNegocio(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception { ProcessoNegocioDTO result = null; FluxoDTO fluxoDto = new SolicitacaoServicoServiceEjb().recuperaFluxo(solicitacaoServicoDto); if (fluxoDto != null && fluxoDto.getIdProcessoNegocio() != null) result = recuperaProcessoNegocio(fluxoDto.getIdProcessoNegocio()); if (result != null) recuperaAutoridadesProcesso(result, (ProcessoNivelAutoridadeDao) atribuiTransacaoDao(new ProcessoNivelAutoridadeDao())); return result; } protected void validaAlcadas(FluxoDTO fluxoDto, ProcessoNegocioDTO processoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao, SolicitacaoServicoDTO solicitacaoServicoDto, List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { validaAutoridades(fluxoDto, processoNegocioDto, execucaoSolicitacao, solicitacaoServicoDto, colAlcadas); validaSolicitante(fluxoDto, processoNegocioDto, execucaoSolicitacao, solicitacaoServicoDto, colAlcadas); validaAprovador(fluxoDto, processoNegocioDto, execucaoSolicitacao, solicitacaoServicoDto, colAlcadas); validaHierarquia(fluxoDto, processoNegocioDto, execucaoSolicitacao, solicitacaoServicoDto, colAlcadas); validaUsuario(fluxoDto, processoNegocioDto, execucaoSolicitacao, solicitacaoServicoDto, colAlcadas); } protected void validaHierarquia(FluxoDTO fluxoDto, ProcessoNegocioDTO processoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao, SolicitacaoServicoDTO solicitacaoServicoDto, List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { if (processoNegocioDto.getPermiteAprovacaoNivelInferior() == null || processoNegocioDto.getPermiteAprovacaoNivelInferior().equalsIgnoreCase("S")) return; int hierarquia = 0; for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; if (alcadaProcessoNegocioDto.getEmpregadoDto().getIdEmpregado().intValue() != solicitacaoServicoDto.getIdSolicitante().intValue()) continue; NivelAutoridadeDTO nivelAutoridadeDto = alcadaProcessoNegocioDto.getProcessosNegocio().get(0).getNivelAutoridadeDto(); hierarquia = nivelAutoridadeDto.getHierarquia().intValue(); break; } if (hierarquia == 0 ) return; for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; NivelAutoridadeDTO nivelAutoridadeDto = alcadaProcessoNegocioDto.getProcessosNegocio().get(0).getNivelAutoridadeDto(); if (nivelAutoridadeDto.getHierarquia().intValue() > hierarquia) { alcadaProcessoNegocioDto.setMotivoRejeicao(MotivoRejeicaoAlcada.HierarquiaAutoridade); alcadaProcessoNegocioDto.setAlcadaRejeitada(true); continue; } } } protected void validaSolicitante(FluxoDTO fluxoDto, ProcessoNegocioDTO processoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao, SolicitacaoServicoDTO solicitacaoServicoDto, List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; NivelAutoridadeDTO nivelAutoridadeDto = alcadaProcessoNegocioDto.getProcessosNegocio().get(0).getNivelAutoridadeDto(); for (ProcessoNivelAutoridadeDTO processoNivelAutoridadeDto : processoNegocioDto.getColAutoridades()) { if (processoNivelAutoridadeDto.getIdNivelAutoridade().intValue() != nivelAutoridadeDto.getIdNivelAutoridade().intValue()) continue; if (processoNivelAutoridadeDto.getPermiteAprovacaoPropria().equals("N") && alcadaProcessoNegocioDto.getEmpregadoDto().getIdEmpregado().intValue() == solicitacaoServicoDto.getIdSolicitante().intValue()) { alcadaProcessoNegocioDto.setMotivoRejeicao(MotivoRejeicaoAlcada.PermissaoAutoridade); alcadaProcessoNegocioDto.setAlcadaRejeitada(true); break; } } } } protected void validaUsuario(FluxoDTO fluxoDto, ProcessoNegocioDTO processoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao, SolicitacaoServicoDTO solicitacaoServicoDto, List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { UsuarioDao usuarioDao = new UsuarioDao(); atribuiTransacaoDao(usuarioDao); for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(alcadaProcessoNegocioDto.getEmpregadoDto().getIdEmpregado()); if (usuarioDto == null) { alcadaProcessoNegocioDto.setAlcadaRejeitada(true); alcadaProcessoNegocioDto.setMotivoRejeicao(MotivoRejeicaoAlcada.UsuarioNaoExiste); continue; } } } protected void validaAutoridades(FluxoDTO fluxoDto, ProcessoNegocioDTO processoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao, SolicitacaoServicoDTO solicitacaoServicoDto, List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; NivelAutoridadeDTO nivelAutoridadeDto = alcadaProcessoNegocioDto.getProcessosNegocio().get(0).getNivelAutoridadeDto(); for (ProcessoNivelAutoridadeDTO processoNivelAutoridadeDto : processoNegocioDto.getColAutoridades()) { if (processoNivelAutoridadeDto.getIdNivelAutoridade().intValue() != nivelAutoridadeDto.getIdNivelAutoridade().intValue()) continue; if (processoNivelAutoridadeDto.getNivelAutoridadeDto().isAlcadaRejeitada()) { alcadaProcessoNegocioDto.setMotivoRejeicao(processoNivelAutoridadeDto.getNivelAutoridadeDto().getMotivoRejeicao()); alcadaProcessoNegocioDto.setAlcadaRejeitada(true); break; } } } } protected void validaAprovador(FluxoDTO fluxoDto, ProcessoNegocioDTO processoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao, SolicitacaoServicoDTO solicitacaoServicoDto, List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; if (!execucaoSolicitacao.permiteAprovacaoAlcada(alcadaProcessoNegocioDto, solicitacaoServicoDto)) { alcadaProcessoNegocioDto.setAlcadaRejeitada(true); alcadaProcessoNegocioDto.setMotivoRejeicao(MotivoRejeicaoAlcada.RegrasProcesso); continue; } } } protected Collection<AlcadaProcessoNegocioDTO> recuperaDelegacoes(AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto, ExecucaoSolicitacao execucaoSolicitacao) throws Exception { Collection<AlcadaProcessoNegocioDTO> colAlcadasDelgacoes = new ArrayList(); DelegacaoCentroResultadoDao delegacaoCentroResultadoDao = new DelegacaoCentroResultadoDao(); atribuiTransacaoDao(delegacaoCentroResultadoDao); Collection<DelegacaoCentroResultadoDTO> colDelegCentroResultado = delegacaoCentroResultadoDao.findByIdResponsavelAndIdCentroResultado(alcadaProcessoNegocioDto.getEmpregadoDto().getIdEmpregado(), alcadaProcessoNegocioDto.getCentroResultadoDto().getIdCentroResultado()); if (colDelegCentroResultado == null) return colAlcadasDelgacoes; Collection<EmpregadoDTO> colDelegacoes = new ArrayList(); DelegacaoCentroResultadoProcessoDao delegacaoCentroResultadoProcessoDao = new DelegacaoCentroResultadoProcessoDao(); atribuiTransacaoDao(delegacaoCentroResultadoProcessoDao); DelegacaoCentroResultadoFluxoDao delegacaoCentroResultadoFluxoDao = new DelegacaoCentroResultadoFluxoDao(); atribuiTransacaoDao(delegacaoCentroResultadoFluxoDao); for (DelegacaoCentroResultadoDTO delegacaoCentroResultadoDto : colDelegCentroResultado) { if (delegacaoCentroResultadoDto.getDataFim().compareTo(UtilDatas.getDataAtual()) < 0) continue; if (delegacaoCentroResultadoDto.getRevogada().equalsIgnoreCase("S")) continue; DelegacaoCentroResultadoProcessoDTO delegacaoCentroResultadoProcessoDto = new DelegacaoCentroResultadoProcessoDTO(); delegacaoCentroResultadoProcessoDto.setIdDelegacaoCentroResultado(delegacaoCentroResultadoDto.getIdDelegacaoCentroResultado()); delegacaoCentroResultadoProcessoDto.setIdProcessoNegocio(alcadaProcessoNegocioDto.getProcessosNegocio().get(0).getIdProcessoNegocio()); delegacaoCentroResultadoProcessoDao.restore(delegacaoCentroResultadoProcessoDto); if (delegacaoCentroResultadoProcessoDto == null) continue; if (delegacaoCentroResultadoDto.getAbrangencia().equalsIgnoreCase(DelegacaoCentroResultadoDTO.ESPECIFICAS)) { if (execucaoSolicitacao.getExecucaoSolicitacaoDto() == null) continue; DelegacaoCentroResultadoFluxoDTO delegacaoCentroResultadoFluxoDto = new DelegacaoCentroResultadoFluxoDTO(); delegacaoCentroResultadoFluxoDto.setIdDelegacaoCentroResultado(delegacaoCentroResultadoDto.getIdDelegacaoCentroResultado()); delegacaoCentroResultadoFluxoDto.setIdInstanciaFluxo(execucaoSolicitacao.getExecucaoSolicitacaoDto().getIdInstanciaFluxo()); delegacaoCentroResultadoFluxoDao.restore(delegacaoCentroResultadoFluxoDto); if (delegacaoCentroResultadoFluxoDto == null) continue; } EmpregadoDTO empregadoDto = recuperaEmpregado(delegacaoCentroResultadoDto.getIdEmpregado()); if (empregadoDto == null) continue; AlcadaProcessoNegocioDTO alcadaDelegDto = new AlcadaProcessoNegocioDTO(); alcadaDelegDto.setAlcadaOrigemDto(alcadaProcessoNegocioDto); alcadaDelegDto.setCentroResultadoDto(alcadaProcessoNegocioDto.getCentroResultadoDto()); alcadaDelegDto.setDelegacao(true); alcadaDelegDto.setEmpregadoDto(empregadoDto); alcadaDelegDto.setProcessosNegocio(alcadaProcessoNegocioDto.getProcessosNegocio()); alcadaDelegDto.setMapGruposEmpregado(getHashMapGruposEmpregado(empregadoDto)); colAlcadasDelgacoes.add(alcadaDelegDto); } return colAlcadasDelgacoes; } protected Collection<AlcadaProcessoNegocioDTO> getAlcadasResponsaveis(SolicitacaoServicoDTO solicitacaoServicoDto, CentroResultadoDTO centroResultadoDto, FluxoDTO fluxoDto, TransactionControler tc) throws Exception { this.transacao = tc; ProcessoNegocioDTO processoNegocioDto = recuperaProcessoNegocio(fluxoDto); if (processoNegocioDto == null) throw new LogicException("Processo de neg�cio n�o encontrado"); ExecucaoSolicitacao execucaoSolicitacao = recuperaExecucaoSolicitacao(fluxoDto, solicitacaoServicoDto); if (execucaoSolicitacao == null) throw new LogicException("Inst�ncia do fluxo n�o encontrada"); List<AlcadaProcessoNegocioDTO> colAlcadas = getAlcadasCentroResultado(centroResultadoDto, processoNegocioDto); if (colAlcadas == null || colAlcadas.isEmpty()) return null; List<AlcadaProcessoNegocioDTO> colAlcadasDeleg = new ArrayList(); for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { colAlcadasDeleg.addAll(recuperaDelegacoes(alcadaProcessoNegocioDto, execucaoSolicitacao)); } colAlcadas.addAll(colAlcadasDeleg); associaLimiteAutoridadeEValores(processoNegocioDto, execucaoSolicitacao, centroResultadoDto); validaAlcadas(fluxoDto, processoNegocioDto, execucaoSolicitacao, solicitacaoServicoDto, colAlcadas); int i = 0; List<AlcadaProcessoNegocioDTO> result = null; boolean bFiltraHierarquia = fluxoDto.getProcessoNegocioDto().getAlcadaPrimeiroNivel() != null && fluxoDto.getProcessoNegocioDto().getAlcadaPrimeiroNivel().equalsIgnoreCase("S"); if (bFiltraHierarquia) { int primeiroNivel = 0; for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; if (primeiroNivel < alcadaProcessoNegocioDto.recuperaHierarquiaNivelAutoridade()) primeiroNivel = alcadaProcessoNegocioDto.recuperaHierarquiaNivelAutoridade(); } result = new ArrayList(); for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada() || alcadaProcessoNegocioDto.recuperaHierarquiaNivelAutoridade() == primeiroNivel) { result.add(alcadaProcessoNegocioDto); if (!alcadaProcessoNegocioDto.isAlcadaRejeitada()) i++; } } colAlcadas = result; }else{ result = colAlcadas; for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; i++; } } if (i > 0) return ordenaAlcadas(result); result.addAll(getAlcadasNivelSuperior(processoNegocioDto, result)); return ordenaAlcadas(result); } private Collection<AlcadaProcessoNegocioDTO> ordenaAlcadas(List<AlcadaProcessoNegocioDTO> colAlcadas) throws Exception { for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { String chaveOrdenacao = ""; if (alcadaProcessoNegocioDto.getProcessosNegocio() != null && !alcadaProcessoNegocioDto.getProcessosNegocio().isEmpty()) { ProcessoNegocioDTO processoNegocioDto = alcadaProcessoNegocioDto.getProcessosNegocio().get(0); if (processoNegocioDto.getNivelAutoridadeDto() != null) chaveOrdenacao = ""+processoNegocioDto.getNivelAutoridadeDto().getHierarquia(); } alcadaProcessoNegocioDto.setChaveOrdenacao(chaveOrdenacao); } Collections.sort(colAlcadas, new ObjectSimpleComparator("getChaveOrdenacao", ObjectSimpleComparator.DESC)); return colAlcadas; } public Collection<AlcadaProcessoNegocioDTO> getSimulacaoAlcada(SimulacaoAlcadaDTO simulacaoAlcadaDto, CentroResultadoDTO centroResultadoDto, FluxoDTO fluxoDto) throws Exception { return getAlcadasResponsaveis(simulacaoAlcadaDto, centroResultadoDto, fluxoDto, null); } public Collection<EmpregadoDTO> getResponsaveis(SolicitacaoServicoDTO solicitacaoServicoDto, CentroResultadoDTO centroResultadoDto, TransactionControler tc) throws Exception { this.transacao = tc; FluxoDTO fluxoDto = recuperaFluxo(solicitacaoServicoDto); if (fluxoDto == null) throw new LogicException("Fluxo n�o encontrado"); Collection<AlcadaProcessoNegocioDTO> colAlcadas = getAlcadasResponsaveis(solicitacaoServicoDto, centroResultadoDto, fluxoDto, tc); if (colAlcadas == null) return null; Collection<EmpregadoDTO> result = new ArrayList(); for (AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto : colAlcadas) { if (alcadaProcessoNegocioDto.isAlcadaRejeitada()) continue; result.add(alcadaProcessoNegocioDto.getEmpregadoDto()); } return result; } public Collection<AlcadaProcessoNegocioDTO> getAlcadasResponsaveis(SolicitacaoServicoDTO solicitacaoServicoDto, CentroResultadoDTO centroResultadoDto, TransactionControler tc) throws Exception { this.transacao = tc; FluxoDTO fluxoDto = recuperaFluxo(solicitacaoServicoDto); if (fluxoDto == null) throw new LogicException("Fluxo n�o encontrado"); return getAlcadasResponsaveis(solicitacaoServicoDto, centroResultadoDto, fluxoDto, tc); } }