예제 #1
0
        public bool Aprovar(int?id, int[] itens)
        {
            ParametrosOrdemCompra parametros = parametrosOrdemCompraRepository.Obter() ?? new ParametrosOrdemCompra();

            if (!UsuarioLogado.IsInRole(Funcionalidade.PreRequisicaoMaterialAprovar))
            {
                messageQueue.Add(Resource.Sigim.ErrorMessages.PrivilegiosInsuficientes, TypeMessage.Error);
                return(false);
            }

            if (!itens.Any())
            {
                messageQueue.Add(Resource.OrdemCompra.ErrorMessages.SelecioneUmItemParaAprocacao, TypeMessage.Error);
                return(false);
            }

            var preRequisicaoMaterial = preRequisicaoMaterialRepository.ObterPeloId(id, l => l.ListaItens);

            if (preRequisicaoMaterial == null)
            {
                messageQueue.Add(Application.Resource.Sigim.ErrorMessages.NenhumRegistroEncontrado, TypeMessage.Error);
                return(false);
            }

            if (!PodeAprovarNaSituacaoAtual(preRequisicaoMaterial.Situacao))
            {
                var msg = string.Format(Resource.OrdemCompra.ErrorMessages.PreRequisicaoSituacaoInvalida, preRequisicaoMaterial.Situacao.ObterDescricao());
                messageQueue.Add(msg, TypeMessage.Error);
                return(false);
            }

            if (ItemJaAprovadoFoiSelecionado(itens, preRequisicaoMaterial))
            {
                return(false);
            }

            var listaCentroCusto = preRequisicaoMaterial.ListaItens.Where(l => itens.Contains(l.Id.Value)).Select(l => l.CodigoCentroCusto).Distinct().ToList();

            foreach (var centroCusto in listaCentroCusto)
            {
                RequisicaoMaterial requisicaoMaterial = new RequisicaoMaterial();
                int sequencial = 1;

                requisicaoMaterial = new RequisicaoMaterial();

                SituacaoRequisicaoMaterial situacao = SituacaoRequisicaoMaterial.Aprovada;
                if (parametros != null)
                {
                    if (parametros.EhGeraRequisicaoMaterialRequisitada.HasValue)
                    {
                        if (parametros.EhGeraRequisicaoMaterialRequisitada.Value)
                        {
                            situacao = SituacaoRequisicaoMaterial.Requisitada;
                        }
                    }
                }

                requisicaoMaterial.Situacao              = situacao;
                requisicaoMaterial.DataAprovacao         = DateTime.Now;
                requisicaoMaterial.LoginUsuarioAprovacao = UsuarioLogado.Login;

                requisicaoMaterial.CodigoCentroCusto = centroCusto;
                requisicaoMaterial.Data                 = preRequisicaoMaterial.Data;
                requisicaoMaterial.DataCadastro         = preRequisicaoMaterial.DataCadastro;
                requisicaoMaterial.LoginUsuarioCadastro = preRequisicaoMaterial.LoginUsuarioCadastro;
                requisicaoMaterial.Observacao           = preRequisicaoMaterial.Observacao;

                var listaItens = preRequisicaoMaterial.ListaItens.Where(l => itens.Contains(l.Id.Value) && l.CodigoCentroCusto == centroCusto).ToList();
                foreach (var item in listaItens)
                {
                    RequisicaoMaterialItem requisicaoMaterialItem = new RequisicaoMaterialItem();
                    requisicaoMaterialItem.Sequencial                  = sequencial;
                    requisicaoMaterialItem.MaterialId                  = item.MaterialId;
                    requisicaoMaterialItem.CodigoClasse                = item.CodigoClasse;
                    requisicaoMaterialItem.Complemento                 = item.Complemento;
                    requisicaoMaterialItem.UnidadeMedida               = item.UnidadeMedida;
                    requisicaoMaterialItem.Quantidade                  = item.Quantidade;
                    requisicaoMaterialItem.QuantidadeAprovada          = item.QuantidadeAprovada;
                    requisicaoMaterialItem.DataMaxima                  = item.DataMaxima;
                    requisicaoMaterialItem.DataMinima                  = item.DataMinima;
                    requisicaoMaterialItem.Situacao                    = SituacaoRequisicaoMaterialItem.Requisitado;
                    requisicaoMaterialItem.PreRequisicaoMaterialItemId = item.Id;
                    requisicaoMaterialItem.RequisicaoMaterial          = requisicaoMaterial;
                    requisicaoMaterial.ListaItens.Add(requisicaoMaterialItem);

                    item.ListaRequisicaoMaterialItem.Add(requisicaoMaterialItem);
                    item.Situacao              = SituacaoPreRequisicaoMaterialItem.Aprovado;
                    item.DataAprovacao         = DateTime.Now;
                    item.LoginUsuarioAprovacao = UsuarioLogado.Login;
                    sequencial++;
                }
                requisicaoMaterialRepository.Inserir(requisicaoMaterial);
            }

            AjustarSituacaoPreRequisicao(preRequisicaoMaterial);

            preRequisicaoMaterialRepository.Alterar(preRequisicaoMaterial);
            preRequisicaoMaterialRepository.UnitOfWork.Commit();
            messageQueue.Add(Resource.OrdemCompra.SuccessMessages.AprovacaoRealizadaComSucesso, TypeMessage.Success);
            return(true);
        }
예제 #2
0
 private bool PodeAdicionarItemNaSituacaoAtual(SituacaoRequisicaoMaterial situacao)
 {
     return(situacao == SituacaoRequisicaoMaterial.Requisitada);
 }
예제 #3
0
 private bool PodeCancelarNaSituacaoAtual(SituacaoRequisicaoMaterial situacao)
 {
     return(situacao == SituacaoRequisicaoMaterial.Requisitada);
 }
예제 #4
0
 private bool PodeSerSalvaNaSituacaoAtual(SituacaoRequisicaoMaterial situacao)
 {
     return(situacao == SituacaoRequisicaoMaterial.Requisitada ||
            situacao == SituacaoRequisicaoMaterial.Aprovada);
 }