package br.com.centralit.citcorpore.integracao; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import br.com.centralit.citcorpore.bean.ComplexidadeDTO; import br.com.centralit.citcorpore.bean.ContratoDTO; import br.com.centralit.citcorpore.bean.GrupoDTO; import br.com.centralit.citcorpore.bean.ServicoContratoDTO; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.excecao.ServiceException; 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.SQLConfig; import br.com.citframework.util.UtilDatas; /** * @author Thays * */ @SuppressWarnings({ "unchecked", "rawtypes" }) public class ContratoDao extends CrudDaoDefaultImpl { public ContratoDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idContrato", "idContrato", true, true, false, false)); listFields.add(new Field("idCliente", "idCliente", false, false, false, false)); listFields.add(new Field("numero", "numero", false, false, false, false)); listFields.add(new Field("objeto", "objeto", false, false, false, false)); listFields.add(new Field("dataContrato", "dataContrato", false, false, false, false)); listFields.add(new Field("dataFimContrato", "dataFimContrato", false, false, false, false)); listFields.add(new Field("valorEstimado", "valorEstimado", false, false, false, false)); listFields.add(new Field("tipoTempoEstimado", "tipoTempoEstimado", false, false, false, false)); listFields.add(new Field("tempoEstimado", "tempoEstimado", false, false, false, false)); listFields.add(new Field("tipo", "tipo", false, false, false, false)); listFields.add(new Field("situacao", "situacao", false, false, false, false)); listFields.add(new Field("idMoeda", "idMoeda", false, false, false, false)); listFields.add(new Field("cotacaoMoeda", "cotacaoMoeda", false, false, false, false)); listFields.add(new Field("idFornecedor", "idFornecedor", false, false, false, false)); listFields.add(new Field("deleted", "deleted", false, false, false, false)); listFields.add(new Field("idgruposolicitante", "idGrupoSolicitante", false, false, false, false)); return listFields; } public String getTableName() { return this.getOwner() + "Contratos"; } public Collection list() throws PersistenceException { /* * List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("deleted", "=", "n")); ordenacao.add(new Order("numero")); return * super.findByCondition(condicao, ordenacao); */ Collection colFinal = new ArrayList(); Collection col = super.list("numero"); for (Iterator it = col.iterator(); it.hasNext();) { ContratoDTO contratoDto = (ContratoDTO) it.next(); if (contratoDto.getDeleted() == null || contratoDto.getDeleted().equalsIgnoreCase("n")) { colFinal.add(contratoDto); } } return colFinal; } public Class getBean() { return ContratoDTO.class; } public Collection find(IDto arg0) throws PersistenceException { return null; } public Collection findByIdCliente(Integer parm) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idCliente", "=", parm)); ordenacao.add(new Order("numero")); return super.findByCondition(condicao, ordenacao); } public Collection findByIdFornecedor(Integer parm) 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 if (CITCorporeUtil.SGBD_PRINCIPAL.equalsIgnoreCase(SQLConfig.SQLSERVER)) sql += "deleted IS NULL OR deleted = 'N' "; else sql += "deleted IS NULL OR deleted = 'N' "; sql += "ORDER BY numero"; List lst = this.execSQL(sql, null); return this.listConvertion(this.getBean(), lst, this.getListNamesFieldClass()); } public void deleteByIdCliente(Integer parm) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idCliente", "=", parm)); super.deleteByCondition(condicao); } public Collection findByIdContrato(Integer parm) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idContrato", "=", parm)); return super.findByCondition(condicao, ordenacao); } /* * public Collection<RelatorioAcompanhamentoDTO> getnumeros() throws PersistenceException { StringBuilder sql = new StringBuilder(); List listaRetorno = new ArrayList(); * sql.append("select numero from contratos where deleted = 'n'"); List lista = execSQL(sql.toString(), null); listaRetorno.add("nome"); if(lista!=null){ Collection<RelatorioAcompanhamentoDTO> * listaNumero = this.listConvertion(RelatorioAcompanhamentoDTO.class, lista, listaRetorno); return listaNumero; } return null; } */ public Double consultaComplexidade(Integer idServicoContrato, String complexidade) throws PersistenceException { Integer idContrato = consultaIdContrato(idServicoContrato); List resp = new ArrayList(); List parametro = new ArrayList(); parametro.add(idContrato); parametro.add(complexidade); String sql = "SELECT * FROM complexidade WHERE idcontrato = ? AND complexidade = ? "; resp = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idContrato"); listRetorno.add("complexidade"); listRetorno.add("valorComplexidade"); List<ComplexidadeDTO> listconvertion = this.engine.listConvertion(ComplexidadeDTO.class, resp, listRetorno); if (listconvertion != null && !listconvertion.isEmpty()) { BigDecimal textValor = listconvertion.get(0).getValorComplexidade(); if (textValor != null) { return textValor.doubleValue(); } else { return new Double(0); } } else { return new Double(0); } } /** * Retorna uma lista de complexidade de acordo com o contrato passado. * * @param idServicoContrato * @return * @throws Exception */ public Collection<ComplexidadeDTO> listaComplexidadePorContrato(Integer idServicoContrato) throws PersistenceException { Integer idContrato = consultaIdContrato(idServicoContrato); List lista = new ArrayList(); List parametro = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT idContrato,complexidade,valorComplexidade FROM complexidade "); if (idContrato != null) { sql.append("where idcontrato = ?"); parametro.add(idContrato); } lista = this.execSQL(sql.toString(), parametro.toArray()); List listaRetorno = new ArrayList(); listaRetorno.add("idContrato"); listaRetorno.add("complexidade"); listaRetorno.add("valorComplexidade"); if (lista != null && !lista.isEmpty()) { Collection<ComplexidadeDTO> listaComplexidadePorContrato = this.listConvertion(ComplexidadeDTO.class, lista, listaRetorno); return listaComplexidadePorContrato; } else { return null; } } private Integer consultaIdContrato(Integer idServicoContrato) throws PersistenceException { List resp = new ArrayList(); List parametro = new ArrayList(); parametro.add(idServicoContrato); String sql = "SELECT idcontrato FROM servicocontrato WHERE idservicocontrato = ? "; resp = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idContrato"); List<ServicoContratoDTO> listconvertion = this.engine.listConvertion(ServicoContratoDTO.class, resp, listRetorno); if (listconvertion != null && !listconvertion.isEmpty()) { return listconvertion.get(0).getIdContrato(); } else { return new Integer(0); } } public Collection listByIdAcordoNivelServicoAndTipo(Integer idAcordoNivelServicoParm, String tipoParm) throws PersistenceException { List lista = new ArrayList(); List parametro = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT " + this.getNamesFieldsStr() + " FROM contratos WHERE idcontrato IN "); sql.append("(SELECT SC.idcontrato FROM acordoservicocontrato ASCC "); sql.append("INNER JOIN servicocontrato SC ON SC.idservicocontrato = ASCC.idservicocontrato "); sql.append("INNER JOIN contratos C ON C.idcontrato = SC.idcontrato "); sql.append("WHERE ASCC.idacordonivelservico = ? and C.tipo = ?)"); parametro.add(idAcordoNivelServicoParm); parametro.add(tipoParm); lista = this.execSQL(sql.toString(), parametro.toArray()); if (lista != null && !lista.isEmpty()) { Collection listaRetorno = this.listConvertion(getBean(), lista, this.getListNamesFieldClass()); return listaRetorno; } else { return null; } } /** * * @param idGrupo * @return Collection de Contrato * @throws Exception */ public Collection findByIdGrupo(Integer idGrupo) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idGrupoSolicitante", "=", idGrupo)); ordenacao.add(new Order("numero")); return super.findByCondition(condicao, ordenacao); } /** * Lista Contratos Ativos (Situa��o Ativa e DataFim maior que a data Atual). * * @return Collection<ContratoDTO> - Lista de Contratos Ativos. * @throws Exception * @author valdoilo.damasceno * @since 30.10.2013 */ public Collection<ContratoDTO> listAtivos() throws PersistenceException { StringBuilder sql = new StringBuilder(); List listParametro = new ArrayList(); sql.append(" SELECT "); sql.append(this.getNamesFieldsStr()); sql.append(" FROM contratos WHERE "); sql.append(" (deleted IS NULL OR deleted = 'N' OR deleted = 'n') "); sql.append(" AND (datafimcontrato IS NULL OR datafimcontrato > ? )"); sql.append(" AND (situacao = 'A' ) "); sql.append(" ORDER BY idcontrato "); listParametro.add(UtilDatas.getDataAtual()); List list = this.execSQL(sql.toString(), listParametro.toArray()); return this.listConvertion(this.getBean(), list, this.getListNamesFieldClass()); } /** * Retorna a Lista de Contratos Ativos (Situa��o Ativa e DataFim maior que a data Atual). que est�o relacionados aos Grupos informados. * * @param listGrupoDto * - Lista de GrupoDTO. * @return Collection<ContratoDTO> - Lista de Contratos Ativos encontrados. * @author valdoilo.damasceno * @since 30.10.2013 */ public Collection<ContratoDTO> findAtivosByGrupos(Collection<GrupoDTO> listGrupoDto) throws PersistenceException { if (listGrupoDto != null && !listGrupoDto.isEmpty()) { List listParametro = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT contratos.idcontrato, "); sql.append(" idcliente, "); sql.append(" numero, "); sql.append(" datacontrato, "); sql.append(" datafimcontrato, "); sql.append(" valorestimado, "); sql.append(" tipotempoestimado, "); sql.append(" tempoestimado, "); sql.append(" tipo, "); sql.append(" situacao, "); sql.append(" idmoeda, "); sql.append(" cotacaomoeda, "); sql.append(" idfornecedor, "); sql.append(" deleted, "); sql.append(" idgruposolicitante "); sql.append("FROM contratos "); sql.append(" INNER JOIN contratosgrupos "); sql.append(" ON contratos.idcontrato = contratosgrupos.idcontrato "); boolean aux = true; for (GrupoDTO grupo : listGrupoDto) { if (aux) { sql.append(" WHERE contratosgrupos.idgrupo = ? "); listParametro.add(grupo.getIdGrupo()); aux = false; } else { sql.append(" OR contratosgrupos.idgrupo = ? "); listParametro.add(grupo.getIdGrupo()); } } sql.append(" AND ( deleted IS NULL "); sql.append(" OR deleted = 'N' "); sql.append(" OR deleted = 'n' ) "); sql.append(" AND ( datafimcontrato IS NULL "); sql.append(" OR datafimcontrato > ? ) "); sql.append(" AND ( situacao = 'A' ) "); sql.append("GROUP BY contratos.idcontrato, "); sql.append(" idcliente, "); sql.append(" numero, "); sql.append(" datacontrato, "); sql.append(" datafimcontrato, "); sql.append(" valorestimado, "); sql.append(" tipotempoestimado, "); sql.append(" tempoestimado, "); sql.append(" tipo, "); sql.append(" situacao, "); sql.append(" idmoeda, "); sql.append(" cotacaomoeda, "); sql.append(" idfornecedor, "); sql.append(" deleted, "); sql.append(" idgruposolicitante "); sql.append("ORDER BY contratos.idcontrato "); listParametro.add(UtilDatas.getDataAtual()); List list; list = this.execSQL(sql.toString(), listParametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idContrato"); listRetorno.add("idCliente"); listRetorno.add("numero"); listRetorno.add("dataContrato"); listRetorno.add("dataFimContrato"); listRetorno.add("valorEstimado"); listRetorno.add("tipoTempoEstimado"); listRetorno.add("tempoEstimado"); listRetorno.add("tipo"); listRetorno.add("situacao"); listRetorno.add("idMoeda"); listRetorno.add("cotacaoMoeda"); listRetorno.add("idFornecedor"); listRetorno.add("deleted"); listRetorno.add("idGrupoSolicitante"); return this.engine.listConvertion(this.getBean(), list, listRetorno); } else { return null; } } /** * Retorna a lista de Contratos com o nome da Raz�o Social do Cliente do Contrato. * * @return Collection<ContratoDTO> * @throws ServiceException * @throws Exception * @since 04.06.2014 * @author valdoilo.damasceno */ public Collection<ContratoDTO> listAtivosWithNomeRazaoSocialCliente() throws PersistenceException { StringBuilder sql = new StringBuilder(); List listParametro = new ArrayList(); List listFieldsRetorno = new ArrayList<>(this.getListNamesFieldClass()); listFieldsRetorno.add("razaoSocialCliente"); sql.append(" SELECT "); sql.append(this.getNamesFieldsStr("contratos") + ", clientes.nomerazaosocial"); sql.append(" FROM contratos "); sql.append(" INNER JOIN clientes "); sql.append(" ON contratos.idcliente = clientes.idcliente "); sql.append(" WHERE "); sql.append(" (contratos.deleted IS NULL OR contratos.deleted = 'N' OR contratos.deleted = 'n') "); sql.append(" AND (contratos.datafimcontrato IS NULL OR contratos.datafimcontrato > ? )"); sql.append(" AND (contratos.situacao = 'A' ) "); sql.append(" ORDER BY contratos.idcontrato "); listParametro.add(UtilDatas.getDataAtual()); List list = this.execSQL(sql.toString(), listParametro.toArray()); return this.listConvertion(this.getBean(), list, listFieldsRetorno); } }