package br.com.centralit.citcorpore.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.AcordoServicoContratoDTO;
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;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class AcordoServicoContratoDao extends CrudDaoDefaultImpl {
public AcordoServicoContratoDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idAcordoServicoContrato", "idAcordoServicoContrato", true, true, false, false));
listFields.add(new Field("idAcordoNivelServico", "idAcordoNivelServico", false, false, false, false));
listFields.add(new Field("idServicoContrato", "idServicoContrato", false, false, false, false));
listFields.add(new Field("dataCriacao", "dataCriacao", false, false, false, false));
listFields.add(new Field("dataInicio", "dataInicio", false, false, false, false));
listFields.add(new Field("dataFim", "dataFim", false, false, false, false));
listFields.add(new Field("dataUltAtualiz", "dataUltAtualiz", false, false, false, false));
listFields.add(new Field("idRecurso", "idRecurso", false, false, false, false));
listFields.add(new Field("deleted", "deleted", false, false, false, false));
listFields.add(new Field("habilitado", "habilitado", false, false, false, false));
return listFields;
}
public String getTableName() {
return this.getOwner() + "AcordoServicoContrato";
}
public Collection list() throws PersistenceException {
return null;
}
public Class getBean() {
return AcordoServicoContratoDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
public Collection findByIdAcordoNivelServico(Integer idAcordoNivelServico) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idAcordoNivelServico", "=", idAcordoNivelServico));
ordenacao.add(new Order("idServicoContrato"));
return super.findByCondition(condicao, ordenacao);
}
public void deleteByIdAcordoServicoContrato(Integer idAcordoServicoContrato) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idAcordoServicoContrato", "=", idAcordoServicoContrato));
super.deleteByCondition(condicao);
}
public Collection findByIdServicoContrato(Integer idServicoContrato) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idServicoContrato", "=", idServicoContrato));
ordenacao.add(new Order("idAcordoNivelServico"));
return super.findByCondition(condicao, ordenacao);
}
public AcordoServicoContratoDTO findAtivoByIdServicoContrato(Integer idServicoContrato, String tipo) throws PersistenceException {
List parametros = new ArrayList();
parametros.add(idServicoContrato);
parametros.add(tipo);
List fields = new ArrayList();
fields.add("idAcordoServicoContrato");
fields.add("idAcordoNivelServico");
fields.add("idServicoContrato");
fields.add("dataCriacao");
fields.add("dataInicio");
fields.add("dataFim");
fields.add("dataUltAtualiz");
fields.add("deleted");
String sql = "SELECT A.idacordoservicocontrato, A.idacordonivelservico, A.idservicocontrato, A.dataCriacao, A.dataInicio, A.dataFim, A.dataUltAtualiz, A.deleted FROM " + this.getTableName()
+ " A INNER JOIN acordonivelservico B ON A.idacordonivelservico = B.idacordonivelservico AND B.idservicocontrato IS NULL "
+ "WHERE A.idservicocontrato = ? AND B.tipo = ? AND (A.deleted IS NULL or UPPER(A.deleted) = 'N') AND (B.deleted IS NULL or UPPER(B.deleted) = 'N') AND A.habilitado = 'S' ";
List colDados = this.execSQL(sql, parametros.toArray());
Collection<AcordoServicoContratoDTO> col = this.listConvertion(AcordoServicoContratoDTO.class, colDados, fields);
if (col == null || col.size() == 0)
return null;
AcordoServicoContratoDTO result = null;
for (AcordoServicoContratoDTO acordoNivelServicoDto : col) {
if ((acordoNivelServicoDto.getDataFim() == null || UtilDatas.getDataAtual().before(acordoNivelServicoDto.getDataFim())) && (acordoNivelServicoDto.getDeleted() == null || acordoNivelServicoDto.getDeleted().equalsIgnoreCase("N")))
result = acordoNivelServicoDto;
}
return result;
}
public void deleteByIdServicoContrato(Integer idServicoContrato) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idServicoContrato", "=", idServicoContrato));
super.deleteByCondition(condicao);
}
/**
* Verifica se existe relacionamento na base de dados entre a ANS e o Contrato
* @author flavio.santana
* @param idAcordoNivelServico
* @param idContrato
* @return
* @throws Exception
*/
public boolean existeAcordoServicoContrato(Integer idAcordoNivelServico, Integer idContrato) throws PersistenceException {
StringBuilder sql = new StringBuilder();
List fields = new ArrayList();
List parametros = new ArrayList();
sql.append("select ascn.idAcordoNivelServico from acordoServicoContrato ascn ");
sql.append("inner join servicocontrato sc on sc.idservicocontrato = ascn.idservicocontrato ");
sql.append("inner join contratos c on c.idcontrato = sc.idcontrato ");
sql.append("where ascn.idAcordoNivelServico = ? and c.idcontrato = ? ");
fields.add("idAcordoNivelServico");
parametros.add(idAcordoNivelServico);
parametros.add(idContrato);
Collection<AcordoServicoContratoDTO> obj = this.execSQL(sql.toString(), parametros.toArray());
return (obj != null && !obj.isEmpty() ? true : false);
}
public Collection<AcordoServicoContratoDTO> findByIdAcordoNivelServicoIdServicoContrato(Integer idAcordoNivelServico, Integer idServicoContrato) throws PersistenceException {
List<Condition> condicao = new ArrayList<Condition>();
List<Order> ordenacao = new ArrayList<Order>();
condicao.add(new Condition("idAcordoNivelServico", "=", idAcordoNivelServico));
condicao.add(new Condition("idServicoContrato", "=", idServicoContrato));
return super.findByCondition(condicao, ordenacao);
}
@Override
public void updateNotNull(IDto obj) throws PersistenceException {
super.updateNotNull(obj);
}
public List<AcordoServicoContratoDTO> listAtivoByIdServicoContrato(Integer idAcordoServicoContrato, Integer idServicoContrato, String tipo) throws PersistenceException {
List parametros = new ArrayList();
parametros.add(idAcordoServicoContrato);
parametros.add(idServicoContrato);
parametros.add(tipo);
List fields = new ArrayList();
fields.add("idAcordoServicoContrato");
fields.add("idAcordoNivelServico");
fields.add("idServicoContrato");
fields.add("dataCriacao");
fields.add("dataInicio");
fields.add("dataFim");
fields.add("dataUltAtualiz");
fields.add("deleted");
String sql = "SELECT A.idacordoservicocontrato, A.idacordonivelservico, A.idservicocontrato, A.dataCriacao, A.dataInicio, A.dataFim, A.dataUltAtualiz, A.deleted FROM " + this.getTableName()
+ " A INNER JOIN acordonivelservico B ON A.idacordonivelservico = B.idacordonivelservico AND B.idservicocontrato IS NULL "
+ "WHERE A.idAcordoServicoContrato <> ? and A.idservicocontrato = ? AND B.tipo = ? AND (A.deleted IS NULL or UPPER(A.deleted) = 'N') AND (B.deleted IS NULL or UPPER(B.deleted) = 'N') ";
List colDados = this.execSQL(sql, parametros.toArray());
List<AcordoServicoContratoDTO> col = this.listConvertion(AcordoServicoContratoDTO.class, colDados, fields);
if (col == null || col.size() == 0)
return null;
return col;
}
public List<AcordoServicoContratoDTO> listAtivoByIdServicoContrato(Integer idServicoContrato, String tipo) throws PersistenceException {
List parametros = new ArrayList();
parametros.add(idServicoContrato);
parametros.add(tipo);
List fields = new ArrayList();
fields.add("idAcordoServicoContrato");
fields.add("idAcordoNivelServico");
fields.add("idServicoContrato");
fields.add("dataCriacao");
fields.add("dataInicio");
fields.add("dataFim");
fields.add("dataUltAtualiz");
fields.add("deleted");
String sql = "SELECT A.idacordoservicocontrato, A.idacordonivelservico, A.idservicocontrato, A.dataCriacao, A.dataInicio, A.dataFim, A.dataUltAtualiz, A.deleted FROM " + this.getTableName()
+ " A INNER JOIN acordonivelservico B ON A.idacordonivelservico = B.idacordonivelservico AND B.idservicocontrato IS NULL "
+ "WHERE A.idservicocontrato = ? AND B.tipo = ? AND (A.deleted IS NULL or UPPER(A.deleted) = 'N') AND (B.deleted IS NULL or UPPER(B.deleted) = 'N') ";
List colDados = this.execSQL(sql, parametros.toArray());
List<AcordoServicoContratoDTO> col = this.listConvertion(AcordoServicoContratoDTO.class, colDados, fields);
if (col == null || col.size() == 0)
return null;
return col;
}
/**
* Retorna o ANS do Contrato
* @author flavio.santana
* @param idAcordoNivelServico
* @param idContrato
* @return
* @throws Exception
*/
public List<AcordoServicoContratoDTO> findBylistByIdAcordoNivelServicoAndContrato(Integer idAcordoNivelServico, Integer idContrato) throws PersistenceException {
StringBuilder sql = new StringBuilder();
List fields = new ArrayList();
List parametros = new ArrayList();
sql.append("select ascn.idAcordoServicoContrato from "+this.getTableName()+" ascn ");
sql.append("inner join servicocontrato sc on sc.idservicocontrato = ascn.idservicocontrato ");
sql.append("inner join contratos c on c.idcontrato = sc.idcontrato ");
sql.append("where ascn.idAcordoNivelServico = ? and c.idcontrato = ? ");
fields.add("idAcordoServicoContrato");
parametros.add(idAcordoNivelServico);
parametros.add(idContrato);
List colDados = this.execSQL(sql.toString(), parametros.toArray());
return this.listConvertion(AcordoServicoContratoDTO.class, colDados, fields);
}
}