package br.com.centralit.citcorpore.ajaxForms;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringEscapeUtils;
import br.com.centralit.bpm.dto.TarefaFluxoDTO;
import br.com.centralit.bpm.util.Enumerados;
import br.com.centralit.citajax.html.AjaxFormAction;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citcorpore.bean.GerenciamentoProblemasDTO;
import br.com.centralit.citcorpore.bean.ProblemaDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.ProblemaDAO;
import br.com.centralit.citcorpore.negocio.ExecucaoProblemaService;
import br.com.centralit.citcorpore.negocio.ProblemaService;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoProblema;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoRequisicaoProblema;
import br.com.centralit.citcorpore.util.Enumerados.TipoDate;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilI18N;
@SuppressWarnings({"rawtypes", "unchecked"})
public class GerenciamentoProblemas extends AjaxFormAction {
@Override
public Class<GerenciamentoProblemasDTO> getBeanClass() {
return GerenciamentoProblemasDTO.class;
}
@Override
public void load(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
this.exibeTarefas(document, request, response);
}
public void exibeTarefas(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
ProblemaDTO problemaDto = new ProblemaDTO();
final UsuarioDTO usuario = WebUtil.getUsuario(request);
if (usuario == null) {
document.alert("Sessao expirada! Favor efetuar logon novamente!");
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
final GerenciamentoProblemasDTO gerenciamentoBean = (GerenciamentoProblemasDTO) document.getBean();
final List<TarefaFluxoDTO> colTarefas = this.getExecucaoProblemaService().recuperaTarefas(usuario.getLogin());
if (colTarefas == null) {
return;
}
boolean bFiltroPorSolicitacao = false;
if (gerenciamentoBean != null) {
bFiltroPorSolicitacao = gerenciamentoBean.getIdProblemaSel() != null && gerenciamentoBean.getIdProblemaSel().length() > 0;
}
final List<TarefaFluxoDTO> colTarefasFiltradas = new ArrayList<>();
if (!bFiltroPorSolicitacao) {
colTarefasFiltradas.addAll(colTarefas);
} else {
for (final TarefaFluxoDTO tarefaDto : colTarefas) {
boolean bAdicionar = false;
final String idProblema = "" + ((ProblemaDTO) tarefaDto.getProblemaDto()).getIdProblema();
bAdicionar = idProblema.indexOf(gerenciamentoBean.getIdProblemaSel()) >= 0;
if (bAdicionar) {
colTarefasFiltradas.add(tarefaDto);
}
}
}
final List colTarefasFiltradasFinal = new ArrayList();
final HashMap mapAtr = new HashMap();
mapAtr.put("-- Sem Atribui��o --", "-- Sem Atribui��o --");
for (final TarefaFluxoDTO tarefaDto : colTarefasFiltradas) {
problemaDto = (ProblemaDTO) tarefaDto.getProblemaDto();
problemaDto.setDataHoraInicioSLAStr("");
problemaDto.setDescricao("");
if (problemaDto.getPrazoHH() != null) {
problemaDto.getPrazoHH();
}
if (problemaDto.getPrazoMM() != null) {
problemaDto.getPrazoMM();
}
problemaDto.setDataHoraLimiteStr(UtilDatas.convertDateToString(TipoDate.TIMESTAMP_DEFAULT, problemaDto.getDataHoraLimite(), WebUtil.getLanguage(request)));
problemaDto.setDataHoraInicioSLAStr(UtilDatas.convertDateToString(TipoDate.TIMESTAMP_DEFAULT, problemaDto.getDataHoraInicioSLA(), WebUtil.getLanguage(request)));
problemaDto.setDataHoraCapturaStr(UtilDatas.convertDateToString(TipoDate.TIMESTAMP_DEFAULT, problemaDto.getDataHoraCaptura(), WebUtil.getLanguage(request)));
if (problemaDto.getResponsavel() != null) {
if (!mapAtr.containsKey(problemaDto.getResponsavel())) {
mapAtr.put(problemaDto.getResponsavel(), problemaDto.getResponsavel());
}
}
if (gerenciamentoBean.getAtribuidaCompartilhada() == null || gerenciamentoBean.getAtribuidaCompartilhada().trim().equalsIgnoreCase("")) {
colTarefasFiltradasFinal.add(tarefaDto);
} else {
if (gerenciamentoBean.getAtribuidaCompartilhada().trim().equalsIgnoreCase(UtilI18N.internacionaliza(request, "citcorpore.comum.sematribuicao"))) {
if (tarefaDto.getResponsavelAtual() == null || tarefaDto.getResponsavelAtual().trim().equalsIgnoreCase("")) {
colTarefasFiltradasFinal.add(tarefaDto);
}
} else {
if (gerenciamentoBean.getAtribuidaCompartilhada().trim().equalsIgnoreCase(tarefaDto.getResponsavelAtual())) {
colTarefasFiltradasFinal.add(tarefaDto);
}
}
}
final String status = this.setStatusInternacionalidados(document, request, response, problemaDto);
if (status != null) {
problemaDto.setStatus(status);
}
}
if (gerenciamentoBean != null && gerenciamentoBean.getIdProblemaSel() != null && !gerenciamentoBean.getIdProblemaSel().trim().equalsIgnoreCase("")) {
problemaDto.setIdProblema(new Integer(gerenciamentoBean.getIdProblemaSel()));
}
final String tarefasStr = this.serializaTarefas(colTarefasFiltradasFinal, request);
document.executeScript("exibirTarefas('" + tarefasStr + "');");
}
private String serializaTarefas(final List<TarefaFluxoDTO> colTarefas, final HttpServletRequest request) throws Exception {
if (colTarefas == null) {
return null;
}
for (final TarefaFluxoDTO tarefaDto : colTarefas) {
final String elementoFluxo_serialize = StringEscapeUtils.escapeJavaScript(br.com.citframework.util.WebUtil.serializeObject(tarefaDto.getElementoFluxoDto(),
WebUtil.getLanguage(request)));
final String problema_serialize = StringEscapeUtils.escapeJavaScript(br.com.citframework.util.WebUtil.serializeObject(tarefaDto.getProblemaDto(),
WebUtil.getLanguage(request)));
tarefaDto.setElementoFluxo_serialize(elementoFluxo_serialize);
tarefaDto.setProblema_serialize(problema_serialize);
}
return br.com.citframework.util.WebUtil.serializeObjects(colTarefas, WebUtil.getLanguage(request));
}
public void preparaExecucaoTarefa(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final UsuarioDTO usuario = WebUtil.getUsuario(request);
if (usuario == null) {
document.alert("Sess�o expirada! Favor efetuar logon novamente!");
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
final GerenciamentoProblemasDTO gerenciamentoBean = (GerenciamentoProblemasDTO) document.getBean();
if (gerenciamentoBean.getIdTarefa() == null) {
return;
}
if (gerenciamentoBean.getIdProblema() == null) {
return;
}
final TarefaFluxoDTO tarefaDto = this.getExecucaoProblemaService().recuperaTarefa(usuario.getLogin(), gerenciamentoBean.getIdTarefa());
if (tarefaDto == null || tarefaDto.getElementoFluxoDto() == null || !tarefaDto.getExecutar().equals("S") || tarefaDto.getElementoFluxoDto().getTipoInteracao() == null) {
return;
}
if (tarefaDto.getElementoFluxoDto().getTipoInteracao().equals(Enumerados.INTERACAO_VISAO)) {
if (tarefaDto.getIdVisao() != null) {
document.executeScript("exibirVisao('Executar tarefa " + tarefaDto.getElementoFluxoDto().getDocumentacao() + "','" + tarefaDto.getIdVisao() + "','"
+ tarefaDto.getElementoFluxoDto().getIdFluxo() + "','" + tarefaDto.getIdItemTrabalho() + "','" + gerenciamentoBean.getAcaoFluxo() + "');");
} else {
document.alert("Vis�o para tarefa \"" + tarefaDto.getElementoFluxoDto().getDocumentacao() + "\" n�o encontrada");
}
} else {
String caracterParmURL = "?";
if (tarefaDto.getElementoFluxoDto().getUrl().indexOf("?") > -1) { // Se na URL ja tiver ?, entao colocar &
caracterParmURL = "&";
}
document.executeScript("exibirUrl('Executar tarefa " + tarefaDto.getElementoFluxoDto().getDocumentacao() + "','" + tarefaDto.getElementoFluxoDto().getUrl()
+ caracterParmURL + "idProblema=" + gerenciamentoBean.getIdProblema() + "&idTarefa=" + tarefaDto.getIdItemTrabalho() + "&acaoFluxo="
+ gerenciamentoBean.getAcaoFluxo() + "');");
}
}
public void reativaProblema(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final UsuarioDTO usuario = WebUtil.getUsuario(request);
if (usuario == null) {
document.alert("Sess�o expirada! Favor efetuar logon novamente!");
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
final GerenciamentoProblemasDTO gerenciamentoBean = (GerenciamentoProblemasDTO) document.getBean();
if (gerenciamentoBean.getIdProblema() == null) {
return;
}
final ProblemaService problemaService = this.getProblemaService();
final ProblemaDTO problemaDto = problemaService.restoreAll(gerenciamentoBean.getIdProblema());
problemaService.reativa(usuario, problemaDto);
this.exibeTarefas(document, request, response);
}
public void capturaTarefa(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final UsuarioDTO usuario = WebUtil.getUsuario(request);
if (usuario == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.sessaoExpirada"));
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
GerenciamentoProblemasDTO problemaBean = (GerenciamentoProblemasDTO) document.getBean();
if (problemaBean.getIdTarefa() == null) {
return;
}
if (problemaBean.getIdProblema() == null) {
return;
}
final ProblemaDTO problemaDto = new ProblemaDTO();
final ProblemaDAO problemaDao = new ProblemaDAO();
problemaDto.setIdProblema(problemaBean.getIdProblema());
problemaDto.setIdProprietario(usuario.getIdUsuario());
problemaDao.updateNotNull(problemaDto);
this.getExecucaoProblemaService().executa(usuario, problemaBean.getIdTarefa(), Enumerados.ACAO_INICIAR);
this.exibeTarefas(document, request, response);
problemaBean = null;
}
private ExecucaoProblemaService execucaoProblemaService;
private ProblemaService problemaService;
private ExecucaoProblemaService getExecucaoProblemaService() throws ServiceException {
if (execucaoProblemaService == null) {
execucaoProblemaService = (ExecucaoProblemaService) ServiceLocator.getInstance().getService(ExecucaoProblemaService.class, null);
}
return execucaoProblemaService;
}
private ProblemaService getProblemaService() throws ServiceException {
if (problemaService == null) {
problemaService = (ProblemaService) ServiceLocator.getInstance().getService(ProblemaService.class, null);
}
return problemaService;
}
/**
* Metodo para internacionalizar status de problema
*
* @param document
* @param request
* @param response
* @param problemaDto
* @return
* @throws Exception
* @author thays.araujo
*/
public String setStatusInternacionalidados(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response, final ProblemaDTO problemaDto)
throws Exception {
String status = "";
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Registrada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.registrada");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.EmInvestigacao.getDescricao())) {
status = UtilI18N.internacionaliza(request, "gerenciamentoProblema.emInvestigacao");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Aprovada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.aprovacao");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Planejada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.planejada");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.EmExecucao.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.emExecucao");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Executada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "perfil.executada");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Suspensa.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.suspensa");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Cancelada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.cancelada");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Rejeitada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.rejeitada");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Resolvida.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.resolvida");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Reaberta.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.reaberta");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Concluida.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.concluida");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.SolucaoContorno.getDescricao())) {
status = UtilI18N.internacionaliza(request, "problema.solucao_contorno");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Revisado.getDescricao())) {
status = UtilI18N.internacionaliza(request, "problema.revisado");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Resolucao.getDescricao())) {
status = UtilI18N.internacionaliza(request, "pesquisaProblema.resolucao");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Encerramento.getDescricao())) {
status = UtilI18N.internacionaliza(request, "grupo.encerramento");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.Revisar.getDescricao())) {
status = UtilI18N.internacionaliza(request, "gerenciamentoProblema.revisar");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoRequisicaoProblema.RegistroErroConhecido.getDescricao())) {
status = UtilI18N.internacionaliza(request, "problema.registroErroConhecido");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoProblema.EmAndamento.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.emandamento");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoProblema.Fechada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.fechada");
return status;
}
if (problemaDto.getStatus().equalsIgnoreCase(SituacaoProblema.ReClassificada.getDescricao())) {
status = UtilI18N.internacionaliza(request, "citcorpore.comum.reclassificada");
return status;
}
return null;
}
}