package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import br.com.centralit.citcorpore.bean.GrupoAssinaturaDTO;
import br.com.centralit.citcorpore.bean.ItemGrupoAssinaturaDTO;
import br.com.centralit.citcorpore.integracao.GrupoAssinaturaDAO;
import br.com.centralit.citcorpore.integracao.ItemGrupoAssinaturaDAO;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.ServiceException;
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;
import br.com.citframework.util.UtilI18N;
/**
* @author euler.ramos
*
*/
public class GrupoAssinaturaServiceEjb extends CrudServiceImpl implements GrupoAssinaturaService {
private GrupoAssinaturaDAO dao;
@Override
protected GrupoAssinaturaDAO getDao() {
if (dao == null) {
dao = new GrupoAssinaturaDAO();
}
return dao;
}
@Override
public IDto create(final IDto model, final ArrayList<ItemGrupoAssinaturaDTO> listaAssinaturas) throws ServiceException, br.com.citframework.excecao.LogicException {
GrupoAssinaturaDTO grupoAssinaturaDTO = (GrupoAssinaturaDTO) model;
final GrupoAssinaturaDAO grupoAssinaturaDAO = this.getDao();
final ItemGrupoAssinaturaDAO itemGrupoAssinaturaDAO = new ItemGrupoAssinaturaDAO();
final TransactionControler tc = new TransactionControlerImpl(grupoAssinaturaDAO.getAliasDB());
try {
grupoAssinaturaDAO.setTransactionControler(tc);
itemGrupoAssinaturaDAO.setTransactionControler(tc);
tc.start();
grupoAssinaturaDTO = (GrupoAssinaturaDTO) grupoAssinaturaDAO.create(grupoAssinaturaDTO);
this.mantemAssinaturasGrupo(grupoAssinaturaDTO, listaAssinaturas, itemGrupoAssinaturaDAO);
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
}
return grupoAssinaturaDTO;
}
@Override
public void update(final IDto model, final ArrayList<ItemGrupoAssinaturaDTO> listaAssinaturas) throws ServiceException, br.com.citframework.excecao.LogicException {
final GrupoAssinaturaDTO grupoAssinaturaDTO = (GrupoAssinaturaDTO) model;
final GrupoAssinaturaDAO grupoAssinaturaDAO = this.getDao();
final ItemGrupoAssinaturaDAO itemGrupoAssinaturaDAO = new ItemGrupoAssinaturaDAO();
final TransactionControler tc = new TransactionControlerImpl(grupoAssinaturaDAO.getAliasDB());
try {
grupoAssinaturaDAO.setTransactionControler(tc);
itemGrupoAssinaturaDAO.setTransactionControler(tc);
tc.start();
grupoAssinaturaDAO.update(grupoAssinaturaDTO);
this.mantemAssinaturasGrupo(grupoAssinaturaDTO, listaAssinaturas, itemGrupoAssinaturaDAO);
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
}
}
@SuppressWarnings("unchecked")
private void mantemAssinaturasGrupo(final GrupoAssinaturaDTO grupoAssinaturaDTO, final ArrayList<ItemGrupoAssinaturaDTO> listaAssinaturas,
final ItemGrupoAssinaturaDAO itemGrupoAssinaturaDAO) throws Exception {
// Cadastrar as assinaturas lan�adas pelo usu�rio e apagar as
// assinaturas que n�o mais est�o presentes no lan�amento.
final ArrayList<ItemGrupoAssinaturaDTO> listaBanco = (ArrayList<ItemGrupoAssinaturaDTO>) itemGrupoAssinaturaDAO.findByIdGrupoAssinatura(grupoAssinaturaDTO
.getIdGrupoAssinatura());
ItemGrupoAssinaturaDTO itemGrupoAssinaturaDTO;
ItemGrupoAssinaturaDTO itemGrupoAssinaturaBanco;
boolean encontrou;
// Cadastrando as assinaturas lan�adas pelo usu�rio
if (listaAssinaturas != null && listaAssinaturas.size() > 0) {
for (int i = 0; i < listaAssinaturas.size(); i++) {
itemGrupoAssinaturaDTO = listaAssinaturas.get(i);
encontrou = false;
if (listaBanco != null && listaBanco.size() > 0) {
int j = 0;
do {
itemGrupoAssinaturaBanco = listaBanco.get(j);
// Verificando se j� foi lan�ada esta assinatura
if (itemGrupoAssinaturaDTO.getIdAssinatura().equals(itemGrupoAssinaturaBanco.getIdAssinatura())
&& itemGrupoAssinaturaDTO.getOrdem().equals(itemGrupoAssinaturaBanco.getOrdem())) {
encontrou = true;
// Removendo para n�o ser setado datafim, que ser�
// aplicada nos que restarem
listaBanco.remove(itemGrupoAssinaturaBanco);
} else {
j += 1;
}
} while (!encontrou && j < listaBanco.size());
}
if (!encontrou) {
itemGrupoAssinaturaDTO.setDataInicio(UtilDatas.getDataAtual());
itemGrupoAssinaturaDTO.setIdGrupoAssinatura(grupoAssinaturaDTO.getIdGrupoAssinatura());
itemGrupoAssinaturaDAO.create(itemGrupoAssinaturaDTO);
}
}
}
// Apagando as Assinaturas que n�o mais est�o presentes no lan�amento,
// setando data fim para os registros que foram exclu�dos pelo usu�rio
if (listaBanco != null && listaBanco.size() > 0) {
for (final ItemGrupoAssinaturaDTO itemGADTO : listaBanco) {
itemGADTO.setDataFim(UtilDatas.getDataAtual());
itemGrupoAssinaturaDAO.update(itemGADTO);
}
}
}
@Override
public boolean violaIndiceUnico(final GrupoAssinaturaDTO grupoAssinaturaDTO) throws ServiceException {
return this.getDao().violaIndiceUnico(grupoAssinaturaDTO);
}
@Override
public boolean naoEstaSendoUtilizado(final Integer idGrupoAssinatura) throws ServiceException {
return this.getDao().naoEstaSendoUtilizado(idGrupoAssinatura);
}
@Override
public Collection geraListaCamposAssinatura(final Integer idGrupoAssinatura, final HttpServletRequest request) throws Exception {
final String ATIVAR_ASSINATURA_PERSONALIZADA_REL_OS = ParametroUtil.getValorParametroCitSmartHashMap(
br.com.centralit.citcorpore.util.Enumerados.ParametroSistema.ATIVAR_ASSINATURA_PERSONALIZADA_REL_OS, "N");
if (ATIVAR_ASSINATURA_PERSONALIZADA_REL_OS != null && ATIVAR_ASSINATURA_PERSONALIZADA_REL_OS.equalsIgnoreCase("S") && idGrupoAssinatura != null && idGrupoAssinatura > 0) {
final ItemGrupoAssinaturaService itemGrupoAssinaturaService = (ItemGrupoAssinaturaService) ServiceLocator.getInstance().getService(ItemGrupoAssinaturaService.class,
null);
return itemGrupoAssinaturaService.findByIdGrupoAssinatura(idGrupoAssinatura);
} else {
final ArrayList<ItemGrupoAssinaturaDTO> listaAssinaturas = new ArrayList<ItemGrupoAssinaturaDTO>();
ItemGrupoAssinaturaDTO itemGrupoAssinaturaDTO = new ItemGrupoAssinaturaDTO();
itemGrupoAssinaturaDTO.setFase(UtilI18N.internacionaliza(request, "citcorpore.comum.solicitacao"));
itemGrupoAssinaturaDTO.setPapel(UtilI18N.internacionaliza(request, "citcorpore.comum.solicitanteServicos"));
itemGrupoAssinaturaDTO.setOrdem(1);
listaAssinaturas.add(itemGrupoAssinaturaDTO);
itemGrupoAssinaturaDTO = new ItemGrupoAssinaturaDTO();
itemGrupoAssinaturaDTO.setFase(UtilI18N.internacionaliza(request, "citcorpore.comum.autorizacao"));
itemGrupoAssinaturaDTO.setPapel(UtilI18N.internacionaliza(request, "citcorpore.comum.gestorOperacionalContrato"));
itemGrupoAssinaturaDTO.setOrdem(2);
listaAssinaturas.add(itemGrupoAssinaturaDTO);
itemGrupoAssinaturaDTO = new ItemGrupoAssinaturaDTO();
itemGrupoAssinaturaDTO.setFase(UtilI18N.internacionaliza(request, "citcorpore.comum.aprovacao"));
itemGrupoAssinaturaDTO.setPapel(UtilI18N.internacionaliza(request, "citcorpore.comum.gestorContrato"));
itemGrupoAssinaturaDTO.setOrdem(3);
listaAssinaturas.add(itemGrupoAssinaturaDTO);
itemGrupoAssinaturaDTO = new ItemGrupoAssinaturaDTO();
itemGrupoAssinaturaDTO.setFase(UtilI18N.internacionaliza(request, "citcorpore.comum.execucao"));
itemGrupoAssinaturaDTO.setPapel(UtilI18N.internacionaliza(request, "citcorpore.comum.prepostoContratada"));
itemGrupoAssinaturaDTO.setOrdem(4);
listaAssinaturas.add(itemGrupoAssinaturaDTO);
return listaAssinaturas;
}
}
}