package br.com.centralit.citcorpore.integracao;
import java.math.BigDecimal;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import br.com.centralit.citcorpore.bean.FornecedorDTO;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.PersistenceException;
import br.com.citframework.integracao.CrudDaoDefaultImpl;
import br.com.citframework.integracao.Field;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.SQLConfig;
@SuppressWarnings({"rawtypes", "unchecked"})
public class FornecedorDao extends CrudDaoDefaultImpl {
public FornecedorDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idfornecedor", "idFornecedor", true, true, false, false) );
listFields.add(new Field("razaosocial", "razaoSocial", false, false, false, false) );
listFields.add(new Field("nomefantasia", "nomeFantasia", false, false, false, false) );
listFields.add(new Field("cnpj", "cnpj", false, false, false, false) );
listFields.add(new Field("email", "email", false, false, false, false) );
listFields.add(new Field("observacao", "observacao", false, false, false, false) );
listFields.add(new Field("deleted", "deleted", false, false, false, false) );
listFields.add(new Field("telefone", "telefone", false, false, false, false) );
listFields.add(new Field("fax", "fax", false, false, false, false) );
listFields.add(new Field("idendereco", "idEndereco", false, false, false, false) );
listFields.add(new Field("nomecontato", "nomeContato", false, false, false, false) );
listFields.add(new Field("inscricaomunicipal", "inscricaoMunicipal", false, false, false, false) );
listFields.add(new Field("inscricaoestadual", "inscricaoEstadual", false, false, false, false) );
listFields.add(new Field("tipopessoa", "tipoPessoa", false, false, false, false) );
listFields.add(new Field("responsabilidades", "responsabilidades", false, false, false, false) );
listFields.add(new Field("idTipoRegistro", "idTipoRegistro", false, false, false, false) );
listFields.add(new Field("idFrequencia", "idFrequencia", false, false, false, false) );
listFields.add(new Field("idFormaContato", "idFormaContato", false, false, false, false) );
listFields.add(new Field("ativ_responsabilidades", "ativ_responsabilidades", false, false, false, false) );
listFields.add(new Field("gerenciamentodesacordo", "gerenciamentodesacordo", false, false, false, false) );
return listFields;
}
public String getTableName() {
return this.getOwner() + "Fornecedor";
}
public Collection list() throws PersistenceException {
String sql = "SELECT " + this.getNamesFieldsStr() + " FROM " + this.getTableName() + " WHERE ";
if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.POSTGRESQL))
sql += "UPPER(deleted) IS NULL OR UPPER(deleted) = 'N' ";
else
sql += "deleted IS NULL OR deleted = 'N' ";
sql += "ORDER BY razaoSocial ";
List lst = this.execSQL(sql, null);
return this.listConvertion(this.getBean(), lst, this.getListNamesFieldClass() );
}
public Class getBean() {
return FornecedorDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
/**
* Retorna uma lista de escopo de fornecimento de acordo com o fornecedor passado
*
* @param fornecedorProdutoDto
* @return Collection<FornecedorProdutoDTO>
* @throws Exception
* @author Thays.araujo
*
*/
public Collection<FornecedorDTO> listEscopoFornecimento(FornecedorDTO fornecedorDto) throws PersistenceException {
List parametro = new ArrayList();
List listaRetornor = new ArrayList();
List list = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append("select fornecedor.nomeFantasia, nomeProduto, nomeMarca ");
sql.append("from fornecedorproduto ");
sql.append("inner join tipoproduto tipo on tipo.idTipoProduto = fornecedorproduto.idTipoProduto ");
sql.append("inner join fornecedor fornecedor on fornecedor.idFornecedor = fornecedorproduto.idFornecedor ");
sql.append(" left join marca marca on marca.idMarca = fornecedorproduto.idMarca ");
if (fornecedorDto.getIdFornecedor() != null) {
sql.append("where fornecedor.idFornecedor = ? ");
parametro.add(fornecedorDto.getIdFornecedor());
}
list = this.execSQL(sql.toString(), parametro.toArray());
listaRetornor.add("nomeFantasia");
listaRetornor.add("nomeProduto");
listaRetornor.add("marca");
if (list != null && !list.isEmpty()) {
Collection<FornecedorDTO> listEscopoFornecimento = this.listConvertion(FornecedorDTO.class, list, listaRetornor);
return listEscopoFornecimento;
}
return null;
}
public boolean consultarCargosAtivos(FornecedorDTO fornecedor) throws PersistenceException {
List parametro = new ArrayList();
List list = new ArrayList();
String sql = "select idfornecedor From " + getTableName() + " where razaosocial = ? and deleted is null ";
if(fornecedor.getIdFornecedor() != null){
sql+=" and idfornecedor <> "+ fornecedor.getIdFornecedor();
}
parametro.add(fornecedor.getRazaoSocial());
list = this.execSQL(sql, parametro.toArray());
if (list != null && !list.isEmpty()) {
return true;
} else {
return false;
}
}
public boolean excluirFornecedor(FornecedorDTO fornecedor) throws PersistenceException {
try {
execUpdate("delete from fornecedor where idfornecedor = " + fornecedor.getIdFornecedor(), null);
return true;
} catch (Exception e) {
return false;
}
}
/**
* Encontra o Fornecedor pelo ID
* @author euler.ramos
* @throws Exception
*/
public List<FornecedorDTO> findByIdFornecedor(Integer id) throws PersistenceException {
List resp = new ArrayList();
Collection fields = getFields();
List parametro = new ArrayList();
List listRetorno = new ArrayList();
String campos = "";
for (Iterator it = fields.iterator(); it.hasNext();) {
Field field = (Field) it.next();
if (!campos.trim().equalsIgnoreCase("")) {
campos = campos + ",";
}
campos = campos + field.getFieldDB();
listRetorno.add(field.getFieldClass());
}
String sql = "SELECT " + campos + " FROM " + getTableName() + " WHERE idfornecedor=? and ((deleted is NULL)OR(deleted<>'y')) ORDER BY idfornecedor";
parametro.add(id);
resp = this.execSQL(sql, parametro.toArray());
List result = this.engine.listConvertion(getBean(), resp, listRetorno);
return (result == null ? new ArrayList<FornecedorDTO>() : result);
}
/**
* Encontra o Fornecedor pela Raz�o Social
* @author euler.ramos
* @throws Exception
*/
public List<FornecedorDTO> findByRazaoSocial(String razaoSocial) throws PersistenceException {
List resp = new ArrayList();
String razaoSocialPar = "%"+razaoSocial+"%";
Collection fields = getFields();
List parametro = new ArrayList();
List listRetorno = new ArrayList();
String campos = "";
for (Iterator it = fields.iterator(); it.hasNext();) {
Field field = (Field) it.next();
if (!campos.trim().equalsIgnoreCase("")) {
campos = campos + ",";
}
campos = campos + field.getFieldDB();
listRetorno.add(field.getFieldClass());
}
String sql = "SELECT " + campos + " FROM " + getTableName() + " WHERE razaosocial like ? and ((deleted is NULL)OR(deleted<>'y')) ORDER BY razaosocial";
parametro.add(razaoSocialPar);
resp = this.execSQL(sql, parametro.toArray());
List result = this.engine.listConvertion(getBean(), resp, listRetorno);
return (result == null ? new ArrayList<FornecedorDTO>() : result);
}
/**
* Realiza consulta por nome atraves do AutoComplete
* @param razaoSocial
* @return
* @throws Exception
*/
public List<FornecedorDTO> consultarFornecedorPorRazaoSocialAutoComplete(String razaoSocial) throws PersistenceException {
if(razaoSocial == null)
razaoSocial = "";
String texto = Normalizer.normalize(razaoSocial, Normalizer.Form.NFD);
texto = texto.replaceAll("[^\\p{ASCII}]", "");
texto = texto.replaceAll("�������������������������Ǵ`^''-+=", "aaaaeeiooouucAAAAEEIOOOUUC ");
texto = "%"+texto.toUpperCase()+"%";
Object[] objs = new Object[] {texto};
StringBuilder sql = new StringBuilder("select idfornecedor, razaosocial from fornecedor ")
.append(" where upper(razaoSocial) like upper(?)")
.append(" order by razaosocial limit 10");
List list = this.execSQL(sql.toString(), objs);
List listRetorno = new ArrayList();
listRetorno.add("idFornecedor");
listRetorno.add("razaoSocial");
List result = this.engine.listConvertion(getBean(), list, listRetorno);
return result;
}
/**
* @param idFornecedor
* @return
* @throws Exception
* @author mario.haysaki
*/
public boolean existeFornecedorAssociadoContrato(Integer idFornecedor) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append(" select count(*) from contratos co ");
sql.append(" inner join fornecedor f on co.idfornecedor = f.idfornecedor ");
sql.append(" where f.idfornecedor = ? and (co.deleted <> 'y' or co.deleted is null) and co.situacao = 'A' ");
parametro.add(idFornecedor);
List lista = new ArrayList();
lista = this.execSQL(sql.toString(), parametro.toArray());
Long total = 0l;
BigDecimal totalLinhaBigDecimal;
Integer totalLinhaInteger;
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)) {
total = (Long) totalLinha[0];
}
if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) {
totalLinhaBigDecimal = (BigDecimal) totalLinha[0];
total = totalLinhaBigDecimal.longValue();
}
if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) {
totalLinhaInteger = (Integer) totalLinha[0];
total = Long.valueOf(totalLinhaInteger);
}
}
}
if (total > 0) {
return true;
} else{
return false;
}
}
}