package br.com.centralit.citcorpore.integracao;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.UnidadeDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
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.integracao.core.DataBase;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.SQLConfig;
/**
* @author thays.araujo e daniel
*
*/
public class EmpregadoDao extends CrudDaoDefaultImpl {
private static final String TABLE_NAME = "empregados";
public EmpregadoDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
@Override
public Class<EmpregadoDTO> getBean() {
return EmpregadoDTO.class;
}
@Override
public Collection<Field> getFields() {
final Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idEmpregado", "idEmpregado", true, true, false, false));
listFields.add(new Field("idUnidade", "idUnidade", false, false, false, false));
listFields.add(new Field("idCargo", "idCargo", false, false, false, false));
listFields.add(new Field("Nome", "nome", false, false, false, false));
listFields.add(new Field("NomeProcura", "nomeProcura", false, false, false, false));
listFields.add(new Field("DataNascimento", "dataNascimento", false, false, false, false));
listFields.add(new Field("Sexo", "sexo", false, false, false, false));
listFields.add(new Field("CPF", "cpf", false, false, false, false));
listFields.add(new Field("RG", "rg", false, false, false, false));
listFields.add(new Field("DataEmissaoRG", "dataEmissaoRG", false, false, false, false));
listFields.add(new Field("OrgExpedidor", "orgExpedidor", false, false, false, false));
listFields.add(new Field("idUFOrgExpedidor", "idUFOrgExpedidor", false, false, false, false));
listFields.add(new Field("Pai", "pai", false, false, false, false));
listFields.add(new Field("Mae", "mae", false, false, false, false));
listFields.add(new Field("Conjuge", "conjuge", false, false, false, false));
listFields.add(new Field("Observacoes", "observacoes", false, false, false, false));
listFields.add(new Field("EstadoCivil", "estadoCivil", false, false, false, false));
listFields.add(new Field("Email", "email", false, false, false, false));
listFields.add(new Field("DataCadastro", "dataCadastro", false, false, false, false));
listFields.add(new Field("Fumante", "fumante", false, false, false, false));
listFields.add(new Field("CTPSNumero", "ctpsNumero", false, false, false, false));
listFields.add(new Field("CTPSSerie", "ctpsSerie", false, false, false, false));
listFields.add(new Field("CTPSIdUf", "ctpsIdUf", false, false, false, false));
listFields.add(new Field("CTPSDataEmissao", "ctpsDataEmissao", false, false, false, false));
listFields.add(new Field("NIT", "nit", false, false, false, false));
listFields.add(new Field("DataAdmissao", "dataAdmissao", false, false, false, false));
listFields.add(new Field("DataFim", "dataFim", false, false, false, false));
listFields.add(new Field("idSituacaoFuncional", "idSituacaoFuncional", false, false, false, false));
listFields.add(new Field("DataDemissao", "dataDemissao", false, false, false, false));
listFields.add(new Field("tipo", "tipo", false, false, false, false));
listFields.add(new Field("custoPorHora", "custoPorHora", false, false, false, false));
listFields.add(new Field("custoTotalMes", "custoTotalMes", false, false, false, false));
listFields.add(new Field("valorSalario", "valorSalario", false, false, false, false));
listFields.add(new Field("valorProdutividadeMedia", "valorProdutividadeMedia", false, false, false, false));
listFields.add(new Field("valorPlanoSaudeMedia", "valorPlanoSaudeMedia", false, false, false, false));
listFields.add(new Field("valorVTraMedia", "valorVTraMedia", false, false, false, false));
listFields.add(new Field("valorVRefMedia", "valorVRefMedia", false, false, false, false));
listFields.add(new Field("agencia", "agencia", false, false, false, false));
listFields.add(new Field("contaSalario", "contaSalario", false, false, false, false));
listFields.add(new Field("telefone", "telefone", false, false, false, false));
listFields.add(new Field("ramal", "ramal", false, false, false, false));
return listFields;
}
@Override
public void updateNotNull(final IDto obj) throws PersistenceException {
super.updateNotNull(obj);
}
@Override
public String getTableName() {
return EmpregadoDao.TABLE_NAME;
}
@Override
public Collection<EmpregadoDTO> find(final IDto obj) throws PersistenceException {
return null;
}
@Override
public Collection<EmpregadoDTO> list() throws PersistenceException {
final List<Order> list = new ArrayList<>();
list.add(new Order("nome"));
return super.list(list);
}
/**
* Retorna empregado Ativo por id.
*
* @param idEmpregado
* @return EmpregadoDTO
* @throws Exception
*/
public EmpregadoDTO restoreEmpregadoAtivoById(final Integer idEmpregado) throws PersistenceException {
final List<Condition> condicoes = new ArrayList<>();
condicoes.add(new Condition("idEmpregado", "=", idEmpregado));
condicoes.add(new Condition("dataFim", "is", null));
final List<EmpregadoDTO> resultados = (List<EmpregadoDTO>) this.findByCondition(condicoes, null);
return resultados.get(0);
}
/**
* @param idGrupo
* @return
* @throws Exception
* @author daniel
*/
public Collection<EmpregadoDTO> listEmpregadosByIdGrupo(final Integer idGrupo) throws PersistenceException {
final String sql = "select gruposempregados.idempregado from gruposempregados INNER JOIN usuario ON gruposempregados.idempregado = usuario.idempregado where usuario.status LIKE 'A' AND idgrupo = ?";
final List<?> dados = this.execSQL(sql, new Object[] {idGrupo});
final List<String> fields = new ArrayList<>();
fields.add("idEmpregado");
return this.listConvertion(this.getBean(), dados, fields);
}
/**
* @param idUnidade
* @return
* @throws Exception
* @author daniel
*/
public Collection<EmpregadoDTO> listEmpregadosByIdUnidade(final Integer idUnidade) throws PersistenceException {
final String sql = "select idempregado from empregados where idunidade = ?";
final List<?> dados = this.execSQL(sql, new Object[] {idUnidade});
final List<String> fields = new ArrayList<>();
fields.add("idEmpregado");
return this.listConvertion(this.getBean(), dados, fields);
}
public Collection<EmpregadoDTO> listarIdEmpregados(final Integer limit, final Integer offset) throws PersistenceException {
String sql = null;
if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) {
sql = " SELECT IDEMPREGADO";
sql += " FROM (SELECT ROWNUM RNUM,";
sql += " A.*";
sql += " FROM (SELECT *";
sql += " FROM EMPREGADOS) A";
sql += " WHERE ROWNUM <= " + (offset + limit) + ")";
sql += " WHERE RNUM > " + offset;
sql += " ORDER BY IDEMPREGADO";
} else {
sql = "select idempregado from empregados";
sql += " order by idempregado";
if (limit != null) {
sql += " limit " + limit;
}
if (offset != null) {
sql += " offset " + offset;
}
}
final List<?> lista = this.execSQL(sql, null);
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idEmpregado");
return engine.listConvertion(this.getBean(), lista, listRetorno);
}
public EmpregadoDTO restoreByIdEmpregado(final Integer idEmpregado) throws PersistenceException {
final List<Order> ordem = new ArrayList<>();
final EmpregadoDTO empregadoDto = new EmpregadoDTO();
empregadoDto.setIdEmpregado(idEmpregado);
final List<EmpregadoDTO> col = (List<EmpregadoDTO>) super.find(empregadoDto, ordem);
if (col == null || col.size() == 0) {
return null;
}
return col.get(0);
}
public Collection<EmpregadoDTO> listEmpregadosGrupo(final Integer idEmpregado, final Integer idGrupo) throws PersistenceException {
final List<Integer> parametro = new ArrayList<>();
final String sql = "SELECT empregados.idempregado,empregados.nome, gruposempregados.enviaemail FROM empregados, gruposempregados "
+ " WHERE empregados.idempregado = gruposempregados.idempregado AND empregados.idEmpregado = ? "
+ " AND gruposempregados.idgrupo = ? and empregados.datafim is null";
parametro.add(idEmpregado);
parametro.add(idGrupo);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idEmpregado");
listRetorno.add("nome");
listRetorno.add("enviaEmail");
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), lista, listRetorno);
if (result != null) {
return result;
}
return null;
}
public Collection<EmpregadoDTO> listEmailContrato(final Integer idContrato) throws PersistenceException {
final List<Integer> parametro = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
sql.append("SELECT e.email ");
sql.append(" FROM GRUPOSEMPREGADOS ge, EMPREGADOS e, GRUPO g, CONTRATOSGRUPOS cg ");
sql.append(" WHERE g.idgrupo = ge.idgrupo ");
sql.append(" AND e.idempregado = ge.idempregado ");
sql.append(" AND g.idgrupo = cg.idgrupo ");
sql.append("AND idcontrato = ?");
parametro.add(idContrato);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("email");
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), lista, listRetorno);
if (result != null) {
return result;
}
return null;
}
public Collection<EmpregadoDTO> listEmailContrato() throws PersistenceException {
final List<?> parametro = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
sql.append("SELECT e.email ");
sql.append(" FROM GRUPOSEMPREGADOS ge, EMPREGADOS e, GRUPO g, CONTRATOSGRUPOS cg ");
sql.append(" WHERE g.idgrupo = ge.idgrupo ");
sql.append(" AND e.idempregado = ge.idempregado ");
sql.append(" AND g.idgrupo = cg.idgrupo ");
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("email");
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), lista, listRetorno);
if (result != null) {
return result;
}
return null;
}
public EmpregadoDTO listEmpregadoContrato(final Integer idContrato, final String email) throws PersistenceException {
final List<Object> parametro = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
sql.append("SELECT ge.idgrupo, ge.idempregado, e.nome, e.email , e.telefone, e.idunidade, cg.idcontrato ");
sql.append(" FROM GRUPOSEMPREGADOS ge, EMPREGADOS e, GRUPO g, CONTRATOSGRUPOS cg ");
sql.append(" WHERE g.idgrupo = ge.idgrupo ");
sql.append(" AND e.idempregado = ge.idempregado ");
sql.append(" AND g.idgrupo = cg.idgrupo ");
sql.append(" AND idcontrato = ? ");
sql.append(" AND e.email = ?");
parametro.add(idContrato);
parametro.add(email);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idGrupo");
listRetorno.add("idEmpregado");
listRetorno.add("nome");
listRetorno.add("email");
listRetorno.add("telefone");
listRetorno.add("idUnidade");
listRetorno.add("idContrato");
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), lista, listRetorno);
if (result != null && !result.isEmpty()) {
return result.get(0);
}
return null;
}
public Collection<EmpregadoDTO> listEmpregadoByContratoAndUnidadeAndEmpregados(final Integer idContrato, final Integer idUnidade, final Integer[] idEmpregados,
final UsuarioDTO usuario, final ArrayList<UnidadeDTO> listUnidadeContrato) throws PersistenceException {
final StringBuilder sql = new StringBuilder();
final List parametro = new ArrayList();
sql.append(" SELECT ge.idempregado, e.nome, e.email , e.telefone, u.idunidade, cg.idcontrato ");
sql.append(" FROM grupo g, gruposempregados ge, empregados e, contratosgrupos cg, unidade u ");
sql.append(" WHERE g.idgrupo = ge.idgrupo ");
sql.append(" AND e.idempregado = ge.idempregado ");
sql.append(" AND g.idgrupo = cg.idgrupo ");
sql.append(" AND e.idunidade = u.idunidade ");
sql.append(" AND e.datafim is null ");
sql.append(" AND u.datafim is null ");
sql.append(" AND e.idsituacaofuncional <> 2");
if (idContrato != null) {
sql.append(" AND cg.idcontrato = ? ");
parametro.add(idContrato);
}
if (idUnidade != null) {
sql.append("AND u.idunidade = ? ");
parametro.add(idUnidade);
} else {
sql.append(" AND u.idunidade in ( ");
for (int i = 0; i < listUnidadeContrato.size(); i++) {
sql.append(listUnidadeContrato.get(i).getIdUnidade());
if (i != listUnidadeContrato.size() - 1) {
sql.append(", ");
}
}
sql.append(" ) ");
}
if (idEmpregados != null) {
sql.append(" AND ge.idempregado IN (" + StringUtils.join(idEmpregados, ",") + ") ");
}
sql.append(" GROUP BY ge.idempregado, e.nome, e.email , e.telefone, u.idunidade, cg.idcontrato ");
final List lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<String>();
listRetorno.add("idEmpregado");
listRetorno.add("nome");
listRetorno.add("email");
listRetorno.add("telefone");
listRetorno.add("idUnidade");
listRetorno.add("idContrato");
final List result = engine.listConvertion(EmpregadoDTO.class, lista, listRetorno);
if (result != null && !result.isEmpty()) {
return result;
} else {
return null;
}
}
public Collection<EmpregadoDTO> listEmpregadoContrato(final Integer idContrato) throws PersistenceException {
final List<Integer> parametro = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
sql.append("SELECT ge.idgrupo, ge.idempregado, e.nome, e.email , e.telefone, e.idunidade, cg.idcontrato ");
sql.append(" FROM GRUPOSEMPREGADOS ge, EMPREGADOS e, GRUPO g, CONTRATOSGRUPOS cg ");
sql.append(" WHERE g.idgrupo = ge.idgrupo ");
sql.append(" AND e.idempregado = ge.idempregado ");
sql.append(" AND g.idgrupo = cg.idgrupo ");
sql.append("AND idcontrato = ? ");
parametro.add(idContrato);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idGrupo");
listRetorno.add("idEmpregado");
listRetorno.add("nome");
listRetorno.add("email");
listRetorno.add("telefone");
listRetorno.add("idUnidade");
listRetorno.add("idContrato");
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), lista, listRetorno);
if (result != null && !result.isEmpty()) {
return result;
}
return null;
}
public EmpregadoDTO listEmpregadoContrato(final String email) throws PersistenceException {
final List<String> parametro = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
sql.append("SELECT ge.idgrupo, ge.idempregado, e.nome, e.email , e.telefone, e.idunidade, cg.idcontrato ");
sql.append(" FROM GRUPOSEMPREGADOS ge, EMPREGADOS e, GRUPO g, CONTRATOSGRUPOS cg ");
sql.append(" WHERE g.idgrupo = ge.idgrupo ");
sql.append(" AND e.idempregado = ge.idempregado ");
sql.append(" AND g.idgrupo = cg.idgrupo ");
sql.append("AND e.email = ?");
parametro.add(email);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idGrupo");
listRetorno.add("idEmpregado");
listRetorno.add("nome");
listRetorno.add("email");
listRetorno.add("telefone");
listRetorno.add("idUnidade");
listRetorno.add("idContrato");
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), lista, listRetorno);
if (result != null && !result.isEmpty()) {
return result.get(0);
}
return null;
}
/**
* Retorna uma lista de empregados associados a um cargo
*
* @param idCargo
* @return
* @throws Exception
* @author thays.araujo
*/
public boolean verificarSeCargoPossuiEmpregado(final Integer idCargo) throws PersistenceException {
final List<Integer> parametro = new ArrayList<>();
final String sql = "select idempregado,nome from " + this.getTableName() + " where idCargo = ? and datafim is null ";
parametro.add(idCargo);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
if (lista != null && !lista.isEmpty()) {
return true;
}
return false;
}
/**
* Verifica se idUnidade informado possui empregado.
*
* @param idCargo
* @return
* @throws Exception
* @author thays.araujo
*/
public boolean verificarSeUnidadePossuiEmpregado(final Integer idUnidade) throws PersistenceException {
final List<Integer> parametro = new ArrayList<>();
final String sql = "select idempregado,nome from " + this.getTableName() + " where idUnidade = ? and datafim is null ";
parametro.add(idUnidade);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
if (lista != null && !lista.isEmpty()) {
return true;
}
return false;
}
public EmpregadoDTO restoreEmpregadoSeAtivo(final EmpregadoDTO empregadoDto) {
final List<Condition> condicoes = new ArrayList<>();
condicoes.add(new Condition("idEmpregado", "=", empregadoDto.getIdEmpregado()));
condicoes.add(new Condition("dataFim", "is", null));
try {
final List<EmpregadoDTO> listaEmpregados = (List<EmpregadoDTO>) this.findByCondition(condicoes, null);
if (listaEmpregados != null && listaEmpregados.size() > 0) {
return listaEmpregados.get(0);
}
} catch (final Exception e) {
e.printStackTrace();
}
return new EmpregadoDTO();
}
/**
* M�todo para consultar Unidade do Empregado
*
* @author rodrigo.oliveira
* @param idEmpregado
* @return Integer - idUnidade
* @throws Exception
*/
public Integer consultaUnidadeDoEmpregado(final Integer idEmpregado) throws PersistenceException {
final List<Condition> condicoes = new ArrayList<>();
condicoes.add(new Condition("idEmpregado", "=", idEmpregado));
condicoes.add(new Condition("dataFim", "is", null));
final List<EmpregadoDTO> resultados = (List<EmpregadoDTO>) this.findByCondition(condicoes, null);
final EmpregadoDTO resp = resultados.get(0);
return resp.getIdUnidade();
}
public Collection<EmpregadoDTO> findByNomeEmpregado(final EmpregadoDTO empregadoDTO) throws PersistenceException {
final List<Condition> condicao = new ArrayList<>();
final List<Order> ordenacao = new ArrayList<>();
condicao.add(new Condition("nome", "=", empregadoDTO.getNome()));
ordenacao.add(new Order("nome"));
condicao.add(new Condition(Condition.AND, "dataFim", "is", null));
return super.findByCondition(condicao, ordenacao);
}
public EmpregadoDTO restoreByNomeEmpregado(final EmpregadoDTO empregadoDTO) throws PersistenceException {
final List<Condition> condicao = new ArrayList<>();
final List<Order> ordenacao = new ArrayList<>();
condicao.add(new Condition("nome", "=", empregadoDTO.getNome()));
ordenacao.add(new Order("nome"));
condicao.add(new Condition(Condition.AND, "dataFim", "is", null));
final List<EmpregadoDTO> resultados = (List<EmpregadoDTO>) this.findByCondition(condicao, ordenacao);
return resultados.get(0);
}
/**
* Restaura o EmpregadoDTO com o Nome cargo a partir do ID Empregado informado.
*
* @param idEmpregado
* @return EmpregadoDTO com NomeCargo
* @author maycon.fernandes
*/
public EmpregadoDTO restoreEmpregadoAndNomeCargoByIdEmpegado(final Integer idEmpregado) throws PersistenceException {
final List<Integer> parametro = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
sql.append(" select em.idEmpregado, em.nome, em.telefone, em.email, ca.nomecargo from ");
sql.append(" empregados em inner join cargos ca on em.idCargo = ca.idCargo ");
sql.append(" where em.idempregado = ? ");
parametro.add(idEmpregado);
final List<?> listaDados = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idEmpregado");
listRetorno.add("nome");
listRetorno.add("telefone");
listRetorno.add("email");
listRetorno.add("nomeCargo");
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), listaDados, listRetorno);
return result.get(0);
}
public Collection<EmpregadoDTO> listarEmailsNotificacoesPasta(final Integer idPasta) throws PersistenceException {
final StringBuilder sql = new StringBuilder();
final List<Integer> parametro = new ArrayList<>();
sql.append("select email from empregados e where idempregado in(select e.idempregado from pasta p ");
sql.append("inner join notificacaogrupo ng on p.idnotificacao = ng.idnotificacao and p.idpasta = ? ");
sql.append("inner join gruposempregados ge on ng.idgrupo = ge.idgrupo and enviaemail = 'S' ");
sql.append("inner join empregados e on ge.idempregado = e.idempregado) or e.idempregado in(select e.idempregado from pasta p ");
sql.append("inner join notificacaousuario nu on p.idnotificacao = nu.idnotificacao and p.idpasta = ? ");
sql.append("inner join usuario u on nu.idusuario = u.idusuario ");
sql.append("inner join empregados e on u.idempregado = e.idempregado) ");
sql.append("group by email");
parametro.add(idPasta);
parametro.add(idPasta);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("email");
return engine.listConvertion(this.getBean(), lista, listRetorno);
}
public Collection<EmpregadoDTO> listarEmailsNotificacoesConhecimento(final Integer idConhecimento) throws PersistenceException {
final StringBuilder sql = new StringBuilder();
final List<Integer> parametro = new ArrayList<>();
sql.append("select email from empregados e where idempregado in(select e.idempregado from baseconhecimento bc ");
sql.append("inner join notificacaogrupo ng on bc.idnotificacao = ng.idnotificacao and bc.idbaseconhecimento = ? ");
sql.append("inner join gruposempregados ge on ng.idgrupo = ge.idgrupo and enviaemail = 'S' ");
sql.append("inner join empregados e on ge.idempregado = e.idempregado) or e.idempregado in (select e.idempregado from baseconhecimento bc ");
sql.append("inner join notificacaousuario nu on bc.idnotificacao = nu.idnotificacao and bc.idbaseconhecimento = ? ");
sql.append("inner join usuario u on nu.idusuario = u.idusuario ");
sql.append("inner join empregados e on u.idempregado = e.idempregado) ");
sql.append("group by email");
parametro.add(idConhecimento);
parametro.add(idConhecimento);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("email");
return engine.listConvertion(this.getBean(), lista, listRetorno);
}
public Collection<EmpregadoDTO> listarEmailsNotificacoesServico(final Integer idServico) throws PersistenceException {
final StringBuilder sql = new StringBuilder();
final List<Integer> parametro = new ArrayList<>();
sql.append("SELECT distinct email ");
sql.append("FROM empregados ");
sql.append(" JOIN (SELECT * ");
sql.append(" FROM (SELECT ge.idempregado ");
sql.append(" FROM notificacaogrupo ng ");
sql.append(" JOIN gruposempregados ge ");
sql.append(" ON ng.idgrupo = ge.idgrupo ");
sql.append(" JOIN (SELECT idnotificacao ");
sql.append(" FROM notificacaoservico ");
sql.append(" WHERE idservico = ?) s ");
sql.append(" ON ng.idnotificacao = s.idnotificacao ");
sql.append(" UNION ");
sql.append(" SELECT u.idempregado ");
sql.append(" FROM notificacaousuario nu ");
sql.append(" JOIN usuario u ");
sql.append(" ON nu.idusuario = u.idusuario ");
sql.append(" JOIN (SELECT idnotificacao ");
sql.append(" FROM notificacaoservico ");
sql.append(" WHERE idservico = ?) us ");
sql.append(" ON nu.idnotificacao = us.idnotificacao) emps) ");
sql.append(" empperm ");
sql.append(" ON empregados.idempregado = empperm.idempregado ");
parametro.add(idServico);
parametro.add(idServico);
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("email");
return engine.listConvertion(this.getBean(), lista, listRetorno);
}
/**
* Retorna verdadeiro para ativo ou falso para inativo de acordo com nome do empregado passado.
*
* @param obj
* @return
* @throws Exception
* @author thays.araujo
*/
public boolean verificarEmpregadosAtivos(final EmpregadoDTO obj) throws PersistenceException {
final List<String> parametro = new ArrayList<>();
String sql = "select idempregado from " + this.getTableName() + " where (nome like ? or nome like ?) and dataFim is null ";
if (obj.getIdEmpregado() != null) {
sql += " and idempregado <> " + obj.getIdEmpregado();
}
parametro.add(" " + obj.getNome());
parametro.add(obj.getNome());
final List<?> list = this.execSQL(sql, parametro.toArray());
if (list != null && !list.isEmpty()) {
return true;
}
return false;
}
public EmpregadoDTO restoreByEmail(final String email) throws PersistenceException {
final List<Order> ordem = new ArrayList<>();
ordem.add(new Order("email"));
final EmpregadoDTO empregadoDTO = new EmpregadoDTO();
empregadoDTO.setEmail(email);
final List<EmpregadoDTO> col = (List<EmpregadoDTO>) super.find(empregadoDTO, null);
if (col == null || col.size() == 0) {
return null;
}
return col.get(0);
}
public IDto restauraTodos(final IDto obj) throws PersistenceException {
final EmpregadoDTO empregadoDto = (EmpregadoDTO) obj;
final List<Condition> condicao = new ArrayList<>();
condicao.add(new Condition("idEmpregado", "=", empregadoDto.getIdEmpregado()));
final List<EmpregadoDTO> p = (List<EmpregadoDTO>) super.findByCondition(condicao, null);
if (p != null && p.size() > 0) {
return p.get(0);
}
return null;
}
/**
* Retorna EmpregadoDTO (idEmpregado e Nome). Esta consulta � a mesma da LOOKUP_SOLICITANTE_CONTRATO.
*
* @param nome
* - Nome do Empregado (Campo Nome da tabela Empregados)
* @param idContrato
* - Identificador do Contrato.
* @return Collection<EmpregadoDTO> - Lista de Empregados com Id e Nome.
* @throws Exception
* @author valdoilo.damasceno 29.10.2013
*/
public Collection<EmpregadoDTO> findSolicitanteByNomeAndIdContratoAndIdUnidade(String nome, final Integer idContrato, final Integer idUnidade) throws PersistenceException {
if (nome == null) {
nome = "";
}
String text = nome;
text = Normalizer.normalize(text, Normalizer.Form.NFD);
text = text.replaceAll("[^\\p{ASCII}]", "");
text = text.replaceAll("�������������������������Ǵ`^''-+=", "aaaaeeiooouucAAAAEEIOOOUUC");
nome = text;
nome = "%" + nome.toUpperCase() + "%";
final List<Object> parametros = new ArrayList<>();
final StringBuilder sql = new StringBuilder();
if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) {
sql.append(" SELECT DISTINCT empregados.idEmpregado, empregados.nome as nome ");
} else {
sql.append(" SELECT DISTINCT empregados.idEmpregado, trim(empregados.nome) as nome ");
}
sql.append(" FROM empregados ");
sql.append(" INNER JOIN gruposempregados ON empregados.idempregado = gruposempregados.idempregado ");
sql.append(" INNER JOIN contratosgrupos ON gruposempregados.idgrupo = contratosgrupos.idgrupo ");
sql.append(" WHERE (empregados.datafim is null) AND (empregados.idsituacaofuncional <> 2) AND (empregados.nome <> 'Administrador') AND contratosgrupos.idcontrato = ? ");
parametros.add(idContrato);
if (idUnidade != null) {
sql.append(" AND empregados.idunidade = ? ");
parametros.add(idUnidade);
}
if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.POSTGRESQL)) {
sql.append(" and (UPPER(remove_acento(empregados.nome)) LIKE UPPER(remove_acento(?)))");
} else {
sql.append(" and UPPER(empregados.nome) LIKE UPPER(?)");
}
parametros.add(nome);
if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) {
sql.append(" COLLATE Latin1_General_CI_AI ");
}
sql.append(" ORDER BY nome ");
final List<?> list = this.execSQL(sql.toString(), parametros.toArray());
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idEmpregado");
listRetorno.add("nome");
return engine.listConvertion(this.getBean(), list, listRetorno);
}
/**
* Pesquisa Empregado por Telefone ou Ramal. Retorna o primeiro Empregado encontrado para o Ramal ou Telefone informado. <<< ATEN��O >> o par�metro Telefone antes de ser
* enviado para o m�todo,
* deve ser tratado com o M�todo mascaraProcuraSql() da Classe Utilit�ria br.com.centralit.citcorpore.util.Telefone.java;
*
* @param telefone
* @return EmpregadoDTO
* @author valdoilo.damasceno
*/
public EmpregadoDTO findByTelefoneOrRamal(final String ramal) {
EmpregadoDTO empregadoDto = new EmpregadoDTO();
final StringBuilder sql = new StringBuilder();
try {
sql.append(" select " + this.getNamesFieldsStr());
sql.append(" from empregados ");
sql.append(" where (telefone " + ramal + ") or (ramal " + ramal + ") and dataFim is null");
final List<?> lista = this.execSQL(sql.toString(), null);
final List<EmpregadoDTO> listEmpregadoDto = engine.listConvertion(this.getBean(), lista, (List) this.getFields());
if (listEmpregadoDto != null && !listEmpregadoDto.isEmpty()) {
empregadoDto = listEmpregadoDto.get(0);
}
} catch (final Exception e) {
e.printStackTrace();
}
return empregadoDto;
}
/**
* Restaura o EmpregadoDTO com o ID do Contrato Padr�o (Primeiro contrato encontrado para o Empregado) a partir do ID Empregado informado.
*
* @param idEmpregado
* @return EmpregadoDTO com IDContrato
* @author valdoilo.damasceno
*/
public EmpregadoDTO restoreEmpregadoWithIdContratoPadraoByIdEmpregado(final Integer idEmpregado) {
if (idEmpregado != null && idEmpregado.intValue() > 0) {
final StringBuilder sql = new StringBuilder();
final List<Integer> parametros = new ArrayList<>();
final List<Object> listRetorno = new ArrayList<>();
sql.append(" select " + this.getNamesFieldsStr("empregados") + ", contratosgrupos.idcontrato ");
sql.append(" from empregados inner join gruposempregados on empregados.idempregado = gruposempregados.idempregado ");
sql.append(" inner join contratosgrupos on gruposempregados.idgrupo = contratosgrupos.idgrupo where empregados.idempregado = ?");
parametros.add(idEmpregado);
try {
final List<?> list = this.execSQL(sql.toString(), parametros.toArray());
List<EmpregadoDTO> listEmpregadoWithIdContrato = null;
if (list != null && !list.isEmpty()) {
listRetorno.addAll(this.getFields());
listRetorno.add("idContrato");
listEmpregadoWithIdContrato = this.listConvertion(this.getBean(), list, listRetorno);
if (listEmpregadoWithIdContrato != null && !listEmpregadoWithIdContrato.isEmpty()) {
return listEmpregadoWithIdContrato.get(0);
}
}
} catch (final Exception e) {
e.printStackTrace();
}
}
return null;
}
/**
* Encontra o Empregado pelo ID
*
* @author euler.ramos
* @throws Exception
*/
public List<EmpregadoDTO> findByIdEmpregado(final Integer id) throws PersistenceException {
List resp = new ArrayList<>();
final Collection fields = this.getFields();
final List parametro = new ArrayList<>();
final List listRetorno = new ArrayList<>();
String campos = "";
for (final Iterator it = fields.iterator(); it.hasNext();) {
final Field field = (Field) it.next();
if (!campos.trim().equalsIgnoreCase("")) {
campos = campos + ",";
}
campos = campos + field.getFieldDB();
listRetorno.add(field.getFieldClass());
}
final String sql = "SELECT " + campos + " FROM " + this.getTableName() + " WHERE idempregado=? ORDER BY idempregado";
parametro.add(id);
resp = this.execSQL(sql, parametro.toArray());
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), resp, listRetorno);
return result == null ? new ArrayList<EmpregadoDTO>() : result;
}
/**
* Encontra o Empregado pelo nome
*
* @author euler.ramos
* @throws Exception
*/
public List<EmpregadoDTO> findByNomeEmpregado(final String nome) throws PersistenceException {
final Collection<Field> fields = this.getFields();
final List<String> parametro = new ArrayList<>();
final List<String> listRetorno = new ArrayList<>();
String campos = "";
for (final Field field : fields) {
if (!campos.trim().equalsIgnoreCase("")) {
campos = campos + ",";
}
campos = campos + field.getFieldDB();
listRetorno.add(field.getFieldClass());
}
final String sql = "SELECT " + campos + " FROM " + this.getTableName() + " WHERE nomeprocura = ? ORDER BY nome";
parametro.add(nome);
final List<?> resp = this.execSQL(sql, parametro.toArray());
final List<EmpregadoDTO> result = engine.listConvertion(this.getBean(), resp, listRetorno);
return result == null ? new ArrayList<EmpregadoDTO>() : result;
}
/**
* Consulta o nome dos empregados com nome diferente de Administrador e data fim diferente de zero com limit de 10 registros
*
* @param nomeEmpregado
* @return Collection<EmpregadoDTO> Com empregados com nome diferente de Administrador e data fim diferente de zero
* @throws Exception
*/
public Collection<EmpregadoDTO> consultarNomeEmpregadoSemAdministrador(String nomeEmpregado) throws PersistenceException {
if (nomeEmpregado == null) {
nomeEmpregado = "";
}
String texto = Normalizer.normalize(nomeEmpregado, Normalizer.Form.NFD);
texto = texto.replaceAll("[^\\p{ASCII}]", "");
texto = texto.replaceAll("�������������������������Ǵ`^''-+=", "aaaaeeiooouucAAAAEEIOOOUUC ");
texto = "%" + texto.toUpperCase() + "%";
final Object[] objs = new Object[] {texto};
final StringBuilder sql = new StringBuilder("select ");
if (CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.SQLSERVER)) {
sql.append("TOP 10 ");
}
sql.append("idempregado, nome from empregados ");
sql.append(" where ");
if (CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.ORACLE)) {
sql.append("ROWNUM <= 10 and ");
}
sql.append("upper(nome) like upper(?) and nome <> 'Administrador' and datafim is null and (tipo <> 'N' OR tipo IS NULL)");
sql.append(" order by nome");
if (CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.POSTGRESQL)
|| CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.MYSQL)) {
sql.append(" LIMIT 10");
}
final List<?> list = this.execSQL(sql.toString(), objs);
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idEmpregado");
listRetorno.add("nome");
return engine.listConvertion(this.getBean(), list, listRetorno);
}
/**
* Consulta o nome dos empregados com nome diferente de Administrador e data fim diferente de zero com limit de 10 registros
*
* @param nomeEmpregado
* @return Collection<EmpregadoDTO> Com empregados com nome diferente de Administrador e data fim diferente de zero
* @throws Exception
*/
public Collection<EmpregadoDTO> consultarNomeNaoEmpregado(String nomeEmpregado) throws PersistenceException {
if (nomeEmpregado == null) {
nomeEmpregado = "";
}
String texto = Normalizer.normalize(nomeEmpregado, Normalizer.Form.NFD);
texto = texto.replaceAll("[^\\p{ASCII}]", "");
texto = texto.replaceAll("�������������������������Ǵ`^''-+=", "aaaaeeiooouucAAAAEEIOOOUUC ");
texto = "%" + texto.toUpperCase() + "%";
final Object[] objs = new Object[] {texto};
final StringBuilder sql = new StringBuilder("select ");
if (CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.SQLSERVER)) {
sql.append("TOP 10 ");
}
sql.append("idempregado, nome, tipo from empregados ");
sql.append("where ");
if (CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.ORACLE)) {
sql.append("ROWNUM <= 10 and ");
}
sql.append("upper(nome) like upper(?) and nome <> 'Administrador' and datafim is null and tipo = 'N'");
sql.append(" order by nome");
if (CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.POSTGRESQL)
|| CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.MYSQL)) {
sql.append(" LIMIT 10");
}
final List<?> list = this.execSQL(sql.toString(), objs);
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idEmpregado");
listRetorno.add("nome");
listRetorno.add("tipo");
return engine.listConvertion(this.getBean(), list, listRetorno);
}
public EmpregadoDTO restoreByCPF(final String cpf) throws PersistenceException {
final List<Condition> condicao = new ArrayList<>();
final List<Order> ordenacao = new ArrayList<>();
condicao.add(new Condition("cpf", "=", cpf));
ordenacao.add(new Order("nome"));
final List<EmpregadoDTO> col = (List<EmpregadoDTO>) super.findByCondition(condicao, ordenacao);
if (col == null || col.size() == 0) {
return null;
}
return col.get(0);
}
/**
* Restaura Empregado pelo ID do Usu�rio.
*
* @param idUsuario
* - Identificador do Usu�rio.
* @return EmpregadoDTO - Empregado do Usu�rio.
* @author valdoilo.damasceno
* @since 16.06.2014
*/
public EmpregadoDTO restoreByIdUsuario(final Integer idUsuario) {
if (idUsuario != null) {
final StringBuilder sql = new StringBuilder();
final List<Integer> parametros = new ArrayList<>();
sql.append(" select " + this.getNamesFieldsStr("em"));
sql.append(" from empregados em ");
sql.append(" inner join usuario us ");
sql.append(" on em.idempregado = us.idempregado ");
sql.append(" where us.idusuario = ? ");
parametros.add(idUsuario);
try {
final List<?> dados = this.execSQL(sql.toString(), parametros.toArray());
final List<EmpregadoDTO> resultado = this.listConvertion(EmpregadoDTO.class, dados, this.getListNamesFieldClass());
if (resultado != null && !resultado.isEmpty()) {
return resultado.get(0);
}
} catch (final Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
/**
* Restaura EmpregadosDTO pelo idGrupo.
*
* @param idGrupo
* - Identificador do Grupo.
* @return Collection<EmpregadoDTO> - Lista de usu�rios do Grupo informado.
* @author valdoilo.damasceno
* @since 16.06.2014
*/
public Collection<EmpregadoDTO> restoreByIdGrupo(final Integer idGrupo) {
final StringBuilder sql = new StringBuilder();
final List<Integer> parametros = new ArrayList<>();
sql.append(" select " + this.getNamesFieldsStr("em"));
sql.append(" from empregados em ");
sql.append(" inner join gruposempregados ge on em.idempregado = ge.idempregado ");
sql.append(" where ge.idgrupo = ? and em.datafim is null");
parametros.add(idGrupo);
try {
final List<?> dados = this.execSQL(sql.toString(), parametros.toArray());
return this.listConvertion(EmpregadoDTO.class, dados, this.getListNamesFieldClass());
} catch (final Exception e) {
e.printStackTrace();
return null;
}
}
private static final String PATTERN_LIKE_NAME = "%%%s%%";
public List<EmpregadoDTO> findByNomeEmpregadoAndGrupo(final String nomeEmpregado, final Integer idGrupo) throws PersistenceException {
final DataBase dataBase = DataBase.fromStringId(CITCorporeUtil.SGBD_PRINCIPAL);
final StringBuilder sql = new StringBuilder("SELECT ");
if (dataBase.equals(DataBase.MSSQLSERVER)) {
sql.append("TOP 20 ");
}
sql.append("emp.idempregado, emp.nome ");
sql.append("FROM ").append(this.getTableName()).append(" emp ");
sql.append(" LEFT JOIN gruposempregados gemp ");
sql.append(" ON gemp.idempregado = emp.idempregado ");
sql.append("WHERE gemp.idgrupo = ? ");
if (dataBase.equals(DataBase.ORACLE)) {
sql.append(" AND ROWNUM <= 20 ");
}
sql.append(" AND UPPER(emp.nome) LIKE UPPER(?) ");
sql.append(" AND emp.datafim IS NULL ");
sql.append("ORDER BY emp.nome");
if (dataBase.equals(DataBase.POSTGRESQL) || dataBase.equals(DataBase.MYSQL)) {
sql.append(" LIMIT 20");
}
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idEmpregado");
listRetorno.add("nome");
List<EmpregadoDTO> result = new ArrayList<>();
final List<?> list = this.execSQL(sql.toString(), new Object[] {idGrupo, String.format(PATTERN_LIKE_NAME, nomeEmpregado)});
if (list != null && !list.isEmpty()) {
result = engine.listConvertion(this.getBean(), list, listRetorno);
}
return result;
}
}