package br.com.centralit.citcorpore.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.ProdutoDTO;
import br.com.centralit.citcorpore.bean.TipoProdutoDTO;
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 ProdutoDao extends CrudDaoDefaultImpl {
public ProdutoDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idProduto" ,"idProduto", true, true, false, false));
listFields.add(new Field("idTipoProduto" ,"idTipoProduto", false, false, false, false));
listFields.add(new Field("idMarca" ,"idMarca", false, false, false, false));
listFields.add(new Field("modelo" ,"modelo", false, false, false, false));
listFields.add(new Field("detalhes" ,"detalhes", false, false, false, false));
listFields.add(new Field("precomercado" ,"precomercado", false, false, false, false));
listFields.add(new Field("codigoProduto" ,"codigoProduto", false, false, false, false));
listFields.add(new Field("complemento" ,"complemento", false, false, false, false));
listFields.add(new Field("situacao" ,"situacao", false, false, false, false));
return listFields;
}
public String getTableName() {
return this.getOwner() + "Produto";
}
public Collection list() throws PersistenceException {
return null;
}
public Class getBean() {
return ProdutoDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
public void deleteByIdTipoProduto(Integer parm) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idTipoProduto", "=", parm));
super.deleteByCondition(condicao);
}
private StringBuilder getSQLRestore() {
StringBuilder sql = new StringBuilder();
sql.append("SELECT e.idProduto, t.idTipoProduto, t.idCategoria, t.idUnidadeMedida, t.nomeProduto, ");
sql.append(" t.aceitaRequisicao, e.codigoProduto, e.detalhes, e.precoMercado, ");
sql.append(" e.idMarca, e.modelo, e.situacao, c.nomeCategoria, u.siglaUnidadeMedida, m.nomeMarca, e.complemento ");
sql.append(" FROM produto e ");
sql.append(" INNER JOIN tipoproduto t ON t.idTipoProduto = e.idTipoProduto ");
sql.append(" LEFT JOIN marca m ON m.idMarca = e.idMarca ");
sql.append(" INNER JOIN categoriaproduto c ON c.idCategoria = t.idCategoria ");
sql.append(" LEFT JOIN unidademedida u ON u.idUnidadeMedida = t.idUnidadeMedida ");
return sql;
}
private List getColunasRestore() {
List listRetorno = new ArrayList();
listRetorno.add("idProduto");
listRetorno.add("idTipoProduto");
listRetorno.add("idCategoria");
listRetorno.add("idUnidadeMedida");
listRetorno.add("nomeProduto");
listRetorno.add("aceitaRequisicao");
listRetorno.add("codigoProduto");
listRetorno.add("detalhes");
listRetorno.add("precoMercado");
listRetorno.add("idMarca");
listRetorno.add("modelo");
listRetorno.add("situacao");
listRetorno.add("nomeCategoria");
listRetorno.add("siglaUnidadeMedida");
listRetorno.add("nomeMarca");
listRetorno.add("complemento");
return listRetorno;
}
@Override
public IDto restore(IDto obj) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = getSQLRestore();
sql.append(" WHERE e.idProduto = ? ");
parametro.add(((ProdutoDTO) obj).getIdProduto());
List lista = new ArrayList();
lista = this.execSQL(sql.toString(), parametro.toArray());
List<ProdutoDTO> result = this.engine.listConvertion(getBean(), lista, getColunasRestore());
if (result != null && !result.isEmpty())
return result.get(0);
else
return null;
}
public List<TipoProdutoDTO> findByIdCategoria(Integer idCategoria) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = getSQLRestore();
sql.append(" WHERE t.idCategoria = ? ");
sql.append(" ORDER BY t.nomeProduto, m.nomeMarca ");
parametro.add(idCategoria);
List lista = new ArrayList();
lista = this.execSQL(sql.toString(), parametro.toArray());
return this.engine.listConvertion(getBean(), lista, getColunasRestore());
}
public Collection findByIdTipoProduto(Integer idTipoProduto) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idTipoProduto", "=", idTipoProduto));
ordenacao.add(new Order("idMarca"));
return super.findByCondition(condicao, ordenacao);
}
public Collection findByIdCategoriaAndAceitaRequisicao(Integer idCategoria, String aceitaRequisicao) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = getSQLRestore();
sql.append(" WHERE 1 = 1 ");
if (idCategoria != null) {
sql.append(" AND t.idCategoria = ? ");
parametro.add(idCategoria);
}
sql.append(" AND t.aceitaRequisicao = ? ");
sql.append(" ORDER BY t.nomeProduto, m.nomeMarca ");
parametro.add(aceitaRequisicao);
List lista = new ArrayList();
lista = this.execSQL(sql.toString(), parametro.toArray());
return this.engine.listConvertion(getBean(), lista, getColunasRestore());
}
public Collection validaNovoProduto(ProdutoDTO produtoDTO) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = getSQLRestore();
sql.append(" WHERE e.codigoProduto = ? ");
parametro.add(produtoDTO.getCodigoProduto());
List lista = new ArrayList();
lista = this.execSQL(sql.toString(), parametro.toArray());
return this.engine.listConvertion(getBean(), lista, getColunasRestore());
}
}