package br.com.centralit.citcorpore.integracao;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.ItemRequisicaoProdutoDTO;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoItemRequisicaoProduto;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico;
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.UtilDatas;
public class ItemRequisicaoProdutoDao extends CrudDaoDefaultImpl {
public ItemRequisicaoProdutoDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idItemRequisicaoProduto" ,"idItemRequisicaoProduto", true, true, false, false));
listFields.add(new Field("idSolicitacaoServico" ,"idSolicitacaoServico", false, false, false, false));
listFields.add(new Field("idCategoriaProduto" ,"idCategoriaProduto", false, false, false, false));
listFields.add(new Field("idProduto" ,"idProduto", false, false, false, false));
listFields.add(new Field("idUnidadeMedida" ,"idUnidadeMedida", false, false, false, false));
listFields.add(new Field("idParecerValidacao" ,"idParecerValidacao", false, false, false, false));
listFields.add(new Field("idParecerAutorizacao" ,"idParecerAutorizacao", false, false, false, false));
listFields.add(new Field("descricaoItem" ,"descricaoItem", false, false, false, false));
listFields.add(new Field("especificacoes" ,"especificacoes", false, false, false, false));
listFields.add(new Field("quantidade" ,"quantidade", false, false, false, false));
listFields.add(new Field("marcaPreferencial" ,"marcaPreferencial", false, false, false, false));
listFields.add(new Field("precoAproximado" ,"precoAproximado", false, false, false, false));
listFields.add(new Field("situacao" ,"situacao", false, false, false, false));
listFields.add(new Field("percVariacaoPreco" ,"percVariacaoPreco", false, false, false, false));
listFields.add(new Field("qtdeAprovada" ,"qtdeAprovada", false, false, false, false));
listFields.add(new Field("idItemCotacao" ,"idItemCotacao", false, false, false, false));
listFields.add(new Field("tipoAtendimento" ,"tipoAtendimento", false, false, false, false));
listFields.add(new Field("tipoIdentificacao" ,"tipoIdentificacao", false, false, false, false));
listFields.add(new Field("qtdeCotada" ,"qtdeCotada", false, false, false, false));
listFields.add(new Field("aprovaCotacao" ,"aprovaCotacao", false, false, false, false));
listFields.add(new Field("valorAprovado" ,"valorAprovado", false, false, false, false));
return listFields;
}
public String getTableName() {
return this.getOwner() + "ItemRequisicaoProduto";
}
public Collection list() throws PersistenceException {
return null;
}
public Class getBean() {
return ItemRequisicaoProdutoDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
public Collection findByIdSolicitacaoServico(Integer parm) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idSolicitacaoServico", "=", parm));
condicao.add(new Condition("situacao", "<>", SituacaoItemRequisicaoProduto.Cancelado.name()));
ordenacao.add(new Order("idItemRequisicaoProduto"));
return super.findByCondition(condicao, ordenacao);
}
public Collection findTodosByIdSolicitacaoServico(Integer parm) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idSolicitacaoServico", "=", parm));
ordenacao.add(new Order("idItemRequisicaoProduto"));
return super.findByCondition(condicao, ordenacao);
}
public Collection findByIdSolicitacaoServicoAndSituacao(Integer parm, SituacaoItemRequisicaoProduto situacao) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idSolicitacaoServico", "=", parm));
condicao.add(new Condition("situacao", "=", situacao.name()));
ordenacao.add(new Order("idItemRequisicaoProduto"));
return super.findByCondition(condicao, ordenacao);
}
public Collection findByIdSolicitacaoAndSituacaoAndTipoAtendimento(Integer parm, SituacaoItemRequisicaoProduto situacao, String tipoAtendimento) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idSolicitacaoServico", "=", parm));
condicao.add(new Condition("situacao", "=", situacao.name()));
condicao.add(new Condition("tipoAtendimento", "=", tipoAtendimento));
ordenacao.add(new Order("idItemRequisicaoProduto"));
return super.findByCondition(condicao, ordenacao);
}
public void deleteByIdSolicitacaoServico(Integer parm) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idSolicitacaoServico", "=", parm));
super.deleteByCondition(condicao);
}
public Collection findByIdProduto(Integer parm) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idProduto", "=", parm));
condicao.add(new Condition("situacao", "<>", SituacaoItemRequisicaoProduto.Cancelado.name()));
ordenacao.add(new Order("idItemRequisicaoProduto"));
return super.findByCondition(condicao, ordenacao);
}
public Collection findByIdItemCotacao(Integer idItemCotacao) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idItemCotacao", "=", idItemCotacao));
ordenacao.add(new Order("idItemRequisicaoProduto"));
return super.findByCondition(condicao, ordenacao);
}
public Collection findByIdItemCotacaoOrderQtde(Integer idItemCotacao) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idItemCotacao", "=", idItemCotacao));
ordenacao.add(new Order("qtdeAprovada",Order.DESC));
return super.findByCondition(condicao, ordenacao);
}
private StringBuilder getSQLRestoreAll() {
StringBuilder sql = new StringBuilder();
sql.append("SELECT item.idItemRequisicaoProduto, sol.idSolicitacaoServico, sol.dataHoraSolicitacao, sol.dataHoraLimite, req.idProjeto, req.idCentroCusto, ");
sql.append(" item.idProduto, item.descricaoItem, item.especificacoes, item.precoAproximado, item.idUnidadeMedida, item.tipoIdentificacao, ");
sql.append(" item.quantidade, item.marcaPreferencial, item.situacao, item.qtdeAprovada, item.percVariacaoPreco, item.tipoAtendimento, item.idCategoriaProduto, ");
sql.append(" item.aprovaCotacao, item.qtdeCotada, item.valorAprovado, cc.nomeCentroResultado, proj.nomeProjeto, c.nomeCategoria, u.siglaUnidadeMedida, tprod.nomeProduto, prod.codigoProduto, req.idEnderecoEntrega ");
sql.append(" FROM itemrequisicaoproduto item ");
sql.append(" INNER JOIN requisicaoproduto req ON req.idsolicitacaoservico = item.idsolicitacaoservico ");
sql.append(" INNER JOIN solicitacaoservico sol ON sol.idsolicitacaoservico = item.idsolicitacaoservico ");
sql.append(" LEFT JOIN produto prod ON prod.idProduto = item.idProduto ");
sql.append(" LEFT JOIN tipoproduto tprod ON tprod.idTipoProduto = prod.idTipoProduto ");
sql.append(" LEFT JOIN categoriaproduto c ON c.idCategoria = tprod.idCategoria ");
sql.append(" LEFT JOIN unidademedida u ON u.idunidademedida = item.idunidademedida ");
sql.append(" LEFT JOIN projetos proj ON proj.idprojeto = req.idprojeto ");
sql.append(" LEFT JOIN centroresultado cc ON cc.idcentroresultado = req.idcentrocusto ");
return sql;
}
private List getColunasRestoreAll() {
List listRetorno = new ArrayList();
listRetorno.add("idItemRequisicaoProduto");
listRetorno.add("idSolicitacaoServico");
listRetorno.add("dataHoraSolicitacao");
listRetorno.add("dataHoraLimite");
listRetorno.add("idProjeto");
listRetorno.add("idCentroCusto");
listRetorno.add("idProduto");
listRetorno.add("descricaoItem");
listRetorno.add("especificacoes");
listRetorno.add("precoAproximado");
listRetorno.add("idUnidadeMedida");
listRetorno.add("tipoIdentificacao");
listRetorno.add("quantidade");
listRetorno.add("marcaPreferencial");
listRetorno.add("situacao");
listRetorno.add("qtdeAprovada");
listRetorno.add("percVariacaoPreco");
listRetorno.add("tipoAtendimento");
listRetorno.add("idCategoriaProduto");
listRetorno.add("aprovaCotacao");
listRetorno.add("qtdeCotada");
listRetorno.add("valorAprovado");
listRetorno.add("nomeCentroCusto");
listRetorno.add("nomeProjeto");
listRetorno.add("nomeCategoria");
listRetorno.add("siglaUnidadeMedida");
listRetorno.add("nomeProduto");
listRetorno.add("codigoProduto");
listRetorno.add("idEnderecoEntrega");
return listRetorno;
}
public Collection<ItemRequisicaoProdutoDTO> recuperaItensParaCotacao(Date dataInicio, Date dataFim, Integer idCentroCusto,
Integer idProjeto, Integer idEnderecoEntrega, Integer idSolicitacaoServico) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = getSQLRestoreAll();
sql.append(" WHERE item.idItemCotacao IS NULL ");
sql.append(" AND item.tipoAtendimento = 'C' ");
sql.append(" AND sol.situacao = ? ");
sql.append(" AND item.situacao = ? ");
parametro.add(SituacaoSolicitacaoServico.EmAndamento.name());
parametro.add(SituacaoItemRequisicaoProduto.AguardandoCotacao.name());
if (idSolicitacaoServico != null) {
sql.append(" AND item.idSolicitacaoServico = ? ");
parametro.add(idSolicitacaoServico);
}
if (dataInicio != null) {
sql.append(" AND sol.dataHoraSolicitacao >= ? ");
parametro.add(Timestamp.valueOf(UtilDatas.dateToSTRWithFormat(dataInicio, "yyyy-MM-dd") + " 00:00:00"));
}
if (dataFim != null) {
sql.append(" AND sol.dataHoraSolicitacao <= ? ");
parametro.add(Timestamp.valueOf(UtilDatas.dateToSTRWithFormat(dataFim, "yyyy-MM-dd") + " 23:59:59"));
}
if (idProjeto != null) {
sql.append(" AND req.idProjeto = ? ");
parametro.add(idProjeto);
}
if (idCentroCusto != null) {
sql.append(" AND req.idCentroCusto = ? ");
parametro.add(idCentroCusto);
}
if (idEnderecoEntrega != null) {
sql.append(" AND req.idEnderecoEntrega = ? ");
parametro.add(idEnderecoEntrega);
}
sql.append("ORDER BY sol.dataHoraSolicitacao, tprod.nomeProduto");
List lista = new ArrayList();
lista = this.execSQL(sql.toString(), parametro.toArray());
return this.engine.listConvertion(getBean(), lista, getColunasRestoreAll());
}
@Override
public void updateNotNull(IDto obj) throws PersistenceException {
super.updateNotNull(obj);
}
}