package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citcorpore.bean.AlcadaCentroResultadoDTO;
import br.com.centralit.citcorpore.bean.AlcadaDTO;
import br.com.centralit.citcorpore.bean.CentroResultadoDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.GrupoDTO;
import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO;
import br.com.centralit.citcorpore.integracao.AlcadaDao;
import br.com.centralit.citcorpore.integracao.CentroResultadoDao;
import br.com.centralit.citcorpore.integracao.EmpregadoDao;
import br.com.centralit.citcorpore.integracao.GrupoEmpregadoDao;
import br.com.centralit.citcorpore.integracao.LimiteAlcadaDao;
import br.com.centralit.citcorpore.util.Enumerados.TipoAlcada;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.service.CrudServiceImpl;
public class AlcadaServiceEjb extends CrudServiceImpl implements AlcadaService {
private AlcadaDao dao;
@Override
protected AlcadaDao getDao() {
if (dao == null) {
dao = new AlcadaDao();
}
return dao;
}
public AlcadaDTO determinaAlcada(final IDto objetoNegocioDto, final CentroResultadoDTO centroCustoDto) throws Exception {
return null;
}
public void determinaResponsaveis(final AlcadaDTO alcadaDto, final IDto objetoNegocioDto, final EmpregadoDTO solicitante, final GrupoDTO grupoDto,
final String abrangenciaCentroCusto, final CentroResultadoDTO centroCustoDto) throws Exception {
final Collection<GrupoEmpregadoDTO> colGrupoEmpregado = new GrupoEmpregadoDao().findByIdGrupo(grupoDto.getIdGrupo());
if (colGrupoEmpregado == null || colGrupoEmpregado.isEmpty()) {
return;
}
Collection<EmpregadoDTO> colResponsaveis = alcadaDto.getColResponsaveis();
if (colResponsaveis == null) {
colResponsaveis = new ArrayList<>();
alcadaDto.setColResponsaveis(colResponsaveis);
}
final HashMap<String, EmpregadoDTO> mapResponsaveis = new HashMap<>();
for (final EmpregadoDTO empregadoDto : colResponsaveis) {
mapResponsaveis.put("" + empregadoDto.getIdEmpregado(), empregadoDto);
}
for (final GrupoEmpregadoDTO grupoEmpregadoDto : colGrupoEmpregado) {
if (solicitante != null && grupoEmpregadoDto.getIdEmpregado().intValue() == solicitante.getIdEmpregado().intValue()) {
continue;
}
if (mapResponsaveis.get("" + grupoEmpregadoDto.getIdEmpregado()) != null) {
continue;
}
if (abrangenciaCentroCusto.equalsIgnoreCase("R")) {
if (centroCustoDto.getColAlcadas() != null) {
for (final AlcadaCentroResultadoDTO alcadaCentroResultadoDto : centroCustoDto.getColAlcadas()) {
if (alcadaCentroResultadoDto.getIdEmpregado() != null
&& alcadaCentroResultadoDto.getIdEmpregado().intValue() == grupoEmpregadoDto.getIdEmpregado().intValue()) {
final EmpregadoDTO empregadoDto = this.recuperaEmpregado(grupoEmpregadoDto.getIdEmpregado());
if (empregadoDto != null) {
mapResponsaveis.put("" + empregadoDto.getIdEmpregado(), empregadoDto);
colResponsaveis.add(empregadoDto);
}
}
}
}
} else if (abrangenciaCentroCusto.equalsIgnoreCase("T")) {
final EmpregadoDTO empregadoDto = this.recuperaEmpregado(grupoEmpregadoDto.getIdEmpregado());
if (empregadoDto != null) {
mapResponsaveis.put("" + empregadoDto.getIdEmpregado(), empregadoDto);
colResponsaveis.add(empregadoDto);
}
}
}
if (colResponsaveis.size() == 0 && centroCustoDto.getIdCentroResultadoPai() != null) {
CentroResultadoDTO ccustoPaiDto = new CentroResultadoDTO();
ccustoPaiDto.setIdCentroResultado(centroCustoDto.getIdCentroResultadoPai());
ccustoPaiDto = (CentroResultadoDTO) new CentroResultadoDao().restore(ccustoPaiDto);
if (ccustoPaiDto != null) {
this.determinaResponsaveis(alcadaDto, objetoNegocioDto, solicitante, grupoDto, abrangenciaCentroCusto, ccustoPaiDto);
}
}
}
private EmpregadoDTO recuperaEmpregado(final Integer idEmpregado) throws Exception {
final EmpregadoDTO empregadoDto = new EmpregadoDTO();
empregadoDto.setIdEmpregado(idEmpregado);
return (EmpregadoDTO) new EmpregadoDao().restore(empregadoDto);
}
@Override
public void deletarAlcada(final IDto model, final DocumentHTML document) throws ServiceException, Exception {
final AlcadaDTO alcadaDto = (AlcadaDTO) model;
final LimiteAlcadaDao limiteAlcadaDao = new LimiteAlcadaDao();
try {
this.validaUpdate(model);
if (limiteAlcadaDao.verificarSeAlcadaPossuiLimite(alcadaDto.getIdAlcada())) {
document.alert(this.i18nMessage("citcorpore.comum.registroNaoPodeSerExcluido"));
return;
} else {
alcadaDto.setSituacao("I");
this.getDao().update(model);
document.alert(this.i18nMessage("MSG07"));
}
} catch (final Exception e) {
e.printStackTrace();
}
}
@Override
public boolean existeIgual(final AlcadaDTO alcada) throws Exception {
boolean result = this.getDao().existeIgual(alcada);
if (!result && alcada.getIdAlcada() == null && alcada.getTipoAlcada() != null) {
result = this.getDao().findByTipo(TipoAlcada.valueOf(alcada.getTipoAlcada())) != null;
}
return result;
}
}