package br.com.centralit.citcorpore.negocio; import java.sql.Date; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import br.com.centralit.bpm.dto.ElementoFluxoDTO; import br.com.centralit.bpm.dto.ItemTrabalhoFluxoDTO; import br.com.centralit.bpm.dto.TarefaFluxoDTO; import br.com.centralit.bpm.integracao.ElementoFluxoDao; import br.com.centralit.bpm.integracao.ItemTrabalhoFluxoDao; import br.com.centralit.bpm.integracao.TarefaFluxoDao; import br.com.centralit.bpm.negocio.ItemTrabalho; import br.com.centralit.citcorpore.bean.AlcadaDTO; import br.com.centralit.citcorpore.bean.CentroResultadoDTO; import br.com.centralit.citcorpore.bean.CotacaoItemRequisicaoDTO; import br.com.centralit.citcorpore.bean.EnderecoDTO; import br.com.centralit.citcorpore.bean.EntregaItemRequisicaoDTO; import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO; import br.com.centralit.citcorpore.bean.InspecaoEntregaItemDTO; import br.com.centralit.citcorpore.bean.ItemRequisicaoProdutoDTO; import br.com.centralit.citcorpore.bean.ParecerDTO; import br.com.centralit.citcorpore.bean.ProdutoDTO; import br.com.centralit.citcorpore.bean.ProjetoDTO; import br.com.centralit.citcorpore.bean.RequisicaoProdutoDTO; import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO; import br.com.centralit.citcorpore.bpm.negocio.ExecucaoRequisicaoProduto; import br.com.centralit.citcorpore.integracao.CentroResultadoDao; import br.com.centralit.citcorpore.integracao.CotacaoItemRequisicaoDao; import br.com.centralit.citcorpore.integracao.EnderecoDao; import br.com.centralit.citcorpore.integracao.GrupoEmpregadoDao; import br.com.centralit.citcorpore.integracao.InspecaoEntregaItemDao; import br.com.centralit.citcorpore.integracao.ItemRequisicaoProdutoDao; import br.com.centralit.citcorpore.integracao.ParecerDao; import br.com.centralit.citcorpore.integracao.ProdutoDao; import br.com.centralit.citcorpore.integracao.ProjetoDao; import br.com.centralit.citcorpore.integracao.RequisicaoProdutoDao; import br.com.centralit.citcorpore.integracao.SolicitacaoServicoDao; import br.com.centralit.citcorpore.negocio.alcada.AlcadaCompras; import br.com.centralit.citcorpore.util.Enumerados.AcaoItemRequisicaoProduto; import br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia; import br.com.centralit.citcorpore.util.Enumerados.OrigemOcorrencia; import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema; import br.com.centralit.citcorpore.util.Enumerados.SituacaoCotacaoItemRequisicao; import br.com.centralit.citcorpore.util.Enumerados.SituacaoEntregaItemRequisicao; import br.com.centralit.citcorpore.util.Enumerados.SituacaoItemRequisicaoProduto; import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico; import br.com.centralit.citcorpore.util.ParametroUtil; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.LogicException; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.integracao.TransactionControlerImpl; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Reflexao; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilFormatacao; import br.com.citframework.util.UtilStrings; import br.com.citframework.util.WebUtil; public class RequisicaoProdutoServiceEjb extends ComplemInfSolicitacaoServicoServiceEjb implements RequisicaoProdutoService { private RequisicaoProdutoDao dao; @Override protected RequisicaoProdutoDao getDao() { if (dao == null) { dao = new RequisicaoProdutoDao(); } return dao; } @Override public IDto deserializaObjeto(final String serialize) throws Exception { RequisicaoProdutoDTO requisicaoProdutoDto = null; if (serialize != null) { requisicaoProdutoDto = (RequisicaoProdutoDTO) WebUtil.deserializeObject(RequisicaoProdutoDTO.class, serialize); if (requisicaoProdutoDto != null && requisicaoProdutoDto.getItensRequisicao_serialize() != null) { requisicaoProdutoDto .setItensRequisicao(WebUtil.deserializeCollectionFromString(ItemRequisicaoProdutoDTO.class, requisicaoProdutoDto.getItensRequisicao_serialize())); } if (requisicaoProdutoDto != null && requisicaoProdutoDto.getItensCotacao_serialize() != null) { requisicaoProdutoDto.setItensCotacao(WebUtil.deserializeCollectionFromString(CotacaoItemRequisicaoDTO.class, requisicaoProdutoDto.getItensCotacao_serialize())); } if (requisicaoProdutoDto != null && requisicaoProdutoDto.getItensEntrega_serialize() != null) { requisicaoProdutoDto.setItensEntrega(WebUtil.deserializeCollectionFromString(EntregaItemRequisicaoDTO.class, requisicaoProdutoDto.getItensEntrega_serialize())); } } return requisicaoProdutoDto; } @Override public void validaCreate(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { this.validaAtualizacao(solicitacaoServicoDto, model, null); } @Override public void validaDelete(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { } @Override public void validaUpdate(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { this.validaAtualizacao(solicitacaoServicoDto, model, null); } public void validaSolicitanteAutorizado(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model, final TransactionControler tc) throws Exception { String permiteRequisicao = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.PEMITE_REQUISICAO_EMPREGADO_COMPRAS, "N"); if (permiteRequisicao == null || permiteRequisicao.equals("")) { permiteRequisicao = "N"; } if (permiteRequisicao.equals("S")) { return; } final String idGrupo = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_REQ_PRODUTOS, null); if (idGrupo == null || idGrupo.trim().equals("")) { throw new LogicException("Grupo padr�o de requisi��o de produtos n�o parametrizado"); } final GrupoEmpregadoDao grupoEmpregadoDao = new GrupoEmpregadoDao(); if (tc != null) { grupoEmpregadoDao.setTransactionControler(tc); } final Collection<GrupoEmpregadoDTO> colGrupos = grupoEmpregadoDao.findByIdEmpregado(solicitacaoServicoDto.getIdSolicitante()); if (colGrupos != null) { final int id = new Integer(idGrupo).intValue(); for (final GrupoEmpregadoDTO grupoEmpregadoDto : colGrupos) { if (grupoEmpregadoDto.getIdGrupo().intValue() == id) { throw new LogicException("n�o � permitido que um empregado do grupo de Compras fa�a uma requisi��o de produtos"); } } } } public void validaAtualizacao(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model, final TransactionControler tc) throws Exception { this.validaSolicitanteAutorizado(solicitacaoServicoDto, model, tc); final RequisicaoProdutoDTO requisicaoProdutoDto = (RequisicaoProdutoDTO) model; if (requisicaoProdutoDto.getIdSolicitacaoServico() != null) { final SolicitacaoServicoDao solicitacaoServicoDao = new SolicitacaoServicoDao(); if (tc != null) { solicitacaoServicoDao.setTransactionControler(tc); } final SolicitacaoServicoDTO solicitacaoAuxDto = solicitacaoServicoDao.restoreAll(solicitacaoServicoDto.getIdSolicitacaoServico()); Reflexao.copyPropertyValues(solicitacaoAuxDto, requisicaoProdutoDto); final RequisicaoProdutoDao requisicaoProdutoDao = new RequisicaoProdutoDao(); if (tc != null) { requisicaoProdutoDao.setTransactionControler(tc); } RequisicaoProdutoDTO requisicaoAnteriorDto = new RequisicaoProdutoDTO(); requisicaoAnteriorDto.setIdSolicitacaoServico(requisicaoProdutoDto.getIdSolicitacaoServico()); requisicaoAnteriorDto = (RequisicaoProdutoDTO) requisicaoProdutoDao.restore(requisicaoAnteriorDto); requisicaoProdutoDto.setRequisicaoAnteriorDto(requisicaoAnteriorDto); Reflexao.copyPropertyValues(solicitacaoAuxDto, requisicaoAnteriorDto); } this.validaCentroResultado(requisicaoProdutoDto, tc); this.validaProjeto(requisicaoProdutoDto, tc); final ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao(); if (tc != null) { itemRequisicaoProdutoDao.setTransactionControler(tc); } if (requisicaoProdutoDto.getRejeitada() == null || requisicaoProdutoDto.getRejeitada().trim().length() == 0) { requisicaoProdutoDto.setRejeitada("N"); } requisicaoProdutoDto.setExigeNovaAprovacao("N"); requisicaoProdutoDto.setItemAlterado("N"); if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_APROVACAO)) { this.verificaAlcada(requisicaoProdutoDto, tc); if (requisicaoProdutoDto.getItensCotacao() != null && requisicaoProdutoDto.getExigeNovaAprovacao().equalsIgnoreCase("N")) { final Collection<CotacaoItemRequisicaoDTO> colItens = requisicaoProdutoDto.getItensCotacao(); for (final CotacaoItemRequisicaoDTO itemDto : colItens) { if (itemDto.getAprovado() == null || itemDto.getAprovado().trim().length() == 0) { throw new LogicException("Parecer n�o informado para o item '" + itemDto.getDescricaoItem() + "'"); } if (itemDto.getAprovado().equalsIgnoreCase("N") && itemDto.getIdJustificativa() == null) { throw new LogicException("Justificativa n�o informada para o item '" + itemDto.getDescricaoItem() + "'"); } if (itemDto.getAprovado().equalsIgnoreCase("S") && itemDto.getPercVariacaoPreco() == null) { throw new LogicException("Percentual varia��o de pre�o a maior n�o informado para o item '" + itemDto.getDescricaoItem() + "'"); } } } } else if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_INSPECAO)) { final Collection<EntregaItemRequisicaoDTO> colEntregas = requisicaoProdutoDto.getItensEntrega(); if (colEntregas != null) { final InspecaoEntregaItemDao inspecaoEntregaDao = new InspecaoEntregaItemDao(); for (final EntregaItemRequisicaoDTO entregaDto : colEntregas) { if (entregaDto.getAprovado() == null || entregaDto.getAprovado().trim().length() == 0) { throw new LogicException("Parecer n�o informado para a entrega '" + entregaDto.getDescricaoItem() + "'"); } if (entregaDto.getAprovado().equalsIgnoreCase("N") && entregaDto.getIdJustificativa() == null) { throw new LogicException("Justificativa n�o informada para a entrega '" + entregaDto.getDescricaoItem() + "'"); } if (entregaDto.getAprovado().equalsIgnoreCase("N")) { continue; } final Collection<InspecaoEntregaItemDTO> colInspecoes = inspecaoEntregaDao.findByIdEntrega(entregaDto.getIdEntrega()); if (colInspecoes == null || colInspecoes.size() == 0) { throw new LogicException("Existe pelo menos uma entrega n�o avaliada"); } } } } else { final ProdutoDao produtoDao = new ProdutoDao(); if (tc != null) { produtoDao.setTransactionControler(tc); } if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_CRIACAO)) { if (requisicaoProdutoDto.getItensRequisicao() == null) { throw new LogicException("n�o foi informado nenhum item da requisi��o"); } String percVariacaoPrecoStr = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.PERC_MAX_VAR_PRECO_COTACAO, "0,0"); if (percVariacaoPrecoStr == null || percVariacaoPrecoStr.equals("")) { percVariacaoPrecoStr = "0,0"; } for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : requisicaoProdutoDto.getItensRequisicao()) { if (itemRequisicaoDto.getIdItemRequisicaoProduto() != null) { ItemRequisicaoProdutoDTO itemAuxDto = new ItemRequisicaoProdutoDTO(); itemAuxDto.setIdItemRequisicaoProduto(itemRequisicaoDto.getIdItemRequisicaoProduto()); itemAuxDto = (ItemRequisicaoProdutoDTO) itemRequisicaoProdutoDao.restore(itemAuxDto); itemRequisicaoDto.setItemAnteriorDto(itemAuxDto); } if (itemRequisicaoDto.getIdProduto() != null && itemRequisicaoDto.getIdProduto().intValue() < 0) { itemRequisicaoDto.setIdProduto(null); } if (percVariacaoPrecoStr != null) { itemRequisicaoDto.setPercVariacaoPreco(new Double(percVariacaoPrecoStr.replaceAll(",", "."))); } itemRequisicaoDto.setQtdeAprovada(itemRequisicaoDto.getQuantidade()); itemRequisicaoDto.setTipoIdentificacao("D"); if (itemRequisicaoDto.getIdProduto() != null && itemRequisicaoDto.getIdItemRequisicaoProduto() == null) { ProdutoDTO produtoDto = new ProdutoDTO(); produtoDto.setIdProduto(itemRequisicaoDto.getIdProduto()); produtoDto = (ProdutoDTO) produtoDao.restore(produtoDto); if (produtoDto != null) { itemRequisicaoDto.setIdCategoriaProduto(produtoDto.getIdCategoria()); itemRequisicaoDto.setDescricaoItem(produtoDto.getIdentificacao()); itemRequisicaoDto.setIdUnidadeMedida(produtoDto.getIdUnidadeMedida()); itemRequisicaoDto.setEspecificacoes(produtoDto.getDetalhes()); itemRequisicaoDto.setPrecoAproximado(produtoDto.getPrecoMercado()); itemRequisicaoDto.setMarcaPreferencial(produtoDto.getNomeMarca()); itemRequisicaoDto.setTipoIdentificacao("S"); itemRequisicaoDto.setValorAprovado(new Double(0)); } } if (itemRequisicaoDto.getPrecoAproximado() == null) { itemRequisicaoDto.setPrecoAproximado(new Double(0)); } } } if (requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_ACOMPANHAMENTO)) { final Collection<ItemRequisicaoProdutoDTO> colItens = new ItemRequisicaoProdutoDao().findByIdSolicitacaoServico(requisicaoProdutoDto.getIdSolicitacaoServico()); requisicaoProdutoDto.setItensRequisicao(colItens); for (final ItemRequisicaoProdutoDTO itemDto : colItens) { if (itemDto.cotacaoIniciada()) { throw new LogicException("O item '" + itemDto.getDescricaoItem().trim() + "' est� em processo de cota��o.\nA requisi��o n�o pode ser rejeitada."); } } } } if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_VALIDACAO)) { final Collection<ItemRequisicaoProdutoDTO> colItens = requisicaoProdutoDto.getItensRequisicao(); for (final ItemRequisicaoProdutoDTO itemDto : colItens) { ItemRequisicaoProdutoDTO itemAuxDto = new ItemRequisicaoProdutoDTO(); itemAuxDto.setIdItemRequisicaoProduto(itemDto.getIdItemRequisicaoProduto()); itemAuxDto = (ItemRequisicaoProdutoDTO) itemRequisicaoProdutoDao.restore(itemAuxDto); itemDto.setItemAnteriorDto(itemAuxDto); if (requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { continue; } if (!itemDto.dadosAlterados() && !itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.AguardandoAutorizacaoCompra.name())) { if (itemDto.getValidado() == null || itemDto.getValidado().trim().length() == 0) { throw new LogicException("Parecer n�o informado para o item '" + itemDto.getDescricaoItem() + "'"); } if (itemDto.getValidado().equalsIgnoreCase("S") && itemDto.getIdProduto() == null && itemDto.getIdCategoriaProduto() == null) { throw new LogicException("Categoria do produto n�o informada para o item '" + itemDto.getDescricaoItem() + "'"); } if (itemDto.getValidado().equalsIgnoreCase("N") && itemDto.getIdJustificativaValidacao() == null) { throw new LogicException("Justificativa n�o informada para o item '" + itemDto.getDescricaoItem() + "'"); } if (itemDto.getValidado().equalsIgnoreCase("S") && itemDto.getTipoAtendimento() == null) { throw new LogicException("Tipo de atendimento n�o informado para o item '" + itemDto.getDescricaoItem() + "'"); } } if (itemDto.getIdProduto() != null && itemDto.getIdCategoriaProduto() == null) { ProdutoDTO produtoDto = new ProdutoDTO(); produtoDto.setIdProduto(itemDto.getIdProduto()); produtoDto = (ProdutoDTO) produtoDao.restore(produtoDto); itemDto.setIdCategoriaProduto(produtoDto.getIdCategoria()); } } } if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_AUTORIZACAO)) { this.verificaAlcada(requisicaoProdutoDto, tc); if (requisicaoProdutoDto.getExigeNovaAprovacao().equalsIgnoreCase("N")) { final Collection<ItemRequisicaoProdutoDTO> colItens = requisicaoProdutoDto.getItensRequisicao(); for (final ItemRequisicaoProdutoDTO itemDto : colItens) { ItemRequisicaoProdutoDTO itemAuxDto = new ItemRequisicaoProdutoDTO(); itemAuxDto.setIdItemRequisicaoProduto(itemDto.getIdItemRequisicaoProduto()); itemAuxDto = (ItemRequisicaoProdutoDTO) itemRequisicaoProdutoDao.restore(itemAuxDto); itemDto.setItemAnteriorDto(itemAuxDto); if (requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { continue; } if (itemDto.getAutorizado() == null || itemDto.getAutorizado().trim().length() == 0) { throw new LogicException("Parecer n�o informado para o item '" + itemDto.getDescricaoItem() + "'"); } if (itemDto.getAutorizado().equalsIgnoreCase("N") && itemDto.getIdJustificativaAutorizacao() == null) { throw new LogicException("Justificativa n�o informada para o item '" + itemDto.getDescricaoItem() + "'"); } if (itemDto.getAutorizado().equalsIgnoreCase("S")) { if (itemDto.getQtdeAprovada() == null || itemDto.getQtdeAprovada().intValue() == 0) { throw new LogicException("Quantidade aprovada n�o informada para o item '" + itemDto.getDescricaoItem() + "'"); } } } } } } } private void validaProjeto(final RequisicaoProdutoDTO requisicaoProdutoDto, final TransactionControler tc) throws Exception { ProjetoDTO projetoDto = null; if (requisicaoProdutoDto.getIdProjeto() != null) { final ProjetoDao projetoDao = new ProjetoDao(); if (tc != null) { projetoDao.setTransactionControler(tc); } projetoDto = new ProjetoDTO(); projetoDto.setIdProjeto(requisicaoProdutoDto.getIdProjeto()); projetoDto = (ProjetoDTO) projetoDao.restore(projetoDto); } if (projetoDto == null) { throw new LogicException("Projeto n�o encontrado"); } if (projetoDto.getIdProjetoPai() == null) { throw new LogicException("Voc� n�o pode escolher um projeto raiz. Selecione um projeto de n�vel anal�tico."); } } private void validaCentroResultado(final RequisicaoProdutoDTO requisicaoProdutoDto, final TransactionControler tc) throws Exception { CentroResultadoDTO centroCustoDto = null; if (requisicaoProdutoDto.getIdCentroCusto() != null) { final CentroResultadoDao centroResultadoDao = new CentroResultadoDao(); if (tc != null) { centroResultadoDao.setTransactionControler(tc); } centroCustoDto = new CentroResultadoDTO(); centroCustoDto.setIdCentroResultado(requisicaoProdutoDto.getIdCentroCusto()); centroCustoDto = (CentroResultadoDTO) centroResultadoDao.restore(centroCustoDto); requisicaoProdutoDto.setCentroCustoDto(centroCustoDto); } if (centroCustoDto == null) { throw new LogicException("Centro de custo n�o encontrado"); } if (centroCustoDto.getIdCentroResultadoPai() == null || centroCustoDto.getPermiteRequisicaoProduto() == null || !centroCustoDto.getPermiteRequisicaoProduto().equalsIgnoreCase("S")) { throw new LogicException("Centro de custo n�o permite requisi��o de produtos e servi�os"); } } private void verificaAlcada(final RequisicaoProdutoDTO requisicaoProdutoDto, final TransactionControler tc) throws Exception { if (!UtilStrings.nullToVazio(requisicaoProdutoDto.getRejeitada()).equalsIgnoreCase("S") && requisicaoProdutoDto.centroCustoAlterado()) { final CentroResultadoDao centroResultadoDao = new CentroResultadoDao(); if (tc != null) { centroResultadoDao.setTransactionControler(tc); } CentroResultadoDTO centroCustoDto = new CentroResultadoDTO(); centroCustoDto.setIdCentroResultado(requisicaoProdutoDto.getRequisicaoAnteriorDto().getIdCentroCusto()); centroCustoDto = (CentroResultadoDTO) centroResultadoDao.restore(centroCustoDto); requisicaoProdutoDto.getRequisicaoAnteriorDto().setCentroCustoDto(centroCustoDto); if (!UtilStrings.nullToVazio(requisicaoProdutoDto.getRejeitada()).equalsIgnoreCase("S")) { final AlcadaCompras alcada = new AlcadaCompras(); final AlcadaDTO alcadaAtualDto = alcada.determinaAlcada(requisicaoProdutoDto, requisicaoProdutoDto.getCentroCustoDto(), tc); final AlcadaDTO alcadaAnteriorDto = alcada.determinaAlcada(requisicaoProdutoDto.getRequisicaoAnteriorDto(), requisicaoProdutoDto.getRequisicaoAnteriorDto() .getCentroCustoDto(), tc); if (!alcadaAtualDto.mesmosResponsaveis(alcadaAnteriorDto.getColResponsaveis())) { requisicaoProdutoDto.setExigeNovaAprovacao("S"); } } } } @Override public IDto create(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { RequisicaoProdutoDTO requisicaoProdutoDto = (RequisicaoProdutoDTO) model; requisicaoProdutoDto.setAcao(RequisicaoProdutoDTO.ACAO_CRIACAO); final SolicitacaoServicoDao solicitacaoServicoDao = new SolicitacaoServicoDao(); final RequisicaoProdutoDao requisicaoProdutoDao = new RequisicaoProdutoDao(); final ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao(); this.validaAtualizacao(solicitacaoServicoDto, model, tc); requisicaoProdutoDao.setTransactionControler(tc); itemRequisicaoProdutoDao.setTransactionControler(tc); solicitacaoServicoDao.setTransactionControler(tc); requisicaoProdutoDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico()); requisicaoProdutoDto = (RequisicaoProdutoDTO) requisicaoProdutoDao.create(requisicaoProdutoDto); String determinaUrgenciaImpacto = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.DETERMINA_URGENCIA_IMPACTO_REQPROD, null); if (determinaUrgenciaImpacto == null || determinaUrgenciaImpacto.trim().equals("")) { determinaUrgenciaImpacto = "N"; } if (determinaUrgenciaImpacto.equals("S")) { if (requisicaoProdutoDto.getFinalidade().equalsIgnoreCase("C")) { solicitacaoServicoDto.setUrgencia("A"); solicitacaoServicoDto.setImpacto("A"); solicitacaoServicoDto.setIdPrioridade(new Integer(1)); } else { solicitacaoServicoDto.setUrgencia("M"); solicitacaoServicoDto.setImpacto("M"); solicitacaoServicoDto.setIdPrioridade(new Integer(2)); } solicitacaoServicoDao.atualizaUrgenciaImpacto(solicitacaoServicoDto); } if (requisicaoProdutoDto.getItensRequisicao() != null) { final ItemRequisicaoProdutoServiceEjb itemRequisicaoService = new ItemRequisicaoProdutoServiceEjb(); for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : requisicaoProdutoDto.getItensRequisicao()) { itemRequisicaoDto.setIdSolicitacaoServico(requisicaoProdutoDto.getIdSolicitacaoServico()); itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoValidacao.name()); itemRequisicaoProdutoDao.create(itemRequisicaoDto); itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemRequisicaoDto, AcaoItemRequisicaoProduto.Criacao, null, SituacaoItemRequisicaoProduto.valueOf(itemRequisicaoDto.getSituacao())); } } return requisicaoProdutoDto; } @Override public void delete(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { } public void cancelaSolicitacao(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { final SolicitacaoServicoDao solicitacaoDao = new SolicitacaoServicoDao(); solicitacaoDao.setTransactionControler(tc); solicitacaoServicoDto.setSituacao(SituacaoSolicitacaoServico.Cancelada.name()); solicitacaoDao.atualizaSituacao(solicitacaoServicoDto); } @Override public void update(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { final RequisicaoProdutoDTO requisicaoProdutoDto = (RequisicaoProdutoDTO) model; requisicaoProdutoDto.setIdSolicitante(solicitacaoServicoDto.getIdSolicitante()); final RequisicaoProdutoDao requisicaoProdutoDao = new RequisicaoProdutoDao(); final ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao(); final CotacaoItemRequisicaoServiceEjb cotacaoItemRequisicaoService = new CotacaoItemRequisicaoServiceEjb(); final EntregaItemRequisicaoServiceEjb entregaItemRequisicaoService = new EntregaItemRequisicaoServiceEjb(); this.validaAtualizacao(solicitacaoServicoDto, model, tc); final ParecerServiceEjb parecerService = new ParecerServiceEjb(); requisicaoProdutoDao.setTransactionControler(tc); itemRequisicaoProdutoDao.setTransactionControler(tc); if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_APROVACAO)) { if (requisicaoProdutoDto.getExigeNovaAprovacao().equalsIgnoreCase("N")) { final Collection<CotacaoItemRequisicaoDTO> colItens = requisicaoProdutoDto.getItensCotacao(); for (final CotacaoItemRequisicaoDTO itemDto : colItens) { cotacaoItemRequisicaoService.atualizaAprovacaoCotacao(itemDto, solicitacaoServicoDto.getUsuarioDto(), tc); } } else { new CotacaoItemRequisicaoServiceEjb().cancelaTarefaAprovacaoCotacao(requisicaoProdutoDto.getIdSolicitacaoServico(), "Altera��o do centro de custo", solicitacaoServicoDto.getUsuarioDto(), tc); OcorrenciaSolicitacaoServiceEjb.create(solicitacaoServicoDto, null, "Altera��o do centro de custo pelo aprovador", OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Atualizacao, null, CategoriaOcorrencia.Atualizacao.getDescricao(), solicitacaoServicoDto.getUsuarioDto(), 0, null, tc); } } else if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_INSPECAO)) { final Collection<EntregaItemRequisicaoDTO> colEntregas = requisicaoProdutoDto.getItensEntrega(); for (final EntregaItemRequisicaoDTO entregaDto : colEntregas) { entregaItemRequisicaoService.atualizaSituacao(entregaDto, solicitacaoServicoDto.getUsuarioDto(), tc); } } else if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_GARANTIA)) { final Collection<EntregaItemRequisicaoDTO> colEntregas = requisicaoProdutoDto.getItensEntrega(); if (colEntregas != null) { for (final EntregaItemRequisicaoDTO entregaDto : colEntregas) { entregaItemRequisicaoService.atualizaAcionamentoGarantia(entregaDto, solicitacaoServicoDto.getUsuarioDto(), tc); } } } else if (requisicaoProdutoDto.getItensRequisicao() != null) { final ItemRequisicaoProdutoServiceEjb itemRequisicaoService = new ItemRequisicaoProdutoServiceEjb(); if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_VALIDACAO)) { final boolean bExigeAutorizacao = new ExecucaoRequisicaoProduto(requisicaoProdutoDto, tc).exigeAutorizacao(requisicaoProdutoDto); int naoValidos = 0; int alterados = 0; final Collection<ItemRequisicaoProdutoDTO> colItens = requisicaoProdutoDto.getItensRequisicao(); final Collection<ItemRequisicaoProdutoDTO> colItensAtuais = new ArrayList(); for (final ItemRequisicaoProdutoDTO itemDto : colItens) { final ItemRequisicaoProdutoDTO itemAuxDto = itemDto.getItemAnteriorDto(); if (itemDto.dadosAlterados()) { alterados++; itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemDto, itemAuxDto, AcaoItemRequisicaoProduto.Validacao, "", SituacaoItemRequisicaoProduto.AlteradoCompras); itemDto.setSituacao(SituacaoItemRequisicaoProduto.AlteradoCompras.name()); itemRequisicaoProdutoDao.updateNotNull(itemDto); colItensAtuais.add(itemDto); } else { itemAuxDto.setIdProduto(itemDto.getIdProduto()); itemAuxDto.setTipoAtendimento(itemDto.getTipoAtendimento()); itemAuxDto.setIdCategoriaProduto(itemDto.getIdCategoriaProduto()); if (requisicaoProdutoDto.getRejeitada() != null && requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { itemAuxDto.setSituacao(SituacaoItemRequisicaoProduto.RejeitadoCompras.name()); } else { final ParecerDTO parecerDto = parecerService.createOrUpdate(tc, itemAuxDto.getIdParecerValidacao(), solicitacaoServicoDto.getUsuarioDto(), itemDto.getIdJustificativaValidacao(), itemDto.getComplemJustificativaValidacao(), itemDto.getValidado()); itemAuxDto.setIdParecerValidacao(parecerDto.getIdParecer()); if (parecerDto.getAprovado().equalsIgnoreCase("S")) { if (bExigeAutorizacao) { itemAuxDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoAutorizacaoCompra.name()); itemAuxDto.setAprovaCotacao("S"); } else { itemAuxDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoCotacao.name()); itemAuxDto.setAprovaCotacao("N"); } } else if (parecerDto.getAprovado().equalsIgnoreCase("N")) { itemAuxDto.setSituacao(SituacaoItemRequisicaoProduto.Inviabilizado.name()); naoValidos++; } } itemRequisicaoProdutoDao.update(itemAuxDto); colItensAtuais.add(itemAuxDto); } } if (alterados > 0) { requisicaoProdutoDto.setItemAlterado("S"); } if (requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("N") && (alterados > 0 || naoValidos == colItens.size())) { requisicaoProdutoDto.setRejeitada("S"); } if (requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { for (final ItemRequisicaoProdutoDTO itemDto : colItensAtuais) { if (!itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.AlteradoCompras.name())) { itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemDto, AcaoItemRequisicaoProduto.Validacao, "", SituacaoItemRequisicaoProduto.RejeitadoCompras); } } } else { for (final ItemRequisicaoProdutoDTO itemDto : colItensAtuais) { itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemDto, AcaoItemRequisicaoProduto.Validacao, null, SituacaoItemRequisicaoProduto.valueOf(itemDto.getSituacao())); } } if (requisicaoProdutoDto.dadosAlterados()) { OcorrenciaSolicitacaoServiceEjb.create(solicitacaoServicoDto, null, "Altera��o dos dados da requisi��o pela �rea de compras", OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Atualizacao, null, CategoriaOcorrencia.Atualizacao.getDescricao(), solicitacaoServicoDto.getUsuarioDto(), 0, null, tc); } } else if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_AUTORIZACAO)) { if (requisicaoProdutoDto.dadosAlterados()) { String descricao = "Altera��o dos dados da requisi��o pelo autorizador"; if (requisicaoProdutoDto.centroCustoAlterado()) { descricao = "Altera��o do centro de custo pelo autorizador"; } OcorrenciaSolicitacaoServiceEjb.create(solicitacaoServicoDto, null, descricao, OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Atualizacao, null, CategoriaOcorrencia.Atualizacao.getDescricao(), solicitacaoServicoDto.getUsuarioDto(), 0, null, tc); } if (requisicaoProdutoDto.getExigeNovaAprovacao().equalsIgnoreCase("N")) { int alterados = 0; int naoAutorizados = 0; final Collection<ItemRequisicaoProdutoDTO> colItens = requisicaoProdutoDto.getItensRequisicao(); final Collection<ItemRequisicaoProdutoDTO> colItensAtuais = new ArrayList(); for (final ItemRequisicaoProdutoDTO itemDto : colItens) { final ItemRequisicaoProdutoDTO itemAuxDto = itemDto.getItemAnteriorDto(); if (itemDto.dadosAlterados()) { alterados++; itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemDto, itemAuxDto, AcaoItemRequisicaoProduto.Autorizacao, "", SituacaoItemRequisicaoProduto.AlteradoAutorizador); itemDto.setSituacao(SituacaoItemRequisicaoProduto.AlteradoAutorizador.name()); itemRequisicaoProdutoDao.updateNotNull(itemDto); itemDto.atribuiDadosAtuais(); } itemAuxDto.setIdProduto(itemDto.getIdProduto()); if (requisicaoProdutoDto.getRejeitada() != null && requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { itemAuxDto.setSituacao(SituacaoItemRequisicaoProduto.RejeitadoAutorizador.name()); } else { final ParecerDTO parecerDto = parecerService.createOrUpdate(tc, itemAuxDto.getIdParecerAutorizacao(), solicitacaoServicoDto.getUsuarioDto(), itemDto.getIdJustificativaAutorizacao(), itemDto.getComplemJustificativaAutorizacao(), itemDto.getAutorizado()); itemAuxDto.setIdParecerAutorizacao(parecerDto.getIdParecer()); if (parecerDto.getAprovado().equalsIgnoreCase("S")) { itemAuxDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoCotacao.name()); } else if (parecerDto.getAprovado().equalsIgnoreCase("N")) { itemAuxDto.setSituacao(SituacaoItemRequisicaoProduto.CompraNaoAutorizada.name()); naoAutorizados++; } itemAuxDto.setQtdeAprovada(itemDto.getQtdeAprovada()); itemAuxDto.setAprovaCotacao(itemDto.getAprovaCotacao()); } itemRequisicaoProdutoDao.update(itemAuxDto); colItensAtuais.add(itemAuxDto); } if (alterados > 0) { requisicaoProdutoDto.setItemAlterado("S"); } if (requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("N") && naoAutorizados == colItens.size()) { requisicaoProdutoDto.setRejeitada("S"); } if (requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { for (final ItemRequisicaoProdutoDTO itemDto : colItensAtuais) { itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemDto, AcaoItemRequisicaoProduto.Autorizacao, "", SituacaoItemRequisicaoProduto.RejeitadoAutorizador); } } else { for (final ItemRequisicaoProdutoDTO itemDto : colItensAtuais) { itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemDto, AcaoItemRequisicaoProduto.Autorizacao, null, SituacaoItemRequisicaoProduto.valueOf(itemDto.getSituacao())); } } } } else if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_CRIACAO)) { final HashMap<String, ItemRequisicaoProdutoDTO> mapItens = new HashMap(); for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : requisicaoProdutoDto.getItensRequisicao()) { if (itemRequisicaoDto.getIdItemRequisicaoProduto() == null) { continue; } mapItens.put("" + itemRequisicaoDto.getIdItemRequisicaoProduto(), itemRequisicaoDto); } final Collection<ItemRequisicaoProdutoDTO> colItensExistentes = itemRequisicaoProdutoDao .findByIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico()); if (colItensExistentes != null) { for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : colItensExistentes) { if (mapItens.get("" + itemRequisicaoDto.getIdItemRequisicaoProduto()) == null) { itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.Cancelado.name()); itemRequisicaoProdutoDao.update(itemRequisicaoDto); itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemRequisicaoDto, AcaoItemRequisicaoProduto.Cancelamento, null, SituacaoItemRequisicaoProduto.valueOf(itemRequisicaoDto.getSituacao())); } } } for (ItemRequisicaoProdutoDTO itemRequisicaoDto : requisicaoProdutoDto.getItensRequisicao()) { itemRequisicaoDto.setIdSolicitacaoServico(requisicaoProdutoDto.getIdSolicitacaoServico()); if (mapItens.get("" + itemRequisicaoDto.getIdItemRequisicaoProduto()) == null) { itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoValidacao.name()); itemRequisicaoDto = (ItemRequisicaoProdutoDTO) itemRequisicaoProdutoDao.create(itemRequisicaoDto); itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemRequisicaoDto, AcaoItemRequisicaoProduto.Criacao, null, SituacaoItemRequisicaoProduto.valueOf(itemRequisicaoDto.getSituacao())); } else if (itemRequisicaoDto.dadosAlterados()) { itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoValidacao.name()); itemRequisicaoProdutoDao.update(itemRequisicaoDto); itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemRequisicaoDto, AcaoItemRequisicaoProduto.Alteracao, null, SituacaoItemRequisicaoProduto.valueOf(itemRequisicaoDto.getSituacao())); } else { itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.AguardandoAutorizacaoCompra.name()); itemRequisicaoProdutoDao.update(itemRequisicaoDto); } } } else if (UtilStrings.nullToVazio(requisicaoProdutoDto.getAcao()).equalsIgnoreCase(RequisicaoProdutoDTO.ACAO_ACOMPANHAMENTO) && requisicaoProdutoDto.getRejeitada() != null && requisicaoProdutoDto.getRejeitada().equalsIgnoreCase("S")) { for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : requisicaoProdutoDto.getItensRequisicao()) { if (itemRequisicaoDto.getSituacao().equals(SituacaoItemRequisicaoProduto.Cancelado.name()) || itemRequisicaoDto.getSituacao().equals(SituacaoItemRequisicaoProduto.Finalizado.name())) { continue; } itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.RejeitadoCompras.name()); itemRequisicaoProdutoDao.updateNotNull(itemRequisicaoDto); itemRequisicaoService.geraHistorico(tc, solicitacaoServicoDto.getUsuarioDto(), itemRequisicaoDto, AcaoItemRequisicaoProduto.Alteracao, null, SituacaoItemRequisicaoProduto.RejeitadoCompras); } } } requisicaoProdutoDao.update(requisicaoProdutoDto); } public Collection<ItemRequisicaoProdutoDTO> recuperaItensValidos(final RequisicaoProdutoDTO requisicaoProdutoDto, final SituacaoItemRequisicaoProduto[] situacoes, final TransactionControler tc) throws Exception { final ItemRequisicaoProdutoDao itemRequisicaoDao = new ItemRequisicaoProdutoDao(); if (tc != null) { itemRequisicaoDao.setTransactionControler(tc); } final Collection<ItemRequisicaoProdutoDTO> result = new ArrayList(); for (final SituacaoItemRequisicaoProduto situacao : situacoes) { final Collection<ItemRequisicaoProdutoDTO> col = itemRequisicaoDao.findByIdSolicitacaoServicoAndSituacao(requisicaoProdutoDto.getIdSolicitacaoServico(), situacao); if (col != null) { result.addAll(col); } } return result; } public Double calculaValorAprovadoAnual(final CentroResultadoDTO centroResultadoDto, final int anoRef, final TransactionControler tc) throws Exception { double valor = 0; final Collection<RequisicaoProdutoDTO> colRequisicoes = this.getDao().findByIdCentroCusto(centroResultadoDto.getIdCentroResultado()); if (colRequisicoes != null) { final CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao(); if (tc != null) { cotacaoItemRequisicaoDao.setTransactionControler(tc); } final ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao(); if (tc != null) { itemTrabalhoFluxoDao.setTransactionControler(tc); } final ItemRequisicaoProdutoDao itemRequisicaoDao = new ItemRequisicaoProdutoDao(); if (tc != null) { itemRequisicaoDao.setTransactionControler(tc); } final ParecerDao parecerDao = new ParecerDao(); if (tc != null) { parecerDao.setTransactionControler(tc); } for (final RequisicaoProdutoDTO requisicaoProdutoDto : colRequisicoes) { final Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findByIdRequisicaoProduto(requisicaoProdutoDto.getIdSolicitacaoServico()); if (colItens != null) { for (final CotacaoItemRequisicaoDTO cotacaoItemRequisicaoDto : colItens) { if (!cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name()) && !cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.PreAprovado.name())) { continue; } if (cotacaoItemRequisicaoDto.getValorTotal() == null) { continue; } if (cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name())) { ItemTrabalhoFluxoDTO itemTrabalhoDto = new ItemTrabalhoFluxoDTO(); itemTrabalhoDto.setIdItemTrabalho(cotacaoItemRequisicaoDto.getIdItemTrabalho()); itemTrabalhoDto = (ItemTrabalhoFluxoDTO) itemTrabalhoFluxoDao.restore(itemTrabalhoDto); if (itemTrabalhoDto != null && itemTrabalhoDto.getDataHoraFinalizacao() != null) { final Date dataAux = new Date(itemTrabalhoDto.getDataHoraFinalizacao().getTime()); final int ano = UtilDatas.getYear(dataAux); if (ano != anoRef) { continue; } valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue(); } } else { ItemRequisicaoProdutoDTO itemDto = new ItemRequisicaoProdutoDTO(); itemDto.setIdItemRequisicaoProduto(cotacaoItemRequisicaoDto.getIdItemRequisicaoProduto()); itemDto = (ItemRequisicaoProdutoDTO) itemRequisicaoDao.restore(itemDto); if (itemDto.getIdParecerAutorizacao() != null) { ParecerDTO parecerDto = new ParecerDTO(); parecerDto.setIdParecer(itemDto.getIdParecerAutorizacao()); parecerDto = (ParecerDTO) parecerDao.restore(parecerDto); if (parecerDto != null) { final Date dataAux = new Date(parecerDto.getDataHoraParecer().getTime()); final int ano = UtilDatas.getYear(dataAux); if (ano != anoRef) { continue; } valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue(); } } } } } } } return valor; } public double calculaValorAprovado(final SolicitacaoServicoDTO solicitacaoServicoDto, final TransactionControler tc) throws Exception { double valor = 0.0; final CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao(); if (tc != null) { cotacaoItemRequisicaoDao.setTransactionControler(tc); } final Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findByIdRequisicaoProduto(solicitacaoServicoDto.getIdSolicitacaoServico()); if (colItens != null) { final ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao(); if (tc != null) { itemTrabalhoFluxoDao.setTransactionControler(tc); } final ItemRequisicaoProdutoDao itemRequisicaoDao = new ItemRequisicaoProdutoDao(); if (tc != null) { itemRequisicaoDao.setTransactionControler(tc); } for (final CotacaoItemRequisicaoDTO cotacaoItemRequisicaoDto : colItens) { if (!cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name()) && !cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.PreAprovado.name())) { continue; } if (cotacaoItemRequisicaoDto.getValorTotal() == null) { continue; } ItemRequisicaoProdutoDTO itemDto = new ItemRequisicaoProdutoDTO(); itemDto.setIdItemRequisicaoProduto(cotacaoItemRequisicaoDto.getIdItemRequisicaoProduto()); itemDto = (ItemRequisicaoProdutoDTO) itemRequisicaoDao.restore(itemDto); if (itemDto == null || itemDto.getSituacao().equalsIgnoreCase(SituacaoItemRequisicaoProduto.Cancelado.name())) { continue; } ItemTrabalhoFluxoDTO itemTrabalhoDto = new ItemTrabalhoFluxoDTO(); itemTrabalhoDto.setIdItemTrabalho(cotacaoItemRequisicaoDto.getIdItemTrabalho()); itemTrabalhoDto = (ItemTrabalhoFluxoDTO) itemTrabalhoFluxoDao.restore(itemTrabalhoDto); if (itemTrabalhoDto != null && itemTrabalhoDto.getDataHoraFinalizacao() != null && itemTrabalhoDto.getIdResponsavelAtual() != null) { valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue(); } } } return valor; } public Double calculaValorAprovadoMensal(final CentroResultadoDTO centroCustoDto, final int mesRef, final int anoRef, final TransactionControler tc) throws Exception { double valor = 0; final CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao(); if (tc != null) { cotacaoItemRequisicaoDao.setTransactionControler(tc); } final Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findAprovadasByIdCentroResultado(centroCustoDto.getIdCentroResultado()); if (colItens != null) { final ParecerDao parecerDao = new ParecerDao(); if (tc != null) { parecerDao.setTransactionControler(tc); } final ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao(); if (tc != null) { itemTrabalhoFluxoDao.setTransactionControler(tc); } for (final CotacaoItemRequisicaoDTO cotacaoItemRequisicaoDto : colItens) { if (cotacaoItemRequisicaoDto.getValorTotal() == null) { continue; } if (cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name()) && cotacaoItemRequisicaoDto.getIdItemTrabalho() != null) { ItemTrabalhoFluxoDTO itemTrabalhoDto = new ItemTrabalhoFluxoDTO(); itemTrabalhoDto.setIdItemTrabalho(cotacaoItemRequisicaoDto.getIdItemTrabalho()); itemTrabalhoDto = (ItemTrabalhoFluxoDTO) itemTrabalhoFluxoDao.restore(itemTrabalhoDto); if (itemTrabalhoDto != null && itemTrabalhoDto.getDataHoraFinalizacao() != null) { final Date dataAux = new Date(itemTrabalhoDto.getDataHoraFinalizacao().getTime()); final int mes = UtilDatas.getMonth(dataAux); final int ano = UtilDatas.getYear(dataAux); if (mes == mesRef && ano == anoRef) { valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue(); } } } else if (cotacaoItemRequisicaoDto.getIdParecerAutorizacao() != null) { ParecerDTO parecerDto = new ParecerDTO(); parecerDto.setIdParecer(cotacaoItemRequisicaoDto.getIdParecerAutorizacao()); parecerDto = (ParecerDTO) parecerDao.restore(parecerDto); if (parecerDto != null) { final Date dataAux = new Date(parecerDto.getDataHoraParecer().getTime()); final int mes = UtilDatas.getMonth(dataAux); final int ano = UtilDatas.getYear(dataAux); if (mes == mesRef && ano == anoRef) { valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue(); } } } } } return valor; } @Override public StringBuilder recuperaLoginAutorizadores(final Integer idSolicitacaoServico) throws Exception { final SolicitacaoServicoDTO solicitacaoServicoDto = new SolicitacaoServicoServiceEjb().restoreAll(idSolicitacaoServico, null); RequisicaoProdutoDTO requisicaoProdutoDto = new RequisicaoProdutoDTO(); requisicaoProdutoDto.setIdSolicitacaoServico(idSolicitacaoServico); requisicaoProdutoDto = (RequisicaoProdutoDTO) this.getDao().restore(requisicaoProdutoDto); Reflexao.copyPropertyValues(solicitacaoServicoDto, requisicaoProdutoDto); final ExecucaoRequisicaoProduto execucaoRequisicaoProduto = new ExecucaoRequisicaoProduto(requisicaoProdutoDto, new TransactionControlerImpl(this.getDao().getAliasDB())); return execucaoRequisicaoProduto.recuperaLoginAutorizadores(requisicaoProdutoDto); } @Override public void preparaSolicitacaoParaAprovacao(final SolicitacaoServicoDTO solicitacaoDto, final ItemTrabalho itemTrabalho, final String aprovacao, final Integer idJustificativa, final String observacoes) throws Exception { RequisicaoProdutoDTO requisicaoProdutoDto = new RequisicaoProdutoDTO(); requisicaoProdutoDto.setIdSolicitacaoServico(solicitacaoDto.getIdSolicitacaoServico()); requisicaoProdutoDto = (RequisicaoProdutoDTO) this.restore(requisicaoProdutoDto); final ElementoFluxoDTO elementoDto = itemTrabalho.getElementoFluxoDto(); if (UtilStrings.nullToVazio(elementoDto.getTemplate()).toUpperCase().indexOf("APROVACAO") >= 0) { requisicaoProdutoDto.setAcao(RequisicaoProdutoDTO.ACAO_APROVACAO); final CotacaoItemRequisicaoService cotacaoItemRequisicaoService = (CotacaoItemRequisicaoService) ServiceLocator.getInstance().getService( CotacaoItemRequisicaoService.class, usuario); final Collection<CotacaoItemRequisicaoDTO> itensCotacao = cotacaoItemRequisicaoService.findByIdItemTrabalho(itemTrabalho.getIdItemTrabalho()); if (itensCotacao != null) { requisicaoProdutoDto.setItensCotacao(itensCotacao); for (final CotacaoItemRequisicaoDTO cotacaoItemDto : itensCotacao) { cotacaoItemDto.setAprovado(aprovacao); if (aprovacao.equalsIgnoreCase("N")) { cotacaoItemDto.setIdJustificativa(idJustificativa); cotacaoItemDto.setComplementoJustificativa(observacoes); } } } } else if (UtilStrings.nullToVazio(elementoDto.getTemplate()).toUpperCase().indexOf("AUTORIZACAO") >= 0) { requisicaoProdutoDto.setAcao(RequisicaoProdutoDTO.ACAO_AUTORIZACAO); if (aprovacao.equalsIgnoreCase("N")) { requisicaoProdutoDto.setRejeitada("S"); } final ItemRequisicaoProdutoService itemRequisicaoProdutoService = (ItemRequisicaoProdutoService) ServiceLocator.getInstance().getService( ItemRequisicaoProdutoService.class, usuario); requisicaoProdutoDto.setItensRequisicao(itemRequisicaoProdutoService.findByIdSolicitacaoServico(requisicaoProdutoDto.getIdSolicitacaoServico())); for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : requisicaoProdutoDto.getItensRequisicao()) { itemRequisicaoDto.setAutorizado(aprovacao); if (aprovacao.equalsIgnoreCase("N")) { itemRequisicaoDto.setIdJustificativaAutorizacao(idJustificativa); itemRequisicaoDto.setComplemJustificativaAutorizacao(observacoes); } } } if (requisicaoProdutoDto.getAcao() != null) { solicitacaoDto.setInformacoesComplementares(requisicaoProdutoDto); solicitacaoDto.setAcaoFluxo(br.com.centralit.bpm.util.Enumerados.ACAO_EXECUTAR); solicitacaoDto.setIdTarefa(itemTrabalho.getIdItemTrabalho()); } } @Override public String getInformacoesComplementaresFmtTexto(final SolicitacaoServicoDTO solicitacaoDto, final ItemTrabalho itemTrabalho) throws Exception { RequisicaoProdutoDTO requisicaoDto = new RequisicaoProdutoDTO(); requisicaoDto.setIdSolicitacaoServico(solicitacaoDto.getIdSolicitacaoServico()); requisicaoDto = (RequisicaoProdutoDTO) this.getDao().restore(requisicaoDto); Reflexao.copyPropertyValues(solicitacaoDto, requisicaoDto); final EnderecoDTO enderecoDto = new EnderecoDao().recuperaEnderecoComUnidade(requisicaoDto.getIdEnderecoEntrega()); String descricao = ""; if (requisicaoDto.getSolicitante() != null && !requisicaoDto.getSolicitante().trim().equals("")) { descricao += "Solicitante: " + requisicaoDto.getSolicitante() + "\n"; } descricao += "Centro de Custo: " + requisicaoDto.getCentroCusto() + "\n"; descricao += "Projeto: " + requisicaoDto.getProjeto() + "\n"; if (enderecoDto != null && enderecoDto.getIdentificacao() != null) { descricao += "Unidade destino: " + enderecoDto.getIdentificacao() + "\n"; } if (requisicaoDto.getFinalidade().equals("I")) { descricao += "Finalidade: Uso interno\n"; } else { descricao += "Finalidade: Atendimento ao cliente\n"; } final String descr = solicitacaoDto.getDescricaoSemFormatacao(); if (descr != null && !descr.trim().isEmpty()) { descricao += "\n--------------------- DESCRI��O -------------------\n"; descricao += descr + "\n"; } ElementoFluxoDTO elementoDto = itemTrabalho.getElementoFluxoDto(); if (elementoDto == null) { TarefaFluxoDTO tarefaFluxoDto = new TarefaFluxoDTO(); tarefaFluxoDto.setIdItemTrabalho(itemTrabalho.getIdItemTrabalho()); tarefaFluxoDto = (TarefaFluxoDTO) new TarefaFluxoDao().restore(tarefaFluxoDto); elementoDto = new ElementoFluxoDao().restore(tarefaFluxoDto.getIdElemento()); } if (elementoDto != null && !elementoDto.getTemplate().trim().equals("")) { if (UtilStrings.nullToVazio(elementoDto.getTemplate()).toUpperCase().indexOf("APROVACAO") >= 0) { final CotacaoItemRequisicaoService cotacaoItemRequisicaoService = (CotacaoItemRequisicaoService) ServiceLocator.getInstance().getService( CotacaoItemRequisicaoService.class, usuario); final Collection<CotacaoItemRequisicaoDTO> itensCotacao = cotacaoItemRequisicaoService.findByIdItemTrabalho(itemTrabalho.getIdItemTrabalho()); if (itensCotacao != null) { descricao += "\n---------------- ITENS DA APROVA��O --------------\n"; for (final CotacaoItemRequisicaoDTO cotacaoItemDto : itensCotacao) { if (!cotacaoItemDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.AguardaAprovacao.name())) { continue; } descricao += cotacaoItemDto.getDescricaoItem().toUpperCase() + "\n"; descricao += "Fornecedor: " + cotacaoItemDto.getNomeFornecedor() + "\n"; descricao += "Qtde: " + UtilFormatacao.formatDouble(cotacaoItemDto.getQuantidade(), 2) + "\n"; descricao += "Pre�o: " + UtilFormatacao.formatDouble(cotacaoItemDto.getPreco(), 2) + "\n\n"; } } } else if (UtilStrings.nullToVazio(elementoDto.getTemplate()).toUpperCase().indexOf("INSPECAO") >= 0) { final EntregaItemRequisicaoService entregaItemRequisicaoService = (EntregaItemRequisicaoService) ServiceLocator.getInstance().getService( EntregaItemRequisicaoService.class, usuario); final Collection<EntregaItemRequisicaoDTO> itensInspecao = entregaItemRequisicaoService.findByIdItemTrabalho(itemTrabalho.getIdItemTrabalho()); if (itensInspecao != null) { descricao += "\n----------------- ITENS DA INSPE��O --------------\n"; for (final EntregaItemRequisicaoDTO entregaItemDto : itensInspecao) { if (!entregaItemDto.getSituacao().equals(SituacaoEntregaItemRequisicao.Aguarda.name())) { continue; } descricao += entregaItemDto.getDescricaoItem().toUpperCase() + "\n"; descricao += "Fornecedor: " + entregaItemDto.getNomeFornecedor() + "\n"; descricao += "Qtde: " + UtilFormatacao.formatDouble(entregaItemDto.getQuantidadeEntregue(), 2) + "\n\n"; } } } else { final ItemRequisicaoProdutoService itemRequisicaoProdutoService = (ItemRequisicaoProdutoService) ServiceLocator.getInstance().getService( ItemRequisicaoProdutoService.class, usuario); final Collection<ItemRequisicaoProdutoDTO> colItens = itemRequisicaoProdutoService.findByIdSolicitacaoServico(solicitacaoDto.getIdSolicitacaoServico()); descricao += "\n---------------- ITENS DA REQUISI��O -------------\n"; for (final ItemRequisicaoProdutoDTO itemRequisicaoDto : colItens) { descricao += itemRequisicaoDto.getDescricaoItem().toUpperCase() + "\n"; descricao += "Qtde: " + UtilFormatacao.formatDouble(itemRequisicaoDto.getQtdeAprovada(), 2) + "\n"; if (itemRequisicaoDto.getPrecoAproximado() != null && itemRequisicaoDto.getPrecoAproximado().doubleValue() > 0) { descricao += "Valor aproximado: " + UtilFormatacao.formatDouble(itemRequisicaoDto.getPrecoAproximado(), 2) + "\n"; } descricao += "Situa��o: " + itemRequisicaoDto.getDescrSituacao() + "\n\n"; } } } if (descricao == null) { descricao = solicitacaoDto.getDescricaoSemFormatacao(); } return descricao; } }