package br.com.centralit.citcorpore.ajaxForms;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.centralit.bpm.dto.TarefaFluxoDTO;
import br.com.centralit.citajax.html.AjaxFormAction;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citcorpore.bean.GerenciamentoServicosDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.negocio.ExecucaoSolicitacaoService;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.citframework.comparacao.ObjectSimpleComparator;
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 MonitoramentoServicos extends AjaxFormAction {
@Override
public Class getBeanClass() {
return GerenciamentoServicosDTO.class;
}
@Override
public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
exibeTarefas(document,request,response);
}
public void exibeTarefas(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
int contador = 0;
UsuarioDTO usuario = WebUtil.getUsuario(request);
ArrayList<SolicitacaoServicoDTO> resultSolicitacoes = new ArrayList<SolicitacaoServicoDTO>();
List colTarefasFiltradasFinal = new ArrayList();
if (usuario == null){
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.sessaoExpirada"));
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
GerenciamentoServicosDTO gerenciamentoBean = (GerenciamentoServicosDTO)document.getBean();
ExecucaoSolicitacaoService execucaoSolicitacaoService = (ExecucaoSolicitacaoService) ServiceLocator.getInstance().getService(ExecucaoSolicitacaoService.class, null);
List<TarefaFluxoDTO> colTarefas = execucaoSolicitacaoService.recuperaTarefas(usuario.getLogin());
if (colTarefas == null)
return;
if(gerenciamentoBean.getIdContrato()!= null){
gerenciamentoBean.setNumeroContratoSel(""+gerenciamentoBean.getIdContrato());
}
gerenciamentoBean.setOrdenacaoAsc("false");
gerenciamentoBean.setNomeCampoOrdenacao("");
boolean bFiltroPorContrato = gerenciamentoBean.getNumeroContratoSel() != null && gerenciamentoBean.getNumeroContratoSel().length() > 0;
boolean bFiltroPorSolicitacao = gerenciamentoBean.getIdGrupoAtual() != null && gerenciamentoBean.getIdGrupoAtual() > 0;
List<TarefaFluxoDTO> colTarefasFiltradas = new ArrayList();
if (!bFiltroPorContrato && !bFiltroPorSolicitacao)
colTarefasFiltradas.addAll(colTarefas);
else{
for (TarefaFluxoDTO tarefaDto : colTarefas) {
boolean bAdicionar = false;
String contrato = ""+((SolicitacaoServicoDTO) tarefaDto.getSolicitacaoDto()).getIdContrato();
String grupoAtual = ""+((SolicitacaoServicoDTO) tarefaDto.getSolicitacaoDto()).getIdGrupoAtual();
if (bFiltroPorContrato && bFiltroPorSolicitacao)
bAdicionar = contrato.equals(gerenciamentoBean.getNumeroContratoSel()) && grupoAtual.equals(""+gerenciamentoBean.getIdGrupoAtual());
else if (bFiltroPorContrato)
bAdicionar = contrato.equals(gerenciamentoBean.getNumeroContratoSel());
else
bAdicionar = grupoAtual.equals(""+gerenciamentoBean.getIdGrupoAtual());
if (bAdicionar)
colTarefasFiltradas.add(tarefaDto);
}
}
boolean asc = true;
for(TarefaFluxoDTO tarefaDto : colTarefasFiltradas){
SolicitacaoServicoDTO dtoSol = (SolicitacaoServicoDTO) tarefaDto.getSolicitacaoDto();
dtoSol.setDataHoraLimiteToString(""); //Apenas forca atualizacao
dtoSol.setDataHoraSolicitacaoToString(""); //Apenas forca atualizacao
dtoSol.setDescricao("");
dtoSol.setDescricaoSemFormatacao("");
dtoSol.setResposta("");
dtoSol.setDetalhamentoCausa("");
dtoSol.setCaracteristica("");
dtoSol.setColArquivosUpload(null);
dtoSol.setColItensICSerialize(null);
dtoSol.setColItensMudanca(null);
dtoSol.setColItensProblema(null);
dtoSol.setComplementoJustificativa("");
dtoSol.setDemanda("");
dtoSol.setDetalhamentoCausa("");
dtoSol.setEditar("");
dtoSol.setEmailcontato("");
dtoSol.setEnviaEmailAcoes("");
dtoSol.setEnviaEmailCriacao("");
dtoSol.setEnviaEmailFinalizacao("");
dtoSol.setEscalar("");
dtoSol.setExibirCampoDescricao("");
dtoSol.setObservacao("");
dtoSol.setPalavraChave("");
if (dtoSol.getSlaACombinar() == null){
dtoSol.setSlaACombinar("N");
}
colTarefasFiltradasFinal.add(tarefaDto);
resultSolicitacoes.add((SolicitacaoServicoDTO) tarefaDto.getSolicitacaoDto());
int prazoHH = 0;
int prazoMM = 0;
if (dtoSol.getPrazoHH() != null){
prazoHH = dtoSol.getPrazoHH();
}
if (dtoSol.getPrazoMM() != null){
prazoMM = dtoSol.getPrazoMM();
}
if (prazoHH == 0 && prazoMM == 0){
dtoSol.setSlaACombinar("S");
dtoSol.setAtrasoSLA(0);
dtoSol.setAtrasoSLAStr("");
dtoSol.setDataHoraLimiteStr("");
}
if (dtoSol.getSlaACombinar().equalsIgnoreCase("S")) {
dtoSol.setDataHoraLimite(null);
dtoSol.setAtrasoSLA(0);
dtoSol.setAtrasoSLAStr("");
if (asc) {
tarefaDto.setDataHoraLimite(new Timestamp(UtilDatas.alteraData(UtilDatas.getDataAtual(), 50, Calendar.YEAR).getTime()));
} else {
tarefaDto.setDataHoraLimite(new Timestamp(UtilDatas.alteraData(UtilDatas.getDataAtual(), -10, Calendar.YEAR).getTime()));
}
}
if (dtoSol.getSituacao().equalsIgnoreCase(br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico.Suspensa.name())) {
dtoSol.setDataHoraLimite(null);
dtoSol.setAtrasoSLA(0);
dtoSol.setAtrasoSLAStr("");
if (asc) {
tarefaDto.setDataHoraLimite(new Timestamp(UtilDatas.alteraData(UtilDatas.getDataAtual(), -50, Calendar.YEAR).getTime()));
} else {
tarefaDto.setDataHoraLimite(new Timestamp(UtilDatas.alteraData(UtilDatas.getDataAtual(), 10, Calendar.YEAR).getTime()));
}
}
if (dtoSol.getSolicitanteUnidade() != null && !dtoSol.getSolicitanteUnidade().trim().equalsIgnoreCase("")){
dtoSol.setSolicitante(""); //pra nao enviar no JSON
}else{
dtoSol.setSolicitanteUnidade(dtoSol.getSolicitante());
}
dtoSol.setDataHoraSolicitacaoStr(dtoSol.obterDataHoraSolicitacaoStrWithLanguage(WebUtil.getLanguage(request)));
dtoSol.setDataHoraLimiteStr(dtoSol.obterDataHoraLimiteStrWithLanguage(WebUtil.getLanguage(request)));
if (gerenciamentoBean.getNomeCampoOrdenacao() != null && !gerenciamentoBean.getNomeCampoOrdenacao().trim().equalsIgnoreCase("")
&& !gerenciamentoBean.getNomeCampoOrdenacao().trim().equalsIgnoreCase("dataHoraLimite")) {
Collections.sort(resultSolicitacoes, new ObjectSimpleComparator(getWithGet(gerenciamentoBean.getNomeCampoOrdenacao()), (asc ? ObjectSimpleComparator.ASC : ObjectSimpleComparator.DESC)));
colTarefasFiltradasFinal = (List<TarefaFluxoDTO>) reordena((ArrayList<TarefaFluxoDTO>) colTarefasFiltradasFinal, resultSolicitacoes);
} else {
if (asc) {
Collections.sort(colTarefasFiltradasFinal, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.ASC));
} else {
Collections.sort(colTarefasFiltradasFinal, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.DESC));
}
}
contador++;
if(contador>100)break;
}
//Collections.sort(colTarefasFiltradas, new ObjectSimpleComparator("getDataHoraLimite", ObjectSimpleComparator.ASC));
// String tarefasStr = new Gson().toJson(colTarefasFiltradas);
// tarefasStr = tarefasStr.replaceAll("\n", " ");
// tarefasStr = tarefasStr.replaceAll("\r", " ");
// tarefasStr = tarefasStr.replaceAll("\\\\n", " ");
String tarefasStr = serializaTarefas(colTarefasFiltradasFinal, request);
document.executeScript("exibirTarefas('" + tarefasStr + "');");
document.executeScript("fechaJanelaAguarde();");
}
public void pesquisaItens(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception{
exibeTarefas(document,request,response);
}
private String serializaTarefas(List<TarefaFluxoDTO> colTarefas, HttpServletRequest request) throws Exception {
if (colTarefas == null)
return null;
for (TarefaFluxoDTO tarefaDto : colTarefas) {
String elementoFluxo_serialize = br.com.citframework.util.WebUtil.serializeObject(tarefaDto.getElementoFluxoDto(), WebUtil.getLanguage(request));
String requisicaoSolicitacao_serialize = br.com.citframework.util.WebUtil.serializeObject(tarefaDto.getSolicitacaoDto(), WebUtil.getLanguage(request));
tarefaDto.setElementoFluxo_serialize(elementoFluxo_serialize);
tarefaDto.setSolicitacao_serialize(requisicaoSolicitacao_serialize);
}
return br.com.citframework.util.WebUtil.serializeObjects(colTarefas, WebUtil.getLanguage(request));
}
/**
* Insere 'get' antes do elemento para se adequar � reflex�o.
*
* @param palavra
* @return
* @author breno.guimaraes
*/
private String getWithGet(String palavra) {
return "get" + palavra.substring(0, 1).toUpperCase() + palavra.substring(1);
}
private ArrayList<TarefaFluxoDTO> reordena(ArrayList<TarefaFluxoDTO> tarefas, ArrayList<SolicitacaoServicoDTO> solicitacoes) {
ArrayList<TarefaFluxoDTO> novaLista = new ArrayList<TarefaFluxoDTO>();
for (SolicitacaoServicoDTO s : solicitacoes) {
loopTarefas: for (TarefaFluxoDTO t : tarefas) {
if (((SolicitacaoServicoDTO) t.getSolicitacaoDto()).getIdSolicitacaoServico().equals(s.getIdSolicitacaoServico())) {
novaLista.add(t);
break loopTarefas;
}
}
}
return novaLista;
}
}