package br.com.centralit.citcorpore.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.CentroResultadoDTO;
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({"rawtypes", "unchecked"})
public class CentroResultadoDao extends CrudDaoDefaultImpl {
public CentroResultadoDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
private static final String SQL_GET_LISTA_SEM_PAI =
"select " +
"idcentroresultado, codigocentroresultado, nomecentroresultado, " +
"idcentroresultadopai, permiterequisicaoproduto, situacao " +
"from " +
"centroresultado " +
"where " +
"idcentroresultadopai is null " +
"order by " +
"codigocentroresultado";
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idcentroresultado" ,"idCentroResultado", true, true, false, false) );
listFields.add(new Field("codigocentroresultado" ,"codigoCentroResultado", false, false, false, false) );
listFields.add(new Field("nomecentroresultado" ,"nomeCentroResultado", false, false, false, false) );
listFields.add(new Field("idcentroresultadopai" ,"idCentroResultadoPai", false, false, false, false) );
listFields.add(new Field("permiterequisicaoproduto" ,"permiteRequisicaoProduto", false, false, false, false) );
listFields.add(new Field("situacao", "situacao", false, false, false, false) );
return listFields;
}
public String getTableName() {
return this.getOwner() + "centroresultado";
}
public Collection list() throws PersistenceException {
List ordenacao = new ArrayList();
ordenacao.add(new Order("idCentroResultado") );
return super.list(ordenacao);
}
public Collection listAtivos() throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("situacao", "=", "A") );
ordenacao.add(new Order("nomeCentroResultado") );
return super.findByCondition(condicao, ordenacao);
}
public Collection listPermiteRequisicaoProduto() throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("situacao", "=", "A") );
condicao.add(new Condition("permiteRequisicaoProduto", "=", "S") );
ordenacao.add(new Order("nomeCentroResultado") );
return super.findByCondition(condicao, ordenacao);
}
public Collection findSemPai() throws PersistenceException {
Object[] objs = new Object[] {};
List lista = this.execSQL(SQL_GET_LISTA_SEM_PAI, objs);
List listRetorno = new ArrayList();
listRetorno.add("idCentroResultado");
listRetorno.add("codigoCentroResultado");
listRetorno.add("nomeCentroResultado");
listRetorno.add("idCentroResultadoPai");
listRetorno.add("permiteRequisicaoProduto");
listRetorno.add("situacao");
List result = this.engine.listConvertion(getBean(), lista, listRetorno);
return result;
}
public Collection findByIdPai(Integer idPai) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idCentroResultadoPai", "=", idPai) );
ordenacao.add(new Order("codigoCentroResultado") );
return super.findByCondition(condicao, ordenacao);
}
public Class getBean() {
return CentroResultadoDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return super.find(arg0, null);
}
public boolean temFilhos(int idCentroResultado) {
boolean resposta = false;
try {
List resultadoSQL = this.execSQL(String.format("select * from centroresultado where idcentroresultadopai = %d", idCentroResultado), null);
if (!resultadoSQL.isEmpty() ) {
resposta = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return resposta;
}
public Collection findByIdAlcada(Integer idAlcada) throws PersistenceException {
List resultado = null;
if (idAlcada != null && idAlcada > 0) {
try {
resultado = this.execSQL(String.format("select * from alcadacentroresultado where idalcada = %d", idAlcada), null);
} catch (Exception e) {
e.printStackTrace();
}
}
return resultado;
}
/**
* Metodo que consulta todos os centro de custos filhos vinculados a uma al�ada
*
* @param idPai = Centro de resultado Pai
* @return
* @throws Exception
*/
public Collection consultarCentroDeCustoComVinculoNaAlcada(Integer idPai) throws PersistenceException {
List resultado = null;
if (idPai != null && idPai > 0) {
try {
List lista = this.execSQL("select * from centroresultado where idcentroresultado in " +
"(select idcentroresultado from alcadacentroresultado) and idcentroresultadopai = " + idPai, null);
List listRetorno = new ArrayList();
listRetorno.add("idCentroResultado");
listRetorno.add("codigoCentroResultado");
listRetorno.add("nomeCentroResultado");
listRetorno.add("idCentroResultadoPai");
listRetorno.add("permiteRequisicaoProduto");
listRetorno.add("situacao");
List result = this.engine.listConvertion(getBean(), lista, listRetorno);
return result;
} catch (Exception e) {
e.printStackTrace();
}
}
return resultado;
}
/**
* Metodo que consulta todos os centro de custos filhos vinculados a uma al�ada de viagem
*
* @param idPai = Centro de resultado Pai
* @return
* @throws Exception
*/
public Collection consultarCentroDeCustoComVinculoViagemNaAlcada(Integer idPai) throws PersistenceException {
List resultado = null;
if (idPai != null && idPai > 0) {
try {
List lista = this.execSQL("select * from centroresultado where idcentroresultado in " +
"(select distinct idcentroresultado from alcadacentroresultado acr inner join alcada a on a.idalcada = acr.idalcada "
+ " where a.nomealcada like '%Viagem%') and idcentroresultadopai = " + idPai, null);
List listRetorno = new ArrayList();
listRetorno.add("idCentroResultado");
listRetorno.add("codigoCentroResultado");
listRetorno.add("nomeCentroResultado");
listRetorno.add("idCentroResultadoPai");
listRetorno.add("permiteRequisicaoProduto");
listRetorno.add("situacao");
List result = this.engine.listConvertion(getBean(), lista, listRetorno);
return result;
} catch (Exception e) {
e.printStackTrace();
}
}
return resultado;
}
public Collection<CentroResultadoDTO> findPaisVinculados(Integer idSolicitante, String tipoAlcada) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sb = new StringBuilder();
sb.append("select centroresultado.idcentroresultado, centroresultado.codigocentroresultado, centroresultado.nomecentroresultado,");
sb.append("centroresultado.idcentroresultadopai, centroresultado.permiterequisicaoproduto, centroresultado.situacao ");
sb.append("from centroresultado join (select distinct centroresultado.idcentroresultadopai as idpai from centroresultado join (");
sb.append("select distinct alcadacentroresultado.idcentroresultado ");
sb.append("from alcada join alcadacentroresultado on alcada.tipoalcada = ? and alcada.situacao = 'A' and ");
sb.append("alcada.idalcada = alcadacentroresultado.idalcada and ");
sb.append("alcadacentroresultado.idempregado=?) a on centroresultado.idcentroresultado = a.idcentroresultado) relpai on centroresultado.idcentroresultado = relpai.idpai ");
sb.append("order by codigocentroresultado");
parametro.add(tipoAlcada);
parametro.add(idSolicitante);
List listRetorno = new ArrayList();
listRetorno.add("idCentroResultado");
listRetorno.add("codigoCentroResultado");
listRetorno.add("nomeCentroResultado");
listRetorno.add("idCentroResultadoPai");
listRetorno.add("permiteRequisicaoProduto");
listRetorno.add("situacao");
List list = this.execSQL(sb.toString(), parametro.toArray());
if (list != null && !list.isEmpty()) {
return (List<CentroResultadoDTO>) this.listConvertion(CentroResultadoDTO.class, list, listRetorno);
} else {
return null;
}
}
public Collection<CentroResultadoDTO> findPaisVinculados(String tipoAlcada) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sb = new StringBuilder();
sb.append("select distinct cr.idcentroresultado, cr.codigocentroresultado, cr.nomecentroresultado, cr.idcentroresultadopai, cr.permiterequisicaoproduto, cr.situacao from centroresultado cr ")
.append(" inner join alcadacentroresultado acr on cr.idcentroresultado = acr.idcentroresultado inner join alcada a on a.idalcada = acr.idalcada ")
.append(" where a.tipoalcada = ? and a.situacao = 'A' order by cr.codigocentroresultado; ");
parametro.add(tipoAlcada);
List listRetorno = new ArrayList();
listRetorno.add("idCentroResultado");
listRetorno.add("codigoCentroResultado");
listRetorno.add("nomeCentroResultado");
listRetorno.add("idCentroResultadoPai");
listRetorno.add("permiteRequisicaoProduto");
listRetorno.add("situacao");
List list = this.execSQL(sb.toString(), parametro.toArray());
if (list != null && !list.isEmpty()) {
return (List<CentroResultadoDTO>) this.listConvertion(CentroResultadoDTO.class, list, listRetorno);
} else {
return null;
}
}
public Collection<CentroResultadoDTO> findFilhosVinculados(Integer idPai,Integer idSolicitante, String tipoAlcada) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sb = new StringBuilder();
sb.append("select centroresultado.idcentroresultado, centroresultado.codigocentroresultado, centroresultado.nomecentroresultado,");
sb.append("centroresultado.idcentroresultadopai, centroresultado.permiterequisicaoproduto, centroresultado.situacao ");
sb.append("from centroresultado join (");
sb.append("select distinct alcadacentroresultado.idcentroresultado as idfilho ");
sb.append("from alcada join alcadacentroresultado on alcada.tipoalcada = ? and alcada.situacao = 'A' and ");
sb.append("alcada.idalcada = alcadacentroresultado.idalcada and ");
sb.append("alcadacentroresultado.idempregado=?) a on centroresultado.idcentroresultado = a.idfilho and ");
sb.append("idCentroResultadoPai = ? ");
sb.append("order by codigocentroresultado");
parametro.add(tipoAlcada);
parametro.add(idSolicitante);
parametro.add(idPai);
List listRetorno = new ArrayList();
listRetorno.add("idCentroResultado");
listRetorno.add("codigoCentroResultado");
listRetorno.add("nomeCentroResultado");
listRetorno.add("idCentroResultadoPai");
listRetorno.add("permiteRequisicaoProduto");
listRetorno.add("situacao");
List list = this.execSQL(sb.toString(), parametro.toArray());
if (list != null && !list.isEmpty()) {
return (List<CentroResultadoDTO>) this.listConvertion(CentroResultadoDTO.class, list, listRetorno);
} else {
return null;
}
}
}