package br.com.centralit.citcorpore.integracao; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.RequisicaoViagemDTO; import br.com.centralit.citcorpore.util.CITCorporeUtil; 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; import br.com.citframework.util.SQLConfig; import br.com.citframework.util.UtilDatas; @SuppressWarnings({"rawtypes","unchecked"}) public class RequisicaoViagemDAO extends CrudDaoDefaultImpl{ public RequisicaoViagemDAO() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection find(IDto obj) throws PersistenceException { // TODO Auto-generated method stub return null; } @Override public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idsolicitacaoservico" ,"idSolicitacaoServico", true, false, false, false)); listFields.add(new Field("idcidadeorigem" ,"idCidadeOrigem", false, false, false, false)); listFields.add(new Field("idcidadedestino" ,"idCidadeDestino", false, false, false, false)); listFields.add(new Field("idprojeto" ,"idProjeto", false, false, false, false)); listFields.add(new Field("idcentroresultado" ,"idCentroCusto", false, false, false, false)); listFields.add(new Field("idmotivoviagem" ,"idMotivoViagem", false, false, false, false)); listFields.add(new Field("idaprovacao" ,"idAprovacao", false, false, false, false)); listFields.add(new Field("descricaomotivo" ,"descricaoMotivo", false, false, false, false)); listFields.add(new Field("datainicio" ,"dataInicioViagem", false, false, false, false)); listFields.add(new Field("datafim" ,"dataFimViagem", false, false, false, false)); listFields.add(new Field("qtdedias" ,"qtdeDias", false, false, false, false)); listFields.add(new Field("estado" ,"estado", false, false, false, false)); listFields.add(new Field("tarefainiciada" ,"tarefaIniciada", false, false, false, false)); listFields.add(new Field("remarcacao" ,"remarcacao", false, false, false, false)); listFields.add(new Field("iditemtrabalho" ,"idItemTrabalho", false, false, false, false)); listFields.add(new Field("cancelarrequisicao" ,"cancelarRequisicao", false, false, false, false)); return listFields; } @Override public String getTableName() { return this.getOwner() + "requisicaoviagem"; } @Override public Collection list() throws PersistenceException { // TODO Auto-generated method stub return null; } @Override public Class getBean() { return RequisicaoViagemDTO.class; } /* (non-Javadoc) * @see br.com.citframework.integracao.CrudDaoDefaultImpl#updateNotNull(br.com.citframework.dto.IDto) */ @Override public void updateNotNull(IDto obj) throws PersistenceException { // TODO Auto-generated method stub super.updateNotNull(obj); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<RequisicaoViagemDTO> recuperaRequisicaoByFluxo(RequisicaoViagemDTO requisicaoViagemDto)throws PersistenceException { List parametro = new ArrayList(); List listRetorno = new ArrayList(); StringBuilder sql = new StringBuilder(); List lista = new ArrayList(); listRetorno.add("idSolicitacaoServico"); listRetorno.add("dataInicio"); listRetorno.add("dataFim"); listRetorno.add("descricaoMotivo"); listRetorno.add("estado"); sql.append("select distinct rv.idsolicitacaoservico, rv.datainicio, rv.datafim, rv.cidadeorigem, rv.cidadedestino, rv.estado from bpm_atribuicaofluxo aff inner join bpm_itemtrabalhofluxo i " + "ON aff.iditemtrabalho = i.iditemtrabalho inner join execucaosolicitacao ex on ex.idinstanciafluxo = i.idinstancia inner join usuario u ON u.idusuario = aff.idusuario inner join bpm_elementofluxo el on el.idelemento = i.idelemento inner " + "join requisicaoviagem rv on rv.idsolicitacaoservico = ex.idsolicitacaoservico " + " where ex.idsolicitacaoservico = ? and el.nome = 'Presta��o de Contas' and rv.estado = 'Aguardando Presta��o de Contas' "); parametro.add(requisicaoViagemDto.getIdSolicitacaoServico()); if(requisicaoViagemDto.getDataInicio() != null){ sql.append("and rv.datainicio >= ? "); sql.append("and rv.datainicio <= ? "); parametro.add(requisicaoViagemDto.getDataInicioViagem()); parametro.add(requisicaoViagemDto.getDataInicioViagemAux()); } if(requisicaoViagemDto.getDataFim() != null){ sql.append("and rv.datafim >= ? "); sql.append("and rv.datafim <= ? "); parametro.add(requisicaoViagemDto.getDataFimViagem()); parametro.add(requisicaoViagemDto.getDataFimViagemAux()); } lista = this.execSQL(sql.toString(), parametro.toArray()); return this.engine.listConvertion(getBean(), lista, listRetorno); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<RequisicaoViagemDTO> recuperaRequisicoesViagem(RequisicaoViagemDTO requisicaoViagemDto, Integer pgAtual, Integer qtdPaginacao) throws PersistenceException { List parametro = new ArrayList(); List listRetorno = new ArrayList(); StringBuilder sql = new StringBuilder(); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" ;WITH TabelaTemporaria AS ( "); } sql.append(" SELECT idsolicitacaoservico, datainicio, datafim, descricaomotivo, estado "); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" , ROW_NUMBER() OVER (ORDER BY idsolicitacaoservico) AS Row "); } sql.append(" FROM requisicaoviagem "); sql.append(" WHERE estado = 'Aguardando Presta��o de Contas'"); if (requisicaoViagemDto.getIdSolicitacaoServico() != null) { sql.append(" AND idSolicitacaoServico = ? "); parametro.add(requisicaoViagemDto.getIdSolicitacaoServico()); } if (requisicaoViagemDto.getDataInicio() != null) { sql.append(" AND datainicio between ? "); parametro.add(requisicaoViagemDto.getDataInicio()); } if (requisicaoViagemDto.getDataFim() != null) { sql.append(" AND ? "); parametro.add(requisicaoViagemDto.getDataFim()); } /*sql.append(" ORDER BY idsolicitacaoservico");*/ if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.POSTGRESQL)) { sql.append(" ORDER BY idsolicitacaoservico"); Integer pgTotal = pgAtual * qtdPaginacao; pgAtual = pgTotal - qtdPaginacao; sql.append(" LIMIT " + qtdPaginacao + " OFFSET " +pgAtual); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.MYSQL)){ sql.append(" ORDER BY idsolicitacaoservico"); Integer pgTotal = pgAtual * qtdPaginacao; pgAtual = pgTotal - qtdPaginacao; sql.append(" LIMIT " +pgAtual+ ", "+qtdPaginacao); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)){ Integer quantidadePaginator2 = new Integer(0); if (pgAtual > 0) { quantidadePaginator2 = qtdPaginacao * pgAtual; pgAtual = (pgAtual * qtdPaginacao) - qtdPaginacao; }else{ quantidadePaginator2 = qtdPaginacao; pgAtual = 0; } sql.append(" ) SELECT * FROM TabelaTemporaria WHERE Row> "+pgAtual+" and Row<"+(quantidadePaginator2+1)+" "); } String sqlOracle = ""; if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)){ Integer quantidadePaginator2 = new Integer(0); if (pgAtual > 1) { quantidadePaginator2 = qtdPaginacao * pgAtual; pgAtual = (pgAtual * qtdPaginacao) - qtdPaginacao; pgAtual = pgAtual + 1; }else{ quantidadePaginator2 = qtdPaginacao; pgAtual = 0; } int intInicio = pgAtual; int intLimite = quantidadePaginator2; sqlOracle = paginacaoOracle(sql.toString(), intInicio, intLimite); } List lista = new ArrayList(); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)){ lista = this.execSQL(sqlOracle, parametro.toArray()); }else{ lista = this.execSQL(sql.toString(), parametro.toArray()); } listRetorno.add("idSolicitacaoServico"); listRetorno.add("dataInicio"); listRetorno.add("dataFim"); listRetorno.add("descricaoMotivo"); listRetorno.add("estado"); return this.engine.listConvertion(getBean(), lista, listRetorno); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Integer calculaTotalPaginas(Integer itensPorPagina, RequisicaoViagemDTO requisicaoViagemDto) throws PersistenceException { List parametro = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT COUNT(*) "); sql.append("FROM requisicaoviagem "); sql.append("WHERE estado <> 'Rejeitada Planejamento' AND estado <> 'N�o Aprovada' AND estado <>'Finalizada'"); if (requisicaoViagemDto.getIdSolicitacaoServico() != null) { sql.append(" AND idSolicitacaoServico = ? "); parametro.add(requisicaoViagemDto.getIdSolicitacaoServico()); } if (requisicaoViagemDto.getDataInicio() != null) { sql.append(" AND datainicio between ? "); parametro.add(requisicaoViagemDto.getDataInicio()); } if (requisicaoViagemDto.getDataFim() != null) { sql.append(" AND ? "); parametro.add(requisicaoViagemDto.getDataFim()); } List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); Long totalLinhaLong = 0l; Long totalPagina = 0l; Integer total = 0; BigDecimal totalLinhaBigDecimal; Integer totalLinhaInteger; int intLimite = itensPorPagina; if(lista != null){ Object[] totalLinha = (Object[]) lista.get(0); if(totalLinha != null && totalLinha.length > 0){ if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.POSTGRESQL) || CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.MYSQL)) { totalLinhaLong = (Long) totalLinha[0]; } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { totalLinhaBigDecimal = (BigDecimal) totalLinha[0]; totalLinhaLong = totalLinhaBigDecimal.longValue(); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { totalLinhaInteger = (Integer) totalLinha[0]; totalLinhaLong = Long.valueOf(totalLinhaInteger); } } } if (totalLinhaLong > 0) { totalPagina = (totalLinhaLong / intLimite); if(totalLinhaLong % intLimite != 0){ totalPagina = totalPagina + 1; } } total = Integer.valueOf(totalPagina.toString()); return total; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public String paginacaoOracle(String strSQL, int intInicio, int intLimite) { strSQL = strSQL + " order by idsolicitacaoservico "; return "SELECT * FROM (SELECT PAGING.*, ROWNUM PAGING_RN FROM" + " (" + strSQL + ") PAGING WHERE (ROWNUM <= " + intLimite + "))" + " WHERE (PAGING_RN >= " + intInicio + ") "; } /** * Busca uma cole��o de requisicao de viagem pelo idCentroCusto * * @param idCentroCusto * @return * @throws Exception */ public Collection findByIdCentroCusto(Integer parm) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idCentroCusto", "=", parm)); ordenacao.add(new Order("idSolicitacaoServico")); return super.findByCondition(condicao, ordenacao); } /** * Retorna uma requisicao de viagem pelo idsolicitacaoservico * * @param idSolicitacaoServico * @return * @throws Exception */ public RequisicaoViagemDTO findByIdSolicitacao(Integer idSolicitacaoServico) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacaoServico)); List result = new ArrayList<RequisicaoViagemDTO>(); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) return (RequisicaoViagemDTO) result.get(0); else return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public boolean isEstadoAutorizacao(RequisicaoViagemDTO requisicaoViagemDto) throws PersistenceException { List result = null; if(requisicaoViagemDto.getEstado().equalsIgnoreCase(RequisicaoViagemDTO.AGUARDANDO_APROVACAO)){ List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", requisicaoViagemDto.getIdSolicitacaoServico())); condicao.add(new Condition("tarefaIniciada", "=", "S")); result = (List) super.findByCondition(condicao, ordenacao); if(result == null) return true; } return false; } /** * Retorna uma lista de requisicao viagem conforme idsolicitacaoservico e template passados * * @param idSolicitacaoServico * @param template * @return * @throws Exception */ public List<RequisicaoViagemDTO> retornaRequisicaoByTemplateAndIdsolicitacao(Integer idSolicitacaoServico, String template) throws PersistenceException { List parametro = new ArrayList(); List listRetorno = new ArrayList(); List lista = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT req.idsolicitacaoservico, "); sql.append(" req.idprojeto, "); sql.append(" req.idcentroresultado, "); sql.append(" req.idcidadeorigem, "); sql.append(" req.idcidadedestino, "); sql.append(" req.idmotivoviagem, "); sql.append(" req.idaprovacao, "); sql.append(" req.descricaomotivo, "); sql.append(" req.datainicio, "); sql.append(" req.datafim, "); sql.append(" req.qtdedias, "); sql.append(" req.estado, "); sql.append(" req.tarefainiciada, "); sql.append(" req.remarcacao "); sql.append("FROM bpm_itemtrabalhofluxo i "); sql.append(" INNER JOIN bpm_instanciafluxo ins "); sql.append(" ON i.idinstancia = ins.idinstancia "); sql.append(" INNER JOIN bpm_elementofluxo el "); sql.append(" ON el.idelemento = i.idelemento "); sql.append(" INNER JOIN execucaosolicitacao ex "); sql.append(" ON ex.idinstanciafluxo = i.idinstancia "); sql.append(" INNER JOIN requisicaoviagem req "); sql.append(" ON ex.idsolicitacaoservico = req.idsolicitacaoservico "); sql.append("WHERE el.template = ? "); sql.append(" AND ex.idsolicitacaoservico = ? "); sql.append(" AND ( i.situacao = 'Disponivel' "); sql.append(" OR i.situacao = 'EmAndamento' ) "); sql.append(" AND ins.situacao = 'Aberta'"); parametro.add(idSolicitacaoServico); parametro.add(template); listRetorno.add("idSolicitacaoServico"); listRetorno.add("idProjeto"); listRetorno.add("idCentroCusto"); listRetorno.add("idCidadeOrigem"); listRetorno.add("idCidadeDestino"); listRetorno.add("idMotivoViagem"); listRetorno.add("idAprovacao"); listRetorno.add("descricaoMotivo"); listRetorno.add("dataInicioViagem"); listRetorno.add("dataFimViagem"); listRetorno.add("qtdeDias"); listRetorno.add("estado"); listRetorno.add("tarefaIniciada"); listRetorno.add("remarcacao"); lista = this.execSQL(sql.toString(), parametro.toArray()); return listConvertion(this.getBean(), lista , listRetorno); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public void cancelaAutorizacaoByIdSolicitacao(Integer idSolicitacao){ List parametro = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("UPDATE bpm_itemtrabalhofluxo i "); sql.append(" INNER JOIN execucaosolicitacao ex "); sql.append(" ON ex.idinstanciafluxo = i.idinstancia "); sql.append(" LEFT JOIN bpm_elementofluxo el "); sql.append(" ON el.idelemento = i.idelemento "); sql.append("SET i.situacao = ?, "); sql.append(" i.datahorafinalizacao = ? "); sql.append("WHERE ex.idsolicitacaoservico = ? "); sql.append(" AND el.nome = ? "); sql.append(" AND i.situacao = ? "); parametro.add("Executado"); parametro.add(UtilDatas.getDataHoraAtual()); parametro.add(idSolicitacao); parametro.add("Autorizar requisi��o"); parametro.add("Disponivel"); try { super.execSQL(sql.toString(), parametro.toArray()); } catch (PersistenceException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }