package br.com.centralit.citcorpore.negocio;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.AdiantamentoViagemDTO;
import br.com.centralit.citcorpore.bean.IntegranteViagemDTO;
import br.com.centralit.citcorpore.bean.ItemPrestacaoContasViagemDTO;
import br.com.centralit.citcorpore.bean.PrestacaoContasViagemDTO;
import br.com.centralit.citcorpore.bean.RequisicaoViagemDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.IntegranteViagemDao;
import br.com.centralit.citcorpore.integracao.ItemPrestacaoContasViagemDao;
import br.com.centralit.citcorpore.integracao.PrestacaoContasViagemDao;
import br.com.centralit.citcorpore.integracao.RequisicaoViagemDAO;
import br.com.centralit.citcorpore.integracao.SolicitacaoServicoDao;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilI18N;
import br.com.citframework.util.WebUtil;
/**
* @author ronnie.lopes
*
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public class PrestacaoContasViagemServiceEjb extends ComplemInfSolicitacaoServicoServiceEjb implements PrestacaoContasViagemService {
private PrestacaoContasViagemDao dao;
@Override
protected PrestacaoContasViagemDao getDao() {
if (dao == null) {
dao = new PrestacaoContasViagemDao();
}
return dao;
}
public String i18n_Message(final UsuarioDTO usuario, final String key) {
if (usuario != null) {
if (UtilI18N.internacionaliza(usuario.getLocale(), key) != null) {
return UtilI18N.internacionaliza(usuario.getLocale(), key);
}
return key;
}
return key;
}
public Collection list(final List ordenacao) throws LogicException, ServiceException {
return null;
}
public Collection list(final String ordenacao) throws LogicException, ServiceException {
return null;
}
@Override
public IDto create(final IDto model) throws ServiceException, LogicException {
return null;
}
@Override
public Collection<IntegranteViagemDTO> restoreByIntegranteSolicitacao(final IntegranteViagemDTO integrante) throws Exception {
final IntegranteViagemDao dao = new IntegranteViagemDao();
return dao.restoreByIntegranteSolicitacao(integrante);
}
@Override
public IDto deserializaObjeto(final String serialize) throws Exception {
PrestacaoContasViagemDTO prestacaoContasViagemDto = null;
if (serialize != null) {
prestacaoContasViagemDto = (PrestacaoContasViagemDTO) WebUtil.deserializeObject(PrestacaoContasViagemDTO.class, serialize);
if (prestacaoContasViagemDto != null && prestacaoContasViagemDto.getItensPrestacaoContasViagemSerialize() != null) {
prestacaoContasViagemDto.setListaItemPrestacaoContasViagemDTO(WebUtil.deserializeCollectionFromString(ItemPrestacaoContasViagemDTO.class,
prestacaoContasViagemDto.getItensPrestacaoContasViagemSerialize()));
}
if (prestacaoContasViagemDto.getIntegranteSerialize() != null) {
prestacaoContasViagemDto.setIntegranteViagemDto((IntegranteViagemDTO) WebUtil.deserializeObject(IntegranteViagemDTO.class,
prestacaoContasViagemDto.getIntegranteSerialize()));
}
}
return prestacaoContasViagemDto;
}
@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 {
PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) model;
final RequisicaoViagemDAO reqViagemDao = new RequisicaoViagemDAO();
RequisicaoViagemDTO reqViagemDto = new RequisicaoViagemDTO();
final PrestacaoContasViagemDao prestacaoContasViagemDao = this.getDao();
final ItemPrestacaoContasViagemDao itemPrestacaoContasViagemDao = new ItemPrestacaoContasViagemDao();
final SolicitacaoServicoDao solicitacaoServicoDao = new SolicitacaoServicoDao();
final IntegranteViagemDao viagemDao = new IntegranteViagemDao();
final IntegranteViagemDTO integranteViagem = new IntegranteViagemDTO();
try {
reqViagemDao.setTransactionControler(tc);
prestacaoContasViagemDao.setTransactionControler(tc);
itemPrestacaoContasViagemDao.setTransactionControler(tc);
solicitacaoServicoDao.setTransactionControler(tc);
viagemDao.setTransactionControler(tc);
if (prestacaoContasViagemDto.getRemarcacao() == null || prestacaoContasViagemDto.getRemarcacao().equalsIgnoreCase("N")
|| prestacaoContasViagemDto.getRemarcacao().equalsIgnoreCase("")) {
prestacaoContasViagemDto.setRemarcacao("N");
} else {
prestacaoContasViagemDto.setRemarcacao("S");
}
prestacaoContasViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
integranteViagem.setRemarcacao(prestacaoContasViagemDto.getRemarcacao());
integranteViagem.setIdRespPrestacaoContas(prestacaoContasViagemDto.getIdRespPrestacaoContas());
if (prestacaoContasViagemDto.getIdEmpregado() != null && !prestacaoContasViagemDto.getIdEmpregado().equals("")) {
integranteViagem.setIdEmpregado(prestacaoContasViagemDto.getIdEmpregado());
} else {
integranteViagem.setIdEmpregado(prestacaoContasViagemDto.getIntegranteViagemDto().getIdEmpregado());
}
integranteViagem.setIdSolicitacaoServico(prestacaoContasViagemDto.getIdSolicitacaoServico());
prestacaoContasViagemDto.setDataHora(UtilDatas.getDataHoraAtual());
prestacaoContasViagemDto.setIdEmpregado(prestacaoContasViagemDto.getIntegranteViagemDto().getIdEmpregado());
prestacaoContasViagemDto.setIdResponsavel(prestacaoContasViagemDto.getIntegranteViagemDto().getIdRespPrestacaoContas());
reqViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
reqViagemDto = (RequisicaoViagemDTO) reqViagemDao.restore(reqViagemDto);
prestacaoContasViagemDto.setDataHora(UtilDatas.getDataHoraAtual());
viagemDao.updateBySolicitacaoEmpregado(integranteViagem);
prestacaoContasViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
prestacaoContasViagemDto.setIntegranteFuncionario(prestacaoContasViagemDto.getIntegranteViagemDto().getIntegranteFuncionario());
prestacaoContasViagemDto.setNomeNaoFuncionario(prestacaoContasViagemDto.getIntegranteViagemDto().getNomeNaoFuncionario());
if (solicitacaoServicoDto.getAcaoFluxo().equalsIgnoreCase("E")) {
this.validaCreate(solicitacaoServicoDto, model);
prestacaoContasViagemDto.setSituacao(PrestacaoContasViagemDTO.AGUARDANDO_CONFERENCIA);
prestacaoContasViagemDto.setIdItemTrabalho(null);
if (reqViagemDto != null) {
reqViagemDto.setEstado(RequisicaoViagemDTO.AGUARDANDO_CONFERENCIA);
reqViagemDao.update(reqViagemDto);
}
}
prestacaoContasViagemDto = (PrestacaoContasViagemDTO) prestacaoContasViagemDao.create(prestacaoContasViagemDto);
if (prestacaoContasViagemDto.getListaItemPrestacaoContasViagemDTO() != null && prestacaoContasViagemDto.getListaItemPrestacaoContasViagemDTO().size() > 0) {
for (final ItemPrestacaoContasViagemDTO itemPrestacaoContasViagemDTO : prestacaoContasViagemDto.getListaItemPrestacaoContasViagemDTO()) {
itemPrestacaoContasViagemDTO.setIdPrestacaoContasViagem(prestacaoContasViagemDto.getIdPrestacaoContasViagem());
itemPrestacaoContasViagemDao.create(itemPrestacaoContasViagemDTO);
}
}
} catch (final Exception e) {
e.printStackTrace();
}
return prestacaoContasViagemDto;
}
/**
* TODO Este metodo esta em desuso, pode ser removido na proxima vers�o
*/
public AdiantamentoViagemDTO recuperaAdiantamentoViagem(final Integer idSolicitacaoServico, final Integer idEmpregado) throws Exception {
final AdiantamentoViagemService adiantamentoViagemService = (AdiantamentoViagemService) ServiceLocator.getInstance().getService(AdiantamentoViagemService.class, null);
return adiantamentoViagemService.consultarAdiantamentoViagem(idSolicitacaoServico, idEmpregado);
}
@Override
public void update(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDTO, final IDto model) throws Exception {
final ItemPrestacaoContasViagemDao itemPrestacaoContasViagemDAO = new ItemPrestacaoContasViagemDao();
final IntegranteViagemDao integranteViagemDAO = new IntegranteViagemDao();
itemPrestacaoContasViagemDAO.setTransactionControler(tc);
integranteViagemDAO.setTransactionControler(tc);
PrestacaoContasViagemDTO prestacaoContasViagemDTO = (PrestacaoContasViagemDTO) model;
IntegranteViagemDTO integranteViagemDTO = new IntegranteViagemDTO();
prestacaoContasViagemDTO.setIntegranteViagemDto(integranteViagemDAO.getIntegranteByIdSolicitacaoAndTarefa(solicitacaoServicoDTO.getIdSolicitacaoServico(),
solicitacaoServicoDTO.getIdTarefa()));
if (prestacaoContasViagemDTO.getIdEmpregado() == null || prestacaoContasViagemDTO.getIdEmpregado().equals("")) {
prestacaoContasViagemDTO.setIdEmpregado(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdEmpregado());
}
if (prestacaoContasViagemDTO.getValorDiferenca() > 0.0 && solicitacaoServicoDTO.getAcaoFluxo().equalsIgnoreCase("E")) {
throw new Exception(this.i18n_Message(solicitacaoServicoDTO.getUsuarioDto(), "requisicaoViagem.valorDiferencaPrestacaoAdiantamento"));
}
if (solicitacaoServicoDTO.getAcaoFluxo().equalsIgnoreCase("E")) {
prestacaoContasViagemDTO.setSituacao(PrestacaoContasViagemDTO.AGUARDANDO_CONFERENCIA);
prestacaoContasViagemDTO.setIdItemTrabalho(null);
}
if (prestacaoContasViagemDTO.getIdPrestacaoContasViagem() == null) {
prestacaoContasViagemDTO = (PrestacaoContasViagemDTO) this.create(tc, solicitacaoServicoDTO, prestacaoContasViagemDTO);
prestacaoContasViagemDTO.setCorrecao("N");
} else {
prestacaoContasViagemDTO.setIdItemTrabalho(null);
prestacaoContasViagemDTO.setSituacao(PrestacaoContasViagemDTO.AGUARDANDO_CONFERENCIA);
this.update(prestacaoContasViagemDTO);
prestacaoContasViagemDTO.setCorrecao("S");
}
if (prestacaoContasViagemDTO.getListaItemPrestacaoContasViagemDTO() != null && !prestacaoContasViagemDTO.getListaItemPrestacaoContasViagemDTO().isEmpty()) {
itemPrestacaoContasViagemDAO.deleteByIdPrestacaoContasViagem(prestacaoContasViagemDTO.getIdPrestacaoContasViagem());
for (final ItemPrestacaoContasViagemDTO itemPrestacaoContasViagemDTO : prestacaoContasViagemDTO.getListaItemPrestacaoContasViagemDTO()) {
itemPrestacaoContasViagemDTO.setIdPrestacaoContasViagem(prestacaoContasViagemDTO.getIdPrestacaoContasViagem());
itemPrestacaoContasViagemDAO.create(itemPrestacaoContasViagemDTO);
}
}
if (solicitacaoServicoDTO.getAcaoFluxo().equalsIgnoreCase("E")) {
final RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO();
requisicaoViagemDAO.setTransactionControler(tc);
RequisicaoViagemDTO requisicaoViagemDTO = new RequisicaoViagemDTO();
requisicaoViagemDTO.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
requisicaoViagemDTO = (RequisicaoViagemDTO) requisicaoViagemDAO.restore(requisicaoViagemDTO);
requisicaoViagemDTO.setEstado(PrestacaoContasViagemDTO.AGUARDANDO_CONFERENCIA);
requisicaoViagemDAO.update(requisicaoViagemDTO);
}
integranteViagemDTO = integranteViagemDAO.getIntegranteByIdSolicitacaoAndTarefa(solicitacaoServicoDTO.getIdSolicitacaoServico(), prestacaoContasViagemDTO
.getIntegranteViagemDto().getIdTarefa());
if (solicitacaoServicoDTO.getAcaoFluxo().equalsIgnoreCase("E")) {
if (prestacaoContasViagemDTO != null && prestacaoContasViagemDTO.getCorrecao() != null && !prestacaoContasViagemDTO.getCorrecao().equals("N")) {
integranteViagemDTO.setEstado(PrestacaoContasViagemDTO.EM_CONFERENCIA);
integranteViagemDTO.setIdTarefa(null);
} else {
integranteViagemDTO.setEstado(PrestacaoContasViagemDTO.AGUARDANDO_CONFERENCIA);
integranteViagemDTO.setIdTarefa(null);
}
}
integranteViagemDAO.update(integranteViagemDTO);
}
@Override
public void delete(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {}
@Override
public Integer recuperaIdPrestacaoSeExistir(final Integer idSolicitacaoServico, final Integer idEmpregado) throws ServiceException, Exception {
final PrestacaoContasViagemDao dao = this.getDao();
final PrestacaoContasViagemDTO prestacaoContasViagemDto = dao.findBySolicitacaoAndEmpregado(idSolicitacaoServico, idEmpregado);
if (prestacaoContasViagemDto != null && prestacaoContasViagemDto.getIdPrestacaoContasViagem() != null) {
return prestacaoContasViagemDto.getIdPrestacaoContasViagem();
} else {
return null;
}
}
/**
* TODO Este metodo esta em desuso, pode ser removido na proxima vers�o
*/
@Override
public Integer recuperaIdPrestacaoSeExistir(final Integer idSolicitacaoServico, final String nomeNaoFunc) throws ServiceException, Exception {
final PrestacaoContasViagemDao dao = this.getDao();
final PrestacaoContasViagemDTO prestacaoContasViagemDto = dao.findBySolicitacaoAndNomeNaoFuncionario(idSolicitacaoServico, nomeNaoFunc);
if (prestacaoContasViagemDto != null && prestacaoContasViagemDto.getIdPrestacaoContasViagem() != null) {
return prestacaoContasViagemDto.getIdPrestacaoContasViagem();
} else {
return null;
}
}
/**
* TODO Este metodo esta em desuso, pode ser removido na proxima vers�o
*/
public boolean validaPeriodo(final PrestacaoContasViagemDTO prestacaoContasViagemDto) throws ServiceException, Exception {
RequisicaoViagemDTO requisicaoViagemDto = new RequisicaoViagemDTO();
final RequisicaoViagemDAO requisicaoViagemDao = new RequisicaoViagemDAO();
requisicaoViagemDto.setIdRequisicaoMudanca(prestacaoContasViagemDto.getIdSolicitacaoServico());
requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDao.restore(requisicaoViagemDto);
final Timestamp dataRetorno = UtilDatas.strToTimestamp(requisicaoViagemDto.getDataFimViagem().toString());
final Timestamp dataPrestacao = prestacaoContasViagemDto.getDataHora();
final Timestamp dataLitimte = (Timestamp) UtilDatas.incrementaDiasEmData(dataRetorno, 5);
if (dataPrestacao.compareTo(dataLitimte) >= 0) {
return true;
}
return false;
}
/**
* TODO Este metodo esta em desuso, pode ser removido na proxima vers�o
*/
@Override
public PrestacaoContasViagemDTO recuperaCorrecao(final PrestacaoContasViagemDTO prestacaoContasViagemDto) throws Exception {
final PrestacaoContasViagemDao dao = this.getDao();
PrestacaoContasViagemDTO prestacaoContas = null;
final List result = (List) dao.findBySolicitacaoEmpregadoSeCorrecao(prestacaoContasViagemDto.getIdSolicitacaoServico(), prestacaoContasViagemDto.getIntegranteViagemDto()
.getIdEmpregado());
if (result != null) {
prestacaoContas = (PrestacaoContasViagemDTO) result.get(0);
}
return prestacaoContas;
}
}