package br.com.centralit.citcorpore.integracao;
import java.sql.Date;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import br.com.centralit.citcorpore.bean.BaseConhecimentoDTO;
import br.com.centralit.citcorpore.bean.PesquisaRequisicaoLiberacaoDTO;
import br.com.centralit.citcorpore.bean.RequisicaoLiberacaoDTO;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.PersistenceException;
import br.com.citframework.integracao.Condition;
import br.com.citframework.integracao.CrudDaoDefaultImpl;
import br.com.citframework.integracao.Field;
import br.com.citframework.integracao.Order;
import br.com.citframework.util.Constantes;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class RequisicaoLiberacaoDao extends CrudDaoDefaultImpl {
public RequisicaoLiberacaoDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idLiberacao" ,"idRequisicaoLiberacao", true, true, false, false));
listFields.add(new Field("idSolicitante" ,"idSolicitante", false, false, false, false));
listFields.add(new Field("idresponsavel" ,"idResponsavel", false, false, false, false));
listFields.add(new Field("titulo" ,"titulo", false, false, false, false));
listFields.add(new Field("idContatoRequisicaoLiberacao" ,"idContatoRequisicaoLiberacao", false, false, false, false));
listFields.add(new Field("descricao" ,"descricao", false, false, false, false));
listFields.add(new Field("dataInicial" ,"dataInicial", false, false, false, false));
listFields.add(new Field("dataFinal" ,"dataFinal", false, false, false, false));
listFields.add(new Field("dataLiberacao" ,"dataLiberacao", false, false, false, false));
listFields.add(new Field("situacao" ,"situacao", false, false, false, false));
listFields.add(new Field("risco" ,"risco", false, false, false, false));
listFields.add(new Field("versao" ,"versao", false, false, false, false));
listFields.add(new Field("idTipoLiberacao" ,"idTipoLiberacao", false, false, false, false));
listFields.add(new Field("datahoraterminoagendada" ,"dataHoraTerminoAgendada", false, false, false, false));
listFields.add(new Field("datahorainicioagendada" ,"dataHoraInicioAgendada", false, false, false, false));
listFields.add(new Field("idProprietario" ,"idProprietario", false, false, false, false));
listFields.add(new Field("prazomm" ,"prazoMM", false, false, false, false));
listFields.add(new Field("prazohh" ,"prazoHH", false, false, false, false));
listFields.add(new Field("enviaemailfinalizacao" ,"enviaEmailFinalizacao", false, false, false, false));
listFields.add(new Field("datahorasuspensao" ,"dataHoraSuspensao", false, false, false, false));
listFields.add(new Field("idcalendario" ,"idCalendario", false, false, false, false));
listFields.add(new Field("dataHoraInicio" ,"dataHoraInicio", false, false, false, false));
listFields.add(new Field("datahorareativacao" ,"dataHoraReativacao", false, false, false, false));
listFields.add(new Field("datahoracaptura" ,"dataHoraCaptura", false, false, false, false));
listFields.add(new Field("tempoatendimentomm" ,"tempoAtendimentoMM", false, false, false, false));
listFields.add(new Field("tempoatendimentohh" ,"tempoAtendimentoHH", false, false, false, false));
listFields.add(new Field("tempodecorridomm" ,"tempoDecorridoMM", false, false, false, false));
listFields.add(new Field("tempodecorridohh" ,"tempoDecorridoHH", false, false, false, false));
listFields.add(new Field("status" ,"status", false, false, false, false));
listFields.add(new Field("datahoraconclusao" ,"dataHoraConclusao", false, false, false, false));
listFields.add(new Field("dataHoraTermino" ,"dataHoraTermino", false, false, false, false));
listFields.add(new Field("tempocapturamm" ,"tempoCapturaMM", false, false, false, false));
listFields.add(new Field("seqreabertura" ,"seqreabertura", false, false, false, false));
listFields.add(new Field("tempoatrasomm" ,"tempoAtrasoMM", false, false, false, false));
listFields.add(new Field("tempoatrasohh" ,"tempoAtrasoHH", false, false, false, false));
listFields.add(new Field("enviaemailacoes" ,"enviaEmailAcoes", false, false, false, false));
listFields.add(new Field("enviaemailcriacao" ,"enviaEmailCriacao", false, false, false, false));
listFields.add(new Field("tempocapturahh" ,"tempoCapturaHH", false, false, false, false));
listFields.add(new Field("idGrupoAtual" ,"idGrupoAtual", false, false, false, false));
listFields.add(new Field("prioridade" ,"prioridade", false, false, false, false));
listFields.add(new Field("nivelUrgencia" ,"nivelUrgencia", false, false, false, false));
listFields.add(new Field("nivelImpacto" ,"nivelImpacto", false, false, false, false));
listFields.add(new Field("idAprovador" ,"idAprovador", false, false, false, false));
listFields.add(new Field("datahoraAprovacao" ,"datahoraAprovacao", false, false, false, false));
listFields.add(new Field("idContrato" ,"idContrato", false, false, false, false));
listFields.add(new Field("idUltimaAprovacao" ,"idUltimaAprovacao", false, false, false, false));
listFields.add(new Field("fechamento" ,"fechamento", false, false, false, false));
listFields.add(new Field("idgruponivel1", "idGrupoNivel1", false, false, false, false));
listFields.add(new Field("idGrupoAprovador", "idGrupoAprovador", false, false, false, false));
listFields.add(new Field("idCategoriaSolucao", "idCategoriaSolucao", false, false, false, false));
listFields.add(new Field("idGrupoAtvPeriodica", "idGrupoAtvPeriodica", false, false, false, false));
return listFields;
}
public String getTableName() {
return this.getOwner() + "Liberacao";
}
public Collection list() throws PersistenceException {
return null;
}
public Class getBean() {
return RequisicaoLiberacaoDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
public Collection findByIdSolicitante(Integer parm) throws Exception {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idSolicitante", "=", parm));
ordenacao.add(new Order("dataInicial"));
return super.findByCondition(condicao, ordenacao);
}
public List<RequisicaoLiberacaoDTO> listLiberacoes() throws Exception {
List lstRetorno = new ArrayList();
List list = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append("select l.idliberacao, l.idsolicitante, u.nome, l.descricao, l.datainicial, l.datafinal, l.situacao ");
sql.append("from liberacao l ");
sql.append("INNER JOIN usuario u ON u.idempregado = l.idsolicitante;");
list = this.execSQL(sql.toString(), null);
lstRetorno.add("idLiberacao");
lstRetorno.add("idSolicitante");
lstRetorno.add("nomeSolicitante");
lstRetorno.add("descricao");
lstRetorno.add("dataInicial");
lstRetorno.add("dataFinal");
lstRetorno.add("situacao");
if (list != null && !list.isEmpty()) {
return (List<RequisicaoLiberacaoDTO>) this.listConvertion(getBean(), list, lstRetorno);
} else {
return null;
}
}
@Override
public void updateNotNull(IDto obj) throws PersistenceException {
super.updateNotNull(obj);
}
public void updateFase(Integer idRequisicao, String fase) {
StringBuilder sql = new StringBuilder();
sql.append("UPDATE " + getTableName() + " SET fase = ? WHERE (idliberacao = ?)");
Object[] params = { fase, idRequisicao };
try {
this.execUpdate(sql.toString(), params);
} catch (PersistenceException e) {
System.out.println("Problemas com atualiza��o da requisi��o de Libera��o.");
e.printStackTrace();
}
}
public Collection<RequisicaoLiberacaoDTO> listaRequisicaoLiberacaoPorCriterios(PesquisaRequisicaoLiberacaoDTO pesquisaRequisicaoLiberacaoDto) throws Exception {
List listRetorno = new ArrayList();
StringBuilder sql = new StringBuilder();
List lista = new ArrayList();
List parametros = new ArrayList();
sql.append("SELECT l.tempoAtendimentoHH,l.tempoAtendimentoMM,l.datahoracaptura, l.datahoratermino, l.idliberacao, l.titulo, l.status, l.datahorainicioagendada, l.datahoraterminoagendada, l.prazohh, l.prazomm, ");
sql.append("l.descricao, l.idgrupoatual, l.seqreabertura, l.idsolicitante, l.idcontatorequisicaoliberacao, l.prioridade, l.idcontrato, l.idresponsavel, e.nome , g.nome, cont.idunidade," +
" l.descricao, l.datahoraconclusao, cont.nomecontato ");
sql.append("FROM liberacao l ");
sql.append("INNER JOIN grupo g ON l.idgrupoatual = g.idgrupo ");
sql.append("INNER JOIN empregados e ON l.idsolicitante = e.idempregado ");
sql.append("INNER JOIN contatorequisicaoliberacao cont on l.idcontatorequisicaoliberacao = cont.idcontatorequisicaoliberacao ");
sql.append("WHERE (UPPER(l.situacao) = UPPER('*') OR '*' = '*') ");
if (pesquisaRequisicaoLiberacaoDto.getIdRequisicaoLiberacaoPesquisa() != null) {
sql.append("AND (l.idLiberacao = ?) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdRequisicaoLiberacaoPesquisa());
}
if (pesquisaRequisicaoLiberacaoDto.getIdSolicitante() != null) {
sql.append("AND (l.idsolicitante = ?) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdSolicitante());
}
if (pesquisaRequisicaoLiberacaoDto.getIdPrioridade() != null) {
sql.append("AND (l.prioridade = ? ) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdPrioridade());
}
if (pesquisaRequisicaoLiberacaoDto.getIdContrato() != null) {
sql.append("AND (l.idcontrato = ? ) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdContrato());
}
if (pesquisaRequisicaoLiberacaoDto.getIdUnidade() != null) {
sql.append("AND (cont.idunidade = ? ) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdUnidade());
}
if (pesquisaRequisicaoLiberacaoDto.getIdGrupoAtual() != null) {
sql.append("AND (l.idgrupoatual = ? ) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdGrupoAtual());
}
if (pesquisaRequisicaoLiberacaoDto.getSituacao() != null && !pesquisaRequisicaoLiberacaoDto.getSituacao().equalsIgnoreCase("")) {
sql.append("AND (l.status = ? ) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getSituacao());
}
if (pesquisaRequisicaoLiberacaoDto.getIdResponsavel() != null) {
sql.append("AND (l.idResponsavel = ? ) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdResponsavel());
}
if (pesquisaRequisicaoLiberacaoDto.getIdContato() != null) {
sql.append("AND (l.idContatoRequisicaoLiberacao = ? ) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getIdContato());
}
if(pesquisaRequisicaoLiberacaoDto.getDataInicio() != null && pesquisaRequisicaoLiberacaoDto.getDataFim() != null){
sql.append("AND (l.datahorainicio BETWEEN ? AND ?) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getDataInicio());
parametros.add(transformaHoraFinal(pesquisaRequisicaoLiberacaoDto.getDataFim()));
}
if (pesquisaRequisicaoLiberacaoDto.getDataInicioFechamento() != null && !StringUtils.equalsIgnoreCase(pesquisaRequisicaoLiberacaoDto.getDataInicioFechamento().toString(), "1970-01-01")) {
sql.append("AND (l.datahoraconclusao BETWEEN ? AND ?) ");
parametros.add(pesquisaRequisicaoLiberacaoDto.getDataInicioFechamento());
parametros.add(transformaHoraFinal(pesquisaRequisicaoLiberacaoDto.getDataFimFechamento()));
}
if (pesquisaRequisicaoLiberacaoDto.getOrdenacao() != null) {
sql.append(" ORDER BY " + pesquisaRequisicaoLiberacaoDto.getOrdenacao() + "");
}
lista = this.execSQL(sql.toString(), parametros.toArray());
listRetorno.add("tempoAtendimentoHH");
listRetorno.add("tempoAtendimentoMM");
listRetorno.add("dataHoraCaptura");
listRetorno.add("dataHoraTermino");
listRetorno.add("idRequisicaoLiberacao");
listRetorno.add("titulo");
listRetorno.add("status");
listRetorno.add("dataHoraInicioAgendada");
listRetorno.add("dataHoraTerminoAgendada");
listRetorno.add("prazoHH");
listRetorno.add("prazoMM");
listRetorno.add("descricao");
listRetorno.add("idGrupoAtual");
listRetorno.add("seqReabertura");
listRetorno.add("idSolicitante");
listRetorno.add("idContatoRequisicaoLiberacao");
listRetorno.add("prioridade");
listRetorno.add("idContrato");
listRetorno.add("idResponsavel");
listRetorno.add("nomeSolicitante");
listRetorno.add("nomeGrupoAtual");
listRetorno.add("idUnidade");
listRetorno.add("descricao");
listRetorno.add("dataHoraConclusao");
listRetorno.add("nomeContato");
List listaSolicitacoes = this.engine.listConvertion(getBean(), lista, listRetorno);
return listaSolicitacoes;
}
private Timestamp transformaHoraFinal(Date data) throws ParseException {
String dataHora = data + " 23:59:59";
String pattern = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
java.util.Date d = sdf.parse(dataHora);
java.sql.Timestamp sqlDate = new java.sql.Timestamp(d.getTime());
return sqlDate;
}
public List<RequisicaoLiberacaoDTO> findByConhecimento(BaseConhecimentoDTO baseConhecimentoDto) throws Exception {
List parametro = new ArrayList();
List listRetorno = new ArrayList();
List list = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append("select r.idliberacao, r.titulo, r.versao, r.descricao, r.risco, r.status ");
sql.append("from liberacao r ");
sql.append("inner join conhecimentoliberacao c on r.idliberacao = c.idrequisicaoliberacao ");
sql.append("where c.idbaseconhecimento = ? ");
parametro.add(baseConhecimentoDto.getIdBaseConhecimento());
list = this.execSQL(sql.toString(), parametro.toArray());
listRetorno.add("idRequisicaoLiberacao");
listRetorno.add("titulo");
listRetorno.add("versao");
listRetorno.add("descricao");
listRetorno.add("risco");
listRetorno.add("status");
if (list != null && !list.isEmpty()) {
return (List<RequisicaoLiberacaoDTO>) this.listConvertion(getBean(), list, listRetorno);
} else {
return null;
}
}
public List<RequisicaoLiberacaoDTO> listLiberacaoByIdItemConfiguracao(Integer idItemConfiguracao) throws Exception {
StringBuilder sql = new StringBuilder();
sql.append("select lib.idliberacao, lib.titulo, lib.idsolicitante, lib.idproprietario, lib.nivelimpacto, lib.nivelurgencia, lib.descricao, ");
sql.append("emp.nome, us.nome ");
sql.append("from requisicaoliberacaoitemconfiguracao req ");
sql.append("inner join liberacao lib on lib.idliberacao = req.idrequisicaoliberacao ");
sql.append("inner join itemconfiguracao item on item.iditemconfiguracao = req.iditemconfiguracao ");
sql.append("inner join empregados emp on emp.idempregado = lib.idsolicitante ");
sql.append("inner join usuario us on us.idusuario = lib.idproprietario ");
sql.append("where req.iditemconfiguracao = ? ");
List parametro = new ArrayList();
List<String> listRetorno = new ArrayList<String>();
parametro.add(idItemConfiguracao);
listRetorno.add("idLiberacao");
listRetorno.add("titulo");
listRetorno.add("idSolicitante");
listRetorno.add("idProprietario");
listRetorno.add("nivelImpacto");
listRetorno.add("nivelUrgencia");
listRetorno.add("descricao");
listRetorno.add("nomeSolicitante");
listRetorno.add("nomeProprietario");
List lista = this.execSQL(sql.toString(), parametro.toArray());
return this.engine.listConvertion(getBean(), lista, listRetorno);
}
}