Example #1
0
        public void QuandoConsultoRequisicoesDisponiveisParaUmProcessoDeCotacaoListaAsRequisicoesQueJaEstaoAssociadasAoProcessoETambemAsQueNaoEstaoAssociadasANenhumOutroProcesso()
        {
            //Cria duas requisições de compra: 1 e 2
            //Cria um processo de cotação 1 e associa a requisição 1 com este processo
            //Salva os registros
            //Depois consultar novamente as requisições para o processo 1: deve listar as requisiões 1 e 2
            RemoveQueries.RemoverRequisicoesDeCompraCadastradas();

            RequisicaoDeCompra requisicao1 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            RequisicaoDeCompra requisicao2 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();

            var processo1 = new ProcessoDeCotacaoDeMaterial();

            processo1.AdicionarItem(requisicao1);

            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicao1);
            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicao2);
            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processo1);

            var consultaRequisicao = ObjectFactory.GetInstance <IConsultaRequisicaoDeCompra>();

            var kendoGridVm = consultaRequisicao.Listar(DefaultObjects.ObtemPaginacaoDefault(), new RequisicaoDeCompraFiltroVm(processo1.Id));

            Assert.AreEqual(2, kendoGridVm.QuantidadeDeRegistros);
        }
Example #2
0
        public void QuandoBloqueioRequisicaoDeCompraPassaParaEstadoBloqueado()
        {
            RequisicaoDeCompra requisicaoDeCompra = DefaultObjects.ObtemRequisicaoDeCompraPadrao();

            requisicaoDeCompra.Bloquear();
            Assert.AreEqual(Enumeradores.StatusRequisicaoCompra.Bloqueado, requisicaoDeCompra.Status);
        }
        public void QuandoConsultoUmaCotacaoDoFornecedorParaUmItemQueJaFoiPreenchidaRetornaOsDadosEsperados()
        {
            ProcessoDeCotacaoDeMaterial processo = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAbertoPadrao();
            Fornecedor fornecedor = processo.FornecedoresParticipantes.First().Fornecedor;
            var        cotacao    = processo.InformarCotacao(fornecedor.Codigo, DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                             DefaultObjects.ObtemIncotermPadrao(),
                                                             "Desc Incoterm");
            var processoCotacaoItem = processo.Itens.First();
            var cotacaoItem         = cotacao.InformarCotacaoDeItem(processoCotacaoItem, 100, 120, 12, DateTime.Today.AddMonths(1), "observacoes");

            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processo);

            var consulta       = ObjectFactory.GetInstance <IConsultaCotacaoDoFornecedor>();
            var itemDoProcesso = (ProcessoDeCotacaoDeMaterialItem)processo.Itens.First();
            RequisicaoDeCompra requisicaoDeCompra = itemDoProcesso.RequisicaoDeCompra;

            CotacaoMaterialItemCadastroVm vm = consulta.ConsultarCotacaoDeItemDeMaterial(processo.Id, fornecedor.Codigo, requisicaoDeCompra.Numero, requisicaoDeCompra.NumeroItem);

            Assert.IsNotNull(vm);

            Assert.AreEqual(processo.Id, vm.IdProcessoCotacao);
            Assert.AreEqual(cotacao.Id, vm.IdCotacao);
            Assert.AreEqual(cotacaoItem.Id, vm.IdCotacaoItem);
            Assert.AreEqual(itemDoProcesso.Id, vm.IdProcessoCotacaoItem);

            Assert.AreEqual(itemDoProcesso.Produto.Descricao, vm.Material);
            Assert.AreEqual(itemDoProcesso.Quantidade, vm.Quantidade);
            Assert.AreEqual(itemDoProcesso.UnidadeDeMedida.Descricao, vm.UnidadeDeMedida);
            Assert.AreEqual(100, vm.ValorComImpostos);
            Assert.AreEqual(100, vm.Custo);
            Assert.AreEqual(100, vm.Preco);
            Assert.AreEqual(120, vm.Mva);
        }
Example #4
0
        public void QuandoCrioUmaRequisicaoAsPropriedadesFicamCorretas()
        {
            var             usuarioCriador       = new Usuario("Usuario Criador", "criador", "");
            Fornecedor      fornecedorPretendido = DefaultObjects.ObtemFornecedorPadrao();
            UnidadeDeMedida unidadeDeMedida      = DefaultObjects.ObtemUnidadeDeMedidaPadrao();
            var             material             = new Produto("MAT0001", "MATERIAL DE COMPRA", "T01");
            var             dataDeRemessa        = DateTime.Today.AddDays(-2);
            var             dataDeLiberacao      = DateTime.Today.AddDays(-1);
            var             dataDeSolicitacao    = DateTime.Today;

            var requisicaoDeCompra = new RequisicaoDeCompra(usuarioCriador, "requisitante", fornecedorPretendido,
                                                            dataDeRemessa, dataDeLiberacao, dataDeSolicitacao, "CENTRO", unidadeDeMedida, 1000,
                                                            material, "Requisição de Compra enviada pelo SAP", "ITEM001", "REQ0001", "GC1", false);

            Assert.AreEqual("criador", requisicaoDeCompra.Criador.Login);
            Assert.AreEqual("requisitante", requisicaoDeCompra.Requisitante);
            Assert.AreEqual(fornecedorPretendido.Codigo, requisicaoDeCompra.FornecedorPretendido.Codigo);
            Assert.AreEqual("MAT0001", requisicaoDeCompra.Material.Codigo);
            Assert.AreEqual(dataDeRemessa, requisicaoDeCompra.DataDeRemessa);
            Assert.AreEqual(dataDeLiberacao, requisicaoDeCompra.DataDeLiberacao);
            Assert.AreEqual(dataDeSolicitacao, requisicaoDeCompra.DataDeSolicitacao);
            Assert.AreEqual("CENTRO", requisicaoDeCompra.Centro);
            Assert.AreSame(unidadeDeMedida, requisicaoDeCompra.UnidadeMedida);
            Assert.AreEqual(1000, requisicaoDeCompra.Quantidade);
            Assert.AreEqual("Requisição de Compra enviada pelo SAP", requisicaoDeCompra.Descricao);
            Assert.AreEqual("REQ0001", requisicaoDeCompra.Numero);
            Assert.AreEqual("ITEM001", requisicaoDeCompra.NumeroItem);
            Assert.AreEqual("GC1", requisicaoDeCompra.CodigoGrupoDeCompra);
            Assert.IsFalse(requisicaoDeCompra.Mrp);
            Assert.AreEqual(Enumeradores.StatusRequisicaoCompra.Ativo, requisicaoDeCompra.Status);
        }
Example #5
0
 public static void PersistirRequisicaoDeCompra(RequisicaoDeCompra requisicaoDeCompra)
 {
     try
     {
         bool controlarTransacao = !Session.Transaction.IsActive;
         if (controlarTransacao)
         {
             Session.BeginTransaction();
         }
         PersistirUsuario(requisicaoDeCompra.Criador);
         PersistirFornecedor(requisicaoDeCompra.FornecedorPretendido);
         PersistirProduto(requisicaoDeCompra.Material);
         PersistirUnidadeDeMedida(requisicaoDeCompra.UnidadeMedida);
         Session.Save(requisicaoDeCompra);
         if (controlarTransacao)
         {
             Session.Transaction.Commit();
         }
     }
     catch (Exception)
     {
         RollbackSessionTransaction();
         throw;
     }
 }
Example #6
0
        public void NovaRequisicao(RequisicaoDeCompraVm requisicaoDeCompraVm)
        {
            try
            {
                _unitOfWork.BeginTransaction();
                Usuario         criador = _usuarios.BuscaPorLogin(requisicaoDeCompraVm.Criador);
                Fornecedor      fornecedorPretendido = _fornecedores.BuscaPeloCodigo(requisicaoDeCompraVm.FornecedorPretendido);
                Produto         material             = _produtos.BuscaPeloCodigo(requisicaoDeCompraVm.Material);
                UnidadeDeMedida unidadeDeMedida      = _unidadesDeMedida.BuscaPeloCodigoInterno(requisicaoDeCompraVm.UnidadeMedida).Single();
                var             requisicaoDeCompra   = new RequisicaoDeCompra(criador, requisicaoDeCompraVm.Requisitante, fornecedorPretendido,
                                                                              Convert.ToDateTime(requisicaoDeCompraVm.DataDeRemessa),
                                                                              Convert.ToDateTime(requisicaoDeCompraVm.DataDeLiberacao),
                                                                              Convert.ToDateTime(requisicaoDeCompraVm.DataDeSolicitacao),
                                                                              requisicaoDeCompraVm.Centro,
                                                                              unidadeDeMedida,
                                                                              requisicaoDeCompraVm.Quantidade, material,
                                                                              requisicaoDeCompraVm.Descricao,
                                                                              requisicaoDeCompraVm.NumeroItem,
                                                                              requisicaoDeCompraVm.NumeroRequisicao,
                                                                              requisicaoDeCompraVm.CodigoGrupoDeCompra,
                                                                              requisicaoDeCompraVm.Mrp.ToUpper().Equals("B"));

                //var processoDeCotacaoDeMaterial = requisicaoDeCompra.GerarProcessoDeCotacaoDeMaterial();

                _requisicoesDeCompra.Save(requisicaoDeCompra);
                //_processosDeCotacao.Save(processoDeCotacaoDeMaterial);

                _unitOfWork.Commit();
            }
            catch (Exception)
            {
                _unitOfWork.RollBack();
                throw;
            }
        }
        public void QuandoInformoImpostosDeUmaCotacaoRetornaOsDadosDosImpostos()
        {
            ProcessoDeCotacaoDeMaterial processo = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAbertoPadrao();
            Fornecedor fornecedor = processo.FornecedoresParticipantes.First().Fornecedor;
            var        cotacao    = processo.InformarCotacao(fornecedor.Codigo, DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                             DefaultObjects.ObtemIncotermPadrao(), "Desc Incoterm");

            var itemDoProcesso = (ProcessoDeCotacaoDeMaterialItem)processo.Itens.First();

            RequisicaoDeCompra requisicaoDeCompra = itemDoProcesso.RequisicaoDeCompra;

            var cotacaoItem = cotacao.InformarCotacaoDeItem(itemDoProcesso, 100, 120, 12, DateTime.Today.AddMonths(1), "observacoes");

            cotacaoItem.InformarImposto(Enumeradores.TipoDeImposto.Icms, 1);
            cotacaoItem.InformarImposto(Enumeradores.TipoDeImposto.IcmsSubstituicao, 11);
            cotacaoItem.InformarImposto(Enumeradores.TipoDeImposto.Ipi, 21);
            cotacaoItem.InformarImposto(Enumeradores.TipoDeImposto.PisCofins, 3);

            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processo);

            var consulta         = ObjectFactory.GetInstance <IConsultaCotacaoDoFornecedor>();
            CotacaoImpostosVm vm = consulta.ConsultarCotacaoDeItemDeMaterial(processo.Id, fornecedor.Codigo, requisicaoDeCompra.Numero, requisicaoDeCompra.NumeroItem).Impostos;

            Assert.AreEqual(1, vm.IcmsAliquota);
            Assert.AreEqual(1, vm.IcmsValor);
            Assert.AreEqual(11, vm.IcmsStAliquota);
            Assert.AreEqual(11, vm.IcmsStValor);
            Assert.AreEqual(21, vm.IpiAliquota);
            Assert.AreEqual(21, vm.IpiValor);
            Assert.AreEqual(3, vm.PisCofinsValor);
            Assert.AreEqual(3, vm.PisCofinsAliquota);
        }
        public void ConsigoPersistirEConsultarUmaRequisicaoDeCompraSemInformarRequisitanteEFornecedorPretendido()
        {
            var requisicaoDeCompra = DefaultObjects.ObtemRequisicaoDeCompraSemRequisitanteEFornecedor();

            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicaoDeCompra);

            UnitOfWorkNh.Session.Clear();
            RequisicaoDeCompra requisicaoConsultada = _requisicoesDeCompra.BuscaPeloId(requisicaoDeCompra.Id);

            Assert.IsNotNull(requisicaoConsultada);

            Assert.AreEqual(requisicaoDeCompra.Criador.Login, requisicaoConsultada.Criador.Login);
            Assert.IsNull(requisicaoConsultada.Requisitante);
            Assert.IsNull(requisicaoConsultada.FornecedorPretendido);
            Assert.AreEqual(requisicaoDeCompra.Material.Codigo, requisicaoConsultada.Material.Codigo);
            Assert.AreEqual(DateTime.Today.AddDays(-2), requisicaoConsultada.DataDeRemessa);
            Assert.AreEqual(DateTime.Today.AddDays(-1), requisicaoConsultada.DataDeLiberacao);
            Assert.AreEqual(DateTime.Today, requisicaoConsultada.DataDeSolicitacao);
            Assert.AreEqual("C001", requisicaoConsultada.Centro);
            Assert.AreEqual(requisicaoDeCompra.UnidadeMedida.CodigoInterno, requisicaoConsultada.UnidadeMedida.CodigoInterno);
            Assert.AreEqual(1000, requisicaoConsultada.Quantidade);
            Assert.AreEqual("Requisição de Compra enviada pelo SAP", requisicaoConsultada.Descricao);
            Assert.AreEqual("REQ0001", requisicaoConsultada.Numero);
            Assert.AreEqual("00001", requisicaoConsultada.NumeroItem);
        }
Example #9
0
        public void NaoEPossivelAbrirOProcessoDeCotacaoSeADataLimiteDeRetornoNaoEstiverPreenchida()
        {
            RequisicaoDeCompra          requisicaoDeCompra          = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            ProcessoDeCotacaoDeMaterial processoDeCotacaoDeMaterial = requisicaoDeCompra.GerarProcessoDeCotacaoDeMaterial();

            processoDeCotacaoDeMaterial.Abrir(DefaultObjects.ObtemUsuarioPadrao());
        }
Example #10
0
        public void QuandoUmaRequisicaoDeCompraJaGerouUmProcessoDeCotacaoNaoApareceMaisDisponivelParaOutrosProcessos()
        {
            //Cria duas requisições de compra: 1 e 2
            //Cria um processo de cotação e associa a requisição 1 com este processo
            //Cria um novo processo de cotação, salva e Lista as requisições para este processo. A requisição ' não deve aparecer.
            RemoveQueries.RemoverRequisicoesDeCompraCadastradas();

            RequisicaoDeCompra requisicao1 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            RequisicaoDeCompra requisicao2 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();

            var processo1 = new ProcessoDeCotacaoDeMaterial();

            processo1.AdicionarItem(requisicao1);
            var processo2 = new ProcessoDeCotacaoDeMaterial();

            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicao2);
            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processo1);
            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processo2);

            var consultaRequisicao = ObjectFactory.GetInstance <IConsultaRequisicaoDeCompra>();

            var kendoGridVm = consultaRequisicao.Listar(DefaultObjects.ObtemPaginacaoDefault(), new RequisicaoDeCompraFiltroVm(processo2.Id));

            Assert.AreEqual(1, kendoGridVm.QuantidadeDeRegistros);
            var requisicaoDeCompraVm = kendoGridVm.Registros.Cast <RequisicaoDeCompraVm>().Single();

            Assert.AreEqual(requisicao2.Numero, requisicaoDeCompraVm.NumeroRequisicao);
            Assert.AreEqual(requisicao2.NumeroItem, requisicaoDeCompraVm.NumeroItem);
        }
        public static ProcessoDeCotacaoDeMaterial ObtemProcessoDeCotacaoDeMaterialDeMateriaPrima()
        {
            RequisicaoDeCompra          requisicaoDeCompra = ObtemRequisicaoDeMateriaPrima();
            ProcessoDeCotacaoDeMaterial processoDeCotacao  = requisicaoDeCompra.GerarProcessoDeCotacaoDeMaterial();

            processoDeCotacao.Atualizar(DateTime.Today.AddDays(10), "requisitos");
            return(processoDeCotacao);
        }
Example #12
0
        public void QuandoAdicionarItemEmUmProcessoDeCotacaoARequisicaoDeCompraFicaVinculadaAoItem()
        {
            RequisicaoDeCompra          requisicaoDeCompra = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            ProcessoDeCotacaoDeMaterial processoDeCotacao  = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialNaoIniciado();

            Assert.IsFalse(requisicaoDeCompra.GerouProcessoDeCotacao);
            processoDeCotacao.AdicionarItem(requisicaoDeCompra);
            Assert.IsTrue(requisicaoDeCompra.GerouProcessoDeCotacao);
        }
Example #13
0
        public void QuandoRemovoItemDeUmProcessoDeCotacaoOVinculoEntreARequisicaoEoItemERemovido()
        {
            ProcessoDeCotacaoDeMaterial processoDeCotacao  = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialNaoIniciado();
            RequisicaoDeCompra          requisicaoDeCompra = ((ProcessoDeCotacaoDeMaterialItem)processoDeCotacao.Itens.First()).RequisicaoDeCompra;

            Assert.IsTrue(requisicaoDeCompra.GerouProcessoDeCotacao);
            processoDeCotacao.RemoverItem(processoDeCotacao.Itens.First());
            Assert.IsFalse(requisicaoDeCompra.GerouProcessoDeCotacao);
        }
Example #14
0
        public void NaoEPermitidoAdicionarSelecionarUmaRequisicaoDeCompraBloqueadaParaUmProcessoDeCotacao()
        {
            RequisicaoDeCompra requisicaoDeCompra = DefaultObjects.ObtemRequisicaoDeCompraPadrao();

            requisicaoDeCompra.Bloquear();

            ProcessoDeCotacaoDeMaterial processoDeCotacao = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAtualizado();

            processoDeCotacao.AdicionarItem(requisicaoDeCompra);
        }
Example #15
0
        public void QuandoGeroUmProcessoDeCotacaoAtravesDaRequisicaoDeCompraOProcessoFicaVinculadoComARequisicao()
        {
            RequisicaoDeCompra requisicaoDeCompra = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            var processoDeCotacao = requisicaoDeCompra.GerarProcessoDeCotacaoDeMaterial();
            //Assert.AreEqual(requisicaoDeCompra.Numero, processoDeCotacao.RequisicaoDeCompra.Numero);
            //Assert.AreEqual(requisicaoDeCompra.NumeroItem, processoDeCotacao.RequisicaoDeCompra.NumeroItem);
            var item = (ProcessoDeCotacaoDeMaterialItem)processoDeCotacao.Itens.First();

            Assert.AreEqual(requisicaoDeCompra.Numero, item.RequisicaoDeCompra.Numero);
            Assert.AreEqual(requisicaoDeCompra.NumeroItem, item.RequisicaoDeCompra.NumeroItem);
        }
Example #16
0
        public void NaoEPermitidoUtilizarMesmoItemDeRequisicaoEmMaisDeUmProcessoDeCotacao()
        {
            RequisicaoDeCompra          requisicaoDeCompra = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            ProcessoDeCotacaoDeMaterial processo1          = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialNaoIniciado();

            processo1.AdicionarItem(requisicaoDeCompra);

            //tenta adicionar a mesma requisição de compra no segundo processo
            ProcessoDeCotacaoDeMaterial processo2 = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialNaoIniciado();

            processo2.AdicionarItem(requisicaoDeCompra);
        }
Example #17
0
        public void ConsigoListarAsRequisicoesDeCompra()
        {
            RemoveQueries.RemoverRequisicoesDeCompraCadastradas();

            RequisicaoDeCompra requisicao1 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            RequisicaoDeCompra requisicao2 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();

            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicao1);
            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicao2);

            var consultaRequisicao = ObjectFactory.GetInstance <IConsultaRequisicaoDeCompra>();

            var kendoGridVm = consultaRequisicao.Listar(DefaultObjects.ObtemPaginacaoDefault(), new RequisicaoDeCompraFiltroVm(10));

            Assert.AreEqual(2, kendoGridVm.QuantidadeDeRegistros);
        }
        public static RequisicaoDeCompra ObtemRequisicaoDeCompraSemRequisitanteEFornecedor()
        {
            var             usuarioCriador  = ObtemUsuarioPadrao();
            var             material        = ObtemProdutoPadrao();
            UnidadeDeMedida unidadeDeMedida = ObtemUnidadeDeMedidaPadrao();

            var dataDeRemessa     = DateTime.Today.AddDays(-2);
            var dataDeLiberacao   = DateTime.Today.AddDays(-1);
            var dataDeSolicitacao = DateTime.Today;

            var requisicaoDeCompra = new RequisicaoDeCompra(usuarioCriador, null, null,
                                                            dataDeRemessa, dataDeLiberacao, dataDeSolicitacao, "C001", unidadeDeMedida, 1000,
                                                            material, "Requisição de Compra enviada pelo SAP", "00001", "REQ0001", "GC1", false);

            return(requisicaoDeCompra);
        }
        public void QuandoFiltroRequisicoesAtivasTodasRequisicaoRetornadasEstaoAtivas()
        {
            RemoveQueries.RemoverRequisicoesDeCompraCadastradas();

            RequisicaoDeCompra requisicaoDeCompra1 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();
            RequisicaoDeCompra requisicaoDeCompra2 = DefaultObjects.ObtemRequisicaoDeCompraPadrao();

            requisicaoDeCompra2.Bloquear();

            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicaoDeCompra1);
            DefaultPersistedObjects.PersistirRequisicaoDeCompra(requisicaoDeCompra2);

            var requisicoesDeCompra = ObjectFactory.GetInstance <IRequisicoesDeCompra>();
            var requisicoesAtivas   = requisicoesDeCompra.SomenteAtivas().List();

            Assert.AreEqual(1, requisicoesAtivas.Count);
            Assert.AreEqual(requisicaoDeCompra1.Id, requisicoesAtivas.Single().Id);
        }
        public void QuandoFiltroProcessosDeCotacaoPorRequisicaoDeCompraRetornaApenasProcessosVinculadosComARequisicao()
        {
            //crio duas requisicoes de compra e  um processo para cada requisicão
            ProcessoDeCotacaoDeMaterial processoDeCotacao1  = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAtualizado();
            RequisicaoDeCompra          requisicaoDeCompra1 = ((ProcessoDeCotacaoDeMaterialItem)processoDeCotacao1.Itens.Single()).RequisicaoDeCompra;
            ProcessoDeCotacaoDeMaterial processoDeCotacao2  = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAtualizado();

            DefaultPersistedObjects.PersistirProcessosDeCotacaoDeMaterial(new List <ProcessoDeCotacaoDeMaterial> {
                processoDeCotacao1, processoDeCotacao2
            });

            //filtra os processos por uma das requisições
            var processosDeCotacao   = ObjectFactory.GetInstance <IProcessosDeCotacaoDeMaterial>();
            var processosConsultados = processosDeCotacao.GeradosPelaRequisicaoDeCompra(requisicaoDeCompra1.Id).Count();

            //retorna apenas o processo vinculado com a requisição indicada
            Assert.AreEqual(1, processosConsultados);
            //Assert.AreEqual(processoDeCotacao1.Id, processosConsultados.Single().Id);
        }
        private static RequisicaoDeCompra ObtemRequisicaoDeCompraPadrao(Produto produto)
        {
            var usuarioCriador       = ObtemUsuarioPadrao();
            var fornecedorPretendido = ObtemFornecedorPadrao();

            var dataDeRemessa     = DateTime.Today.AddDays(-2);
            var dataDeLiberacao   = DateTime.Today.AddDays(-1);
            var dataDeSolicitacao = DateTime.Today;

            _contadorRequisicaoCompra++;

            string numeroRequisicao = GeraCodigo(_contadorRequisicaoCompra, 10);
            string numeroItem       = GeraCodigo(_contadorRequisicaoCompra, 5);

            var requisicaoDeCompra = new RequisicaoDeCompra(usuarioCriador, "requisitante", fornecedorPretendido,
                                                            dataDeRemessa, dataDeLiberacao, dataDeSolicitacao, "C001", ObtemUnidadeDeMedidaPadrao(), 1000,
                                                            produto, "Requisição de Compra enviada pelo SAP", numeroItem, numeroRequisicao, "GC1", false);

            return(requisicaoDeCompra);
        }
        public void QuandoConsultoUmaCotacaoDoFornecedorParaUmItemQueAindaNaoFoiPreenchidaRetornaOsDadosEsperados()
        {
            ProcessoDeCotacaoDeMaterial processo = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAbertoPadrao();

            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processo);
            Fornecedor         fornecedor         = processo.FornecedoresParticipantes.First().Fornecedor;
            var                itemDoProcesso     = (ProcessoDeCotacaoDeMaterialItem)processo.Itens.First();
            RequisicaoDeCompra requisicaoDeCompra = itemDoProcesso.RequisicaoDeCompra;

            var consulta = ObjectFactory.GetInstance <IConsultaCotacaoDoFornecedor>();
            CotacaoMaterialItemCadastroVm vm = consulta.ConsultarCotacaoDeItemDeMaterial(processo.Id, fornecedor.Codigo, requisicaoDeCompra.Numero, requisicaoDeCompra.NumeroItem);

            Assert.IsNotNull(vm);
            Assert.AreEqual(itemDoProcesso.Produto.Descricao, vm.Material);
            Assert.AreEqual(itemDoProcesso.Quantidade, vm.Quantidade);
            Assert.AreEqual(itemDoProcesso.UnidadeDeMedida.Descricao, vm.UnidadeDeMedida);
            Assert.IsNull(vm.ValorComImpostos);
            Assert.IsNull(vm.Preco);
            Assert.IsNull(vm.Mva);
        }
        public void Bloquear(int idRequisicaoDeCompra)
        {
            try
            {
                _unitOfWork.BeginTransaction();
                int quantidadeDeProcessosVinculados = _processosDeCotacaoDeMaterial.GeradosPelaRequisicaoDeCompra(idRequisicaoDeCompra).Count();
                if (quantidadeDeProcessosVinculados > 0)
                {
                    throw new RequisicaoDeCompraComProcessoDeCotacaoBloqueioException();
                }

                RequisicaoDeCompra requisicaoDeCompra = _requisicoesDeCompra.BuscaPeloId(idRequisicaoDeCompra);
                requisicaoDeCompra.Bloquear();

                _requisicoesDeCompra.Save(requisicaoDeCompra);

                _unitOfWork.Commit();
            }
            catch (Exception)
            {
                _unitOfWork.RollBack();
                throw;
            }
        }
        public KendoGridVm ConsultarResumo(PaginacaoVm paginacaoVm, EficienciaNegociacaoFiltroVm filtro)
        {
            IQueryOver <ProcessoDeCotacao, ProcessoDeCotacao> queryOver = _processosDeCotacaoDeMaterial.GetQueryOver();

            queryOver = queryOver
                        .Where(x => x.GetType() == typeof(ProcessoDeCotacaoDeMaterial))
                        .And(x => x.Status == Enumeradores.StatusProcessoCotacao.Fechado);

            Usuario compradorAlias = null;

            queryOver = queryOver
                        .JoinAlias(x => x.Comprador, () => compradorAlias);


            if (!string.IsNullOrEmpty(filtro.LoginComprador))
            {
                queryOver = queryOver.Where(() => compradorAlias.Login == filtro.LoginComprador);
            }
            if (filtro.DataDeFechamentoInicial.HasValue)
            {
                queryOver = queryOver.Where(x => x.DataDeFechamento >= filtro.DataDeFechamentoInicial.Value);
            }
            if (filtro.DataDeFechamentoFinal.HasValue)
            {
                queryOver = queryOver.Where(x => x.DataDeFechamento <= filtro.DataDeFechamentoFinal.Value);
            }

            ProcessoDeCotacaoDeMaterialItem processoDeCotacaoItem = null;

            queryOver = queryOver
                        .JoinAlias(x => x.Itens, () => processoDeCotacaoItem);

            //para contabilizar os registros a query deve ser feita antes de fazer junção com as outras tabelas, para evitar repetições.
            //Precisa ter junção apenas com os itens do processo de cotação
            var contadorDeRegistros = queryOver.ToRowCountQuery().SingleOrDefault <int>();

            EficienciaDeNegociacaoResumoVm eficienciaDeNegociacaoResumoVm = null;

            FornecedorParticipante fornecedorParticipante = null;
            Cotacao             cotacao            = null;
            CotacaoMaterialItem cotacaoItem        = null;
            Produto             produto            = null;
            RequisicaoDeCompra  requisicaoDeCompra = null;

            queryOver = queryOver
                        .JoinAlias(() => processoDeCotacaoItem.Produto, () => produto)
                        .JoinAlias(() => processoDeCotacaoItem.RequisicaoDeCompra, () => requisicaoDeCompra)
                        .JoinAlias(x => x.FornecedoresParticipantes, () => fornecedorParticipante)
                        .JoinAlias(() => fornecedorParticipante.Cotacao, () => cotacao)
                        .JoinAlias(() => cotacao.Itens, () => cotacaoItem)
                        .Where(() => cotacaoItem.Selecionada);

            //Para calcular o percentual e o valor de eficiência tive que utilizar SQLProjection porque o método SelectSum()
            // não entende uma expressão lambda, como por exemplo, "() => (PrecoInicial - Preco) * QuantidadeAdquirida)".
            //O método espera uma expressao lambda com o nome de uma propriedade que leve, para uma coluna do mapeamento.
            IProjection projecaoValorDeEficiencia =
                Projections.SqlProjection("SUM((PrecoInicial - Preco) * QuantidadeAdquirida) AS ValorDeEficiencia",
                                          new[] { "ValorDeEficiencia" }, new IType[] { NHibernateUtil.Decimal });

            IProjection projecaoPercentualDeEficiencia =
                Projections.SqlProjection(
                    "ROUND(SUM((PrecoInicial - Preco) * QuantidadeAdquirida) / SUM(PrecoInicial * QuantidadeAdquirida) * 100, 2) AS PercentualDeEficiencia",
                    new[] { "PercentualDeEficiencia" }, new IType[] { NHibernateUtil.Decimal });


            IList <EficienciaDeNegociacaoResumoVm> eficiencias = queryOver
                                                                 .SelectList(list => list
                                                                             .SelectGroup(x => x.Id).WithAlias(() => eficienciaDeNegociacaoResumoVm.IdProcessoCotacao)
                                                                             .SelectGroup(() => processoDeCotacaoItem.Id).WithAlias(() => eficienciaDeNegociacaoResumoVm.IdProcessoCotacaoItem)
                                                                             .SelectGroup(x => compradorAlias.Nome).WithAlias(() => eficienciaDeNegociacaoResumoVm.Comprador)
                                                                             .SelectGroup(() => produto.Descricao).WithAlias(() => eficienciaDeNegociacaoResumoVm.Produto)
                                                                             .SelectGroup(() => requisicaoDeCompra.Numero).WithAlias(() => eficienciaDeNegociacaoResumoVm.NumeroDaRequisicao)
                                                                             .SelectGroup(() => requisicaoDeCompra.NumeroItem).WithAlias(() => eficienciaDeNegociacaoResumoVm.NumeroDoItem)
                                                                             .Select(projecaoValorDeEficiencia)
                                                                             .Select(projecaoPercentualDeEficiencia)
                                                                             )
                                                                 .TransformUsing(Transformers.AliasToBean <EficienciaDeNegociacaoResumoVm>())
                                                                 .Skip(paginacaoVm.Skip)
                                                                 .Take(paginacaoVm.Take)
                                                                 .List <EficienciaDeNegociacaoResumoVm>();

            var eficienciaTotal = queryOver
                                  .SelectList(list => list
                                              .Select(Projections.Constant("TOTAL")).WithAlias(() => eficienciaDeNegociacaoResumoVm.Produto)
                                              .Select(projecaoValorDeEficiencia)
                                              .Select(projecaoPercentualDeEficiencia)
                                              )
                                  .TransformUsing(Transformers.AliasToBean <EficienciaDeNegociacaoResumoVm>())
                                  .SingleOrDefault <EficienciaDeNegociacaoResumoVm>();

            eficiencias.Add(eficienciaTotal);

            return(new KendoGridVm
            {
                QuantidadeDeRegistros = contadorDeRegistros + 1,     //soma 1 por causa do registro de total
                Registros = eficiencias.Cast <ListagemVm>().ToList()
            });
        }
 public void AdicionarRequisicaoDeCompra(RequisicaoDeCompra requisicaoDeCompra)
 {
     _requisicoesDeCompra.Add(requisicaoDeCompra);
 }