package br.com.centralit.citcorpore.negocio; import java.sql.Date; import java.util.ArrayList; import java.util.Collection; import br.com.centralit.citcorpore.bean.HistoricoItemRequisicaoDTO; import br.com.centralit.citcorpore.bean.ItemCotacaoDTO; import br.com.centralit.citcorpore.bean.ItemRequisicaoProdutoDTO; import br.com.centralit.citcorpore.bean.JustificativaParecerDTO; import br.com.centralit.citcorpore.bean.ParecerDTO; import br.com.centralit.citcorpore.bean.ProdutoDTO; import br.com.centralit.citcorpore.bean.UnidadeMedidaDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.integracao.HistoricoItemRequisicaoDao; import br.com.centralit.citcorpore.integracao.ItemRequisicaoProdutoDao; import br.com.centralit.citcorpore.integracao.JustificativaParecerDao; import br.com.centralit.citcorpore.integracao.ParecerDao; import br.com.centralit.citcorpore.integracao.ProdutoDao; import br.com.centralit.citcorpore.integracao.UnidadeMedidaDao; import br.com.centralit.citcorpore.util.Enumerados.AcaoItemRequisicaoProduto; import br.com.centralit.citcorpore.util.Enumerados.SituacaoItemRequisicaoProduto; import br.com.citframework.excecao.ServiceException; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.service.CrudServiceImpl; import br.com.citframework.util.UtilDatas; import com.google.gson.Gson; public class ItemRequisicaoProdutoServiceEjb extends CrudServiceImpl implements ItemRequisicaoProdutoService { private ItemRequisicaoProdutoDao dao; @Override protected ItemRequisicaoProdutoDao getDao() { if (dao == null) { dao = new ItemRequisicaoProdutoDao(); } return dao; } public void alteraSituacao(final UsuarioDTO usuarioDto, final Integer idItemRequisicao, final AcaoItemRequisicaoProduto acao, final SituacaoItemRequisicaoProduto novaSituacao, final String complemento, final TransactionControler tc) throws Exception { final ItemRequisicaoProdutoDao itemRequisicaoDao = new ItemRequisicaoProdutoDao(); ItemRequisicaoProdutoDTO itemRequisicaoDto = new ItemRequisicaoProdutoDTO(); itemRequisicaoDto.setIdItemRequisicaoProduto(idItemRequisicao); itemRequisicaoDto = (ItemRequisicaoProdutoDTO) itemRequisicaoDao.restore(itemRequisicaoDto); itemRequisicaoDao.setTransactionControler(tc); itemRequisicaoDto.setSituacao(novaSituacao.name()); itemRequisicaoDao.update(itemRequisicaoDto); this.geraHistorico(tc, usuarioDto, itemRequisicaoDto, acao, complemento, novaSituacao); } public void geraHistorico(final TransactionControler tc, final UsuarioDTO usuarioDto, final ItemRequisicaoProdutoDTO itemRequisicaoDto, final AcaoItemRequisicaoProduto acao, final String complemento, final SituacaoItemRequisicaoProduto situacao) throws Exception { final HistoricoItemRequisicaoDTO historicoItemRequisicaoDto = new HistoricoItemRequisicaoDTO(); historicoItemRequisicaoDto.setIdItemRequisicao(itemRequisicaoDto.getIdItemRequisicaoProduto()); if (usuarioDto != null && usuarioDto.getIdEmpregado() != null) { historicoItemRequisicaoDto.setIdResponsavel(usuarioDto.getIdEmpregado()); } historicoItemRequisicaoDto.setDataHora(UtilDatas.getDataHoraAtual()); historicoItemRequisicaoDto.setComplemento(complemento); historicoItemRequisicaoDto.setAcao(acao.name()); historicoItemRequisicaoDto.setSituacao(situacao.name()); final HistoricoItemRequisicaoDao historicoItemRequisicaoDao = new HistoricoItemRequisicaoDao(); historicoItemRequisicaoDao.setTransactionControler(tc); historicoItemRequisicaoDao.create(historicoItemRequisicaoDto); } public void geraHistorico(final TransactionControler tc, final UsuarioDTO usuarioDto, final ItemRequisicaoProdutoDTO itemRequisicaoDto, final ItemRequisicaoProdutoDTO itemAnteriorDto, final AcaoItemRequisicaoProduto acao, final String complemento, final SituacaoItemRequisicaoProduto situacao) throws Exception { final Gson gson = new Gson(); final HistoricoItemRequisicaoDTO historicoItemRequisicaoDto = new HistoricoItemRequisicaoDTO(); historicoItemRequisicaoDto.setIdItemRequisicao(itemRequisicaoDto.getIdItemRequisicaoProduto()); if (usuarioDto != null && usuarioDto.getIdEmpregado() != null) { historicoItemRequisicaoDto.setIdResponsavel(usuarioDto.getIdEmpregado()); } historicoItemRequisicaoDto.setDataHora(UtilDatas.getDataHoraAtual()); historicoItemRequisicaoDto.setComplemento(complemento); historicoItemRequisicaoDto.setAcao(acao.name()); historicoItemRequisicaoDto.setSituacao(situacao.name()); historicoItemRequisicaoDto.setAtributosAtuais(gson.toJson(itemRequisicaoDto)); historicoItemRequisicaoDto.setAtributosAnteriores(gson.toJson(itemAnteriorDto)); final HistoricoItemRequisicaoDao historicoItemRequisicaoDao = new HistoricoItemRequisicaoDao(); historicoItemRequisicaoDao.setTransactionControler(tc); historicoItemRequisicaoDao.create(historicoItemRequisicaoDto); } public void recuperaRelacionamentos(final Collection<ItemRequisicaoProdutoDTO> colItens) throws Exception { if (colItens != null) { final UnidadeMedidaDao unidadeMedidaDao = new UnidadeMedidaDao(); final ProdutoDao produtoDao = new ProdutoDao(); final ParecerDao parecerDao = new ParecerDao(); final JustificativaParecerDao justificativaParecerDao = new JustificativaParecerDao(); UnidadeMedidaDTO unidDto = null; ProdutoDTO produtoDto = null; ParecerDTO parecerDto = null; JustificativaParecerDTO justificativaDto = null; for (final ItemRequisicaoProdutoDTO itemRequisicaoProdutoDto : colItens) { if (itemRequisicaoProdutoDto.getIdUnidadeMedida() != null) { unidDto = new UnidadeMedidaDTO(); unidDto.setIdUnidadeMedida(itemRequisicaoProdutoDto.getIdUnidadeMedida()); unidDto = (UnidadeMedidaDTO) unidadeMedidaDao.restore(unidDto); itemRequisicaoProdutoDto.setSiglaUnidadeMedida(unidDto.getSiglaUnidadeMedida()); } if (itemRequisicaoProdutoDto.getIdProduto() != null) { produtoDto = new ProdutoDTO(); produtoDto.setIdProduto(itemRequisicaoProdutoDto.getIdProduto()); produtoDto = (ProdutoDTO) produtoDao.restore(produtoDto); if (produtoDto != null) { itemRequisicaoProdutoDto.setCodigoProduto(produtoDto.getCodigoProduto()); itemRequisicaoProdutoDto.setNomeProduto(produtoDto.getNomeProduto()); } } if (itemRequisicaoProdutoDto.getIdParecerValidacao() != null) { parecerDto = new ParecerDTO(); parecerDto.setIdParecer(itemRequisicaoProdutoDto.getIdParecerValidacao()); parecerDto = (ParecerDTO) parecerDao.restore(parecerDto); if (parecerDto != null) { if (parecerDto.getIdJustificativa() != null) { justificativaDto = new JustificativaParecerDTO(); justificativaDto.setIdJustificativa(parecerDto.getIdJustificativa()); justificativaDto = (JustificativaParecerDTO) justificativaParecerDao.restore(justificativaDto); itemRequisicaoProdutoDto.setIdJustificativaValidacao(parecerDto.getIdJustificativa()); if (justificativaDto != null) { itemRequisicaoProdutoDto.setDescrJustificativaValidacao(justificativaDto.getDescricaoJustificativa()); } itemRequisicaoProdutoDto.setComplemJustificativaValidacao(parecerDto.getComplementoJustificativa()); } itemRequisicaoProdutoDto.setValidado(parecerDto.getAprovado()); } } else if (itemRequisicaoProdutoDto.getIdParecerAutorizacao() != null) { parecerDto = new ParecerDTO(); parecerDto.setIdParecer(itemRequisicaoProdutoDto.getIdParecerAutorizacao()); parecerDto = (ParecerDTO) parecerDao.restore(parecerDto); if (parecerDto != null) { if (parecerDto.getIdJustificativa() != null) { justificativaDto = new JustificativaParecerDTO(); justificativaDto.setIdJustificativa(parecerDto.getIdJustificativa()); justificativaDto = (JustificativaParecerDTO) justificativaParecerDao.restore(justificativaDto); itemRequisicaoProdutoDto.setIdJustificativaAutorizacao(parecerDto.getIdJustificativa()); if (justificativaDto != null) { itemRequisicaoProdutoDto.setDescrJustificativaAutorizacao(justificativaDto.getDescricaoJustificativa()); } itemRequisicaoProdutoDto.setComplemJustificativaAutorizacao(parecerDto.getComplementoJustificativa()); } itemRequisicaoProdutoDto.setAutorizado(parecerDto.getAprovado()); } } } } } @Override public Collection findByIdSolicitacaoServico(final Integer parm) throws Exception { try { final Collection<ItemRequisicaoProdutoDTO> col = this.getDao().findByIdSolicitacaoServico(parm); this.recuperaRelacionamentos(col); return col; } catch (final Exception e) { throw new ServiceException(e); } } @Override public Collection findByIdSolicitacaoServicoAndSituacao(final Integer parm, final SituacaoItemRequisicaoProduto[] situacao) throws Exception { try { final Collection<ItemRequisicaoProdutoDTO> result = new ArrayList(); if (situacao != null && situacao.length > 0) { for (final SituacaoItemRequisicaoProduto situacaoItem : situacao) { final Collection<ItemRequisicaoProdutoDTO> col = this.getDao().findByIdSolicitacaoServicoAndSituacao(parm, situacaoItem); if (col != null) { this.recuperaRelacionamentos(col); result.addAll(col); } } } return result; } catch (final Exception e) { throw new ServiceException(e); } } @Override public Collection findByIdSolicitacaoAndSituacaoAndTipoAtendimento(final Integer parm, final SituacaoItemRequisicaoProduto[] situacao, final String tipoAtendimento) throws Exception { try { final Collection<ItemRequisicaoProdutoDTO> result = new ArrayList(); if (situacao != null && situacao.length > 0) { for (final SituacaoItemRequisicaoProduto situacaoItem : situacao) { final Collection<ItemRequisicaoProdutoDTO> col = this.getDao().findByIdSolicitacaoAndSituacaoAndTipoAtendimento(parm, situacaoItem, tipoAtendimento); if (col != null) { this.recuperaRelacionamentos(col); result.addAll(col); } } } return result; } catch (final Exception e) { throw new ServiceException(e); } } @Override public void deleteByIdSolicitacaoServico(final Integer parm) throws Exception { try { this.getDao().deleteByIdSolicitacaoServico(parm); } catch (final Exception e) { throw new ServiceException(e); } } @Override public Collection findByIdProduto(final Integer parm) throws Exception { try { return this.getDao().findByIdProduto(parm); } catch (final Exception e) { throw new ServiceException(e); } } @Override public Collection findByIdItemCotacao(final Integer parm) throws Exception { try { return this.getDao().findByIdItemCotacao(parm); } catch (final Exception e) { throw new ServiceException(e); } } @Override public Collection<ItemRequisicaoProdutoDTO> recuperaItensParaCotacao(final Date dataInicio, final Date dataFim, final Integer idCentroCusto, final Integer idProjeto, final Integer idEnderecoEntrega, final Integer idSolicitacaoServico) throws Exception { try { return this.getDao().recuperaItensParaCotacao(dataInicio, dataFim, idCentroCusto, idProjeto, idEnderecoEntrega, idSolicitacaoServico); } catch (final Exception e) { throw new ServiceException(e); } } public void atualizaIdItemCotacao(final UsuarioDTO usuarioDto, final ItemRequisicaoProdutoDTO itemRequisicaoDto, final ItemCotacaoDTO itemCotacaoDto, final TransactionControler tc) throws Exception { final ItemRequisicaoProdutoDao itemRequisicaoDao = new ItemRequisicaoProdutoDao(); itemRequisicaoDao.setTransactionControler(tc); ItemRequisicaoProdutoDTO itemRequisicaoAuxDto = new ItemRequisicaoProdutoDTO(); itemRequisicaoAuxDto.setIdItemRequisicaoProduto(itemRequisicaoDto.getIdItemRequisicaoProduto()); itemRequisicaoAuxDto = (ItemRequisicaoProdutoDTO) itemRequisicaoDao.restore(itemRequisicaoAuxDto); itemRequisicaoAuxDto.setIdItemCotacao(itemCotacaoDto.getIdItemCotacao()); itemRequisicaoAuxDto.setQtdeCotada(new Double(0.0)); // itemRequisicaoAuxDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoPedido.name()); itemRequisicaoDao.update(itemRequisicaoAuxDto); // geraHistorico(tc, usuarioDto, itemRequisicaoDto, "Cota��o No. "+itemCotacaoDto.getIdCotacao(), SituacaoItemRequisicaoProduto.AguardandoPedido); } public void desassociaItemCotacao(final UsuarioDTO usuarioDto, final ItemCotacaoDTO itemCotacaoDto, final AcaoItemRequisicaoProduto acao, final TransactionControler tc) throws Exception { final ItemRequisicaoProdutoDao itemRequisicaoDao = new ItemRequisicaoProdutoDao(); itemRequisicaoDao.setTransactionControler(tc); final Collection<ItemRequisicaoProdutoDTO> colItens = itemRequisicaoDao.findByIdItemCotacao(itemCotacaoDto.getIdItemCotacao()); if (colItens != null) { for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : colItens) { if (!itemRequisicaoDto.getSituacao().equals(SituacaoItemRequisicaoProduto.AguardandoCotacao.name())) { itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoCotacao.name()); this.geraHistorico(tc, usuarioDto, itemRequisicaoDto, acao, null, SituacaoItemRequisicaoProduto.AguardandoCotacao); } itemRequisicaoDto.setIdItemCotacao(null); itemRequisicaoDto.setQtdeCotada(new Double(0.0)); itemRequisicaoDao.update(itemRequisicaoDto); } } } }