package br.com.centralit.citcorpore.bpm.negocio;
import java.sql.Timestamp;
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.EventoFluxoDTO;
import br.com.centralit.bpm.dto.FluxoDTO;
import br.com.centralit.bpm.dto.InstanciaFluxoDTO;
import br.com.centralit.bpm.dto.ItemTrabalhoFluxoDTO;
import br.com.centralit.bpm.dto.ObjetoNegocioFluxoDTO;
import br.com.centralit.bpm.dto.TarefaFluxoDTO;
import br.com.centralit.bpm.dto.TipoFluxoDTO;
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.util.Enumerados;
import br.com.centralit.citcorpore.bean.CalculoJornadaDTO;
import br.com.centralit.citcorpore.bean.CategoriaProblemaDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.ExecucaoProblemaDTO;
import br.com.centralit.citcorpore.bean.GrupoDTO;
import br.com.centralit.citcorpore.bean.JustificativaProblemaDTO;
import br.com.centralit.citcorpore.bean.ModeloEmailDTO;
import br.com.centralit.citcorpore.bean.OcorrenciaProblemaDTO;
import br.com.centralit.citcorpore.bean.ProblemaDTO;
import br.com.centralit.citcorpore.bean.ServicoContratoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.CategoriaProblemaDAO;
import br.com.centralit.citcorpore.integracao.EmpregadoDao;
import br.com.centralit.citcorpore.integracao.ExecucaoProblemaDao;
import br.com.centralit.citcorpore.integracao.GrupoDao;
import br.com.centralit.citcorpore.integracao.ModeloEmailDao;
import br.com.centralit.citcorpore.integracao.OcorrenciaProblemaDAO;
import br.com.centralit.citcorpore.integracao.ProblemaDAO;
import br.com.centralit.citcorpore.integracao.ServicoContratoDao;
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.EmpregadoService;
import br.com.centralit.citcorpore.negocio.GrupoService;
import br.com.centralit.citcorpore.negocio.OcorrenciaProblemaServiceEjb;
import br.com.centralit.citcorpore.negocio.ProblemaService;
import br.com.centralit.citcorpore.negocio.ProblemaServiceEjb;
import br.com.centralit.citcorpore.util.CriptoUtils;
import br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia;
import br.com.centralit.citcorpore.util.Enumerados.FaseRequisicaoProblema;
import br.com.centralit.citcorpore.util.Enumerados.OrigemOcorrencia;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoProblema;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoRequisicaoProblema;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoSLA;
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.PersistenceException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilI18N;
import com.google.gson.Gson;
@SuppressWarnings({ "unchecked", "rawtypes", "unused" })
public class ExecucaoProblema extends ExecucaoFluxo {
protected UsuarioDTO usuarioDto = null;
private EmpregadoService empregadoService;
protected ProblemaService problemaService;
public String i18n_Message(final UsuarioDTO usuario, final String key) {
if (usuario != null) {
if (UtilI18N.internacionaliza(usuario.getLocale(), key) != null) {
return UtilI18N.internacionaliza(usuario.getLocale(), key);
}
return key;
}
return key;
}
private EmpregadoService getEmpregadoService() throws ServiceException, Exception {
if (empregadoService == null) {
empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null);
}
return empregadoService;
}
private ProblemaService getProblemaService() throws ServiceException, Exception {
if (problemaService == null) {
problemaService = (ProblemaService) ServiceLocator.getInstance().getService(ProblemaService.class, null);
}
return problemaService;
}
public ExecucaoProblema(final TransactionControler tc) {
super(tc);
}
public ExecucaoProblema() {
super();
}
public ExecucaoProblema(final ProblemaDTO problemaDto, final TransactionControler tc) {
super(problemaDto, tc);
}
@Override
public InstanciaFluxo inicia(final String nomeFluxo, final Integer idFase) throws Exception {
final TipoFluxoDao tipoFluxoDao = new TipoFluxoDao();
final TipoFluxoDTO tipoFluxoDto = tipoFluxoDao.findByNome(nomeFluxo);
if (tipoFluxoDto == null) {
System.out.println("Fluxo " + nomeFluxo + " n�o existe");
throw new Exception(i18n_Message("citcorpore.comum.fluxoNaoEncontrado"));
}
return inicia(new FluxoDao().findByTipoFluxo(tipoFluxoDto.getIdTipoFluxo()), idFase);
}
@Override
public InstanciaFluxo inicia() throws Exception {
InstanciaFluxo result = null;
final InstanciaFluxoDTO instanciaFluxoDto = null;
final CategoriaProblemaDTO categoriaProblemaDto = recuperaCategoriaProblema();
if (categoriaProblemaDto != null) {
if (categoriaProblemaDto.getIdTipoFluxo() != null) {
result = inicia(new FluxoDao().findByTipoFluxo(categoriaProblemaDto.getIdTipoFluxo()), null);
}
} else {
final String fluxoPadrao = ParametroUtil.getValorParametroCitSmartHashMap(
ParametroSistema.NomeFluxoPadraoProblema, null);
if (fluxoPadrao == null) {
throw new Exception(i18n_Message("citcorpore.comum.fluxoNaoParametrizado"));
}
result = inicia(fluxoPadrao, null);
}
try {
final String enviarNotificacao = ParametroUtil.getValor(
ParametroSistema.NOTIFICAR_GRUPO_RECEPCAO_SOLICITACAO, getTransacao(), "N");
final String IdModeloEmailGrupoDestinoProblema = ParametroUtil.getValorParametroCitSmartHashMap(
ParametroSistema.ID_MODELO_EMAIL_GRUPO_DESTINO_PROBLEMA, "37");
if (enviarNotificacao.equalsIgnoreCase("S") && getProblemaDto().escalada()) {
enviaEmailGrupo(Integer.parseInt(IdModeloEmailGrupoDestinoProblema.trim()), getProblemaDto()
.getIdGrupoAtual());
}
} catch (final NumberFormatException e) {
System.out.println("N�o h� modelo de e-mail setado nos par�metros.");
}
return result;
}
@Override
public InstanciaFluxo inicia(final FluxoDTO fluxoDto, final Integer idFase) throws Exception {
if (fluxoDto == null) {
throw new Exception(i18n_Message("citcorpore.comum.fluxoNaoEncontrado"));
}
this.fluxoDto = fluxoDto;
final HashMap<String, Object> map = new HashMap();
mapObjetoNegocio(map);
final InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, map);
final ExecucaoProblemaDTO execucaoProblemaDto = new ExecucaoProblemaDTO();
execucaoProblemaDto.setIdProblema(getProblemaDto().getIdProblema());
execucaoProblemaDto.setIdFase(getProblemaDto().getIdFaseAtual());
execucaoProblemaDto.setIdFluxo(instanciaFluxo.getIdFluxo());
execucaoProblemaDto.setIdInstanciaFluxo(instanciaFluxo.getIdInstancia());
Integer seqReabertura = 0;
if (getProblemaDto().getSeqReabertura() != null && getProblemaDto().getSeqReabertura().intValue() > 0) {
seqReabertura = getProblemaDto().getSeqReabertura();
}
if (seqReabertura.intValue() > 0) {
execucaoProblemaDto.setSeqReabertura(getProblemaDto().getSeqReabertura());
}
final ExecucaoProblemaDao execucaoProblemaDao = new ExecucaoProblemaDao();
setTransacaoDao(execucaoProblemaDao);
execucaoFluxoDto = (ExecucaoProblemaDTO) execucaoProblemaDao.create(execucaoProblemaDto);
if (seqReabertura.intValue() == 0 && getProblemaDto().getEnviaEmailCriacao() != null
&& getProblemaDto().getEnviaEmailCriacao().equalsIgnoreCase("S")) {
final String IdModeloEmailCriacaoProblema = ParametroUtil.getValorParametroCitSmartHashMap(
ParametroSistema.ID_MODELO_EMAIL_CRIACAO_PROBLEMA, "34");
final Integer idModeloEmail = Integer.parseInt(IdModeloEmailCriacaoProblema.trim());
enviaEmail(idModeloEmail);
}
return instanciaFluxo;
}
@Override
public void executa(final String loginUsuario, final ObjetoNegocioFluxoDTO objetoNegocioDto,
final Integer idItemTrabalho, final String acao, final HashMap<String, Object> map) throws Exception {
if (acao.equals(Enumerados.ACAO_DELEGAR)) {
return;
}
TarefaFluxoDTO tarefaFluxoDto = recuperaTarefa(idItemTrabalho);
if (tarefaFluxoDto == null) {
return;
}
final ExecucaoProblemaDao execucaoProblemaDao = new ExecucaoProblemaDao();
setTransacaoDao(execucaoProblemaDao);
final ExecucaoProblemaDTO execucaoProblemaDto = execucaoProblemaDao.findByIdInstanciaFluxo(tarefaFluxoDto
.getIdInstancia());
if (execucaoProblemaDto == null) {
return;
}
recuperaFluxo(execucaoProblemaDto.getIdFluxo());
this.objetoNegocioDto = objetoNegocioDto;
usuarioDto = new UsuarioDao().restoreByLogin(loginUsuario);
final InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, tarefaFluxoDto.getIdInstancia());
mapObjetoNegocio(instanciaFluxo.getObjetos(map));
if (acao.equals(Enumerados.ACAO_INICIAR)) {
instanciaFluxo.iniciaItemTrabalho(loginUsuario, tarefaFluxoDto.getIdItemTrabalho(), map);
} else if (acao.equals(Enumerados.ACAO_EXECUTAR)) {
tarefaFluxoDto = recuperaTarefa(idItemTrabalho);
final OcorrenciaProblemaDAO ocorrenciaProblemaDao = new OcorrenciaProblemaDAO();
setTransacaoDao(ocorrenciaProblemaDao);
final OcorrenciaProblemaDTO ocorrenciaProblemaDto = new OcorrenciaProblemaDTO();
ocorrenciaProblemaDto.setIdProblema(getProblemaDto().getIdProblema());
ocorrenciaProblemaDto.setDataregistro(UtilDatas.getDataAtual());
ocorrenciaProblemaDto.setHoraregistro(UtilDatas.formatHoraFormatadaStr(UtilDatas.getHoraAtual()));
Long tempo = new Long(0);
if (tarefaFluxoDto.getDataHoraFinalizacao() != null) {
tempo = (tarefaFluxoDto.getDataHoraFinalizacao().getTime() - tarefaFluxoDto.getDataHoraCriacao()
.getTime()) / 1000 / 60;
}
ocorrenciaProblemaDto.setTempoGasto(tempo.intValue());
ocorrenciaProblemaDto.setDescricao(br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia.Execucao
.getDescricao());
ocorrenciaProblemaDto.setDataInicio(UtilDatas.getDataAtual());
ocorrenciaProblemaDto.setDataFim(UtilDatas.getDataAtual());
ocorrenciaProblemaDto.setInformacoesContato("n�o se aplica");
ocorrenciaProblemaDto.setRegistradopor(loginUsuario);
try {
ocorrenciaProblemaDto.setDadosProblema(new Gson().toJson(getProblemaDto()));
} catch (final Exception e) {
e.printStackTrace();
}
ocorrenciaProblemaDto.setOcorrencia("Execu��o da tarefa \""
+ tarefaFluxoDto.getElementoFluxoDto().getDocumentacao() + "\"");
ocorrenciaProblemaDto.setOrigem(br.com.centralit.citcorpore.util.Enumerados.OrigemOcorrencia.OUTROS
.getSigla().toString());
ocorrenciaProblemaDto.setCategoria(br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia.Execucao
.getSigla());
ocorrenciaProblemaDto.setIdItemTrabalho(idItemTrabalho);
ocorrenciaProblemaDao.create(ocorrenciaProblemaDto);
instanciaFluxo.executaItemTrabalho(loginUsuario, tarefaFluxoDto.getIdItemTrabalho(), map);
if (getProblemaDto().getFase() != null && !getProblemaDto().getFase().equalsIgnoreCase("")) {
final SituacaoRequisicaoProblema novaSituacao = FaseRequisicaoProblema.valueOf(
getProblemaDto().getFase()).getSituacao();
if (novaSituacao != null) {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
getProblemaDto().setStatus(novaSituacao.getDescricao());
problemaDao.updateNotNull(getProblemaDto());
}
}
}
if (getProblemaDto().getEnviaEmailAcoes() != null
&& getProblemaDto().getEnviaEmailAcoes().equalsIgnoreCase("S")) {
final String IdModeloEmailProblemaAndamento = ParametroUtil.getValorParametroCitSmartHashMap(
ParametroSistema.ID_MODELO_EMAIL_ANDAMENTO_PROBLEMA, "35");
enviaEmail(Integer.parseInt(IdModeloEmailProblemaAndamento.trim()));
}
if (tarefaFluxoDto.getElementoFluxoDto().getContabilizaSLA() == null
|| tarefaFluxoDto.getElementoFluxoDto().getContabilizaSLA().equalsIgnoreCase("S")) {
if (getProblemaDto().getDataHoraCaptura() == null) {
getProblemaDto().setDataHoraCaptura(UtilDatas.getDataHoraAtual());
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
problemaDao.atualizaDataHoraCaptura(getProblemaDto());
}
}
}
@Override
public void delega(final String loginUsuario, final ObjetoNegocioFluxoDTO objetoNegocioDto,
final Integer idItemTrabalho, final String usuarioDestino, final String grupoDestino) throws Exception {
final TarefaFluxoDTO tarefaFluxoDto = recuperaTarefa(idItemTrabalho);
if (tarefaFluxoDto == null) {
return;
}
final InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, tarefaFluxoDto.getIdInstancia());
instanciaFluxo.delegaItemTrabalho(loginUsuario, idItemTrabalho, usuarioDestino, grupoDestino);
this.objetoNegocioDto = objetoNegocioDto;
final OcorrenciaProblemaDAO ocorrenciaProblemaDao = new OcorrenciaProblemaDAO();
setTransacaoDao(ocorrenciaProblemaDao);
final OcorrenciaProblemaDTO ocorrenciaProblemaDto = new OcorrenciaProblemaDTO();
ocorrenciaProblemaDto.setIdProblema(getProblemaDto().getIdProblema());
ocorrenciaProblemaDto.setDataregistro(UtilDatas.getDataAtual());
ocorrenciaProblemaDto.setHoraregistro(UtilDatas.formatHoraFormatadaStr(UtilDatas.getHoraAtual()));
ocorrenciaProblemaDto.setTempoGasto(0);
ocorrenciaProblemaDto
.setDescricao(br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia.Compartilhamento
.getDescricao());
ocorrenciaProblemaDto.setDataInicio(UtilDatas.getDataAtual());
ocorrenciaProblemaDto.setDataFim(UtilDatas.getDataAtual());
ocorrenciaProblemaDto.setInformacoesContato("n�o se aplica");
ocorrenciaProblemaDto.setRegistradopor(loginUsuario);
try {
ocorrenciaProblemaDto.setDadosProblema(new Gson().toJson(getProblemaDto()));
} catch (final Exception e) {
e.printStackTrace();
}
String ocorr = "Compartilhamento da tarefa \"" + tarefaFluxoDto.getElementoFluxoDto().getDocumentacao() + "\"";
if (usuarioDestino != null) {
ocorr += " com o usu�rio " + usuarioDestino;
}
if (grupoDestino != null) {
ocorr += " com o grupo " + grupoDestino;
}
ocorrenciaProblemaDto.setOcorrencia(ocorr);
ocorrenciaProblemaDto.setOrigem(br.com.centralit.citcorpore.util.Enumerados.OrigemOcorrencia.OUTROS.getSigla()
.toString());
ocorrenciaProblemaDto
.setCategoria(br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia.Compartilhamento
.getSigla());
ocorrenciaProblemaDto.setIdItemTrabalho(idItemTrabalho);
ocorrenciaProblemaDao.create(ocorrenciaProblemaDto);
}
@Override
public void direcionaAtendimento(final String loginUsuario, final ObjetoNegocioFluxoDTO objetoNegocioDto,
final String grupoAtendimento) throws Exception {
if (getProblemaDto() == null) {
return;
}
if (grupoAtendimento == null) {
return;
}
final GrupoDTO grupoAtendimentoDto = new GrupoDao().restoreBySigla(grupoAtendimento);
if (grupoAtendimentoDto == null) {
return;
}
UsuarioDTO usuarioRespDto = new UsuarioDTO();
usuarioRespDto.setIdUsuario(getProblemaDto().getIdResponsavel());
usuarioRespDto = (UsuarioDTO) new UsuarioDao().restore(usuarioRespDto);
this.objetoNegocioDto = objetoNegocioDto;
final Collection<ExecucaoProblemaDTO> colExecucao = new ExecucaoProblemaDao().listByIdProblema(getProblemaDto()
.getIdProblema());
if (colExecucao != null) {
final ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao();
setTransacaoDao(itemTrabalhoFluxoDao);
final OcorrenciaProblemaDAO ocorrenciaProblemaDao = new OcorrenciaProblemaDAO();
setTransacaoDao(ocorrenciaProblemaDao);
for (final ExecucaoProblemaDTO execucaoProblemaDto : colExecucao) {
final InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this,
execucaoProblemaDto.getIdInstanciaFluxo());
final Collection<ItemTrabalhoFluxoDTO> colItens = itemTrabalhoFluxoDao
.findDisponiveisByIdInstancia(execucaoProblemaDto.getIdInstanciaFluxo());
if (colItens != null) {
for (final ItemTrabalhoFluxoDTO itemTrabalhoFluxoDto : colItens) {
final ItemTrabalho itemTrabalho = ItemTrabalho.getItemTrabalho(instanciaFluxo,
itemTrabalhoFluxoDto.getIdItemTrabalho());
itemTrabalho.redireciona(loginUsuario, null, grupoAtendimento);
String ocorr = "Direcionamento da tarefa \""
+ itemTrabalho.getElementoFluxoDto().getDocumentacao() + "\"";
ocorr += " para o grupo " + grupoAtendimento;
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), itemTrabalhoFluxoDto, ocorr,
OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Direcionamento, "n�o se aplica",
CategoriaOcorrencia.Direcionamento.getDescricao(), loginUsuario, 0, null,
getTransacao());
}
}
}
}
try {
final 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 (final NumberFormatException e) {
System.out.println("N�o h� modelo de e-mail setado nos par�metros.");
}
}
@Override
public void mapObjetoNegocio(final Map<String, Object> map) throws Exception {
final ProblemaDTO problemaDto = (ProblemaDTO) objetoNegocioDto;
final ProblemaDTO problemaAuxDto = new ProblemaServiceEjb().restoreAll(problemaDto.getIdProblema(),
getTransacao());
problemaDto.setIdGrupoAtual(problemaAuxDto.getIdGrupoAtual());
problemaDto.setIdGrupoNivel1(problemaAuxDto.getIdGrupoNivel1());
problemaDto.setNomeGrupoAtual(problemaAuxDto.getNomeGrupoAtual());
adicionaObjeto("problema", problemaDto, map);
if (usuarioDto != null) {
adicionaObjeto("usuario", usuarioDto, map);
} else if (problemaDto.getUsuarioDto() != null) {
adicionaObjeto("usuario", problemaDto.getUsuarioDto(), map);
}
adicionaObjeto("execucaoFluxo", this, map);
adicionaObjeto("problemaService", new ProblemaServiceEjb(), map);
}
public ProblemaDTO getProblemaDto() {
return (ProblemaDTO) objetoNegocioDto;
}
@Override
public List<TarefaFluxoDTO> recuperaTarefas(final String loginUsuario) throws Exception {
List<TarefaFluxoDTO> result = null;
Timestamp ts1 = UtilDatas.getDataHoraAtual();
final List<TarefaFluxoDTO> listTarefas = super.recuperaTarefas(loginUsuario);
Timestamp ts2 = UtilDatas.getDataHoraAtual();
double tempo = UtilDatas.calculaDiferencaTempoEmMilisegundos(ts2, ts1);
// System.out.println("########## Tempo super.recuperaTarefas: " + tempo);
if (listTarefas != null) {
ts1 = ts2;
result = new ArrayList();
final ProblemaServiceEjb problemaService = new ProblemaServiceEjb();
final ExecucaoProblemaDao execucaoProblemaDao = new ExecucaoProblemaDao();
for (final TarefaFluxoDTO tarefaDto : listTarefas) {
final ExecucaoProblemaDTO execucaoProblemaDto = execucaoProblemaDao.findByIdInstanciaFluxo(tarefaDto
.getIdInstancia());
if (execucaoProblemaDto != null && execucaoProblemaDto.getIdProblema() != null) {
final ProblemaDTO problemaDto = problemaService.restoreAll(execucaoProblemaDto.getIdProblema(),
null);
if (problemaDto != null) {
tarefaDto.setProblemaDto(problemaDto);
result.add(tarefaDto);
}
}
}
/*
* Collection<ProblemaDTO> listProblemaDto = problemaService.listByTarefas(listTarefas); //SE FOR UTILIZAR
* "IDPROBLEMAPAI" ENTAO TEM QUE DESCOMENTAR ESSES CODIGOS -> DAVID // Collection<ProblemaDTO>
* listProblemasFilhos = problemaService.listProblemasFilhos(); if (listProblemaDto != null &&
* !listProblemaDto.isEmpty()){ for (ProblemaDTO problemaDto : listProblemaDto){ for (TarefaFluxoDTO
* tarefaDto : listTarefas) { if (problemaDto.getIdInstanciaFluxo().equals(tarefaDto.getIdInstancia())) {
* boolean possuiFilho = false; if (listProblemasFilhos != null && !listProblemasFilhos.isEmpty()) { for
* (ProblemaDTO problemaDto2 : listProblemasFilhos) { if
* (problemaDto.getIdProblema().equals(problemaDto2.getIdProblemaPai())) { possuiFilho = true; break; } } }
* problemaDto.setPossuiFilho(possuiFilho); tarefaDto.setProblemaDto(problemaDto);
* tarefaDto.setDataHoraLimite(problemaDto.getDataHoraLimite()); result.add(tarefaDto); } } } }
*/
Collections.sort(result, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.ASC));
ts2 = UtilDatas.getDataHoraAtual();
tempo = UtilDatas.calculaDiferencaTempoEmMilisegundos(ts2, ts1);
//System.out.println("########## Tempo restore problemas: " + tempo);
}
return result;
}
public List<TarefaFluxoDTO> recuperaTarefas(final String loginUsuario, final String campoOrdenacao,
final Boolean asc) throws Exception {
List<TarefaFluxoDTO> result = null;
final List<TarefaFluxoDTO> listTarefas = super.recuperaTarefas(loginUsuario);
if (listTarefas != null) {
result = new ArrayList();
final ProblemaServiceEjb problemaService = new ProblemaServiceEjb();
for (final TarefaFluxoDTO tarefaDto : listTarefas) {
final ProblemaDTO problemaDto = problemaService.restoreByIdInstanciaFluxo(tarefaDto.getIdInstancia());
if (problemaDto != null) {
tarefaDto.setProblemaDto(problemaDto);
tarefaDto.setDataHoraLimite(problemaDto.getDataHoraLimite());
result.add(tarefaDto);
}
}
}
return result;
}
private void atualizaFaseProblema(final Integer idFase) throws Exception {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
getProblemaDto().setIdFaseAtual(idFase);
problemaDao.updateNotNull(getProblemaDto());
}
@Override
public void enviaEmail(final String identificador) throws Exception {
if (identificador == null) {
return;
}
final ModeloEmailDTO modeloEmailDto = new ModeloEmailDao().findByIdentificador(identificador);
if (modeloEmailDto != null) {
enviaEmail(modeloEmailDto.getIdModeloEmail());
}
}
public boolean isEmailHabilitado() throws Exception {
final String enviaEmail = ParametroUtil.getValor(ParametroSistema.EnviaEmailFluxo, getTransacao(), "N");
return enviaEmail.equalsIgnoreCase("S");
}
public String getRemetenteEmail() throws Exception {
final String remetente = ParametroUtil.getValor(ParametroSistema.RemetenteNotificacoesSolicitacao,
getTransacao(), null);
if (remetente == null) {
throw new LogicException(i18n_Message("citcorpore.comum.remetenteParaNotificacoesNaoParametrizado"));
}
return remetente;
}
public void complementaInformacoesEmail(final ProblemaDTO problemaDto) throws Exception {
final String urlSistema = ParametroUtil.getValor(ParametroSistema.URL_Sistema, getTransacao(), "");
final String idHashValidacao = CriptoUtils.generateHash("CODED" + problemaDto.getIdProblema(), "MD5");
problemaDto.setLinkPesquisaSatisfacao("<a href=\"" + urlSistema
+ "/pages/pesquisaSatisfacao/pesquisaSatisfacao.load?idProblema=" + problemaDto.getIdProblema()
+ "&hash=" + idHashValidacao + "\">Clique aqui para fazer a avalia��o do Atendimento</a>");
}
@Override
public void enviaEmail(final String identificador, final String[] destinatarios) throws Exception {
if (identificador == null) {
return;
}
if (destinatarios == null || destinatarios.length == 0) {
return;
}
if (!isEmailHabilitado()) {
return;
}
final ModeloEmailDTO modeloEmailDto = new ModeloEmailDao().findByIdentificador(identificador);
if (modeloEmailDto == null) {
return;
}
final String para = destinatarios[0];
String cc = null;
if (destinatarios.length > 1) {
cc = "";
for (int i = 1; i < destinatarios.length; i++) {
cc += destinatarios[i] + ";";
}
}
final String remetente = getRemetenteEmail();
final ProblemaDTO problemaAuxDto = new ProblemaServiceEjb().restoreAll(getProblemaDto().getIdProblema(),
getTransacao());
problemaAuxDto.setNomeTarefa(getProblemaDto().getNomeTarefa());
complementaInformacoesEmail(problemaAuxDto);
final MensagemEmail mensagem = new MensagemEmail(modeloEmailDto.getIdModeloEmail(),
new IDto[] { problemaAuxDto });
try {
mensagem.envia(para, cc, remetente);
} catch (final Exception e) {
}
}
@Override
public void enviaEmail(final Integer idModeloEmail) throws Exception {
if (idModeloEmail == null) {
return;
}
if (!isEmailHabilitado()) {
return;
}
final String remetente = getRemetenteEmail();
final ProblemaDTO problemaAuxDto = new ProblemaServiceEjb().restoreAll(getProblemaDto().getIdProblema(),
getTransacao());
if (problemaAuxDto != null) {
problemaAuxDto.setNomeTarefa(getProblemaDto().getNomeTarefa());
problemaAuxDto.setNomeContato(getProblemaDto().getNomeContato());
problemaAuxDto.setEmailContato(getProblemaDto().getEmailContato());
complementaInformacoesEmail(problemaAuxDto);
final MensagemEmail mensagem = new MensagemEmail(idModeloEmail, new IDto[] { problemaAuxDto });
try {
mensagem.envia(problemaAuxDto.getEmailContato(), remetente, remetente);
} catch (final Exception e) {
}
}
}
public void enviaEmail(final Integer idModeloEmail, final ProblemaDTO problemaDto) throws Exception {
if (idModeloEmail == null) {
return;
}
if (!isEmailHabilitado()) {
return;
}
final String remetente = getRemetenteEmail();
complementaInformacoesEmail(problemaDto);
final MensagemEmail mensagem = new MensagemEmail(idModeloEmail, new IDto[] { problemaDto });
try {
mensagem.envia(problemaDto.getEmailContato(), remetente, remetente);
} catch (final Exception e) {
}
// ProblemaDTO problemaAuxDto = new ProblemaServiceEjb().restoreAll(getProblemaDto().getIdProblema(),
// getTransacao());
// if(problemaAuxDto!=null){
// problemaAuxDto.setNomeTarefa(getProblemaDto().getNomeTarefa());
// problemaAuxDto.setNomeContato(getProblemaDto().getNomeContato());
// problemaAuxDto.setEmailContato(getProblemaDto().getEmailContato());
//
// }
//
}
/**
* Notifica todos os Empregados de um grupo.
*
* @param idModeloEmail
* @throws Exception
*/
public void enviaEmailGrupo(final Integer idModeloEmail, final Integer idGrupoDestino) throws Exception {
MensagemEmail mensagem = null;
if (idGrupoDestino == null) {
return;
}
if (idModeloEmail == null) {
return;
}
final GrupoService grupoService = (GrupoService) ServiceLocator.getInstance().getService(GrupoService.class,
null);
List<String> emails = null;
try {
emails = (List<String>) grupoService.listarEmailsPorGrupo(idGrupoDestino);
} catch (final Exception e) {
return;
}
if (emails == null || emails.isEmpty()) {
return;
}
final String remetente = ParametroUtil.getValor(ParametroSistema.RemetenteNotificacoesSolicitacao,
getTransacao(), null);
if (remetente == null) {
throw new LogicException(i18n_Message("citcorpore.comum.remetenteParaNotificacoesNaoParametrizado"));
}
final ProblemaDTO problemaAuxDto = new ProblemaServiceEjb().restoreAll(getProblemaDto().getIdProblema(),
getTransacao());
if (problemaAuxDto == null) {
return;
}
problemaAuxDto.setNomeTarefa(getProblemaDto().getNomeTarefa());
try {
// EmpregadoDTO aux = null;
for (final String email : emails) {
final int posArroba = email.indexOf("@");
if (posArroba > 0 && email.substring(posArroba).contains(".")) {
try {
mensagem = new MensagemEmail(idModeloEmail, new IDto[] { problemaAuxDto });
// aux = (EmpregadoDTO) getEmpregadoService().restore(e);
// if(aux != null && aux.getEmail() != null && !aux.getEmail().trim().equalsIgnoreCase("") ){
mensagem.envia(email, remetente, remetente);
} catch (final Exception e) {
// faz nada
}
}
// }
}
} catch (final Exception e) {
}
}
private ServicoContratoDTO recuperaServicoContrato() throws Exception {
final ServicoContratoDao servicoContratoDao = new ServicoContratoDao();
setTransacaoDao(servicoContratoDao);
ServicoContratoDTO servicoContratoDto = new ServicoContratoDTO();
if (getProblemaDto().getIdServicoContrato() != null) {
servicoContratoDto.setIdServicoContrato(getProblemaDto().getIdServicoContrato());
} else {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
final ProblemaDTO problemaDto = (ProblemaDTO) objetoNegocioDto;
ProblemaDTO problemaAuxDto = new ProblemaDTO();
problemaAuxDto.setIdProblema(problemaDto.getIdProblema());
problemaAuxDto = (ProblemaDTO) problemaDao.restore(problemaAuxDto);
servicoContratoDto.setIdServicoContrato(problemaAuxDto.getIdServicoContrato());
}
servicoContratoDto = (ServicoContratoDTO) servicoContratoDao.restore(servicoContratoDto);
if (servicoContratoDto == null) {
System.out.print("Servi�o contrato n�o localizado");
throw new LogicException(i18n_Message("problema.servicoContratoNaoLocalizado"));
}
return servicoContratoDto;
}
@Override
public void encerra() throws Exception {
final ProblemaDTO problemaDto = getProblemaDto();
if (problemaDto == null) {
throw new Exception(i18n_Message("problema.naoEncontrado"));
}
if (problemaDto.encerrada()) {
return;
}
validaEncerramento();
final Collection<ExecucaoProblemaDTO> colExecucao = new ExecucaoProblemaDao().listByIdProblema(getProblemaDto()
.getIdProblema());
if (colExecucao != null) {
for (final ExecucaoProblemaDTO execucaoProblemaDto : colExecucao) {
final InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this,
execucaoProblemaDto.getIdInstanciaFluxo());
instanciaFluxo.encerra();
}
}
if (!problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Cancelada.getDescricao())) {
problemaDto.setStatus(SituacaoRequisicaoProblema.Concluida.getDescricao());
}
problemaDto.setDataHoraFim(UtilDatas.getDataHoraAtual());
calculaTempoCaptura(problemaDto);
calculaTempoAtendimento(problemaDto);
calculaTempoAtraso(problemaDto);
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
problemaDao.updateNotNull(problemaDto);
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), null, null, OrigemOcorrencia.OUTROS,
CategoriaOcorrencia.Encerramento, null, CategoriaOcorrencia.Encerramento.getDescricao(), "Autom�tico",
0, null, getTransacao());
if (getProblemaDto().getEnviaEmailFinalizacao() != null
&& getProblemaDto().getEnviaEmailFinalizacao().equalsIgnoreCase("S")) {
final String IdModeloEmailProblemaFinalizado = ParametroUtil.getValorParametroCitSmartHashMap(
ParametroSistema.ID_MODELO_EMAIL_FINALIZADO_PROBLEMA, "36");
enviaEmail(Integer.parseInt(IdModeloEmailProblemaFinalizado.trim()), problemaDto);
// O metodo encerra esta sendo rodado duas vezes, para evitar que o email seja enviado duas vezes tambem,
// modifiquei o valor do atributo para que nao seja enviado na segunda vez, � apenas uma solu�ao de contorno
// sendo necessario descobrir
// porque o fluxo chama essa metodo duas vezes e se o mesmo � necessario, no momento isso n�o esta causando
// nenhum outro erro aparente.
getProblemaDto().setEnviaEmailFinalizacao("N");
}
}
// VOLTAR PARA ARRUMAR ESSE METODO POSTERIORMENTE, SE NECESS�RIO -> DAVID
// @Override
@Override
public void reabre(final String loginUsuario) throws Exception {
/*
* ProblemaDTO problemaDto = getProblemaDto(); if (problemaDto == null) throw new
* Exception("Problema n�o encontrado"); if (!problemaDto.encerrada()) throw new
* Exception("Problema n�o permite reabertura"); 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)); //
* solicitacaoServicoDto.setIdGrupoAtual(null); SolicitacaoServicoDao solicitacaoDao = new
* SolicitacaoServicoDao(); setTransacaoDao(solicitacaoDao); solicitacaoDao.update(solicitacaoServicoDto);
* OcorrenciaSolicitacaoServiceEjb.create(getSolicitacaoServicoDto(), null, null, OrigemOcorrencia.OUTROS,
* CategoriaOcorrencia.Reabertura, null, CategoriaOcorrencia.Reabertura.getDescricao(), usuarioDto.getLogin(),
* 0, null, getTransacao()); inicia();
*/
}
@Override
public void suspende(final String loginUsuario) throws Exception {
final ProblemaDTO problemaDto = getProblemaDto();
if (problemaDto == null) {
throw new Exception(i18n_Message("problema.naoEncontrado"));
}
// if (!problemaDto.emAtendimento())
// throw new Exception("Problema n�o permite suspens�o");
final Timestamp tsAtual = UtilDatas.getDataHoraAtual();
problemaDto.setDataHoraSuspensao(UtilDatas.getDataHoraAtual());
problemaDto.setDataHoraReativacao(null);
// suspendeSLA(problemaDto);
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
problemaDto.setStatus(SituacaoProblema.Suspensa.name());
problemaDao.update(problemaDto);
final JustificativaProblemaDTO justificativaProblemaDto = new JustificativaProblemaDTO();
justificativaProblemaDto.setIdJustificativaProblema(problemaDto.getIdJustificativaProblema());
justificativaProblemaDto.setDescricaoProblema(problemaDto.getComplementoJustificativa());
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), null, null, OrigemOcorrencia.OUTROS,
CategoriaOcorrencia.Suspensao, null, CategoriaOcorrencia.Suspensao.getDescricao(), loginUsuario, 0,
justificativaProblemaDto, getTransacao());
}
@Override
public void reativa(final String loginUsuario) throws Exception {
final ProblemaDTO problemaDto = getProblemaDto();
if (problemaDto == null) {
throw new Exception(i18n_Message("problema.naoEncontrado"));
}
if (!problemaDto.suspensa()) {
throw new Exception(i18n_Message("problema.naoPermiteReativacao"));
}
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
final Timestamp tsAtual = UtilDatas.getDataHoraAtual();
problemaDto.setStatus(SituacaoProblema.EmAndamento.getDescricao());
problemaDto.setDataHoraSuspensao(null);
problemaDto.setDataHoraReativacao(tsAtual);
// reativaSLA(problemaDto);
problemaDao.update(problemaDto);
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), null, null, OrigemOcorrencia.OUTROS,
CategoriaOcorrencia.Reativacao, null, CategoriaOcorrencia.Reativacao.getDescricao(), loginUsuario, 0,
null, getTransacao());
}
private Integer getIdCalendario(final ProblemaDTO problemaDto) throws Exception {
Integer idCalendario = problemaDto.getIdCalendario();
if (problemaDto.getIdCalendario() == null) {
final ServicoContratoDTO servicoContratoDto = new ServicoContratoDao().findByIdContratoAndIdServico(
problemaDto.getIdContrato(), problemaDto.getIdServico());
if (servicoContratoDto == null) {
System.out.print("Servi�o contrato n�o localizado");
throw new LogicException(i18n_Message("problema.servicoContratoNaoLocalizado"));
}
idCalendario = servicoContratoDto.getIdCalendario();
}
return idCalendario;
}
public void calculaTempoCaptura(final ProblemaDTO problemaDto) throws Exception {
problemaDto.setTempoCapturaHH(0);
problemaDto.setTempoCapturaMM(0);
if (problemaDto.getDataHoraCaptura() == null) {
return;
}
if (problemaDto.getDataHoraInicioSLA() == null) {
return;
}
if (problemaDto.getDataHoraInicioSLA().compareTo(problemaDto.getDataHoraCaptura()) > 0) {
return;
}
final Integer idCalendario = getIdCalendario(problemaDto);
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(idCalendario, problemaDto.getDataHoraInicioSLA());
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, problemaDto.getDataHoraCaptura(), null);
problemaDto.setTempoCapturaHH(calculoDto.getTempoDecorridoHH().intValue());
problemaDto.setTempoCapturaMM(calculoDto.getTempoDecorridoMM().intValue());
}
public void calculaTempoAtendimento(final ProblemaDTO problemaDto) throws Exception {
if (problemaDto.getDataHoraInicioSLA() == null) {
return;
}
final Integer idCalendario = getIdCalendario(problemaDto);
Timestamp tsAtual = UtilDatas.getDataHoraAtual();
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoProblema.Fechada.name())) {
tsAtual = problemaDto.getDataHoraFim();
}
Timestamp tsInicial = problemaDto.getDataHoraInicioSLA();
if (problemaDto.getDataHoraReativacao() != null) {
tsInicial = problemaDto.getDataHoraReativacao();
}
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(idCalendario, tsInicial);
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, tsAtual, null);
if (problemaDto.getTempoDecorridoHH() == null) {
problemaDto.setTempoDecorridoHH(0);
}
if (problemaDto.getTempoDecorridoMM() == null) {
problemaDto.setTempoDecorridoMM(0);
}
problemaDto.setTempoAtendimentoHH(new Integer(problemaDto.getTempoDecorridoHH().intValue()
+ calculoDto.getTempoDecorridoHH().intValue()));
problemaDto.setTempoAtendimentoMM(new Integer(problemaDto.getTempoDecorridoMM().intValue()
+ calculoDto.getTempoDecorridoMM().intValue()));
}
public void calculaTempoAtraso(final ProblemaDTO problemaDto) throws Exception {
problemaDto.setTempoAtrasoHH(0);
problemaDto.setTempoAtrasoMM(0);
if (problemaDto.getDataHoraLimite() != null) {
final Timestamp dataHoraLimite = problemaDto.getDataHoraLimite();
Timestamp dataHoraComparacao = UtilDatas.getDataHoraAtual();
if (problemaDto.encerrada()) {
dataHoraComparacao = problemaDto.getDataHoraFim();
}
if (dataHoraComparacao.compareTo(dataHoraLimite) > 0) {
final long atrasoSLA = UtilDatas
.calculaDiferencaTempoEmMilisegundos(dataHoraComparacao, dataHoraLimite) / 1000;
final String hora = Util.getHoraStr(new Double(atrasoSLA) / 3600);
final int tam = hora.length();
problemaDto.setTempoAtrasoHH(new Integer(hora.substring(0, tam - 2)));
problemaDto.setTempoAtrasoMM(new Integer(hora.substring(tam - 2, tam)));
}
}
}
public EmpregadoDTO recuperaSolicitante(final ProblemaDTO problemaDto) throws Exception {
if (problemaDto == null || problemaDto.getIdSolicitante() == null) {
return null;
}
return new EmpregadoDao().restoreByIdEmpregado(problemaDto.getIdSolicitante());
}
public StringBuilder recuperaLoginResponsaveis() throws Exception {
final StringBuilder result = new StringBuilder();
final ProblemaDTO problemaDto = getProblemaDto();
final UsuarioDao usuarioDao = new UsuarioDao();
UsuarioDTO usuarioDto = usuarioDao.restoreByIdEmpregado(problemaDto.getIdSolicitante());
if (usuarioDto != null) {
result.append(usuarioDto.getLogin());
}
usuarioDto = usuarioDao.restoreByIdEmpregado(problemaDto.getIdResponsavel());
if (usuarioDto != null) {
if (result.length() > 0) {
result.append(";");
}
result.append(usuarioDto.getLogin());
}
return result;
}
@Override
public void executaEvento(final EventoFluxoDTO eventoFluxoDto) throws Exception {
final ProblemaDAO problemaDao = new ProblemaDAO();
final ProblemaDTO problemaDto = problemaDao.restoreByIdInstanciaFluxo(eventoFluxoDto.getIdInstancia());
if (problemaDto == null) {
System.out.println("Execu��o problemas do evento " + eventoFluxoDto.getIdItemTrabalho()
+ " n�o encontrados");
throw new LogicException(i18n_Message("problema.eventoNaoEncontrado"));
}
final TransactionControler tc = new TransactionControlerImpl(problemaDao.getAliasDB());
setTransacao(tc);
try {
tc.start();
setObjetoNegocioDto(problemaDto);
final InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, eventoFluxoDto.getIdInstancia());
final HashMap<String, Object> map = instanciaFluxo.getMapObj();
instanciaFluxo.getObjetos(map);
mapObjetoNegocio(map);
instanciaFluxo.executaEvento(eventoFluxoDto.getIdItemTrabalho(), map);
tc.commit();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
throw new ServiceException(e);
} finally {
try {
tc.close();
} catch (PersistenceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void cancelaTarefa(final String loginUsuario, final ProblemaDTO problemaDto,
final TarefaFluxoDTO tarefaFluxoDto, final String motivo) throws Exception {
final 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;
}
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), tarefaFluxoDto, ocorrencia, OrigemOcorrencia.OUTROS,
CategoriaOcorrencia.CancelamentoTarefa, "n�o se aplica",
CategoriaOcorrencia.CancelamentoTarefa.getDescricao(), "Sistema", tempo.intValue(), null,
getTransacao());
}
@Override
public void validaEncerramento() throws Exception {
}
public String recuperaGrupoAprovador() throws Exception {
final ProblemaDTO problemaDto = getProblemaDto();
if (problemaDto == null) {
throw new Exception(i18n_Message("problema.naoEncontrado"));
}
final ServicoContratoDTO servicoContratoDto = recuperaServicoContrato();
if (servicoContratoDto.getIdGrupoAprovador() == null) {
throw new Exception(i18n_Message("citcorpore.comum.grupoaprovadoNaoParametrizado"));
}
final 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(i18n_Message("citcorpore.comum.grupoaprovadoNaoParametrizado"));
}
return grupoDto.getSigla();
}
@Override
public void verificaSLA(final ItemTrabalho itemTrabalho) throws Exception {
/*
* ProblemaDTO problemaDto = getProblemaDto(); if (problemaDto == null) throw new
* Exception("Problema n�o encontrado"); boolean bContabilizaSLA = true; if (itemTrabalho.getContabilizaSLA() !=
* null) bContabilizaSLA = itemTrabalho.getContabilizaSLA().equalsIgnoreCase("S"); boolean bGravar = false; if
* (bContabilizaSLA) { if (problemaDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.N.name())) {
* iniciaSLA(problemaDto); bGravar = true; }if
* (problemaDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.S.name())) { reativaSLA(problemaDto); bGravar =
* true; } }else if (problemaDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.A.name())) {
* suspendeSLA(problemaDto); bGravar = true; } if (bGravar) { ProblemaDAO problemaDao = new ProblemaDAO();
* problemaDao.setTransactionControler(getTransacao()); problemaDao.updateNotNull(problemaDto); }
*/
}
public void determinaPrazoLimite(final ProblemaDTO problemaoDto, Integer idCalendario) throws Exception {
if (problemaoDto.getDataHoraInicioSLA() == null) {
return;
}
if (idCalendario == null || idCalendario.intValue() == 0) {
final ServicoContratoDao servicoContratoDao = new ServicoContratoDao();
servicoContratoDao.setTransactionControler(getTransacao());
final ServicoContratoDTO servicoContratoDto = servicoContratoDao.findByIdContratoAndIdServico(
problemaoDto.getIdContrato(), problemaoDto.getIdServico());
if (servicoContratoDto == null) {
throw new LogicException(i18n_Message(problemaoDto.getUsuarioDto(),
"solicitacaoservico.validacao.servicolocalizado"));
}
idCalendario = servicoContratoDto.getIdCalendario();
}
if (problemaoDto.getPrazoHH() == null) {
problemaoDto.setPrazoHH(0);
}
if (problemaoDto.getPrazoMM() == null) {
problemaoDto.setPrazoMM(0);
}
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(idCalendario, problemaoDto.getDataHoraInicioSLA(),
problemaoDto.getPrazoHH(), problemaoDto.getPrazoMM());
calculoDto = new CalendarioServiceEjb().calculaDataHoraFinal(calculoDto, true, null);
problemaoDto.setDataHoraLimite(calculoDto.getDataHoraFinal());
}
public void iniciaSLA(final ProblemaDTO problemaDto) throws Exception {
if (!problemaDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.N.name())) {
return;
}
problemaDto.setDataHoraInicioSLA(UtilDatas.getDataHoraAtual());
problemaDto.setSituacaoSLA(SituacaoSLA.A.name());
determinaPrazoLimite(problemaDto, null);
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), null, null, OrigemOcorrencia.OUTROS,
CategoriaOcorrencia.InicioSLA, null, CategoriaOcorrencia.InicioSLA.getDescricao(), "Autom�tico", 0,
null, getTransacao());
}
public void suspendeSLA(final ProblemaDTO problemaDto) throws Exception {
if (!problemaDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.A.name())) {
return;
}
final Timestamp tsAtual = UtilDatas.getDataHoraAtual();
Timestamp tsInicial = problemaDto.getDataHoraInicioSLA();
if (problemaDto.getDataHoraReativacaoSLA() != null) {
tsInicial = problemaDto.getDataHoraReativacao();
}
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(problemaDto.getIdCalendario(), tsInicial);
calculoDto = new CalendarioServiceEjb().calculaPrazoDecorrido(calculoDto, tsAtual, null);
if (problemaDto.getTempoDecorridoHH() == null) {
problemaDto.setTempoDecorridoHH(0);
}
if (problemaDto.getTempoDecorridoMM() == null) {
problemaDto.setTempoDecorridoMM(0);
}
problemaDto.setSituacaoSLA(SituacaoSLA.S.name());
problemaDto.setTempoDecorridoHH(new Integer(problemaDto.getTempoDecorridoHH().intValue()
+ calculoDto.getTempoDecorridoHH().intValue()));
problemaDto.setTempoDecorridoMM(new Integer(problemaDto.getTempoDecorridoMM().intValue()
+ calculoDto.getTempoDecorridoMM().intValue()));
problemaDto.setDataHoraSuspensaoSLA(tsAtual);
problemaDto.setDataHoraReativacaoSLA(null);
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), null, null, OrigemOcorrencia.OUTROS,
CategoriaOcorrencia.SuspensaoSLA, null, CategoriaOcorrencia.SuspensaoSLA.getDescricao(), "Autom�tico",
0, null, getTransacao());
}
public void reativaSLA(final ProblemaDTO problemaDto) throws Exception {
if (!problemaDto.getSituacaoSLA().equalsIgnoreCase(SituacaoSLA.S.name())) {
return;
}
final Timestamp tsAtual = UtilDatas.getDataHoraAtual();
double prazo = problemaDto.getPrazoHH() + new Double(problemaDto.getPrazoMM()).doubleValue() / 60;
final double tempo = problemaDto.getTempoDecorridoHH()
+ new Double(problemaDto.getTempoDecorridoMM()).doubleValue() / 60;
prazo = prazo - tempo;
if (prazo > 0) {
CalculoJornadaDTO calculoDto = new CalculoJornadaDTO(problemaDto.getIdCalendario(), tsAtual,
Util.getHora(prazo), Util.getMinuto(prazo));
calculoDto = new CalendarioServiceEjb().calculaDataHoraFinal(calculoDto, false, null);
problemaDto.setDataHoraLimite(calculoDto.getDataHoraFinal());
}
problemaDto.setSituacaoSLA(SituacaoSLA.A.name());
problemaDto.setDataHoraSuspensaoSLA(null);
problemaDto.setDataHoraReativacaoSLA(tsAtual);
OcorrenciaProblemaServiceEjb.create(getProblemaDto(), null, null, OrigemOcorrencia.OUTROS,
CategoriaOcorrencia.ReativacaoSLA, null, CategoriaOcorrencia.ReativacaoSLA.getDescricao(),
"Autom�tico", 0, null, getTransacao());
}
/**
* M�todo que consulta se um problema precisa ou n�o de solu��o de contorno.
*
* @author thiagomonteiro
* @return true ou false
* @throws Exception
*/
public boolean precisaSolucaoContorno() throws Exception {
final ProblemaDTO problemaDTO = getProblemaDto();
if (problemaDTO.getPrecisaSolucaoContorno() != null
&& problemaDTO.getPrecisaSolucaoContorno().equalsIgnoreCase("S")) {
problemaDTO.setFase(FaseRequisicaoProblema.SolucaoContorno.name());
final SituacaoRequisicaoProblema novaSituacao = FaseRequisicaoProblema.valueOf(getProblemaDto().getFase())
.getSituacao();
if (novaSituacao != null) {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
getProblemaDto().setStatus(novaSituacao.getDescricao());
problemaDao.updateNotNull(getProblemaDto());
}
} else {
problemaDTO.setFase(FaseRequisicaoProblema.Resolucao.name());
final SituacaoRequisicaoProblema novaSituacao = FaseRequisicaoProblema.valueOf(getProblemaDto().getFase())
.getSituacao();
if (novaSituacao != null) {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
getProblemaDto().setStatus(novaSituacao.getDescricao());
problemaDao.updateNotNull(getProblemaDto());
}
}
return problemaDTO.getPrecisaSolucaoContorno() != null
&& problemaDTO.getPrecisaSolucaoContorno().equalsIgnoreCase("S");
}
/**
* M�todo que consulta se um problema precisa ou n�o de uma mudan�a para ser solucionado.
*
* @author thiagomonteiro
* @return true ou false
* @throws Exception
*/
public boolean precisaMudanca() throws Exception {
final ProblemaDTO problemaDTO = getProblemaDto();
return problemaDTO.getIdProblemaMudanca() != null && problemaDTO.getIdProblemaMudanca() > 0;
}
/**
* M�todo que consulta se um problema foi resolvido ou n�o.
*
* @author thiagomonteiro
* @return true ou false
* @throws Exception
*/
public boolean resolvido() throws Exception {
final ProblemaDTO problemaDTO = getProblemaDto();
if (problemaDTO.getResolvido() != null && problemaDTO.getResolvido().equalsIgnoreCase("S")) {
problemaDTO.setFase(FaseRequisicaoProblema.Encerramento.name());
final SituacaoRequisicaoProblema novaSituacao = FaseRequisicaoProblema.valueOf(getProblemaDto().getFase())
.getSituacao();
if (novaSituacao != null) {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
getProblemaDto().setStatus(novaSituacao.getDescricao());
problemaDao.updateNotNull(getProblemaDto());
}
} else {
problemaDTO.setFase(FaseRequisicaoProblema.Registrada.name());
final SituacaoRequisicaoProblema novaSituacao = FaseRequisicaoProblema.valueOf(getProblemaDto().getFase())
.getSituacao();
if (novaSituacao != null) {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
getProblemaDto().setStatus(novaSituacao.getDescricao());
problemaDao.updateNotNull(getProblemaDto());
}
}
return problemaDTO.getResolvido() != null && problemaDTO.getResolvido().equalsIgnoreCase("S");
}
public void finalizaItemRelacionadoProblema(final ProblemaDTO problemaDTO) throws ServiceException, Exception {
new ProblemaServiceEjb().fechaRelacionamentoProblema(problemaDTO, super.getTransacao());
}
/**
* M�todo que consulta se um problema � grave ou n�o.
*
* @author thiagomonteiro
* @return true ou false
* @throws Exception
*/
public boolean grave() throws Exception {
final ProblemaDTO problemaDTO = getProblemaDto();
if (problemaDTO.getGrave() != null && problemaDTO.getGrave().equalsIgnoreCase("S")) {
problemaDTO.setFase(FaseRequisicaoProblema.Revisar.name());
final SituacaoRequisicaoProblema novaSituacao = FaseRequisicaoProblema.valueOf(getProblemaDto().getFase())
.getSituacao();
if (novaSituacao != null) {
final ProblemaDAO problemaDao = new ProblemaDAO();
setTransacaoDao(problemaDao);
getProblemaDto().setStatus(novaSituacao.getDescricao());
problemaDao.updateNotNull(getProblemaDto());
}
}
return problemaDTO.getGrave() != null && problemaDTO.getGrave().equalsIgnoreCase("S");
}
public CategoriaProblemaDTO recuperaCategoriaProblema() throws Exception {
final CategoriaProblemaDAO categoriaProblemaDao = new CategoriaProblemaDAO();
setTransacaoDao(categoriaProblemaDao);
CategoriaProblemaDTO categoriaProblemaDto = new CategoriaProblemaDTO();
if (getProblemaDto().getIdCategoriaProblema() != null) {
categoriaProblemaDto.setIdCategoriaProblema(getProblemaDto().getIdCategoriaProblema());
categoriaProblemaDto = (CategoriaProblemaDTO) categoriaProblemaDao.restore(categoriaProblemaDto);
}
if (categoriaProblemaDto == null) {
throw new LogicException(i18n_Message("problema.categoriaProblemaNaoLocalizado"));
}
return categoriaProblemaDto;
}
}