package br.com.centralit.citcorpore.negocio;
import java.util.Collection;
import br.com.centralit.bpm.negocio.ItemTrabalho;
import br.com.centralit.citcorpore.bean.DespesaViagemDTO;
import br.com.centralit.citcorpore.bean.IntegranteViagemDTO;
import br.com.centralit.citcorpore.bean.RequisicaoViagemDTO;
import br.com.centralit.citcorpore.bean.RoteiroViagemDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.TipoMovimFinanceiraViagemDTO;
import br.com.centralit.citcorpore.integracao.DespesaViagemDAO;
import br.com.centralit.citcorpore.integracao.IntegranteViagemDao;
import br.com.centralit.citcorpore.integracao.RequisicaoViagemDAO;
import br.com.centralit.citcorpore.integracao.RoteiroViagemDAO;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.integracao.CrudDAO;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.WebUtil;
public class CompraViagemServiceEjb extends ComplemInfSolicitacaoServicoServiceEjb implements CompraViagemService {
@Override
protected CrudDAO getDao() {
return null;
}
@Override
public IDto deserializaObjeto(final String serialize) throws Exception {
DespesaViagemDTO despesaViagemDTO = null;
if (serialize != null) {
despesaViagemDTO = (DespesaViagemDTO) WebUtil.deserializeObject(DespesaViagemDTO.class, serialize);
}
return despesaViagemDTO;
}
@Override
public void validaCreate(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {
}
@Override
public void validaDelete(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {
}
@Override
public void validaUpdate(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {
}
@Override
public IDto create(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {
return null;
}
@Override
public void update(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {
final RequisicaoViagemDAO requisicaoViagemDao = new RequisicaoViagemDAO();
TipoMovimFinanceiraViagemDTO tipoMovimFinanceiraViagemDTO = new TipoMovimFinanceiraViagemDTO();
final TipoMovimFinanceiraViagemService tipoMovimFinanceiraViagemService = (TipoMovimFinanceiraViagemService) ServiceLocator.getInstance().getService(
TipoMovimFinanceiraViagemService.class, null);
requisicaoViagemDao.setTransactionControler(tc);
if (!(solicitacaoServicoDto.getAlterarSituacao().equalsIgnoreCase("S") && solicitacaoServicoDto.getDescrSituacao().equalsIgnoreCase("Cancelada"))) {
final DespesaViagemDTO despesaViagemDTO = (DespesaViagemDTO) model;
final DespesaViagemDAO despesaViagemDAO = new DespesaViagemDAO();
RoteiroViagemDTO roteiroViagemDTO = new RoteiroViagemDTO();
final RoteiroViagemDAO roteiroViagemDAO = new RoteiroViagemDAO();
if (solicitacaoServicoDto.getIdSolicitante().intValue() == solicitacaoServicoDto.getUsuarioDto().getIdEmpregado().intValue()
&& !(despesaViagemDTO != null && despesaViagemDTO.getCancelarRequisicao() != null && despesaViagemDTO.getCancelarRequisicao().equalsIgnoreCase("S"))) {
throw new LogicException("Usu�rio sem permiss�o para Executar Compras!");
}
despesaViagemDAO.setTransactionControler(tc);
if (despesaViagemDTO != null && despesaViagemDTO.getCancelarRequisicao() != null && despesaViagemDTO.getCancelarRequisicao().equalsIgnoreCase("S")) {
RequisicaoViagemDTO requisicaoViagemDto = new RequisicaoViagemDTO();
requisicaoViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDao.restore(requisicaoViagemDto);
if (requisicaoViagemDto.getIdSolicitacaoServico() != null) {
requisicaoViagemDto.setCancelarRequisicao("S");
solicitacaoServicoDto.setSituacao(Enumerados.SituacaoSolicitacaoServico.Cancelada.name());
requisicaoViagemDao.updateNotNull(requisicaoViagemDto);
return;
}
}
if (solicitacaoServicoDto.getAcaoFluxo().equalsIgnoreCase("E")
&& !solicitacaoServicoDto.getSituacao().equalsIgnoreCase(Enumerados.SituacaoSolicitacaoServico.Cancelada.name())) {
if (despesaViagemDTO.getConfirma() == null || !despesaViagemDTO.getConfirma().equalsIgnoreCase("S")
&& !solicitacaoServicoDto.getSituacao().equalsIgnoreCase(Enumerados.SituacaoSolicitacaoServico.Cancelada.name())) {
throw new LogicException("Necess�ria a Confirma��o da Compra dos Itens para Avan�ar o fluxo");
}
}
final IntegranteViagemService integranteViagemService = (IntegranteViagemService) ServiceLocator.getInstance().getService(IntegranteViagemService.class, null);
final IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao();
final Collection<IntegranteViagemDTO> colIntegrantes = integranteViagemService.recuperaIntegrantesViagemByIdSolicitacaoEstado(
solicitacaoServicoDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_COMPRAS);
Collection<DespesaViagemDTO> colItens;
if (despesaViagemDTO.getConfirma() != null && despesaViagemDTO.getConfirma().equalsIgnoreCase("S")) {
if (colIntegrantes != null) {
for (final IntegranteViagemDTO integrante : colIntegrantes) {
roteiroViagemDTO = roteiroViagemDAO.findByIdIntegrante(integrante.getIdIntegranteViagem());
colItens = despesaViagemDAO.listaItensCompra(solicitacaoServicoDto.getIdSolicitacaoServico(), roteiroViagemDTO.getIdRoteiroViagem());
integrante.setEstado(RequisicaoViagemDTO.AGUARDANDO_ADIANTAMENTO);
integranteViagemDao.updateNotNull(integrante);
if (colItens != null) {
for (final DespesaViagemDTO itemDespesaDto : colItens) {
tipoMovimFinanceiraViagemDTO.setIdtipoMovimFinanceiraViagem(itemDespesaDto.getIdTipo());
tipoMovimFinanceiraViagemDTO = (TipoMovimFinanceiraViagemDTO) tipoMovimFinanceiraViagemService.restore(tipoMovimFinanceiraViagemDTO);
if (tipoMovimFinanceiraViagemDTO.getPermiteAdiantamento().equalsIgnoreCase("N")) {
itemDespesaDto.setSituacao("Comprado");
itemDespesaDto.setDataHoraCompra(UtilDatas.getDataHoraAtual());
itemDespesaDto.setIdResponsavelCompra(solicitacaoServicoDto.getUsuarioDto().getIdEmpregado());
despesaViagemDAO.update(itemDespesaDto);
}
}
}
}
}
RequisicaoViagemDTO requisicaoViagemDto = new RequisicaoViagemDTO();
requisicaoViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDao.restore(requisicaoViagemDto);
if (requisicaoViagemDto != null) {
requisicaoViagemDto.setEstado(RequisicaoViagemDTO.AGUARDANDO_ADIANTAMENTO);
requisicaoViagemDao.updateNotNull(requisicaoViagemDto);
}
}
} else {
RequisicaoViagemDTO requisicaoViagemDto = new RequisicaoViagemDTO();
requisicaoViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDao.restore(requisicaoViagemDto);
if (requisicaoViagemDto != null) {
requisicaoViagemDto.setEstado(Enumerados.SituacaoSolicitacaoServico.Cancelada.name());
requisicaoViagemDao.update(requisicaoViagemDto);
}
}
}
@Override
public void delete(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {
}
@Override
public String getInformacoesComplementaresFmtTexto(final SolicitacaoServicoDTO solicitacaoDto, final ItemTrabalho itemTrabalho) throws Exception {
return solicitacaoDto.getDescricaoSemFormatacao();
}
}