package br.com.centralit.citcorpore.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import br.com.centralit.citcorpore.bean.GrupoDTO;
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 GrupoDao extends CrudDaoDefaultImpl {
private static final String SQL_GET_GRUPOS_PESSOA = "SELECT G.nome, " + "G.sigla, G.idGrupo, G.serviceDesk " + "FROM GRUPO G " + "INNER JOIN GRUPOSEMPREGADOS GE ON GE.idGrupo = G.idGrupo ";
private static final String SQL_GET_GRUPOS_EMPREGADO = "SELECT G.nome, " + "G.sigla, G.idGrupo, G.abertura, G.andamento, G.encerramento, G.serviceDesk " + "FROM GRUPO G "
+ "INNER JOIN GRUPOSEMPREGADOS GE ON GE.idGrupo = G.idGrupo ";
public GrupoDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
/**
* Select para lista GRUPO que ainda n�o forma associados a EMPREGADOS.
*/
private static final String SQL_NOMEGRUPO = "select idgrupo,nome " + "from grupo where idgrupo not in(select idgrupo from empregados)";
/**
* Select para lista GRUPO que ainda n�o forma associados a USU�RIOS.
*/
private static final String SQL_NOMEUSUARIO = "select idgrupo,nome " + "from grupo where idgrupo not in(select idgrupo from usuario)";
public Class getBean() {
return GrupoDTO.class;
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("IDGRUPO", "idGrupo", true, true, false, false));
listFields.add(new Field("IDEMPRESA", "idEmpresa", false, false, false, false));
listFields.add(new Field("NOME", "nome", 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("DESCRICAO", "descricao", false, false, false, false));
listFields.add(new Field("sigla", "sigla", false, false, false, false));
listFields.add(new Field("servicedesk", "serviceDesk", false, false, false, false));
listFields.add(new Field("abertura", "abertura", false, false, false, false));
listFields.add(new Field("andamento", "andamento", false, false, false, false));
listFields.add(new Field("encerramento", "encerramento", false, false, false, false));
listFields.add(new Field("comiteconsultivomudanca", "comiteConsultivoMudanca", false, false, false, false));
listFields.add(new Field("permitesuspensaoreativacao", "permiteSuspensaoReativacao", false, false, false, false));
return listFields;
}
public String getTableName() {
return "GRUPO";
}
public Collection find(IDto obj) throws PersistenceException {
List ordem = new ArrayList();
ordem.add(new Order("nome"));
return super.find(obj, ordem);
}
public Collection list() throws PersistenceException {
List list = new ArrayList();
list.add(new Order("nome"));
return super.list(list);
}
public Collection listarGruposAtivos() throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("dataFim", "is", null));
ordenacao.add(new Order("nome"));
return super.findByCondition(condicao, ordenacao);
}
/**
* Retorna lista de GRUPO que ainda n�o est�o associados a EMPREGADOS.
*
* @return
* @throws Exception
* @author thays.araujo
*/
public Collection listarGrupoEmpregado() throws PersistenceException {
String sql = SQL_NOMEGRUPO;
List lista = new ArrayList();
lista = this.execSQL(sql, null);
List listRetorno = new ArrayList();
listRetorno.add("idGrupo");
listRetorno.add("nome");
List result = this.engine.listConvertion(getBean(), lista, listRetorno);
return result;
}
/**
* Retorna lista de GRUPO que ainda n�o est�o associados a USU�RIO.
*
* @return
* @throws Exception
* @author thays.araujo
*/
public Collection listarGrupoUsuario() throws PersistenceException {
String sql = SQL_NOMEUSUARIO;
List lista = new ArrayList();
lista = this.execSQL(sql, null);
List listRetorno = new ArrayList();
listRetorno.add("idGrupo");
listRetorno.add("nome");
List result = this.engine.listConvertion(getBean(), lista, listRetorno);
return result;
}
/**
* Retorna Lista de Grupo do Empregado.
*
* @param idEmpregado
* @return Collection<GrupoDTO>
* @throws Exception
*/
public Collection<GrupoDTO> getGruposByIdEmpregado(Integer idEmpregado) throws PersistenceException {
Object[] objs = new Object[] { idEmpregado };
String sql = SQL_GET_GRUPOS_PESSOA;
sql += " WHERE ";
sql += " (GE.idEmpregado = ?) AND datafim is NULL";
sql += " ORDER BY G.nome";
List lista = this.execSQL(sql, objs);
List listRetorno = new ArrayList();
listRetorno.add("nome");
listRetorno.add("sigla");
listRetorno.add("idGrupo");
listRetorno.add("serviceDesk");
List result = this.engine.listConvertion(getBean(), lista, listRetorno);
if (result == null || result.size() == 0)
return null;
return result;
}
/**
* Retorna Grupos do Empregado com todos os dados de retorno.
*
* @param idEmpregado
* @return Collection<GrupoDTO>
* @throws Exception
*/
public Collection getGruposByIdEmpregadoAll(Integer idEmpregado) throws PersistenceException {
Object[] objs = new Object[] { idEmpregado };
String sql = SQL_GET_GRUPOS_EMPREGADO;
sql += " WHERE ";
sql += " (GE.idEmpregado = ?) AND datafim is NULL";
sql += " ORDER BY G.nome";
List lista = this.execSQL(sql, objs);
List listRetorno = new ArrayList();
listRetorno.add("nome");
listRetorno.add("sigla");
listRetorno.add("idGrupo");
listRetorno.add("abertura");
listRetorno.add("andamento");
listRetorno.add("encerramento");
listRetorno.add("serviceDesk");
List result = this.engine.listConvertion(getBean(), lista, listRetorno);
if (result == null || result.size() == 0)
return null;
return result;
}
/**
* Retorna Grupos do Contrato.
*
* @param idContrato
* @return Collection<GrupoDTO>
* @throws Exception
*/
public Collection<GrupoDTO> listGrupoByIdContrato(Integer idContrato) throws PersistenceException {
StringBuilder sql = new StringBuilder();
List parametro = new ArrayList();
List list = new ArrayList();
sql.append("select grupo.idgrupo, grupo.nome from contratosgrupos ");
sql.append("inner join grupo on contratosgrupos.idgrupo = grupo.idgrupo ");
sql.append("where idcontrato = ? ");
parametro.add(idContrato);
list = this.execSQL(sql.toString(), parametro.toArray());
List listRetorno = new ArrayList();
listRetorno.add("idGrupo");
listRetorno.add("nome");
List result = this.engine.listConvertion(getBean(), list, listRetorno);
if (result == null || result.size() == 0) {
return null;
} else {
return result;
}
}
/**
* Retorna Grupos do Contrato.
*
* @param idContrato
* @return Collection<GrupoDTO>
* @throws Exception
*/
public Collection<GrupoDTO> listGruposAtivosByIdContrato(Integer idContrato) throws PersistenceException {
StringBuilder sql = new StringBuilder();
List parametro = new ArrayList();
List list = new ArrayList();
sql.append("select grupo.idgrupo, grupo.nome from contratosgrupos ");
sql.append("inner join grupo on contratosgrupos.idgrupo = grupo.idgrupo ");
sql.append("where datafim is NULL and idcontrato = ? ");
parametro.add(idContrato);
list = this.execSQL(sql.toString(), parametro.toArray());
List listRetorno = new ArrayList();
listRetorno.add("idGrupo");
listRetorno.add("nome");
List result = this.engine.listConvertion(getBean(), list, listRetorno);
if (result == null || result.size() == 0) {
return null;
} else {
return result;
}
}
public GrupoDTO restoreBySigla(String sigla) throws PersistenceException {
List ordem = new ArrayList();
ordem.add(new Order("sigla"));
GrupoDTO grupoDto = new GrupoDTO();
grupoDto.setSigla(sigla);
List<GrupoDTO> col = (List) super.find(grupoDto, ordem);
if (col == null || col.size() == 0)
return null;
grupoDto = null;
for (GrupoDTO grupoAuxDto : col) {
if (grupoAuxDto.getDataFim() == null || (grupoAuxDto.getDataFim() != null && grupoAuxDto.getDataFim().compareTo(UtilDatas.getDataAtual()) >= 0)) {
grupoDto = grupoAuxDto;
break;
}
}
return grupoDto;
}
public GrupoDTO restoreBySigla(GrupoDTO grupoDto) throws PersistenceException {
String sql = "SELECT * FROM " + getTableName() + " WHERE sigla = ? AND idgrupo <> ? ";
List param = new ArrayList();
List retorno = new ArrayList();
param.add(grupoDto.getSigla());
param.add(grupoDto.getIdGrupo());
retorno = execSQL(sql, param.toArray());
if (retorno != null && !retorno.isEmpty()) {
return (GrupoDTO) this.listConvertion(getBean(), retorno, (List) getFields()).get(0);
} else {
return null;
}
}
public Collection<GrupoDTO> listGruposServiceDesk() throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("serviceDesk", "=", "S"));
condicao.add(new Condition("dataFim", "is", null));
ordenacao.add(new Order("nome"));
return super.findByCondition(condicao, ordenacao);
}
/**
* Bruno.Aquino - Listar todos os grupos que o usu�rio estiver vinculado.
*
* @param idUsu�rio
* @return Lista de Grupos
* @throws PersistenceException
*/
public Collection<GrupoDTO> listGruposPorUsuario(int idUsuario) throws PersistenceException {
List parametro = new ArrayList();
List fields = (List) getFields();
List list = new ArrayList();
StringBuilder sql = new StringBuilder();
List retorno = new ArrayList();
for (Iterator it = fields.iterator(); it.hasNext();) {
Field field = (Field) it.next();
retorno.add(field.getFieldClass());
}
sql.append("select gr.idgrupo,gr.idempresa,gr.nome,gr.datainicio,gr.datafim,gr.descricao,gr.sigla,gr.servicedesk,gr.abertura,gr.andamento,gr.encerramento,gr.comiteconsultivomudanca, gr.permitesuspensaoreativacao from ");
sql.append("grupo gr ");
sql.append("INNER JOIN gruposempregados ge ON gr.idgrupo = ge.idgrupo ");
sql.append("INNER JOIN usuario u ON u.idempregado = ge.idempregado ");
sql.append("WHERE ");
sql.append("u.idusuario = ? ");
sql.append("AND gr.datafim IS NULL ");
sql.append("ORDER BY gr.nome ");
parametro.add(idUsuario);
list = this.execSQL(sql.toString(), parametro.toArray());
return listConvertion(getBean(), list, retorno);
}
public Collection<GrupoDTO> listGruposServiceDeskByIdContrato(Integer idContratoParm) throws PersistenceException {
List list = new ArrayList();
String sql = "SELECT ";
List fields = (List) getFields();
List retorno = new ArrayList();
boolean b = false;
for (Iterator it = fields.iterator(); it.hasNext();) {
Field field = (Field) it.next();
if (b) {
sql += ",";
}
sql += field.getFieldDB();
b = true;
retorno.add(field.getFieldClass());
}
sql += " FROM " + this.getTableName();
sql += " WHERE serviceDesk = 'S' AND dataFim IS NULL ";
sql += " AND idgrupo in (SELECT idgrupo FROM contratosgrupos where IDCONTRATO = ?) ";
sql += "order by sigla ";
list = this.execSQL(sql, new Object[] { idContratoParm });
return this.listConvertion(getBean(), list, retorno);
}
/**
* Verifica se Grupo informada existe.
*
* @param grupo
* @return true - existe; false - n�o existe;
* @throws PersistenceException
*/
public boolean verificarSeGrupoExiste(GrupoDTO grupo) throws PersistenceException {
List parametro = new ArrayList();
List list = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append("select idGrupo from " + getTableName() + " where nome = ? and datafim is null ");
parametro.add(grupo.getNome());
if (grupo.getIdGrupo() != null) {
sql.append("and idgrupo <> ?");
parametro.add(grupo.getIdGrupo());
}
list = this.execSQL(sql.toString(), parametro.toArray());
if (list != null && !list.isEmpty()) {
return true;
} else {
return false;
}
}
/**
* Retorna lista de e-mails que est�o cadastrados para receber notifica��o
*
* @param idGrupo
* @return List<String> emails
* @throws Exception
*/
public List<String> listarEmailsPorGrupo(Integer idGrupo) throws PersistenceException {
StringBuilder sql = new StringBuilder();
sql.append("SELECT DISTINCT emp.email ");
sql.append("FROM gruposempregados AS ge ");
sql.append("INNER JOIN empregados AS emp ");
sql.append("ON ge.idempregado = emp.idempregado ");
sql.append("WHERE ge.idgrupo = ? ");
sql.append("AND emp.email IS NOT NULL ");
sql.append("AND enviaemail = 'S' ");
sql.append("UNION ");
sql.append("SELECT email ");
sql.append("FROM gruposemails ");
sql.append("WHERE idgrupo = ? ");
sql.append("AND email IS NOT NULL ");
List<Object[]> dados = this.execSQL(sql.toString(), new Object[] { idGrupo, idGrupo });
List<String> retorno = new ArrayList<String>();
for (Object[] object : dados) {
retorno.add(object[0].toString().trim());
}
return retorno;
}
public List<String> listarPessoasEmailPorGrupo(Integer idGrupo) throws PersistenceException {
StringBuilder sql = new StringBuilder();
sql.append("SELECT DISTINCT emp.nome, emp.email ");
sql.append("FROM gruposempregados AS ge ");
sql.append("INNER JOIN empregados AS emp ");
sql.append("ON ge.idempregado = emp.idempregado ");
sql.append("WHERE ge.idgrupo = ? ");
sql.append("AND emp.email IS NOT NULL ");
sql.append("AND enviaemail = 'S' ");
sql.append("UNION ");
sql.append("SELECT nome, email ");
sql.append("FROM gruposemails ");
sql.append("WHERE idgrupo = ? ");
sql.append("AND email IS NOT NULL ");
List<Object[]> dados = this.execSQL(sql.toString(), new Object[] { idGrupo, idGrupo });
List<String> retorno = new ArrayList<String>();
for (Object[] object : dados) {
retorno.add(object[0].toString().trim());
retorno.add(object[1].toString().trim());
}
return retorno;
}
public Collection<GrupoDTO> listGruposComite() throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("comiteConsultivoMudanca", "=", "S"));
condicao.add(new Condition("dataFim", "is", null));
ordenacao.add(new Order("sigla"));
return super.findByCondition(condicao, ordenacao);
}
public Collection<GrupoDTO> listGruposNaoComite() throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("dataFim", "is", null));
ordenacao.add(new Order("sigla"));
return super.findByCondition(condicao, ordenacao);
}
/**
* Retorna o nome do grupo pelo ID
*
* @param idGrupo
* @return
* @throws Exception
*/
public GrupoDTO listGrupoById(Integer idGrupo) throws PersistenceException {
List ordem = new ArrayList();
ordem.add(new Order("idgrupo"));
GrupoDTO grupo = new GrupoDTO();
grupo.setIdGrupo(idGrupo);
List col = (List) find(grupo);
if (col == null || col.size() == 0)
return null;
return (GrupoDTO) col.get(0);
}
public Collection<GrupoDTO> listAllGrupos() throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("dataFim", "is", null));
ordenacao.add(new Order("nome"));
return super.findByCondition(condicao, ordenacao);
}
/**
* Retonra uma lista de grupos ativos
*
* @return
* @throws Exception
* @author thays.araujo
*/
public Collection<GrupoDTO> listaGruposAtivos() throws PersistenceException {
List lista = new ArrayList();
List listRetorno = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append("select nome,idgrupo from grupo where datafim is null order by nome,idgrupo ");
lista = this.execSQL(sql.toString(), null);
listRetorno.add("nome");
listRetorno.add("idGrupo");
if (lista != null && !lista.isEmpty()) {
Collection<GrupoDTO> listaGruposAtivos = this.engine.listConvertion(getBean(), lista, listRetorno);
return listaGruposAtivos;
}
return null;
}
public Collection<GrupoDTO> listaGrupoEmpregado(Integer idEmpregado) throws PersistenceException {
List lista = new ArrayList();
List listRetorno = new ArrayList();
List param = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append(" SELECT gr.idgrupo as idGrupo,gr.nome as nomeGrupo ");
sql.append(" FROM gruposempregados gre ");
sql.append(" inner join grupo gr on gre.idgrupo = gr.idgrupo ");
sql.append(" inner join empregados em on gre.idempregado=em.idempregado ");
sql.append(" where em.idempregado = ? ");
param.add(idEmpregado);
lista = this.execSQL(sql.toString(), param.toArray());
listRetorno.add("idGrupo");
listRetorno.add("nome");
if (lista != null && !lista.isEmpty()) {
Collection<GrupoDTO> listResultado = this.engine.listConvertion(GrupoDTO.class, lista, listRetorno);
return listResultado;
}
return null;
}
}