package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import br.com.centralit.bpm.dto.PermissoesFluxoDTO;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citajax.html.HTMLForm;
import br.com.centralit.citcorpore.bean.ContratoDTO;
import br.com.centralit.citcorpore.bean.ContratosGruposDTO;
import br.com.centralit.citcorpore.bean.EventoGrupoDTO;
import br.com.centralit.citcorpore.bean.GrupoDTO;
import br.com.centralit.citcorpore.bean.GrupoEmailDTO;
import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO;
import br.com.centralit.citcorpore.bean.LimiteAlcadaDTO;
import br.com.centralit.citcorpore.bean.PerfilAcessoGrupoDTO;
import br.com.centralit.citcorpore.bean.ServicoContratoDTO;
import br.com.centralit.citcorpore.integracao.ContratoDao;
import br.com.centralit.citcorpore.integracao.ContratosGruposDAO;
import br.com.centralit.citcorpore.integracao.EventoGrupoDao;
import br.com.centralit.citcorpore.integracao.GrupoDao;
import br.com.centralit.citcorpore.integracao.GrupoEmailDao;
import br.com.centralit.citcorpore.integracao.GrupoEmpregadoDao;
import br.com.centralit.citcorpore.integracao.LimiteAlcadaDao;
import br.com.centralit.citcorpore.integracao.NotificacaoGrupoDao;
import br.com.centralit.citcorpore.integracao.PerfilAcessoGrupoDao;
import br.com.centralit.citcorpore.integracao.PermissoesFluxoDao;
import br.com.centralit.citcorpore.integracao.ServicoContratoDao;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.PersistenceException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.Condition;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.CrudServiceImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilDatas;
/**
* @author CentralIT
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public class GrupoServiceEjb extends CrudServiceImpl implements GrupoService {
private GrupoDTO grupoBean;
private GrupoDao dao;
@Override
protected GrupoDao getDao() {
if (dao == null) {
dao = new GrupoDao();
}
return dao;
}
@Override
public Collection findGruposAtivos() {
final List<Condition> condicoes = new ArrayList<Condition>();
condicoes.add(new Condition("dataFim", "IS", null));
try {
return this.getDao().findByCondition(condicoes, null);
} catch (final Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public IDto create(final IDto model, final HttpServletRequest request) throws ServiceException, LogicException {
GrupoDTO grupoDto = (GrupoDTO) model;
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
this.validaCreate(model);
final List<GrupoEmpregadoDTO> listaEmpregados = (List<GrupoEmpregadoDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(GrupoEmpregadoDTO.class,
"empregadosSerializados", request);
final List<GrupoEmailDTO> listaEmails = (List<GrupoEmailDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(GrupoEmailDTO.class,
"emailsSerializados", request);
final PerfilAcessoGrupoDao perfilAcessogrupoDao = new PerfilAcessoGrupoDao();
final GrupoEmpregadoDao grupoEmpregadoDao = new GrupoEmpregadoDao();
final GrupoEmailDao grupoEmailDao = new GrupoEmailDao();
final PermissoesFluxoDao permissoesFluxoDao = new PermissoesFluxoDao();
final ContratosGruposDAO contratosGruposDao = new ContratosGruposDAO();
this.getDao().setTransactionControler(tc);
perfilAcessogrupoDao.setTransactionControler(tc);
grupoEmpregadoDao.setTransactionControler(tc);
permissoesFluxoDao.setTransactionControler(tc);
contratosGruposDao.setTransactionControler(tc);
final PerfilAcessoGrupoDTO dto = new PerfilAcessoGrupoDTO();
tc.start();
grupoDto.setDataInicio(UtilDatas.getDataAtual());
grupoDto = (GrupoDTO) this.getDao().create(grupoDto);
dto.setIdGrupo(grupoDto.getIdGrupo());
dto.setIdPerfilAcessoGrupo(grupoDto.getIdPerfilAcessoGrupo());
dto.setDataInicio(grupoDto.getDataInicio());
perfilAcessogrupoDao.create(dto);
if (grupoDto.getPermissoesFluxos() != null) {
for (final PermissoesFluxoDTO permissoesFluxoAux : grupoDto.getPermissoesFluxos()) {
permissoesFluxoAux.setIdGrupo(grupoDto.getIdGrupo());
final PermissoesFluxoDTO permissoesFluxoAux2 = (PermissoesFluxoDTO) permissoesFluxoDao.restore(permissoesFluxoAux);
if (permissoesFluxoAux2 == null) {
permissoesFluxoDao.create(permissoesFluxoAux);
} else {
permissoesFluxoDao.update(permissoesFluxoAux);
}
}
}
if (listaEmpregados != null && !listaEmpregados.isEmpty()) {
for (final GrupoEmpregadoDTO grupoEmpregadoDto : listaEmpregados) {
grupoEmpregadoDto.setIdGrupo(grupoDto.getIdGrupo());
grupoEmpregadoDto.setIdEmpregado(grupoEmpregadoDto.getIdEmpregado());
grupoEmpregadoDto.setEnviaEmail(grupoEmpregadoDto.getEnviaEmail());
final GrupoEmpregadoDTO grupoEmpregadoAux = (GrupoEmpregadoDTO) grupoEmpregadoDao.restore(grupoEmpregadoDto);
if (grupoEmpregadoAux == null) {
grupoEmpregadoDao.create(grupoEmpregadoDto);
}
}
}
if (listaEmails != null && !listaEmails.isEmpty()) {
for (final GrupoEmailDTO grupoEmailDto : listaEmails) {
grupoEmailDto.setIdGrupo(grupoDto.getIdGrupo());
final GrupoEmailDTO grupoEmailAux = (GrupoEmailDTO) grupoEmailDao.restore(grupoEmailDto);
if (grupoEmailAux == null) {
grupoEmailDao.create(grupoEmailDto);
}
}
}
if (grupoDto.getIdContrato() != null) {
for (int i = 0; i < grupoDto.getIdContrato().length; i++) {
final ContratosGruposDTO contratosGruposDTO = new ContratosGruposDTO();
contratosGruposDTO.setIdGrupo(grupoDto.getIdGrupo());
contratosGruposDTO.setIdContrato(grupoDto.getIdContrato()[i]);
if (contratosGruposDTO.getIdContrato() != null) {
contratosGruposDao.create(contratosGruposDTO);
}
}
}
tc.commit();
} catch (final Exception e) {
e.printStackTrace();
this.rollbackTransaction(tc, e);
} finally {
try {
tc.close();
} catch (final PersistenceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return grupoDto;
}
@Override
public void update(final IDto model, final HttpServletRequest request) throws ServiceException, LogicException {
final GrupoDTO grupoDto = (GrupoDTO) model;
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
this.validaUpdate(model);
final List<GrupoEmailDTO> listaEmails = (ArrayList<GrupoEmailDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(GrupoEmailDTO.class,
"emailsSerializados", request);
final PerfilAcessoGrupoDao perfilAcessogrupoDao = new PerfilAcessoGrupoDao();
final GrupoEmpregadoDao grupoEmpregadoDao = new GrupoEmpregadoDao();
final PermissoesFluxoDao permissoesFluxoDao = new PermissoesFluxoDao();
final ContratosGruposDAO contratosGruposDao = new ContratosGruposDAO();
final GrupoEmailDao grupoEmailDao = new GrupoEmailDao();
this.getDao().setTransactionControler(tc);
perfilAcessogrupoDao.setTransactionControler(tc);
grupoEmpregadoDao.setTransactionControler(tc);
grupoEmailDao.setTransactionControler(tc);
permissoesFluxoDao.setTransactionControler(tc);
contratosGruposDao.setTransactionControler(tc);
final PerfilAcessoGrupoDTO dto = new PerfilAcessoGrupoDTO();
tc.start();
this.getDao().update(grupoDto);
final GrupoDTO grupo = (GrupoDTO) this.getDao().restore(grupoDto);
dto.setIdPerfilAcessoGrupo(grupoDto.getIdPerfilAcessoGrupo());
dto.setIdGrupo(grupoDto.getIdGrupo());
dto.setDataInicio(grupoDto.getDataInicio());
perfilAcessogrupoDao.delete(dto);
perfilAcessogrupoDao.create(dto);
permissoesFluxoDao.deleteByIdGrupo(grupoDto.getIdGrupo());
if (grupoDto.getPermissoesFluxos() != null) {
for (final PermissoesFluxoDTO permissoesFluxoAux : grupoDto.getPermissoesFluxos()) {
permissoesFluxoAux.setIdGrupo(grupoDto.getIdGrupo());
permissoesFluxoDao.create(permissoesFluxoAux);
}
}
if (listaEmails != null && !listaEmails.isEmpty()) {
grupoEmailDao.deleteByIdGrupo(grupoDto.getIdGrupo());
for (final GrupoEmailDTO grupoEmailDto : listaEmails) {
grupoEmailDto.setIdGrupo(grupo.getIdGrupo());
grupoEmailDao.create(grupoEmailDto);
}
}
contratosGruposDao.deleteByIdGrupo(grupoDto.getIdGrupo());
if (grupoDto.getIdContrato() != null) {
for (int i = 0; i < grupoDto.getIdContrato().length; i++) {
final ContratosGruposDTO contratosGruposDTO = new ContratosGruposDTO();
contratosGruposDTO.setIdGrupo(grupoDto.getIdGrupo());
contratosGruposDTO.setIdContrato(grupoDto.getIdContrato()[i]);
if (contratosGruposDTO.getIdContrato() != null) {
contratosGruposDao.create(contratosGruposDTO);
}
}
}
tc.commit();
} catch (final Exception e) {
e.printStackTrace();
this.rollbackTransaction(tc, e);
} finally {
try {
tc.close();
} catch (final PersistenceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void delete(final IDto model, final DocumentHTML document) throws ServiceException, LogicException {
final GrupoDTO grupoDto = (GrupoDTO) model;
if (!this.validaExclusaoGrupoNosParametros(grupoDto, document)) {
return;
}
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
Integer idGrupo = 0;
idGrupo = grupoDto.getIdGrupo();
final PerfilAcessoGrupoDao perfilAcessogrupoDao = new PerfilAcessoGrupoDao();
final PerfilAcessoGrupoDTO dto = new PerfilAcessoGrupoDTO();
final GrupoEmpregadoDao grupoEmpregadoDao = new GrupoEmpregadoDao();
final GrupoEmailDao grupoEmailDao = new GrupoEmailDao();
final PermissoesFluxoDao permissoesFluxoDao = new PermissoesFluxoDao();
final ContratoDao contratoDao = new ContratoDao();
final EventoGrupoDao eventoGrupoDao = new EventoGrupoDao();
final NotificacaoGrupoDao notificacaoGrupoDao = new NotificacaoGrupoDao();
final LimiteAlcadaDao limiteAlcadaDao = new LimiteAlcadaDao();
final ServicoContratoDao servicoContratoDao = new ServicoContratoDao();
this.getDao().setTransactionControler(tc);
perfilAcessogrupoDao.setTransactionControler(tc);
grupoEmpregadoDao.setTransactionControler(tc);
permissoesFluxoDao.setTransactionControler(tc);
contratoDao.setTransactionControler(tc);
eventoGrupoDao.setTransactionControler(tc);
notificacaoGrupoDao.setTransactionControler(tc);
limiteAlcadaDao.setTransactionControler(tc);
servicoContratoDao.setTransactionControler(tc);
tc.start();
final Collection<PermissoesFluxoDTO> permissaoGrupo = permissoesFluxoDao.findByIdGrupo(idGrupo);
final Collection<GrupoEmailDTO> grupoDeEmail = grupoEmailDao.findByIdGrupo(idGrupo);
final Collection<GrupoEmpregadoDTO> grupoDeEmpregados = grupoEmpregadoDao.findByIdGrupo(idGrupo);
final Collection<ContratoDTO> contratoDTO = contratoDao.findByIdGrupo(idGrupo);
final Collection<EventoGrupoDTO> eventoGrupoDTO = eventoGrupoDao.findByIdGrupo(idGrupo);
final Collection<LimiteAlcadaDTO> limiteAlcadaDTO = limiteAlcadaDao.findByIdGrupo(idGrupo);
final Collection<ServicoContratoDTO> colecaoServicosVinculados = servicoContratoDao.findAtivosByIdGrupo(grupoDto.getIdGrupo());
if (eventoGrupoDTO != null) {
document.alert(this.i18nMessage("grupo.deletar.eventoGrupo"));
return;
}
if (limiteAlcadaDTO != null) {
document.alert(this.i18nMessage("grupo.deletar.limiteAlcadaGrupo"));
return;
}
if (contratoDTO != null) {
document.alert(this.i18nMessage("grupo.deletar.grupoContrato"));
return;
}
if (grupoDeEmpregados != null) {
document.alert(this.i18nMessage("grupo.deletar.grupoEmpregado"));
return;
}
if (grupoDeEmail != null) {
document.alert(this.i18nMessage("grupo.deletar.grupoEmail"));
return;
}
if (colecaoServicosVinculados != null) {
document.alert(this.i18nMessage("grupo.deletar.servicosGrupo"));
return;
}
if (permissaoGrupo != null) {
for (final PermissoesFluxoDTO permissoesFluxo : permissaoGrupo) {
if (permissoesFluxo.getCriar().equalsIgnoreCase("S")) {
document.alert(this.i18nMessage("grupo.deletar.grupoFluxo"));
return;
}
if (permissoesFluxo.getDelegar().equalsIgnoreCase("S")) {
document.alert(this.i18nMessage("grupo.deletar.grupoFluxo"));
return;
}
if (permissoesFluxo.getExecutar().equalsIgnoreCase("S")) {
document.alert(this.i18nMessage("grupo.deletar.grupoFluxo"));
return;
}
if (permissoesFluxo.getSuspender().equalsIgnoreCase("S")) {
document.alert(this.i18nMessage("grupo.deletar.grupoFluxo"));
return;
}
permissoesFluxoDao.delete(permissoesFluxo);
}
grupoDto.setSigla(null);
grupoDto.setDataFim(UtilDatas.getDataAtual());
this.getDao().update(grupoDto);
dto.setIdGrupo(grupoDto.getIdGrupo());
perfilAcessogrupoDao.updateDataFim(dto);
notificacaoGrupoDao.deleteByIdGrupo(idGrupo);
document.alert(this.i18nMessage("MSG07"));
document.executeScript("deleteAllRows();");
final HTMLForm form = document.getForm("form");
form.clear();
document.executeScript("limpar_LOOKUP_GRUPO()");
}
tc.commit();
} catch (final Exception e) {
e.printStackTrace();
this.rollbackTransaction(tc, e);
} finally {
try {
tc.close();
} catch (final PersistenceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* Retorna Bean de BaseItemConfiguracao.
*
* @return valor do atributo baseItemConfiguracaoBean.
* @author valdoilo.damasceno
*/
public GrupoDTO getGrupoDto() {
return grupoBean;
}
/**
* Retorna Service de AcessoMenuService.
*
* @return ValorService
* @throws ServiceException
* @throws Exception
* @author valdoilo.damasceno
*/
public PerfilAcessoGrupoService getPerfilAcessoGrupoService() throws ServiceException, Exception {
return (PerfilAcessoGrupoService) ServiceLocator.getInstance().getService(PerfilAcessoGrupoService.class, null);
}
@Override
protected void validaCreate(final Object arg0) throws Exception {
final GrupoDTO grupoDto = (GrupoDTO) arg0;
if (this.getDao().restoreBySigla(grupoDto.getSigla()) != null) {
throw new LogicException("Aten��o, J� existe um grupo com esta sigla digite uma diferente.");
}
}
@Override
protected void validaUpdate(final Object arg0) throws Exception {
final GrupoDTO grupoDto = (GrupoDTO) arg0;
if (this.getDao().restoreBySigla(grupoDto) != null) {
throw new LogicException("Aten��o, J� existe um grupo com esta sigla digite uma diferente.");
}
}
@Override
public Collection listaGrupoEmpregado() throws Exception {
try {
return this.getDao().listarGrupoEmpregado();
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public Collection listaGrupoUsuario() throws Exception {
try {
return this.getDao().listarGrupoUsuario();
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public Collection getGruposByPessoa(final Integer idEmpregado) throws LogicException, ServiceException {
try {
return this.getDao().getGruposByIdEmpregado(idEmpregado);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public Collection getGruposByEmpregado(final Integer idEmpregado) throws LogicException, ServiceException {
try {
return this.getDao().getGruposByIdEmpregadoAll(idEmpregado);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public Collection<GrupoDTO> listGruposServiceDesk() throws Exception {
return this.getDao().listGruposServiceDesk();
}
@Override
public Collection<GrupoDTO> listGruposServiceDeskByIdContrato(final Integer idContratoParm) throws Exception {
return this.getDao().listGruposServiceDeskByIdContrato(idContratoParm);
}
@Override
public boolean verificarSeGrupoExiste(final GrupoDTO grupo) throws PersistenceException {
return this.getDao().verificarSeGrupoExiste(grupo);
}
@Override
public Collection<GrupoDTO> listGrupoByIdContrato(final Integer idContrato) throws Exception {
return this.getDao().listGrupoByIdContrato(idContrato);
}
@Override
public Collection<GrupoDTO> listGrupoAtivosByIdContrato(final Integer idContrato) throws Exception {
return this.getDao().listGruposAtivosByIdContrato(idContrato);
}
@Override
public Collection getGruposByIdEmpregado(final Integer idEmpregado) throws Exception {
return this.getDao().getGruposByIdEmpregado(idEmpregado);
}
@Override
public Collection<String> listarEmailsPorGrupo(final Integer idGrupo) throws Exception {
return this.getDao().listarEmailsPorGrupo(idGrupo);
}
@Override
public GrupoDTO listGrupoById(final Integer idGrupo) throws Exception {
return this.getDao().listGrupoById(idGrupo);
}
@Override
public Collection listarGruposAtivos() throws Exception {
return this.getDao().listarGruposAtivos();
}
@Override
public Collection<GrupoDTO> listGruposComite() throws Exception {
return this.getDao().listGruposComite();
}
@Override
public Collection<GrupoDTO> listGruposNaoComite() throws Exception {
return this.getDao().listGruposNaoComite();
}
@Override
public Collection<GrupoDTO> listAllGrupos() throws Exception {
return this.getDao().listAllGrupos();
}
@Override
public Collection<String> listarPessoasEmailPorGrupo(final Integer idGrupo) throws Exception {
return this.getDao().listarPessoasEmailPorGrupo(idGrupo);
}
@Override
public Collection<GrupoDTO> listaGruposAtivos() throws Exception {
return this.getDao().listaGruposAtivos();
}
@Override
public Collection<GrupoDTO> listaGrupoEmpregado(final Integer idEmpregado) throws Exception {
return this.getDao().listaGrupoEmpregado(idEmpregado);
}
public Boolean validaExclusaoGrupoNosParametros(final GrupoDTO grupoDto, final DocumentHTML document) {
final Enumerados.ParametroSistema[] parametrosArray = Enumerados.ParametroSistema.values();
Integer idGrupo = 0;
String nomeGrupo = "";
// tratar para o parametro de id 45 - ldap, os ids podem ser passados com ;
final String ldapStr = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_LDAP, "0");
final String[] ldapArray = ldapStr.split(";");
for (final String element : ldapArray) {
if (grupoDto.getIdGrupo().intValue() == Integer.parseInt(element)) {
document.alert(this.i18nMessage("grupo.deletar.parametro") + " 45 " + this.i18nMessage("grupo.deletar.parametroContinuacao"));
return false;
}
}
// tratar para todos os parametros do Enumerados
for (final ParametroSistema element : parametrosArray) {
final String nomeParametro = element.name();
if (nomeParametro.contains("ID_GRUPO_PADRAO")) {
try {
if (ParametroUtil.getValor(element) != null) {
idGrupo = Integer.parseInt(ParametroUtil.getValor(element));
}
if (idGrupo.intValue() == grupoDto.getIdGrupo().intValue()) {
document.alert(this.i18nMessage("grupo.deletar.parametro") + " " + element.id() + " " + this.i18nMessage("grupo.deletar.parametroContinuacao"));
return false;
}
} catch (final Exception e) {
System.out.println("Parametro do sistema de ID " + element.id() + " null ou fora do padr�o num�rico");
}
} else if (nomeParametro.contains("NOME_GRUPO_PADRAO")) {
try {
if (ParametroUtil.getValor(element) != null) {
nomeGrupo = ParametroUtil.getValor(element);
}
if (nomeGrupo.equalsIgnoreCase(grupoDto.getNome())) {
document.alert(this.i18nMessage("grupo.deletar.parametro") + " " + element.id() + " " + this.i18nMessage("grupo.deletar.parametroContinuacao"));
return false;
}
} catch (final Exception e) {
System.out.println("Parametro do sistema de ID " + element.id() + " null");
}
}
}
return true;
}
@Override
public Collection<GrupoDTO> listGruposPorUsuario(final int idUsuario) {
Collection<GrupoDTO> list = new ArrayList();
try {
list = this.getDao().listGruposPorUsuario(idUsuario);
} catch (final Exception e) {
e.printStackTrace();
}
return list;
}
}