package br.com.centralit.citcorpore.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.MotivoNegacaoCheckinDTO;
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.integracao.core.DataBase;
import br.com.citframework.util.Constantes;
/**
* DAO para manipula��o de {@link MotivoNegacaoCheckinDTO}
*
* @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a>
* @since 06/10/2014
*
*/
public class MotivoNegacaoCheckinDao extends CrudDaoDefaultImpl {
public MotivoNegacaoCheckinDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
@Override
public Collection<Field> getFields() {
final Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idMotivo", "idMotivo", true, true, false, true));
listFields.add(new Field("descricao", "descricao", false, false, false, false));
listFields.add(new Field("dataFim", "dataFim", false, false, false, false));
return listFields;
}
@Override
public String getTableName() {
return "motivonegacaocheckin";
}
@Override
public Collection<MotivoNegacaoCheckinDTO> list() throws PersistenceException {
return super.list("descricao");
}
@Override
public Class<MotivoNegacaoCheckinDTO> getBean() {
return MotivoNegacaoCheckinDTO.class;
}
@Override
public Collection<MotivoNegacaoCheckinDTO> find(final IDto motivo) throws PersistenceException {
return null;
}
/**
* Verifica se o registro informado j� consta gravado no BD. Considera apenas registros ativos.
*
* @param descricao
* descri��o do motivo a ser consultado
* @return boolean
* @throws Exception
*/
public boolean hasWithSameName(final MotivoNegacaoCheckinDTO motivo) throws PersistenceException {
final DataBase db = DataBase.fromStringId(CITCorporeUtil.SGBD_PRINCIPAL);
String function = "";
switch (db) {
case MSSQLSERVER:
function = "dbo.REMOVE_ACENTO";
break;
case POSTGRESQL:
case ORACLE:
function = "REMOVE_ACENTO";
break;
}
final List<Object> params = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
sql.append("SELECT m.idmotivo ");
sql.append("FROM motivonegacaocheckin m ");
sql.append("WHERE UPPER(");
sql.append(function);
sql.append("(m.descricao)) = UPPER(");
sql.append(function);
sql.append("(?)) ");
params.add(motivo.getDescricao());
if (motivo.getIdMotivo() != null) {
params.add(motivo.getIdMotivo());
sql.append(" AND m.idmotivo <> ?");
}
sql.append(" AND m.datafim IS NULL ");
final List<?> retorno = this.execSQL(sql.toString(), params.toArray());
if (retorno != null && retorno.size() > 0) {
return true;
}
return false;
}
public Collection<MotivoNegacaoCheckinDTO> listAllActiveDeniedReasons() throws PersistenceException {
final List<Condition> condicao = new ArrayList<>();
final List<Order> ordenacao = new ArrayList<>();
condicao.add(new Condition("dataFim", "is", null));
ordenacao.add(new Order("descricao"));
return super.findByCondition(condicao, ordenacao);
}
}