package br.com.centralit.citcorpore.bpm.negocio;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import br.com.centralit.bpm.dto.AtribuicaoFluxoDTO;
import br.com.centralit.bpm.dto.ElementoFluxoTarefaDTO;
import br.com.centralit.bpm.dto.EventoFluxoDTO;
import br.com.centralit.bpm.dto.FluxoDTO;
import br.com.centralit.bpm.dto.ItemTrabalhoFluxoDTO;
import br.com.centralit.bpm.dto.ObjetoNegocioFluxoDTO;
import br.com.centralit.bpm.dto.PermissoesFluxoDTO;
import br.com.centralit.bpm.dto.TarefaFluxoDTO;
import br.com.centralit.bpm.dto.TipoFluxoDTO;
import br.com.centralit.bpm.dto.UsuarioBpmDTO;
import br.com.centralit.bpm.integracao.AtribuicaoFluxoDao;
import br.com.centralit.bpm.integracao.ElementoFluxoDao;
import br.com.centralit.bpm.integracao.FluxoDao;
import br.com.centralit.bpm.integracao.ItemTrabalhoFluxoDao;
import br.com.centralit.bpm.integracao.TipoFluxoDao;
import br.com.centralit.bpm.negocio.ExecucaoFluxo;
import br.com.centralit.bpm.negocio.InstanciaFluxo;
import br.com.centralit.bpm.negocio.ItemTrabalho;
import br.com.centralit.bpm.negocio.UsuarioGrupo;
import br.com.centralit.bpm.util.Enumerados;
import br.com.centralit.citcorpore.bean.AcordoNivelServicoDTO;
import br.com.centralit.citcorpore.bean.AcordoServicoContratoDTO;
import br.com.centralit.citcorpore.bean.AlcadaProcessoNegocioDTO;
import br.com.centralit.citcorpore.bean.CalculoJornadaDTO;
import br.com.centralit.citcorpore.bean.CentroResultadoDTO;
import br.com.centralit.citcorpore.bean.ContratoDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.ExecucaoSolicitacaoDTO;
import br.com.centralit.citcorpore.bean.FluxoServicoDTO;
import br.com.centralit.citcorpore.bean.GerenciamentoServicosDTO;
import br.com.centralit.citcorpore.bean.GrupoDTO;
import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO;
import br.com.centralit.citcorpore.bean.HistoricoSolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.JustificativaSolicitacaoDTO;
import br.com.centralit.citcorpore.bean.ModeloEmailDTO;
import br.com.centralit.citcorpore.bean.OcorrenciaSolicitacaoDTO;
import br.com.centralit.citcorpore.bean.ParamRecuperacaoTarefasDTO;
import br.com.centralit.citcorpore.bean.ReaberturaSolicitacaoDTO;
import br.com.centralit.citcorpore.bean.ServicoContratoDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.TarefaUsuarioDTO;
import br.com.centralit.citcorpore.bean.TemplateSolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.TempoAcordoNivelServicoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.AcordoNivelServicoDao;
import br.com.centralit.citcorpore.integracao.AcordoServicoContratoDao;
import br.com.centralit.citcorpore.integracao.EmpregadoDao;
import br.com.centralit.citcorpore.integracao.ExecucaoSolicitacaoDao;
import br.com.centralit.citcorpore.integracao.FluxoServicoDao;
import br.com.centralit.citcorpore.integracao.GrupoDao;
import br.com.centralit.citcorpore.integracao.GrupoEmpregadoDao;
import br.com.centralit.citcorpore.integracao.ModeloEmailDao;
import br.com.centralit.citcorpore.integracao.OcorrenciaSolicitacaoDao;
import br.com.centralit.citcorpore.integracao.PermissoesFluxoDao;
import br.com.centralit.citcorpore.integracao.ReaberturaSolicitacaoDao;
import br.com.centralit.citcorpore.integracao.ServicoContratoDao;
import br.com.centralit.citcorpore.integracao.SolicitacaoServicoDao;
import br.com.centralit.citcorpore.integracao.TarefaUsuarioDao;
import br.com.centralit.citcorpore.integracao.TemplateSolicitacaoServicoDao;
import br.com.centralit.citcorpore.integracao.TempoAcordoNivelServicoDao;
import br.com.centralit.citcorpore.integracao.UsuarioDao;
import br.com.centralit.citcorpore.mail.MensagemEmail;
import br.com.centralit.citcorpore.negocio.CalendarioServiceEjb;
import br.com.centralit.citcorpore.negocio.GrupoService;
import br.com.centralit.citcorpore.negocio.HistoricoSolicitacaoServicoService;
import br.com.centralit.citcorpore.negocio.OcorrenciaSolicitacaoServiceEjb;
import br.com.centralit.citcorpore.negocio.SolicitacaoServicoService;
import br.com.centralit.citcorpore.negocio.SolicitacaoServicoServiceEjb;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
import br.com.centralit.citcorpore.util.CriptoUtils;
import br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia;
import br.com.centralit.citcorpore.util.Enumerados.OrigemOcorrencia;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoSLA;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico;
import br.com.centralit.citcorpore.util.Enumerados.TipoSolicitacaoServico;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.centralit.citcorpore.util.Util;
import br.com.citframework.comparacao.ObjectSimpleComparator;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.integracao.core.Page;
import br.com.citframework.integracao.core.PageImpl;
import br.com.citframework.integracao.core.Pageable;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilI18N;
import br.com.citframework.util.UtilStrings;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class ExecucaoSolicitacao extends ExecucaoFluxo {
protected UsuarioDTO usuarioDTO = null;
protected SolicitacaoServicoService solicitacaoServicoService;
protected ExecucaoSolicitacaoDTO execucaoSolicitacaoDto;
private String reabre = "";
protected Double valorMensalUsoInterno = 0.0;
protected Double valorAnualUsoInterno = 0.0;
protected Double valorMensalAtendCliente = 0.0;
protected Double valorAnualAtendCliente = 0.0;
public Double getValorMensal() {
return valorMensalUsoInterno + valorMensalAtendCliente;
}
public Double getValorAnual() {
return valorAnualUsoInterno + valorAnualAtendCliente;
}
public Double getValorMensalUsoInterno() {
return valorMensalUsoInterno;
}
public Double getValorAnualUsoInterno() {
return valorAnualUsoInterno;
}
public Double getValorMensalAtendCliente() {
return valorMensalAtendCliente;
}
public Double getValorAnualAtendCliente() {
return valorAnualAtendCliente;
}
public String i18n_Message(UsuarioDTO usuario, String key) {
if (usuario != null) {
if (UtilI18N.internacionaliza(usuario.getLocale(), key) != null) {
return UtilI18N.internacionaliza(usuario.getLocale(), key);
}
return key;
}
return key;
}
public ExecucaoSolicitacao(TransactionControler tc) {
super(tc);
}
public ExecucaoSolicitacao() {
super();
}
public ExecucaoSolicitacao(SolicitacaoServicoDTO solicitacaoServicoDto, TransactionControler tc) {
super(solicitacaoServicoDto, tc);
}
@Override
public InstanciaFluxo inicia(String nomeFluxo, Integer idFase) throws Exception {
TipoFluxoDao tipoFluxoDao = new TipoFluxoDao();
TipoFluxoDTO tipoFluxoDto = tipoFluxoDao.findByNome(nomeFluxo);
if (tipoFluxoDto == null)
throw new Exception("Fluxo " + nomeFluxo + " n�o existe");
return inicia(new FluxoDao().findByTipoFluxo(tipoFluxoDto.getIdTipoFluxo()), idFase);
}
@Override
public InstanciaFluxo inicia() throws Exception {
InstanciaFluxo result = null;
FluxoServicoDTO fluxoServicoDto = new FluxoServicoDao().findPrincipalByIdServicoContrato(getSolicitacaoServicoDto().getIdServicoContrato());
if (fluxoServicoDto != null) {
result = inicia(new FluxoDao().findByTipoFluxo(fluxoServicoDto.getIdTipoFluxo()), null);
} else {
String fluxoPadrao = ParametroUtil.getValor(ParametroSistema.NomeFluxoPadraoServicos, getTransacao(), null);
if (fluxoPadrao == null)
throw new Exception("Fluxo padr�o n�o parametrizado");
String idFaseStr = ParametroUtil.getValor(ParametroSistema.IDFaseExecucaoServicos, getTransacao(), null);
if (idFaseStr == null)
throw new Exception("Fase padr�o de execu��o n�o encontrada");
result = inicia(fluxoPadrao, new Integer(idFaseStr));
}
try {
String enviarNotificacao = ParametroUtil.getValor(ParametroSistema.NOTIFICAR_GRUPO_RECEPCAO_SOLICITACAO, getTransacao(), "N");
String enviarNotificacaoSolicitacoesVinculadas = ParametroUtil.getValor(ParametroSistema.RECEBER_NOTIFICACAO_ENCERRAR_ESCALONAR_SOLICITACOES_VINCULADAS, getTransacao(), "S");
if (enviarNotificacao.equalsIgnoreCase("S") && getSolicitacaoServicoDto().escalada()) {
if (enviarNotificacaoSolicitacoesVinculadas.equalsIgnoreCase("S")) {
if (getSolicitacaoServicoDto().getIdSolicitacaoRelacionada() != null) {
SolicitacaoServicoDTO solicitacaoServicoRelacionada = new SolicitacaoServicoDTO();
solicitacaoServicoRelacionada.setIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoRelacionada());
solicitacaoServicoRelacionada = (SolicitacaoServicoDTO) getSolicitacaoServicoDAO().restore(solicitacaoServicoRelacionada);
String idModeloEmailCriacao = ParametroUtil.getValor(ParametroSistema.ID_MODELO_EMAIL_CRIACAO_GRUPO_EXECUTOR_SOLICITACAO_RELACIONADA, getTransacao(), "84");
if (idModeloEmailCriacao != null) {
enviaEmailGrupo(Integer.parseInt(idModeloEmailCriacao), solicitacaoServicoRelacionada.getIdGrupoAtual());
} else {
throw new Exception("N�o h� modelo de e-mail setado nos par�metros.");
}
}
}
enviaEmailGrupo(Integer.parseInt(ParametroUtil.getValor(ParametroSistema.ID_MODELO_EMAIL_GRUPO_DESTINO, getTransacao(), null)), getSolicitacaoServicoDto().getIdGrupoAtual());
}
} catch (NumberFormatException e) {
System.out.println("N�o h� modelo de e-mail setado nos par�metros.");
}
return result;
}
@Override
public InstanciaFluxo inicia(FluxoDTO fluxoDto, Integer idFase) throws Exception {
if (fluxoDto == null)
throw new Exception("Fluxo n�o encontrado");
Integer idFaseFluxo = idFase;
this.fluxoDto = fluxoDto;
if (idFaseFluxo == null) {
FluxoServicoDTO fluxoServicoDto = new FluxoServicoDTO();
FluxoServicoDao fluxoServicoDao = new FluxoServicoDao();
fluxoServicoDto = fluxoServicoDao.findByIdServicoContratoAndIdTipoFluxo(getSolicitacaoServicoDto().getIdServicoContrato(), fluxoDto.getIdTipoFluxo());
if (fluxoServicoDto == null)
throw new Exception("Fluxo " + fluxoDto.getNomeFluxo() + " n�o est� associado a este tipo de solicita��o");
idFaseFluxo = fluxoServicoDto.getIdFase();
}
atualizaFaseSolicitacao(idFaseFluxo);
AcordoNivelServicoDao acordoNivelServicoDao = new AcordoNivelServicoDao();
AcordoNivelServicoDTO acordoNivelServicoDto = new AcordoNivelServicoDTO();
setTransacaoDao(acordoNivelServicoDao);
acordoNivelServicoDto = acordoNivelServicoDao.findAtivoByIdServicoContrato(getSolicitacaoServicoDto().getIdServicoContrato(), "T");
if (acordoNivelServicoDto == null) {
if (reabre == "S") {
AcordoNivelServicoDTO acordoNivelServicoAux = acordoNivelServicoDao.findByIdAcordoNivelServicoEServicoContrato(getSolicitacaoServicoDto().getIdAcordoNivelServico(),
getSolicitacaoServicoDto().getIdServicoContrato());
if (acordoNivelServicoAux != null) {
acordoNivelServicoDto = acordoNivelServicoAux;
}
}
if (acordoNivelServicoDto == null) {
// Se nao houver acordo especifico, ou seja, associado direto ao
// servicocontrato, entao busca um acordo geral que esteja vinculado
// ao servicocontrato.
AcordoServicoContratoDTO acordoServicoContratoDTO = new AcordoServicoContratoDao().findAtivoByIdServicoContrato(getSolicitacaoServicoDto().getIdServicoContrato(), "T");
if (acordoServicoContratoDTO == null) {
throw new Exception("solicitacaoservico.validacao.tempoacordo");
}
// Apos achar a vinculacao do acordo com o servicocontrato, entao
// faz um restore do acordo de nivel de servico.
acordoNivelServicoDto = new AcordoNivelServicoDTO();
acordoNivelServicoDto.setIdAcordoNivelServico(acordoServicoContratoDTO.getIdAcordoNivelServico());
acordoNivelServicoDto = (AcordoNivelServicoDTO) acordoNivelServicoDao.restore(acordoNivelServicoDto);
if (acordoNivelServicoDto == null) {
// Se nao houver acordo especifico, ou seja, associado direto ao
// servicocontrato
throw new Exception("solicitacaoservico.validacao.tempoacordo");
}
}
}
TempoAcordoNivelServicoDTO tempoDto = new TempoAcordoNivelServicoDTO();
TempoAcordoNivelServicoDao tempoDao = new TempoAcordoNivelServicoDao();
setTransacaoDao(tempoDao);
tempoDto.setIdAcordoNivelServico(acordoNivelServicoDto.getIdAcordoNivelServico());
tempoDto.setIdPrioridade(getSolicitacaoServicoDto().getIdPrioridade());
tempoDto.setIdFase(getSolicitacaoServicoDto().getIdFaseAtual());
tempoDto = (TempoAcordoNivelServicoDTO) tempoDao.restore(tempoDto);
if (tempoDto == null)
throw new Exception("N�o existem prazos de atendimento associados ao servi�o/prioridade desta solicita��o");
HashMap<String, Object> map = new HashMap();
mapObjetoNegocio(map);
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, map);
ExecucaoSolicitacaoDTO execucaoDto = new ExecucaoSolicitacaoDTO();
execucaoDto.setIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
execucaoDto.setIdFase(getSolicitacaoServicoDto().getIdFaseAtual());
execucaoDto.setIdFluxo(instanciaFluxo.getIdFluxo());
execucaoDto.setIdInstanciaFluxo(instanciaFluxo.getIdInstancia());
Integer seqReabertura = 0;
if (getSolicitacaoServicoDto().getSeqReabertura() != null && getSolicitacaoServicoDto().getSeqReabertura().intValue() > 0)
seqReabertura = getSolicitacaoServicoDto().getSeqReabertura();
if (seqReabertura.intValue() > 0)
execucaoDto.setSeqReabertura(getSolicitacaoServicoDto().getSeqReabertura());
execucaoDto.setPrazoHH(tempoDto.getTempoHH());
execucaoDto.setPrazoMM(tempoDto.getTempoMM());
ExecucaoSolicitacaoDao execucaoDao = new ExecucaoSolicitacaoDao();
setTransacaoDao(execucaoDao);
execucaoFluxoDto = (ExecucaoSolicitacaoDTO) execucaoDao.create(execucaoDto);
if (seqReabertura.intValue() == 0 && getSolicitacaoServicoDto().getEnviaEmailCriacao() != null && getSolicitacaoServicoDto().getEnviaEmailCriacao().equalsIgnoreCase("S")) {
ServicoContratoDTO servicoContratoDto = recuperaServicoContrato();
enviaEmail(servicoContratoDto.getIdModeloEmailCriacao());
}
reabre = "";
return instanciaFluxo;
}
@Override
public void executa(String loginUsuario, ObjetoNegocioFluxoDTO objetoNegocioDto, Integer idItemTrabalho, String acao, HashMap<String, Object> map) throws Exception {
if (acao.equals(Enumerados.ACAO_DELEGAR))
return;
TarefaFluxoDTO tarefaFluxoDto = recuperaTarefa(idItemTrabalho);
if (tarefaFluxoDto == null)
return;
OcorrenciaSolicitacaoDTO ocorrenciaSolicitacao = new OcorrenciaSolicitacaoDTO();
ExecucaoSolicitacaoDao execucaoSolicitacaoDao = new ExecucaoSolicitacaoDao();
setTransacaoDao(execucaoSolicitacaoDao);
ExecucaoSolicitacaoDTO execucaoSolicitacaoDto = execucaoSolicitacaoDao.findByIdInstanciaFluxo(tarefaFluxoDto.getIdInstancia());
if (execucaoSolicitacaoDto == null)
return;
recuperaFluxo(execucaoSolicitacaoDto.getIdFluxo());
this.objetoNegocioDto = objetoNegocioDto;
getSolicitacaoServicoDto().setIdTarefa(tarefaFluxoDto.getIdItemTrabalho());
getSolicitacaoServicoDto().setNomeTarefa(tarefaFluxoDto.getElementoFluxoDto().getDocumentacao());
if (getSolicitacaoServicoDto().getIdGrupoNivel1() == null || getSolicitacaoServicoDto().getIdGrupoNivel1().intValue() == 0)
throw new LogicException("Grupo n�vel 1 n�o informado ou erro na recupera��o do atributo");
usuarioDTO = new UsuarioDTO();
usuarioDTO = new UsuarioDao().restoreByLogin(loginUsuario);
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, tarefaFluxoDto.getIdInstancia());
mapObjetoNegocio(instanciaFluxo.getObjetos(map));
if (acao.equals(Enumerados.ACAO_INICIAR)) {
instanciaFluxo.iniciaItemTrabalho(loginUsuario, tarefaFluxoDto.getIdItemTrabalho(), map);
ocorrenciaSolicitacao = OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), tarefaFluxoDto, "Execu��o da tarefa \"" + tarefaFluxoDto.getElementoFluxoDto().getDocumentacao()
+ "\"", OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Execucao, "n�o se aplica", CategoriaOcorrencia.Execucao.getDescricao(), usuarioDTO, 0, null, getTransacao());
popularHistorico(getSolicitacaoServicoDto(), ocorrenciaSolicitacao, "Executa", usuarioDTO);
} else if (acao.equals(Enumerados.ACAO_EXECUTAR)) {
instanciaFluxo.executaItemTrabalho(loginUsuario, tarefaFluxoDto.getIdItemTrabalho(), map);
Integer tempo = 0;
try {
Integer idCalendario = getIdCalendario(getSolicitacaoServicoDto());
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(idCalendario, tarefaFluxoDto.getDataHoraCriacao());
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, UtilDatas.getDataHoraAtual(), getTransacao());
tempo = calculoDto.getTempoDecorridoHH() * 60 + calculoDto.getTempoDecorridoMM();
} catch (Exception e) {
System.out.println("#### Erro no c�lculo do tempo decorrido da tarefa");
e.printStackTrace();
}
ocorrenciaSolicitacao = OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), tarefaFluxoDto, "Execu��o da tarefa \"" + tarefaFluxoDto.getElementoFluxoDto().getDocumentacao()
+ "\"", OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Execucao, "n�o se aplica", CategoriaOcorrencia.Execucao.getDescricao(), usuarioDTO, tempo.intValue(), null, getTransacao());
popularHistorico(getSolicitacaoServicoDto(), ocorrenciaSolicitacao, "Executa", usuarioDTO);
}
if (getSolicitacaoServicoDto() != null && getSolicitacaoServicoDto().getIdSolicitacaoServico() != null) {
this.atualizaidResponsalvelAtualSolicitacao();
}
if (getSolicitacaoServicoDto().getEnviaEmailAcoes() != null && getSolicitacaoServicoDto().getEnviaEmailAcoes().equalsIgnoreCase("S")) {
getSolicitacaoServicoDto().setNomeTarefa(tarefaFluxoDto.getElementoFluxoDto().getDocumentacao());
ServicoContratoDTO servicoContratoDto = recuperaServicoContrato();
String enviarNotificacaoSolicitacoesVinculadas = ParametroUtil.getValor(ParametroSistema.RECEBER_NOTIFICACAO_ENCERRAR_ESCALONAR_SOLICITACOES_VINCULADAS, getTransacao(), "S");
if (enviarNotificacaoSolicitacoesVinculadas.equalsIgnoreCase("S")) {
if (getSolicitacaoServicoDto().getIdSolicitacaoRelacionada() != null) {
SolicitacaoServicoDTO solicitacaoServicoRelacionada = new SolicitacaoServicoDTO();
solicitacaoServicoRelacionada.setIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoRelacionada());
solicitacaoServicoRelacionada = (SolicitacaoServicoDTO) getSolicitacaoServicoDAO().restore(solicitacaoServicoRelacionada);
String idModeloEmailAcoes = ParametroUtil.getValor(ParametroSistema.ID_MODELO_EMAIL_ACOES_GRUPO_EXECUTOR_SOLICITACAO_RELACIONADA, getTransacao(), "85");
if (idModeloEmailAcoes != null) {
enviaEmailGrupo(Integer.parseInt(idModeloEmailAcoes), solicitacaoServicoRelacionada.getIdGrupoAtual());
} else {
throw new Exception("N�o h� modelo de e-mail setado nos par�metros.");
}
}
}
enviaEmail(servicoContratoDto.getIdModeloEmailAcoes());
}
if (tarefaFluxoDto.getElementoFluxoDto().getContabilizaSLA() == null || tarefaFluxoDto.getElementoFluxoDto().getContabilizaSLA().equalsIgnoreCase("S")) {
if (getSolicitacaoServicoDto().getDataHoraCaptura() == null) {
getSolicitacaoServicoDto().setDataHoraCaptura(UtilDatas.getDataHoraAtual());
setTransacaoDao(getSolicitacaoServicoDAO());
getSolicitacaoServicoDAO().atualizaDataHoraCaptura(getSolicitacaoServicoDto());
}
}
}
@Override
public void delega(String loginUsuario, ObjetoNegocioFluxoDTO objetoNegocioDto, Integer idItemTrabalho, String usuarioDestino, String grupoDestino) throws Exception {
TarefaFluxoDTO tarefaFluxoDto = recuperaTarefa(idItemTrabalho);
if (tarefaFluxoDto == null)
return;
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, tarefaFluxoDto.getIdInstancia());
instanciaFluxo.delegaItemTrabalho(loginUsuario, idItemTrabalho, usuarioDestino, grupoDestino);
this.objetoNegocioDto = objetoNegocioDto;
usuarioDTO = new UsuarioDTO();
usuarioDTO = new UsuarioDao().restoreByLogin(loginUsuario);
UsuarioGrupo usuarioGrupo = new UsuarioGrupo();
UsuarioBpmDTO usuarioBpmDto = usuarioGrupo.recuperaUsuario(usuarioDestino);
String ocorr = "Compartilhamento da tarefa \"" + tarefaFluxoDto.getElementoFluxoDto().getDocumentacao() + "\"";
if (usuarioDestino != null)
ocorr += " com o usu�rio " + usuarioBpmDto.getNome();
if (grupoDestino != null)
ocorr += " com o grupo " + grupoDestino;
OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), tarefaFluxoDto, ocorr, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Compartilhamento, "n�o se aplica",
CategoriaOcorrencia.Compartilhamento.getDescricao(), usuarioDTO, 0, null, getTransacao());
}
@Override
public void direcionaAtendimento(String loginUsuario, ObjetoNegocioFluxoDTO objetoNegocioDto, String grupoAtendimento) throws Exception {
if (getSolicitacaoServicoDto() == null)
return;
if (grupoAtendimento == null)
return;
GrupoDTO grupoAtendimentoDto = new GrupoDao().restoreBySigla(grupoAtendimento);
if (grupoAtendimentoDto == null)
return;
UsuarioDTO usuarioRespDto = new UsuarioDTO();
usuarioRespDto.setIdUsuario(getSolicitacaoServicoDto().getIdResponsavel());
usuarioRespDto = (UsuarioDTO) new UsuarioDao().restore(usuarioRespDto);
this.objetoNegocioDto = objetoNegocioDto;
Collection<ExecucaoSolicitacaoDTO> colExecucao = new ExecucaoSolicitacaoDao().listByIdSolicitacao(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colExecucao != null) {
ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao();
setTransacaoDao(itemTrabalhoFluxoDao);
OcorrenciaSolicitacaoDao ocorrenciaSolicitacaoDao = new OcorrenciaSolicitacaoDao();
setTransacaoDao(ocorrenciaSolicitacaoDao);
for (ExecucaoSolicitacaoDTO execucaoSolicitacaoDto : colExecucao) {
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, execucaoSolicitacaoDto.getIdInstanciaFluxo());
Collection<ItemTrabalhoFluxoDTO> colItens = itemTrabalhoFluxoDao.findDisponiveisByIdInstancia(execucaoSolicitacaoDto.getIdInstanciaFluxo());
if (colItens != null) {
for (ItemTrabalhoFluxoDTO itemTrabalhoFluxoDto : colItens) {
ItemTrabalho itemTrabalho = ItemTrabalho.getItemTrabalho(instanciaFluxo, itemTrabalhoFluxoDto.getIdItemTrabalho());
itemTrabalho.redireciona(loginUsuario, null, grupoAtendimento);
usuarioDTO = new UsuarioDTO();
usuarioDTO = new UsuarioDao().restoreByLogin(loginUsuario);
String ocorr = "Direcionamento da tarefa \"" + itemTrabalho.getElementoFluxoDto().getDocumentacao() + "\"";
ocorr += " para o grupo " + grupoAtendimento;
OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), itemTrabalhoFluxoDto, ocorr, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Direcionamento, "n�o se aplica",
CategoriaOcorrencia.Direcionamento.getDescricao(), usuarioDTO, 0, null, getTransacao());
}
}
}
}
try {
String enviarNotificacao = ParametroUtil.getValor(ParametroSistema.NOTIFICAR_GRUPO_RECEPCAO_SOLICITACAO, getTransacao(), "N");
if (enviarNotificacao.equalsIgnoreCase("S")) {
enviaEmailGrupo(Integer.parseInt(ParametroUtil.getValor(ParametroSistema.ID_MODELO_EMAIL_GRUPO_DESTINO, getTransacao(), null)), grupoAtendimentoDto.getIdGrupo());
}
} catch (NumberFormatException e) {
System.out.println("N�o h� modelo de e-mail setado nos par�metros.");
}
}
@Override
public void mapObjetoNegocio(Map<String, Object> map) throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = (SolicitacaoServicoDTO) objetoNegocioDto;
SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoServiceEjb().restoreAll(solicitacaoServicoDto.getIdSolicitacaoServico(), getTransacao());
if (solicitacaoAuxDto != null) {
solicitacaoServicoDto.setGrupoAtual(solicitacaoAuxDto.getGrupoAtual());
solicitacaoServicoDto.setGrupoNivel1(solicitacaoAuxDto.getGrupoNivel1());
}
adicionaObjeto("solicitacaoServico", solicitacaoServicoDto, map);
if (usuarioDTO != null)
adicionaObjeto("usuario", usuarioDTO, map);
else if (solicitacaoServicoDto.getUsuarioDto() != null)
adicionaObjeto("usuario", solicitacaoServicoDto.getUsuarioDto(), map);
adicionaObjeto("execucaoFluxo", this, map);
adicionaObjeto("solicitacaoServicoService", new SolicitacaoServicoServiceEjb(), map);
}
public SolicitacaoServicoDTO getSolicitacaoServicoDto() {
return (SolicitacaoServicoDTO) objetoNegocioDto;
}
@Override
public List<TarefaFluxoDTO> recuperaTarefas(String loginUsuario, Integer idTarefa) throws Exception {
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
List<TarefaFluxoDTO> result = null;
List<TarefaFluxoDTO> listTarefas = super.recuperaTarefas(loginUsuario, idTarefa);
if (listTarefas != null) {
result = new ArrayList();
SolicitacaoServicoServiceEjb solicitacaoServicoService = new SolicitacaoServicoServiceEjb();
Collection<SolicitacaoServicoDTO> listSolicitacaoServicoDto = solicitacaoServicoService.listByTarefas(listTarefas, tc);
Collection<SolicitacaoServicoDTO> listSolicitacoesFilhas = solicitacaoServicoService.listSolicitacoesFilhas(tc);
if (listSolicitacaoServicoDto != null && !listSolicitacaoServicoDto.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDto : listSolicitacaoServicoDto) {
for (TarefaFluxoDTO tarefaDto : listTarefas) {
if (solicitacaoServicoDto.getIdInstanciaFluxo().equals(tarefaDto.getIdInstancia())) {
boolean possuiFilho = false;
if (listSolicitacoesFilhas != null && !listSolicitacoesFilhas.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDTO2 : listSolicitacoesFilhas) {
if (solicitacaoServicoDto.getIdSolicitacaoServico().equals(solicitacaoServicoDTO2.getIdSolicitacaoPai())) {
possuiFilho = true;
break;
}
}
}
solicitacaoServicoDto.setPossuiFilho(possuiFilho);
tarefaDto.setSolicitacaoDto(solicitacaoServicoDto);
tarefaDto.setDataHoraLimite(solicitacaoServicoDto.getDataHoraLimite());
result.add(tarefaDto);
}
}
}
}
if (result != null) {
Collections.sort(result, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.ASC));
}
}
return result;
} finally {
tc.closeQuietly();
}
}
public List<TarefaFluxoDTO> recuperaTarefas(String loginUsuario, TipoSolicitacaoServico[] tiposSolicitacao, String somenteEmAprovacao) throws Exception {
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
List<TarefaFluxoDTO> result = null;
List<TarefaFluxoDTO> tarefasDoUsuario = super.recuperaTarefas(loginUsuario);
if (tarefasDoUsuario != null) {
TemplateSolicitacaoServicoDao templateSolicitacaoServicoDao = new TemplateSolicitacaoServicoDao();
setTransacaoDao(templateSolicitacaoServicoDao);
List<TarefaFluxoDTO> listTarefas = new ArrayList();
if (somenteEmAprovacao != null && somenteEmAprovacao.equalsIgnoreCase("S")) {
List<TemplateSolicitacaoServicoDTO> templates = templateSolicitacaoServicoDao.listComAprovacao();
HashMap<String, TemplateSolicitacaoServicoDTO> mapTemplates = new HashMap<String, TemplateSolicitacaoServicoDTO>();
if (templates != null) {
for (TemplateSolicitacaoServicoDTO templateDto : templates) {
mapTemplates.put(templateDto.getIdentificacao().toUpperCase(), templateDto);
}
}
for (TarefaFluxoDTO tarefaDto : tarefasDoUsuario) {
if (tarefaDto.getElementoFluxoDto().getTemplate() != null && !tarefaDto.getElementoFluxoDto().getTemplate().equals("")) {
if (mapTemplates.get(tarefaDto.getElementoFluxoDto().getTemplate().toUpperCase()) != null)
listTarefas.add(tarefaDto);
}
}
} else {
listTarefas = tarefasDoUsuario;
}
if (listTarefas.size() == 0)
return null;
result = new ArrayList();
SolicitacaoServicoServiceEjb solicitacaoServicoService = new SolicitacaoServicoServiceEjb();
Collection<SolicitacaoServicoDTO> listSolicitacaoServicoDto = solicitacaoServicoService.listByTarefas(listTarefas, tiposSolicitacao, tc);
Collection<SolicitacaoServicoDTO> listSolicitacoesFilhas = solicitacaoServicoService.listSolicitacoesFilhas(tc);
if (listSolicitacaoServicoDto != null && !listSolicitacaoServicoDto.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDto : listSolicitacaoServicoDto) {
for (TarefaFluxoDTO tarefaDto : listTarefas) {
if (solicitacaoServicoDto.getIdInstanciaFluxo().equals(tarefaDto.getIdInstancia())) {
boolean possuiFilho = false;
if (listSolicitacoesFilhas != null && !listSolicitacoesFilhas.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDTO2 : listSolicitacoesFilhas) {
if (solicitacaoServicoDto.getIdSolicitacaoServico().equals(solicitacaoServicoDTO2.getIdSolicitacaoPai())) {
possuiFilho = true;
break;
}
}
}
solicitacaoServicoDto.setPossuiFilho(possuiFilho);
tarefaDto.setSolicitacaoDto(solicitacaoServicoDto);
tarefaDto.setDataHoraLimite(solicitacaoServicoDto.getDataHoraLimite());
result.add(tarefaDto);
}
}
}
}
Collections.sort(result, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.ASC));
}
return result;
} finally {
tc.closeQuietly();
}
}
public List<TarefaFluxoDTO> recuperaTarefas(Integer qtdAtual, Integer qtdAPaginacao, String login) throws Exception {
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
List<TarefaFluxoDTO> result = null;
List<TarefaFluxoDTO> listTarefas = super.recuperaTarefas(login);
if (listTarefas != null) {
result = new ArrayList();
SolicitacaoServicoServiceEjb solicitacaoServicoService = new SolicitacaoServicoServiceEjb();
Collection<SolicitacaoServicoDTO> listSolicitacaoServicoDto = solicitacaoServicoService.listByTarefas(listTarefas, qtdAtual, qtdAPaginacao, tc);
Collection<SolicitacaoServicoDTO> listSolicitacoesFilhas = solicitacaoServicoService.listSolicitacoesFilhas(tc);
if (listSolicitacaoServicoDto != null && !listSolicitacaoServicoDto.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDto : listSolicitacaoServicoDto) {
for (TarefaFluxoDTO tarefaDto : listTarefas) {
if (solicitacaoServicoDto.getIdInstanciaFluxo().equals(tarefaDto.getIdInstancia())) {
boolean possuiFilho = false;
if (listSolicitacoesFilhas != null && !listSolicitacoesFilhas.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDTO2 : listSolicitacoesFilhas) {
if (solicitacaoServicoDto.getIdSolicitacaoServico().equals(solicitacaoServicoDTO2.getIdSolicitacaoPai())) {
possuiFilho = true;
break;
}
}
}
solicitacaoServicoDto.setPossuiFilho(possuiFilho);
tarefaDto.setSolicitacaoDto(solicitacaoServicoDto);
tarefaDto.setDataHoraLimite(solicitacaoServicoDto.getDataHoraLimite());
result.add(tarefaDto);
}
}
}
}
Collections.sort(result, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.ASC));
}
return result;
} finally {
tc.closeQuietly();
}
}
public List<TarefaFluxoDTO> recuperaTarefas(String loginUsuario, String campoOrdenacao, Boolean asc) throws Exception {
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
List<TarefaFluxoDTO> result = null;
List<TarefaFluxoDTO> listTarefas = super.recuperaTarefas(loginUsuario);
if (listTarefas != null) {
result = new ArrayList();
SolicitacaoServicoServiceEjb solicitacaoServicoService = new SolicitacaoServicoServiceEjb();
for (TarefaFluxoDTO tarefaDto : listTarefas) {
SolicitacaoServicoDTO solicitacaoServicoDto = solicitacaoServicoService.restoreByIdInstanciaFluxo(tarefaDto.getIdInstancia(), tc);
if (solicitacaoServicoDto != null) {
tarefaDto.setSolicitacaoDto(solicitacaoServicoDto);
tarefaDto.setDataHoraLimite(solicitacaoServicoDto.getDataHoraLimite());
result.add(tarefaDto);
}
}
}
return result;
} finally {
tc.closeQuietly();
}
}
public Integer totalPaginas(Integer itensPorPagina, String loginUsuario) throws Exception {
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
Integer total = 0;
List<TarefaFluxoDTO> listTarefas = super.recuperaTarefas(loginUsuario);
if (listTarefas != null) {
total = getSolicitacaoServicoDAO().totalDePaginas(itensPorPagina, listTarefas);
}
return total;
} finally {
tc.closeQuietly();
}
}
private void atualizaFaseSolicitacao(Integer idFase) throws Exception {
setTransacaoDao(getSolicitacaoServicoDAO());
getSolicitacaoServicoDto().setIdFaseAtual(idFase);
getSolicitacaoServicoDAO().updateNotNull(getSolicitacaoServicoDto());
}
private void atualizaidResponsalvelAtualSolicitacao() throws Exception {
try {
if (this.getSolicitacaoServicoDto() != null && this.getSolicitacaoServicoDto().getIdSolicitacaoServico() != null) {
SolicitacaoServicoDTO solicitacaoServicoDTO = this.getSolicitacaoServicoDto();
getSolicitacaoServicoDAO().setTransactionControler(this.getTransacao());
List<SolicitacaoServicoDTO> listSolicitacaoServico = (List<SolicitacaoServicoDTO>) getSolicitacaoServicoDAO().findResponsavelAtual(solicitacaoServicoDTO.getIdSolicitacaoServico());
if (listSolicitacaoServico != null) {
solicitacaoServicoDTO.setIdUsuarioResponsavelAtual(listSolicitacaoServico.get(0).getIdUsuarioResponsavelAtual());
getSolicitacaoServicoDAO().atualizaIdUsuarioResponsavel(solicitacaoServicoDTO);
} else {
getSolicitacaoServicoDAO().atualizaIdUsuarioResponsavel(solicitacaoServicoDTO);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void enviaEmail(String identificador) throws Exception {
if (identificador == null)
return;
ModeloEmailDTO modeloEmailDto = new ModeloEmailDao().findByIdentificador(identificador);
if (modeloEmailDto != null)
enviaEmail(modeloEmailDto.getIdModeloEmail());
}
public boolean isEmailHabilitado() throws Exception {
String enviaEmail = ParametroUtil.getValor(ParametroSistema.EnviaEmailFluxo, getTransacao(), "N");
return enviaEmail.equalsIgnoreCase("S");
}
public String getRemetenteEmail() throws Exception {
String remetente = ParametroUtil.getValor(ParametroSistema.RemetenteNotificacoesSolicitacao, getTransacao(), null);
if (remetente == null)
throw new LogicException("Remetente para notifica��es de solicita��o de servi�o n�o foi parametrizado");
return remetente;
}
public void complementaInformacoesEmail(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
String urlSistema = ParametroUtil.getValor(ParametroSistema.URL_Sistema, getTransacao(), "");
if (solicitacaoServicoDto != null) {
String idHashValidacao = CriptoUtils.generateHash("CODED" + solicitacaoServicoDto.getIdSolicitacaoServico(), "MD5");
solicitacaoServicoDto.setHashPesquisaSatisfacao(idHashValidacao);
solicitacaoServicoDto.setUrlSistema(urlSistema);
solicitacaoServicoDto.setLinkPesquisaSatisfacao("<a href=\"" + urlSistema + "/pages/pesquisaSatisfacao/pesquisaSatisfacao.load?idSolicitacaoServico="
+ solicitacaoServicoDto.getIdSolicitacaoServico() + "&hash=" + idHashValidacao + "\">Clique aqui para fazer a avalia��o do Atendimento</a>");
}
}
@Override
public void enviaEmail(String identificador, String[] destinatarios) throws Exception {
if (identificador == null)
return;
if (destinatarios == null || destinatarios.length == 0)
return;
if (!isEmailHabilitado())
return;
ModeloEmailDTO modeloEmailDto = new ModeloEmailDao().findByIdentificador(identificador);
if (modeloEmailDto == null)
return;
/*
* String para = destinatarios[0]; String cc = null; if (destinatarios.length > 1) { cc = ""; for (int i = 1; i < destinatarios.length; i++) { cc += destinatarios[i] + ";"; } }
*/
String remetente = getRemetenteEmail();
SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoServiceEjb().restoreAll(getSolicitacaoServicoDto().getIdSolicitacaoServico(), getTransacao());
if (getSolicitacaoServicoDto().getNomeTarefa() != null && !getSolicitacaoServicoDto().getNomeTarefa().trim().equals("")) {
solicitacaoAuxDto.setNomeTarefa(getSolicitacaoServicoDto().getNomeTarefa());
} else if (getSolicitacaoServicoDto().getIdTarefa() != null) {
TarefaFluxoDTO tarefaDto = recuperaTarefa(getSolicitacaoServicoDto().getIdTarefa());
if (tarefaDto != null && tarefaDto.getElementoFluxoDto() != null)
solicitacaoAuxDto.setNomeTarefa(tarefaDto.getElementoFluxoDto().getDocumentacao());
}
complementaInformacoesEmail(solicitacaoAuxDto);
/* Decodifica a mensagem a ser enviada */
/*
* comentei a linha abaixo porque estava dando problema no caracter \ e "
*/
// solicitacaoAuxDto.setDescricao(StringEscapeUtils.unescapeJavaScript(solicitacaoAuxDto.getDescricao()));
solicitacaoAuxDto.setResposta(UtilStrings.unescapeJavaString(solicitacaoAuxDto.getResposta()));
// System.out.println("#################### ENVIANDO EMAIL ####################");
// System.out.println("### Modelo: " + identificador);
// System.out.println("### No. solicita��o: " + solicitacaoAuxDto.getIdSolicitacaoServico());
// if (solicitacaoAuxDto.getNomeTarefa() != null)
// System.out.println("### Tarefa: " + solicitacaoAuxDto.getNomeTarefa());
MensagemEmail mensagem = new MensagemEmail(modeloEmailDto.getIdModeloEmail(), new IDto[] { solicitacaoAuxDto });
try {
for (String para : destinatarios) {
// System.out.println("### Destinat�rio: " + para);
mensagem.envia(para, null, remetente);
Thread.sleep(50);
}
} catch (Exception e) {
}
}
@Override
public void enviaEmail(Integer idModeloEmail) throws Exception {
if (idModeloEmail == null)
return;
if (!isEmailHabilitado())
return;
String remetente = getRemetenteEmail();
SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoServiceEjb().restoreAll(getSolicitacaoServicoDto().getIdSolicitacaoServico(), getTransacao());
if (solicitacaoAuxDto != null) {
if (getSolicitacaoServicoDto().getNomeTarefa() != null && !getSolicitacaoServicoDto().getNomeTarefa().trim().equals("")) {
solicitacaoAuxDto.setNomeTarefa(getSolicitacaoServicoDto().getNomeTarefa());
} else if (getSolicitacaoServicoDto().getIdTarefa() != null) {
TarefaFluxoDTO tarefaDto = recuperaTarefa(getSolicitacaoServicoDto().getIdTarefa());
if (tarefaDto != null && tarefaDto.getElementoFluxoDto() != null)
solicitacaoAuxDto.setNomeTarefa(tarefaDto.getElementoFluxoDto().getDocumentacao());
}
}
complementaInformacoesEmail(solicitacaoAuxDto);
/* Decodifica a mensagem a ser enviada */
if (solicitacaoAuxDto != null) {
/*
* comentei a linha abaixo porque estava dando problema no caracter \ e "
*/
// solicitacaoAuxDto.setDescricao(StringEscapeUtils.unescapeJavaScript(solicitacaoAuxDto.getDescricao()));
solicitacaoAuxDto.setResposta(UtilStrings.unescapeJavaString(solicitacaoAuxDto.getResposta()));
}
SolicitacaoServicoDTO solicitacaoAuxiliarEmail = new SolicitacaoServicoDTO();
if (solicitacaoAuxDto != null) {
solicitacaoAuxiliarEmail = new SolicitacaoServicoServiceEjb().restoreInfoEmails(solicitacaoAuxDto.getIdSolicitacaoServico(), getTransacao());
}
if (solicitacaoAuxiliarEmail != null) {
if (solicitacaoAuxiliarEmail.getDataRegistroOcorrencia() != null) {
SimpleDateFormat simple = new SimpleDateFormat("dd/MM/yyyy");
solicitacaoAuxiliarEmail.setDataRegistroOcorrenciaStr(simple.format(solicitacaoAuxiliarEmail.getDataRegistroOcorrencia()));
}
solicitacaoAuxDto.setRegistradoPor(solicitacaoAuxiliarEmail.getRegistradoPor());
solicitacaoAuxDto.setRegistroexecucao(solicitacaoAuxiliarEmail.getRegistroexecucao());
solicitacaoAuxDto.setDataRegistroOcorrenciaStr(solicitacaoAuxiliarEmail.getDataRegistroOcorrenciaStr());
solicitacaoAuxDto.setHoraRegistroOcorrencia(solicitacaoAuxiliarEmail.getHoraRegistroOcorrencia());
}
if (solicitacaoAuxiliarEmail != null && solicitacaoAuxiliarEmail.getRegistroexecucao() == null) {
solicitacaoAuxDto.setRegistroexecucao("--");
solicitacaoAuxDto.setRegistradoPor("--");
solicitacaoAuxDto.setDataRegistroOcorrenciaStr("");
solicitacaoAuxDto.setHoraRegistroOcorrencia("--");
}
if (solicitacaoAuxiliarEmail != null && solicitacaoAuxiliarEmail.getCategoriaOcorrencia() != null && !solicitacaoAuxiliarEmail.getCategoriaOcorrencia().equalsIgnoreCase("Execucao")) {
solicitacaoAuxDto.setRegistroexecucao("--");
solicitacaoAuxDto.setRegistradoPor("--");
solicitacaoAuxDto.setDataRegistroOcorrenciaStr("");
solicitacaoAuxDto.setHoraRegistroOcorrencia("--");
}
// Esse registro de execu��o na verdade deve ser as informa��es da ocorr�ncia da solicita��o, caso comece com "Execu��o da Tarefa" quer dizer que foi gerado pelo sistema,
// logo, n�o tem import�ncia
if (solicitacaoAuxiliarEmail != null && solicitacaoAuxiliarEmail.getRegistroexecucao() != null && solicitacaoAuxiliarEmail.getRegistroexecucao().startsWith("Execu��o da tarefa")) {
solicitacaoAuxDto.setRegistroexecucao("--");
solicitacaoAuxDto.setRegistradoPor("--");
solicitacaoAuxDto.setDataRegistroOcorrenciaStr("");
solicitacaoAuxDto.setHoraRegistroOcorrencia("--");
}
// C�lculo do sla para enviar para o e-mail
if (solicitacaoAuxDto != null && solicitacaoAuxiliarEmail != null) {
if ((solicitacaoAuxDto.getPrazoHH() != null && solicitacaoAuxDto.getPrazoHH() != 0) || (solicitacaoAuxDto.getPrazoMM() != null && solicitacaoAuxDto.getPrazoMM() != 0)) {
if (solicitacaoAuxDto.getPrazoHH() == 0) {
solicitacaoAuxDto.setSla(solicitacaoAuxDto.getPrazoHH() + "0:" + solicitacaoAuxDto.getPrazoMM());
} else if (solicitacaoAuxDto.getPrazoMM() == 0) {
solicitacaoAuxDto.setSla(solicitacaoAuxDto.getPrazoHH() + ":" + solicitacaoAuxDto.getPrazoMM() + "0");
} else {
solicitacaoAuxDto.setSla(solicitacaoAuxDto.getPrazoHH() + ":" + solicitacaoAuxDto.getPrazoMM());
}
} else {
solicitacaoAuxDto.setSla("Sla � combinar");
}
}
MensagemEmail mensagem = new MensagemEmail(idModeloEmail, new IDto[] { solicitacaoAuxDto });
try {
if (solicitacaoAuxDto != null) {
mensagem.envia(solicitacaoAuxDto.getEmailcontato(), null, remetente);
}
} catch (Exception e) {
}
}
/**
* Notifica todos os Empregados de um grupo.
*
* @param idModeloEmail
* @throws Exception
*/
public void enviaEmailGrupo(Integer idModeloEmail, Integer idGrupoDestino) throws Exception {
MensagemEmail mensagem = null;
if (idGrupoDestino == null) {
return;
}
if (idModeloEmail == null) {
return;
}
GrupoService grupoService = (GrupoService) ServiceLocator.getInstance().getService(GrupoService.class, null);
List<String> emails = null;
try {
emails = (List<String>) grupoService.listarEmailsPorGrupo(idGrupoDestino);
} catch (Exception e) {
return;
}
if (emails == null || emails.isEmpty()) {
return;
}
String remetente = ParametroUtil.getValor(ParametroSistema.RemetenteNotificacoesSolicitacao, getTransacao(), null);
if (remetente == null)
throw new LogicException("Remetente para notifica��es de solicita��o de servi�o n�o foi parametrizado");
SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoServiceEjb().restoreAll(getSolicitacaoServicoDto().getIdSolicitacaoServico(), getTransacao());
if (solicitacaoAuxDto == null) {
return;
}
if (getSolicitacaoServicoDto().getNomeTarefa() != null && !getSolicitacaoServicoDto().getNomeTarefa().trim().equals("")) {
solicitacaoAuxDto.setNomeTarefa(getSolicitacaoServicoDto().getNomeTarefa());
} else if (getSolicitacaoServicoDto().getIdTarefa() != null) {
TarefaFluxoDTO tarefaDto = recuperaTarefa(getSolicitacaoServicoDto().getIdTarefa());
if (tarefaDto != null && tarefaDto.getElementoFluxoDto() != null)
solicitacaoAuxDto.setNomeTarefa(tarefaDto.getElementoFluxoDto().getDocumentacao());
}
/* Decodifica a mensagem a ser enviada */
/*
* comentei a linha abaixo porque estava dando problema no caracter \ e "
*/
// solicitacaoAuxDto.setDescricao(StringEscapeUtils.unescapeJavaScript(solicitacaoAuxDto.getDescricao()));
solicitacaoAuxDto.setResposta(UtilStrings.unescapeJavaString(solicitacaoAuxDto.getResposta()));
try {
// EmpregadoDTO aux = null;
for (String email : emails) {
int posArroba = email.indexOf("@");
if (posArroba > 0 && email.substring(posArroba).contains(".")) {
try {
mensagem = new MensagemEmail(idModeloEmail, new IDto[] { solicitacaoAuxDto });
// aux = (EmpregadoDTO)
// getEmpregadoService().restore(e);
// if(aux != null && aux.getEmail() != null &&
// !aux.getEmail().trim().equalsIgnoreCase("") ){
mensagem.envia(email, null, remetente);
Thread.sleep(50);
} catch (Exception e) {
// faz nada
}
}
// }
}
} catch (Exception e) {
}
}
private ServicoContratoDTO recuperaServicoContrato() throws Exception {
ServicoContratoDao servicoContratoDao = new ServicoContratoDao();
setTransacaoDao(servicoContratoDao);
ServicoContratoDTO servicoContratoDto = new ServicoContratoDTO();
if (getSolicitacaoServicoDto().getIdServicoContrato() != null)
servicoContratoDto.setIdServicoContrato(getSolicitacaoServicoDto().getIdServicoContrato());
else {
setTransacaoDao(getSolicitacaoServicoDAO());
SolicitacaoServicoDTO solicitacaoServicoDto = (SolicitacaoServicoDTO) objetoNegocioDto;
SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoDTO();
solicitacaoAuxDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
solicitacaoAuxDto = (SolicitacaoServicoDTO) getSolicitacaoServicoDAO().restore(solicitacaoAuxDto);
servicoContratoDto.setIdServicoContrato(solicitacaoAuxDto.getIdServicoContrato());
}
servicoContratoDto = (ServicoContratoDTO) servicoContratoDao.restore(servicoContratoDto);
if (servicoContratoDto == null)
throw new LogicException("Servi�o contrato n�o localizado");
return servicoContratoDto;
}
@Override
public void encerra() throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDto();
if (solicitacaoServicoDto == null)
throw new Exception("Solicita��o de servi�o n�o encontrada");
if (solicitacaoServicoDto.encerrada())
return;
validaEncerramento();
// if (!solicitacaoServicoDto.atendida() &&
// !solicitacaoServicoDto.reclassificada())
// throw new
// Exception("Solicita��o de servi�o n�o permite encerramento");
Collection<ExecucaoSolicitacaoDTO> colExecucao = new ExecucaoSolicitacaoDao().listByIdSolicitacao(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colExecucao != null) {
for (ExecucaoSolicitacaoDTO execucaoSolicitacaoDto : colExecucao) {
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, execucaoSolicitacaoDto.getIdInstanciaFluxo());
instanciaFluxo.encerra();
}
}
if (!solicitacaoServicoDto.getSituacao().equalsIgnoreCase(SituacaoSolicitacaoServico.Cancelada.name()))
solicitacaoServicoDto.setSituacao(SituacaoSolicitacaoServico.Fechada.name());
solicitacaoServicoDto.setDataHoraFim(UtilDatas.getDataHoraAtual());
calculaTempoCaptura(solicitacaoServicoDto);
calculaTempoAtendimento(solicitacaoServicoDto);
calculaTempoAtraso(solicitacaoServicoDto);
setTransacaoDao(getSolicitacaoServicoDAO());
getSolicitacaoServicoDAO().updateNotNull(solicitacaoServicoDto);
OcorrenciaSolicitacaoDTO ocorrenciaSolicitacaoDTO = new OcorrenciaSolicitacaoDTO();
usuarioDTO = new UsuarioDTO();
usuarioDTO.setLogin("Autom�tico");
ocorrenciaSolicitacaoDTO = OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Encerramento, null,
CategoriaOcorrencia.Encerramento.getDescricao(), usuarioDTO, 0, null, getTransacao());
popularHistorico(solicitacaoServicoDto, ocorrenciaSolicitacaoDTO, "Encerra", usuarioDTO);
if (getSolicitacaoServicoDto().getEnviaEmailFinalizacao() != null && getSolicitacaoServicoDto().getEnviaEmailFinalizacao().equalsIgnoreCase("S")) {
ServicoContratoDTO servicoContratoDto = recuperaServicoContrato();
String enviarNotificacaoSolicitacoesVinculadas = ParametroUtil.getValor(ParametroSistema.RECEBER_NOTIFICACAO_ENCERRAR_ESCALONAR_SOLICITACOES_VINCULADAS, getTransacao(), "S");
if (enviarNotificacaoSolicitacoesVinculadas.equalsIgnoreCase("S")) {
if (getSolicitacaoServicoDto().getIdSolicitacaoRelacionada() != null) {
SolicitacaoServicoDTO solicitacaoServicoRelacionada = new SolicitacaoServicoDTO();
solicitacaoServicoRelacionada.setIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoRelacionada());
solicitacaoServicoRelacionada = (SolicitacaoServicoDTO) getSolicitacaoServicoDAO().restore(solicitacaoServicoRelacionada);
String idModeloEmailEncerramento = ParametroUtil.getValor(ParametroSistema.ID_MODELO_EMAIL_ENCERRAMENTO_GRUPO_EXECUTOR_SOLICITACAO_RELACIONADA, getTransacao(), "86");
if (idModeloEmailEncerramento != null) {
enviaEmailGrupo(Integer.parseInt(idModeloEmailEncerramento), solicitacaoServicoRelacionada.getIdGrupoAtual());
} else {
throw new Exception("N�o h� modelo de e-mail setado nos par�metros.");
}
}
}
enviaEmail(servicoContratoDto.getIdModeloEmailFinalizacao());
}
Collection<SolicitacaoServicoDTO> colRelacionados = getSolicitacaoServicoDAO().findByIdSolicitacaoPai(solicitacaoServicoDto.getIdSolicitacaoServico());
if (colRelacionados != null) {
SolicitacaoServicoServiceEjb solicitacaoService = new SolicitacaoServicoServiceEjb();
for (SolicitacaoServicoDTO solicitacaoRelacionadaDto : colRelacionados) {
if (solicitacaoRelacionadaDto.getIdSolicitacaoServico().intValue() == solicitacaoServicoDto.getIdSolicitacaoServico().intValue())
continue;
SolicitacaoServicoDTO solicitacaoAuxDto = solicitacaoService.restoreAll(solicitacaoRelacionadaDto.getIdSolicitacaoServico(), getTransacao());
solicitacaoAuxDto.setIdCausaIncidente(solicitacaoServicoDto.getIdCausaIncidente());
solicitacaoAuxDto.setResposta(solicitacaoServicoDto.getResposta());
ExecucaoSolicitacao execucaoSolicitacao = new ExecucaoSolicitacao(solicitacaoAuxDto, getTransacao());
execucaoSolicitacao.encerra();
}
}
}
@Override
public void reabre(String loginUsuario) throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDto();
if (solicitacaoServicoDto == null)
throw new Exception("Solicita��o de Servi�o n�o encontrada");
if (!solicitacaoServicoDto.encerrada())
throw new Exception("Solicita��o de Servi�oo n�o permite reabertura");
usuarioDTO = new UsuarioDTO();
usuarioDTO = new UsuarioDao().restoreByLogin(loginUsuario);
int seqReabertura = 1;
ReaberturaSolicitacaoDao reaberturaSolicitacaoDao = new ReaberturaSolicitacaoDao();
setTransacaoDao(reaberturaSolicitacaoDao);
Collection colReabertura = reaberturaSolicitacaoDao.findByIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
if (colReabertura != null)
seqReabertura = colReabertura.size() + 1;
ReaberturaSolicitacaoDTO reaberturaSolicitacaoDto = new ReaberturaSolicitacaoDTO();
reaberturaSolicitacaoDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
reaberturaSolicitacaoDto.setSeqReabertura(seqReabertura);
reaberturaSolicitacaoDto.setIdResponsavel(usuarioDTO.getIdUsuario());
reaberturaSolicitacaoDto.setDataHora(UtilDatas.getDataHoraAtual());
reaberturaSolicitacaoDao.create(reaberturaSolicitacaoDto);
solicitacaoServicoDto.setSituacao(SituacaoSolicitacaoServico.Reaberta.name());
solicitacaoServicoDto.setSeqReabertura(new Integer(seqReabertura));
setTransacaoDao(getSolicitacaoServicoDAO());
getSolicitacaoServicoDAO().update(solicitacaoServicoDto);
OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Reabertura, null, CategoriaOcorrencia.Reabertura.getDescricao(),
usuarioDTO, 0, null, getTransacao());
reabre = "S";
inicia();
}
@Override
public void suspende(String loginUsuario) throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDto();
if (solicitacaoServicoDto == null)
throw new LogicException("solicitacaoservico.validacao.solicitacaoservico");
if (!solicitacaoServicoDto.emAtendimento())
throw new LogicException("citcorpore.comum.validarSuspensaoSolicitacao");
OcorrenciaSolicitacaoDTO ocorrenciaSolicitacao = new OcorrenciaSolicitacaoDTO();
solicitacaoServicoDto.setDataHoraSuspensao(UtilDatas.getDataHoraAtual());
solicitacaoServicoDto.setDataHoraReativacao(null);
suspendeSLA(solicitacaoServicoDto);
SolicitacaoServicoDao solicitacaoDao = new SolicitacaoServicoDao();
setTransacaoDao(solicitacaoDao);
solicitacaoServicoDto.setSituacao(SituacaoSolicitacaoServico.Suspensa.name());
solicitacaoDao.update(solicitacaoServicoDto);
JustificativaSolicitacaoDTO justificativaDto = new JustificativaSolicitacaoDTO();
justificativaDto.setIdJustificativa(solicitacaoServicoDto.getIdJustificativa());
justificativaDto.setComplementoJustificativa(solicitacaoServicoDto.getComplementoJustificativa());
usuarioDTO = new UsuarioDTO();
usuarioDTO = new UsuarioDao().restoreByLogin(loginUsuario);
ocorrenciaSolicitacao = OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Suspensao, null,
CategoriaOcorrencia.Suspensao.getDescricao(), usuarioDTO, 0, justificativaDto, getTransacao());
popularHistorico(getSolicitacaoServicoDto(), ocorrenciaSolicitacao, "Suspende", usuarioDTO);
}
@Override
public void reativa(String loginUsuario) throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDto();
if (solicitacaoServicoDto.getSituacaoSLA().equals("M")) {
solicitacaoServicoDto.setSituacaoSLA("A");
}
if (!solicitacaoServicoDto.suspensa())
throw new Exception("Solicita��o de Servi�o n�o permite reativa��o");
setTransacaoDao(getSolicitacaoServicoDAO());
Timestamp tsAtual = UtilDatas.getDataHoraAtual();
solicitacaoServicoDto.setSituacao(SituacaoSolicitacaoServico.EmAndamento.name());
solicitacaoServicoDto.setDataHoraSuspensao(null);
solicitacaoServicoDto.setDataHoraReativacao(tsAtual);
reativaSLA(solicitacaoServicoDto);
getSolicitacaoServicoDAO().update(solicitacaoServicoDto);
OcorrenciaSolicitacaoDTO ocorrenciaSolicitacaoDTO = new OcorrenciaSolicitacaoDTO();
usuarioDTO = new UsuarioDTO();
usuarioDTO = new UsuarioDao().restoreByLogin(loginUsuario);
ocorrenciaSolicitacaoDTO = OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Reativacao, null,
CategoriaOcorrencia.Reativacao.getDescricao(), usuarioDTO, 0, null, getTransacao());
popularHistorico(solicitacaoServicoDto, ocorrenciaSolicitacaoDTO, "Reativa", usuarioDTO);
}
private Integer getIdCalendario(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
Integer idCalendario = solicitacaoServicoDto.getIdCalendario();
if (solicitacaoServicoDto.getIdCalendario() == null) {
ServicoContratoDTO servicoContratoDto = new ServicoContratoDao().findByIdContratoAndIdServico(solicitacaoServicoDto.getIdContrato(), solicitacaoServicoDto.getIdServico());
if (servicoContratoDto == null)
throw new LogicException("Servi�o n�o localizado para o contrato");
idCalendario = servicoContratoDto.getIdCalendario();
}
return idCalendario;
}
public void calculaTempoCaptura(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
solicitacaoServicoDto.setTempoCapturaHH(0);
solicitacaoServicoDto.setTempoCapturaMM(0);
if (solicitacaoServicoDto.getDataHoraCaptura() == null)
return;
if (solicitacaoServicoDto.getDataHoraInicioSLA() == null)
return;
if (solicitacaoServicoDto.getDataHoraInicioSLA().compareTo(solicitacaoServicoDto.getDataHoraCaptura()) > 0)
return;
Integer idCalendario = getIdCalendario(solicitacaoServicoDto);
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(idCalendario, solicitacaoServicoDto.getDataHoraInicioSLA());
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, solicitacaoServicoDto.getDataHoraCaptura(), getTransacao());
solicitacaoServicoDto.setTempoCapturaHH(calculoDto.getTempoDecorridoHH().intValue());
solicitacaoServicoDto.setTempoCapturaMM(calculoDto.getTempoDecorridoMM().intValue());
}
public void calculaTempoCapturaNovo(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
solicitacaoServicoDto.setTempoCapturaHH(0);
solicitacaoServicoDto.setTempoCapturaMM(0);
if (solicitacaoServicoDto.getDataHoraCaptura() == null)
return;
if (solicitacaoServicoDto.getDataHoraInicioSLA() == null)
return;
if (solicitacaoServicoDto.getDataHoraInicioSLA().compareTo(solicitacaoServicoDto.getDataHoraCaptura()) > 0)
return;
Integer idCalendario = getIdCalendario(solicitacaoServicoDto);
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(idCalendario, solicitacaoServicoDto.getDataHoraInicioSLA());
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorridoNovo(calculoDto, solicitacaoServicoDto.getDataHoraCaptura(), getTransacao());
solicitacaoServicoDto.setTempoCapturaHH(calculoDto.getTempoDecorridoHH().intValue());
solicitacaoServicoDto.setTempoCapturaMM(calculoDto.getTempoDecorridoMM().intValue());
solicitacaoServicoDto.setTempoCapturaSS(calculoDto.getTempoDecorridoSS());
}
public void calculaTempoAtendimento(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
if (solicitacaoServicoDto.getDataHoraInicioSLA() == null)
return;
Integer idCalendario = getIdCalendario(solicitacaoServicoDto);
Timestamp tsAtual = UtilDatas.getDataHoraAtual();
if (solicitacaoServicoDto.getSituacao().equalsIgnoreCase(SituacaoSolicitacaoServico.Fechada.name()))
tsAtual = solicitacaoServicoDto.getDataHoraFim();
Timestamp tsInicial = solicitacaoServicoDto.getDataHoraInicioSLA();
if (solicitacaoServicoDto.getDataHoraReativacao() != null)
tsInicial = solicitacaoServicoDto.getDataHoraReativacao();
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(idCalendario, tsInicial);
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, tsAtual, getTransacao());
if (solicitacaoServicoDto.getTempoDecorridoHH() == null) {
solicitacaoServicoDto.setTempoDecorridoHH(0);
}
if (solicitacaoServicoDto.getTempoDecorridoMM() == null) {
solicitacaoServicoDto.setTempoDecorridoMM(0);
}
// int horasAux = (solicitacaoServicoDto.getTempoDecorridoMM().intValue() + calculoDto.getTempoDecorridoMM().intValue()) / 60;
// int minAux = (solicitacaoServicoDto.getTempoDecorridoMM().intValue() + calculoDto.getTempoDecorridoMM().intValue()) % 60;
// Foi verificado que o tempo de atendimento � o tempo decorrido, ele estava calculando duas vezes.
solicitacaoServicoDto.setTempoAtendimentoHH(new Integer(calculoDto.getTempoDecorridoHH().intValue()));
solicitacaoServicoDto.setTempoAtendimentoMM(new Integer(calculoDto.getTempoDecorridoMM()));
}
public void calculaTempoAtraso(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
solicitacaoServicoDto.setTempoAtrasoHH(0);
solicitacaoServicoDto.setTempoAtrasoMM(0);
if (solicitacaoServicoDto.getDataHoraLimite() != null) {
Timestamp dataHoraLimite = solicitacaoServicoDto.getDataHoraLimite();
Timestamp dataHoraComparacao = UtilDatas.getDataHoraAtual();
if (solicitacaoServicoDto.encerrada())
dataHoraComparacao = solicitacaoServicoDto.getDataHoraFim();
if (dataHoraComparacao.compareTo(dataHoraLimite) > 0) {
long atrasoSLA = UtilDatas.calculaDiferencaTempoEmMilisegundos(dataHoraComparacao, dataHoraLimite) / 1000;
String hora = Util.getHoraStr(new Double(atrasoSLA) / 3600);
int tam = hora.length();
solicitacaoServicoDto.setTempoAtrasoHH(new Integer(hora.substring(0, tam - 2)));
solicitacaoServicoDto.setTempoAtrasoMM(new Integer(hora.substring(tam - 2, tam)));
}
}
}
public EmpregadoDTO recuperaSolicitante(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
if (solicitacaoServicoDto == null || solicitacaoServicoDto.getIdSolicitante() == null)
return null;
return new EmpregadoDao().restoreByIdEmpregado(solicitacaoServicoDto.getIdSolicitante());
}
public StringBuilder recuperaLoginResponsaveis() throws Exception {
StringBuilder result = new StringBuilder();
SolicitacaoServicoDTO solicitacaoDto = getSolicitacaoServicoDto();
UsuarioDao usuarioDao = new UsuarioDao();
UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(solicitacaoDto.getIdSolicitante());
if (usuarioDto != null)
result.append(usuarioDto.getLogin());
usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(solicitacaoDto.getIdResponsavel());
if (usuarioDto != null) {
if (result.length() > 0)
result.append(";");
result.append(usuarioDto.getLogin());
}
return result;
}
@Override
public void executaEvento(EventoFluxoDTO eventoFluxoDto) throws Exception {
TransactionControler tc = new TransactionControlerImpl(getSolicitacaoServicoDAO().getAliasDB());
try {
tc.start();
setTransacao(tc);
setTransacaoDao(getSolicitacaoServicoDAO());
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDAO().restoreByIdInstanciaFluxo(eventoFluxoDto.getIdInstancia());
if (solicitacaoServicoDto == null)
throw new LogicException("Solicita��o de servi�o do evento " + eventoFluxoDto.getIdItemTrabalho() + " n�o encontrada");
setObjetoNegocioDto(solicitacaoServicoDto);
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, eventoFluxoDto.getIdInstancia());
HashMap<String, Object> map = instanciaFluxo.getMapObj();
instanciaFluxo.getObjetos(map);
mapObjetoNegocio(map);
instanciaFluxo.executaEvento(eventoFluxoDto.getIdItemTrabalho(), map);
tc.commit();
} catch (Exception e) {
e.printStackTrace();
this.rollbackTransaction(tc, e);
throw new ServiceException(e);
} finally {
tc.closeQuietly();
}
}
public void cancelaTarefa(String loginUsuario, SolicitacaoServicoDTO solicitacaoServicoDto, TarefaFluxoDTO tarefaFluxoDto, String motivo) throws Exception {
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, tarefaFluxoDto.getIdInstancia());
instanciaFluxo.cancelaItemTrabalho(loginUsuario, tarefaFluxoDto.getIdItemTrabalho());
String ocorrencia = "Cancelamento da tarefa \"" + tarefaFluxoDto.getElementoFluxoDto().getDocumentacao() + "\"";
if (motivo != null && motivo.trim().length() > 0)
ocorrencia += ". Motivo: " + motivo;
Long tempo = new Long(0);
if (tarefaFluxoDto.getDataHoraFinalizacao() != null)
tempo = (tarefaFluxoDto.getDataHoraFinalizacao().getTime() - tarefaFluxoDto.getDataHoraCriacao().getTime()) / 1000 / 60;
usuarioDTO = new UsuarioDTO();
usuarioDTO.setLogin("Sistema");
OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), tarefaFluxoDto, ocorrencia, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.CancelamentoTarefa, "n�o se aplica",
CategoriaOcorrencia.CancelamentoTarefa.getDescricao(), usuarioDTO, tempo.intValue(), null, getTransacao());
}
@Override
public void validaEncerramento() throws Exception {
}
public String recuperaGrupoAprovador() throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDto();
if (solicitacaoServicoDto == null)
throw new Exception("Solicita��o de Servi�o n�o encontrada.");
ServicoContratoDTO servicoContratoDto = recuperaServicoContrato();
if (servicoContratoDto.getIdGrupoAprovador() == null)
throw new Exception("Grupo aprovador n�o parametrizado. Verifique o servi�o do contrato.");
GrupoDao grupoDao = new GrupoDao();
setTransacaoDao(grupoDao);
GrupoDTO grupoDto = new GrupoDTO();
grupoDto.setIdGrupo(servicoContratoDto.getIdGrupoAprovador());
grupoDto = (GrupoDTO) grupoDao.restore(grupoDto);
if (grupoDto == null)
throw new Exception("Grupo aprovador n�o encontrado.");
return grupoDto.getSigla();
}
@Override
public void verificaSLA(ItemTrabalho itemTrabalho) throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDto();
if (solicitacaoServicoDto == null)
throw new Exception("Solicita��o de Servi�o n�o encontrada.");
boolean bContabilizaSLA = true;
if (itemTrabalho.getContabilizaSLA() != null)
bContabilizaSLA = itemTrabalho.getContabilizaSLA().equalsIgnoreCase("S");
boolean bGravar = false;
if (bContabilizaSLA) {
if (solicitacaoServicoDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.N.name())) {
iniciaSLA(solicitacaoServicoDto);
bGravar = true;
}
if (solicitacaoServicoDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.S.name())) {
reativaSLA(solicitacaoServicoDto);
bGravar = true;
}
} else if (solicitacaoServicoDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.A.name())) {
suspendeSLA(solicitacaoServicoDto);
bGravar = true;
}
if (bGravar) {
setTransacaoDao(getSolicitacaoServicoDAO());
getSolicitacaoServicoDAO().updateNotNull(solicitacaoServicoDto);
}
}
public void determinaPrazoLimiteSolicitacaoACombinarReclassificada(SolicitacaoServicoDTO solicitacaoDto, Integer idCalendario) throws Exception {
Timestamp tsAtual = UtilDatas.getDataHoraAtual();
if (idCalendario == null || idCalendario.intValue() == 0) {
ServicoContratoDao servicoContratoDao = new ServicoContratoDao();
setTransacaoDao(servicoContratoDao);
ServicoContratoDTO servicoContratoDto = servicoContratoDao.findByIdContratoAndIdServico(solicitacaoDto.getIdContrato(), solicitacaoDto.getIdServico());
if (servicoContratoDto == null)
throw new LogicException(i18n_Message(solicitacaoDto.getUsuarioDto(), "solicitacaoservico.validacao.servicolocalizado"));
idCalendario = servicoContratoDto.getIdCalendario();
}
if (solicitacaoDto.getPrazoHH() == null)
solicitacaoDto.setPrazoHH(0);
if (solicitacaoDto.getPrazoMM() == null)
solicitacaoDto.setPrazoMM(0);
CalculoJornadaDTO calculoDto = null;
if (solicitacaoDto.getHouveMudanca() != null && solicitacaoDto.getHouveMudanca().equalsIgnoreCase("S") && solicitacaoDto.getDataHoraReativacaoSLA() != null
&& solicitacaoDto.getTempoDecorridoHH() != null
&& ((solicitacaoDto.getPrazoHH() * 100) + solicitacaoDto.getPrazoMM()) > (solicitacaoDto.getTempoDecorridoHH() * 100) + solicitacaoDto.getTempoDecorridoMM()) {
Integer novoPrazoHH = solicitacaoDto.getPrazoHH() - solicitacaoDto.getTempoDecorridoHH();
Integer novoPrazoMM = solicitacaoDto.getPrazoMM() - solicitacaoDto.getTempoDecorridoMM();
calculoDto = new CalculoJornadaDTO(idCalendario, solicitacaoDto.getDataHoraReativacaoSLA(), novoPrazoHH, novoPrazoMM);
calculoDto = new CalendarioServiceEjb().calculaDataHoraFinal(calculoDto, true, getTransacao());
} else {
if (solicitacaoDto.getDataHoraReativacaoSLA() != null && solicitacaoDto.getTempoDecorridoHH() == 0 && solicitacaoDto.getTempoDecorridoMM() == 0) {
calculoDto = new CalculoJornadaDTO(idCalendario, solicitacaoDto.getDataHoraReativacaoSLA(), solicitacaoDto.getPrazoHH(), solicitacaoDto.getPrazoMM());
} else {
solicitacaoDto.setDataHoraInicioSLA(tsAtual);
calculoDto = new CalculoJornadaDTO(idCalendario, solicitacaoDto.getDataHoraInicioSLA(), solicitacaoDto.getPrazoHH(), solicitacaoDto.getPrazoMM());
}
calculoDto = new CalendarioServiceEjb().calculaDataHoraFinal(calculoDto, true, getTransacao());
}
solicitacaoDto.setDataHoraLimite(calculoDto.getDataHoraFinal());
}
public void iniciaSLA(SolicitacaoServicoDTO solicitacaoDto) throws Exception {
if (!solicitacaoDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.N.name()))
return;
solicitacaoDto.setDataHoraInicioSLA(UtilDatas.getDataHoraAtual());
solicitacaoDto.setSituacaoSLA(SituacaoSLA.A.name());
new SolicitacaoServicoServiceEjb().determinaPrazoLimite(solicitacaoDto, null, getTransacao());
usuarioDTO = new UsuarioDTO();
usuarioDTO.setLogin("Autom�tico");
OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.InicioSLA, null, CategoriaOcorrencia.InicioSLA.getDescricao(),
usuarioDTO, 0, null, getTransacao());
}
public void suspendeSLA(SolicitacaoServicoDTO solicitacaoDto) throws Exception {
if (!solicitacaoDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.A.name()))
return;
Timestamp tsAtual = UtilDatas.getDataHoraAtual();
Timestamp tsInicial = solicitacaoDto.getDataHoraInicioSLA();
if (solicitacaoDto.getDataHoraReativacaoSLA() != null)
tsInicial = solicitacaoDto.getDataHoraReativacaoSLA();
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(solicitacaoDto.getIdCalendario(), tsInicial);
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, tsAtual, getTransacao());
if (solicitacaoDto.getTempoDecorridoHH() == null) {
solicitacaoDto.setTempoDecorridoHH(0);
}
if (solicitacaoDto.getTempoDecorridoMM() == null) {
solicitacaoDto.setTempoDecorridoMM(0);
}
int horasAux = (solicitacaoDto.getTempoDecorridoMM().intValue() + calculoDto.getTempoDecorridoMM().intValue()) / 60;
int minAux = (solicitacaoDto.getTempoDecorridoMM().intValue() + calculoDto.getTempoDecorridoMM().intValue()) % 60;
solicitacaoDto.setSituacaoSLA(SituacaoSLA.S.name());
solicitacaoDto.setTempoDecorridoHH(new Integer(solicitacaoDto.getTempoDecorridoHH().intValue() + calculoDto.getTempoDecorridoHH().intValue() + horasAux));
solicitacaoDto.setTempoDecorridoMM(new Integer(minAux));
solicitacaoDto.setDataHoraSuspensaoSLA(tsAtual);
solicitacaoDto.setDataHoraReativacaoSLA(null);
usuarioDTO = new UsuarioDTO();
usuarioDTO.setLogin("Autom�tico");
OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.SuspensaoSLA, null,
CategoriaOcorrencia.SuspensaoSLA.getDescricao(), usuarioDTO, 0, null, getTransacao());
}
public void reativaSLA(SolicitacaoServicoDTO solicitacaoDto) throws Exception {
if (!solicitacaoDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.S.name()))
return;
Timestamp tsAtual = UtilDatas.getDataHoraAtual();
double prazo = solicitacaoDto.getPrazoHH() + new Double(solicitacaoDto.getPrazoMM()).doubleValue() / 60;
double tempo = solicitacaoDto.getTempoDecorridoHH() + new Double(solicitacaoDto.getTempoDecorridoMM()).doubleValue() / 60;
prazo = prazo - tempo;
if (prazo > 0) {
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(solicitacaoDto.getIdCalendario(), tsAtual, Util.getHora(prazo), Util.getMinuto(prazo));
calculoDto = new CalendarioServiceEjb().calculaDataHoraFinal(calculoDto, false, getTransacao());
solicitacaoDto.setDataHoraLimite(calculoDto.getDataHoraFinal());
}
solicitacaoDto.setSituacaoSLA(SituacaoSLA.A.name());
solicitacaoDto.setDataHoraSuspensaoSLA(null);
solicitacaoDto.setDataHoraReativacaoSLA(tsAtual);
usuarioDTO = new UsuarioDTO();
usuarioDTO.setLogin("Autom�tico");
OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.ReativacaoSLA, null,
CategoriaOcorrencia.ReativacaoSLA.getDescricao(), usuarioDTO, 0, null, getTransacao());
}
private void popularHistorico(SolicitacaoServicoDTO solicitacaoServicoDto, OcorrenciaSolicitacaoDTO ocorrenciaSolicitacaoDTO, String status, UsuarioDTO usuarioDTO) throws Exception {
HistoricoSolicitacaoServicoDTO historicoSolicitacaoServicoDTO = new HistoricoSolicitacaoServicoDTO();
HistoricoSolicitacaoServicoService historicoSolicitacaoServicoService = (HistoricoSolicitacaoServicoService) ServiceLocator.getInstance().getService(HistoricoSolicitacaoServicoService.class,
null);
Collection<HistoricoSolicitacaoServicoDTO> listaHistorico = new ArrayList<HistoricoSolicitacaoServicoDTO>();
Collection<HistoricoSolicitacaoServicoDTO> responsavelAtual = new ArrayList<HistoricoSolicitacaoServicoDTO>();
historicoSolicitacaoServicoDTO.setIdSolicitacaoServico(ocorrenciaSolicitacaoDTO.getIdSolicitacaoServico());
historicoSolicitacaoServicoDTO.setIdOcorrencia(ocorrenciaSolicitacaoDTO.getIdOcorrencia());
historicoSolicitacaoServicoDTO.setDataCriacao(UtilDatas.getDataHoraAtual());
if (solicitacaoServicoDto.getIdGrupoAtual() != null)
historicoSolicitacaoServicoDTO.setIdGrupo(solicitacaoServicoDto.getIdGrupoAtual());
historicoSolicitacaoServicoDTO.setStatus(status);
responsavelAtual = historicoSolicitacaoServicoService.findResponsavelAtual(historicoSolicitacaoServicoDTO.getIdSolicitacaoServico());
if (responsavelAtual != null && !responsavelAtual.isEmpty()) {
for (HistoricoSolicitacaoServicoDTO historicoSolicitacaoServicoResponsavel : responsavelAtual) {
historicoSolicitacaoServicoDTO.setIdResponsavelAtual(historicoSolicitacaoServicoResponsavel.getIdResponsavelAtual());
}
} else {
historicoSolicitacaoServicoDTO.setIdResponsavelAtual(usuarioDTO.getIdUsuario());
}
historicoSolicitacaoServicoDTO.setIdServicoContrato(solicitacaoServicoDto.getIdServico());
historicoSolicitacaoServicoDTO.setIdCalendario(solicitacaoServicoDto.getIdCalendario());
try {
if (historicoSolicitacaoServicoService.findHistoricoSolicitacao(ocorrenciaSolicitacaoDTO.getIdSolicitacaoServico()) && !status.equalsIgnoreCase("Suspende")
&& !status.equalsIgnoreCase("Encerra")) {
historicoSolicitacaoServicoDTO.setHorasTrabalhadas(0.0);
if (status.equalsIgnoreCase("Executa")) {
historicoSolicitacaoServicoDTO.setIdResponsavelAtual(usuarioDTO.getIdUsuario());
}
historicoSolicitacaoServicoDTO.setDataFinal(null);
historicoSolicitacaoServicoService.create(historicoSolicitacaoServicoDTO);
} else {
listaHistorico = historicoSolicitacaoServicoService.restoreHistoricoServico(ocorrenciaSolicitacaoDTO.getIdSolicitacaoServico());
if (listaHistorico != null && !listaHistorico.isEmpty()) {
for (HistoricoSolicitacaoServicoDTO historicoSolicitacaoServicoDTO2 : listaHistorico) {
historicoSolicitacaoServicoDTO2.setDataFinal(UtilDatas.getDataHoraAtual());
historicoSolicitacaoServicoDTO2.setHorasTrabalhadas(calcularHoraTrabalhada(historicoSolicitacaoServicoDTO2));
historicoSolicitacaoServicoService.update(historicoSolicitacaoServicoDTO2);
}
}
if (status.equalsIgnoreCase("Executa")) {
historicoSolicitacaoServicoDTO.setHorasTrabalhadas(0.0);
if (status.equalsIgnoreCase("Executa")) {
historicoSolicitacaoServicoDTO.setIdResponsavelAtual(usuarioDTO.getIdUsuario());
}
historicoSolicitacaoServicoDTO.setDataFinal(null);
historicoSolicitacaoServicoService.create(historicoSolicitacaoServicoDTO);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private double calcularHoraTrabalhada(HistoricoSolicitacaoServicoDTO historicoSolicitacaoServicoDTO) throws Exception {
Timestamp tsAtual = UtilDatas.getDataHoraAtual();
Timestamp tsInicial = historicoSolicitacaoServicoDTO.getDataCriacao();
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(historicoSolicitacaoServicoDTO.getIdCalendario(), tsInicial);
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, tsAtual, getTransacao());
int horasAux = (calculoDto.getTempoDecorridoHH().intValue()) * 60;
int minAux = (calculoDto.getTempoDecorridoMM().intValue()) % 60;
return (horasAux + minAux);
}
/**
* Retorna a Lista de TarefaDTO com SolicitacaoServidoDTO de acordo com o Login e a Lista de Contratos do Usu�rio Logado.
*
* @param pgAtual
* @param qtdAPaginacao
* @param login
* @param gerenciamentoBean
* @param listContratoUsuarioLogado
* @return
* @throws Exception
* @author valdoilo.damasceno
* @since 05.11.2013
*/
public List<TarefaFluxoDTO> recuperaTarefas(Integer qtdAtual, Integer qtdAPaginacao, String login, GerenciamentoServicosDTO gerenciamentoBean, Collection<ContratoDTO> listContratoUsuarioLogado,
List<TarefaFluxoDTO> listTarefas) throws Exception {
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
List<TarefaFluxoDTO> result = new ArrayList();
if (listTarefas == null || listTarefas.isEmpty()) {
// RECUPERA TAREFAS SEM SOLICITACAOSERVICODTO
listTarefas = super.recuperaTarefas(login);
}
if (listTarefas != null) {
SolicitacaoServicoServiceEjb solicitacaoServicoServiceEjb = new SolicitacaoServicoServiceEjb();
Collection<SolicitacaoServicoDTO> listSolicitacaoServico = solicitacaoServicoServiceEjb.listByTarefas(listTarefas, qtdAtual, qtdAPaginacao, gerenciamentoBean,
listContratoUsuarioLogado, tc);
Collection<SolicitacaoServicoDTO> listSolicitacoesFilhas = solicitacaoServicoServiceEjb.listSolicitacoesFilhasFiltradas(gerenciamentoBean, listContratoUsuarioLogado, tc);
if (listSolicitacaoServico != null && !listSolicitacaoServico.isEmpty()) {
int cont = 0;
for (SolicitacaoServicoDTO solicitacaoServicoDto : listSolicitacaoServico) {
for (TarefaFluxoDTO tarefaDto : listTarefas) {
if (cont == qtdAPaginacao) {
break;
}
if (solicitacaoServicoDto.getIdTarefa().equals(tarefaDto.getIdItemTrabalho())) {
boolean possuiFilho = false;
if (listSolicitacoesFilhas != null && !listSolicitacoesFilhas.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDTO2 : listSolicitacoesFilhas) {
if (solicitacaoServicoDto.getIdSolicitacaoServico().equals(solicitacaoServicoDTO2.getIdSolicitacaoPai())) {
possuiFilho = true;
break;
}
}
}
solicitacaoServicoDto.setPossuiFilho(possuiFilho);
tarefaDto.setSolicitacaoDto(solicitacaoServicoDto);
tarefaDto.setDataHoraLimite(solicitacaoServicoDto.getDataHoraLimite());
result.add(tarefaDto);
cont++;
}
}
}
}
}
return result;
} finally {
tc.closeQuietly();
}
}
/**
* Utilizado para a RENDERIZA��O do GR�FICO, pois no Gr�fico n�o � necess�rio a utiliza��o de Pagina��o. Esta consulta considera o Login do Usu�rio Logado, os Contratos em que est� inserido e os
* Filtros Selecionados na tela de Gerenciamento de Servi�os.
*
* @param loginUsuario
* @param gerenciamentoBean
* @return List<TarefaFluxoDTO - Com SolicitacaoServicoDTO recuperados.
* @throws Exception
* @author valdoilo.damasceno
* @since 05.11.2013
*/
public List<TarefaFluxoDTO> recuperaTarefas(String loginUsuario, GerenciamentoServicosDTO gerenciamentoBean, Collection<ContratoDTO> listContratoUsuarioLogado, List<TarefaFluxoDTO> listTarefas)
throws Exception {
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
List<TarefaFluxoDTO> result = new ArrayList();
if (listTarefas == null || listTarefas.isEmpty()) {
// RECUPERA TAREFAS SEM SOLICITACAOSERVICODTO
listTarefas = super.recuperaTarefas(loginUsuario);
}
if (listTarefas != null) {
SolicitacaoServicoServiceEjb solicitacaoServicoServiceEjb = new SolicitacaoServicoServiceEjb();
Collection<SolicitacaoServicoDTO> listSolicitacaoServicoDto = solicitacaoServicoServiceEjb.listByTarefas(listTarefas, gerenciamentoBean, listContratoUsuarioLogado, tc);
Collection<SolicitacaoServicoDTO> listSolicitacoesFilhas = solicitacaoServicoServiceEjb.listSolicitacoesFilhas(tc);
if (listSolicitacaoServicoDto != null && !listSolicitacaoServicoDto.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDto : listSolicitacaoServicoDto) {
for (TarefaFluxoDTO tarefaDto : listTarefas) {
if (solicitacaoServicoDto.getIdTarefa().equals(tarefaDto.getIdItemTrabalho())) {
boolean possuiFilho = false;
if (listSolicitacoesFilhas != null && !listSolicitacoesFilhas.isEmpty()) {
for (SolicitacaoServicoDTO solicitacaoServicoDTO2 : listSolicitacoesFilhas) {
if (solicitacaoServicoDto.getIdSolicitacaoServico().equals(solicitacaoServicoDTO2.getIdSolicitacaoPai())) {
possuiFilho = true;
break;
}
}
}
solicitacaoServicoDto.setPossuiFilho(possuiFilho);
tarefaDto.setSolicitacaoDto(solicitacaoServicoDto);
tarefaDto.setDataHoraLimite(solicitacaoServicoDto.getDataHoraLimite());
result.add(tarefaDto);
}
}
}
}
if (result != null) {
Collections.sort(result, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.ASC));
}
}
return result;
} finally {
tc.closeQuietly();
}
}
public boolean permiteAprovacaoAlcada(AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto, SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
return true;
}
public void calculaValorAprovadoAnual(CentroResultadoDTO centroResultadoDto, int anoRef, TransactionControler tc) throws Exception {
valorAnualAtendCliente = 0.0;
valorAnualUsoInterno = 0.0;
}
public void calculaValorAprovadoMensal(CentroResultadoDTO centroResultadoDto, int mesRef, int anoRef, TransactionControler tc) throws Exception {
valorMensalAtendCliente = 0.0;
valorMensalUsoInterno = 0.0;
}
public double calculaValorAprovado(SolicitacaoServicoDTO solicitacaoServicoDto, TransactionControler tc) throws Exception {
return 0.0;
}
public boolean isAtendimentoCliente(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
return false;
}
public ExecucaoSolicitacaoDTO getExecucaoSolicitacaoDto() {
return execucaoSolicitacaoDto;
}
public void setExecucaoSolicitacaoDto(ExecucaoSolicitacaoDTO execucaoSolicitacaoDto) {
this.execucaoSolicitacaoDto = execucaoSolicitacaoDto;
}
public void setValorMensalUsoInterno(Double valorMensalUsoInterno) {
this.valorMensalUsoInterno = valorMensalUsoInterno;
}
public void setValorAnualUsoInterno(Double valorAnualUsoInterno) {
this.valorAnualUsoInterno = valorAnualUsoInterno;
}
public void setValorMensalAtendCliente(Double valorMensalAtendCliente) {
this.valorMensalAtendCliente = valorMensalAtendCliente;
}
public void setValorAnualAtendCliente(Double valorAnualAtendCliente) {
this.valorAnualAtendCliente = valorAnualAtendCliente;
}
public void cancelarRequisicao() {
getSolicitacaoServicoDto().setSituacao(br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico.Cancelada.getDescricao());
}
protected String getJdbcAliasBPM() throws Exception {
String jdbcAlias = CITCorporeUtil.JDBC_ALIAS_BPM;
if (jdbcAlias == null || jdbcAlias.trim().equals(""))
jdbcAlias = Constantes.getValue("DATABASE_ALIAS");
return jdbcAlias;
}
private SolicitacaoServicoDao solicitacaoServicoDao;
private SolicitacaoServicoDao getSolicitacaoServicoDAO() {
if (solicitacaoServicoDao == null) {
solicitacaoServicoDao = new SolicitacaoServicoDao();
}
return solicitacaoServicoDao;
}
/**
* Consulta utilizada para a RENDERIZA��O da LISTAGEM SOLICITACAO SERVI�O. Retorna a Lista de TarefaDTO com SolicitacaoServidoDTO de acordo com po aramRecuperacaoTarefasDto.
*
* @param ParamRecuperacaoTarefasDTO
* paramRecuperacaoTarefasDto
* @return List<TarefaFluxoDTO - Com SolicitacaoServicoDTO recuperados.
* @throws Exception
* @author carlos.santos
* @since 27.01.2015 - Opera��o Usain Bolt.
*/
public Page<TarefaFluxoDTO> recuperaTarefas(ParamRecuperacaoTarefasDTO paramRecuperacaoTarefas, Pageable pageable) throws Exception {
List<TarefaFluxoDTO> tarefas = new ArrayList<>();
Page<TarefaFluxoDTO> resultPage = new PageImpl<>(tarefas, pageable);
if (paramRecuperacaoTarefas.getLoginUsuario() == null)
return resultPage;
TransactionControler tc = new TransactionControlerImpl(getJdbcAliasBPM());
try {
setTransacao(tc);
UsuarioDao usuarioDao = new UsuarioDao();
setTransacaoDao(usuarioDao);
UsuarioDTO usuarioDto = usuarioDao.restoreByLogin(paramRecuperacaoTarefas.getLoginUsuario());
if (usuarioDto == null)
return resultPage;
GrupoEmpregadoDao grupoEmpregadoDao = new GrupoEmpregadoDao();
setTransacaoDao(grupoEmpregadoDao);
usuarioDto.setColGrupoEmpregado(grupoEmpregadoDao.findByIdEmpregado(usuarioDto.getIdEmpregado()));
paramRecuperacaoTarefas.setUsuarioDto(usuarioDto);
TarefaUsuarioDao tarefaUsuarioDao = new TarefaUsuarioDao();
setTransacaoDao(tarefaUsuarioDao);
Page<TarefaUsuarioDTO> pageTarefasUsuario = tarefaUsuarioDao.recuperaTarefas(paramRecuperacaoTarefas, pageable);
List<TarefaUsuarioDTO> tarefasUsuario = pageTarefasUsuario.getContent();
if (tarefasUsuario == null || tarefasUsuario.isEmpty()) {
resultPage = new PageImpl<>(tarefas, pageable, pageTarefasUsuario.getTotalElements());
return resultPage;
}
SolicitacaoServicoServiceEjb solicitacaoServicoService = new SolicitacaoServicoServiceEjb();
for (TarefaUsuarioDTO tarefaUsuarioDto : tarefasUsuario) {
TarefaFluxoDTO tarefaFluxo = tarefaUsuarioDto.converteTarefaFluxoDto();
SolicitacaoServicoDTO solicitacaoDto = (SolicitacaoServicoDTO) tarefaFluxo.getSolicitacaoDto();
tarefas.add(tarefaFluxo);
if (!paramRecuperacaoTarefas.isSomenteTotalizacao())
solicitacaoDto = solicitacaoServicoService.verificaSituacaoSLA(solicitacaoDto, tc);
}
if (!paramRecuperacaoTarefas.isSomenteTotalizacao()) {
Map<String, ElementoFluxoTarefaDTO> mapElementos = new HashMap<>();
Map<String, PermissoesFluxoDTO> mapPermissoes = new HashMap<>();
Map<String, UsuarioDTO> mapUsuarios = new HashMap<>();
Map<String, GrupoDTO> mapGrupos = new HashMap<>();
PermissoesFluxoDao permissoesFluxoDao = new PermissoesFluxoDao();
setTransacaoDao(permissoesFluxoDao);
GrupoDao grupoDao = new GrupoDao();
setTransacaoDao(grupoDao);
ElementoFluxoDao elementoFluxoDao = new ElementoFluxoDao();
setTransacaoDao(elementoFluxoDao);
AtribuicaoFluxoDao atribuicaoTarefaDao = new AtribuicaoFluxoDao();
setTransacaoDao(atribuicaoTarefaDao);
for (TarefaFluxoDTO tarefaFluxo : tarefas) {
String executar = "N";
String delegar = "N";
String suspender = "N";
String reativar = "N";
String alterarSLA = "N";
if (usuarioDto.getColGrupoEmpregado() != null && !tarefaFluxo.isSomenteAcompanhamento()) {
PermissoesFluxoDTO permissoesFluxo = null;
for (GrupoEmpregadoDTO grupoEmpregadoDto : usuarioDto.getColGrupoEmpregado()) {
String chave = grupoEmpregadoDto.getIdGrupo() + "|" + tarefaFluxo.getIdTipoFluxo();
permissoesFluxo = mapPermissoes.get(chave);
if (permissoesFluxo == null) {
permissoesFluxo = new PermissoesFluxoDTO();
permissoesFluxo.setIdTipoFluxo(tarefaFluxo.getIdTipoFluxo());
permissoesFluxo.setIdGrupo(grupoEmpregadoDto.getIdGrupo());
permissoesFluxo = (PermissoesFluxoDTO) permissoesFluxoDao.restore(permissoesFluxo);
if (permissoesFluxo == null)
continue;
mapPermissoes.put(chave, permissoesFluxo);
}
if (!executar.equalsIgnoreCase("S") && permissoesFluxo.getExecutar() != null && permissoesFluxo.getExecutar().equals("S"))
executar = "S";
if (!delegar.equalsIgnoreCase("S") && permissoesFluxo.getDelegar() != null && permissoesFluxo.getDelegar().equals("S"))
delegar = "S";
if (!suspender.equalsIgnoreCase("S") && permissoesFluxo.getSuspender() != null && permissoesFluxo.getSuspender().equals("S"))
suspender = "S";
if (!reativar.equalsIgnoreCase("S") && permissoesFluxo.getReativar() != null && permissoesFluxo.getReativar().equals("S"))
reativar = "S";
if (!alterarSLA.equalsIgnoreCase("S") && permissoesFluxo.getAlterarSLA() != null && permissoesFluxo.getAlterarSLA().equals("S"))
alterarSLA = "S";
}
}
tarefaFluxo.setExecutar(executar);
tarefaFluxo.setDelegar(delegar);
tarefaFluxo.setSuspender(suspender);
tarefaFluxo.setReativar(reativar);
tarefaFluxo.setAlterarSLA(alterarSLA);
ElementoFluxoTarefaDTO elementoFluxo = mapElementos.get("" + tarefaFluxo.getIdElemento());
if (elementoFluxo == null) {
try {
elementoFluxo = (ElementoFluxoTarefaDTO) elementoFluxoDao.restore(tarefaFluxo.getIdElemento());
} catch (Exception e) {
e.printStackTrace();
}
if (elementoFluxo == null)
throw new LogicException("Erro na recupera��o do elemento de fluxo com ID " + tarefaFluxo.getIdElemento() + " na inst�ncia " + tarefaFluxo.getIdInstancia());
mapElementos.put("" + tarefaFluxo.getIdElemento(), elementoFluxo);
}
tarefaFluxo.setElementoFluxoDto(elementoFluxo);
tarefaFluxo.setCompartilhamento("");
AtribuicaoFluxoDTO atribuicaoDelegacao = recuperaDelegacao(tarefaFluxo.getIdItemTrabalho(), atribuicaoTarefaDao);
if (atribuicaoDelegacao == null)
continue;
if (atribuicaoDelegacao.getIdUsuario() != null) {
if (!atribuicaoDelegacao.getIdUsuario().equals(usuarioDto.getIdUsuario())) {
UsuarioDTO usuarioAtualDto = mapUsuarios.get("" + atribuicaoDelegacao.getIdUsuario());
if (usuarioAtualDto == null) {
usuarioAtualDto = usuarioDao.restoreByID(atribuicaoDelegacao.getIdUsuario());
if (usuarioAtualDto == null)
continue;
mapUsuarios.put("" + atribuicaoDelegacao.getIdUsuario(), usuarioAtualDto);
}
tarefaFluxo.setCompartilhamento(usuarioAtualDto.getNomeUsuario());
}
} else {
GrupoDTO grupoAtual = mapGrupos.get("" + atribuicaoDelegacao.getIdGrupo());
if (grupoAtual == null) {
grupoAtual = new GrupoDTO();
grupoAtual.setIdGrupo(atribuicaoDelegacao.getIdGrupo());
grupoAtual = (GrupoDTO) grupoDao.restore(grupoAtual);
if (grupoAtual == null)
continue;
mapGrupos.put("" + atribuicaoDelegacao.getIdGrupo(), grupoAtual);
}
tarefaFluxo.setCompartilhamento(grupoAtual.getSigla());
}
}
}
resultPage = new PageImpl<>(tarefas, pageable);
return resultPage;
} finally {
tc.closeQuietly();
}
}
}