예제 #1
0
        public ProcessoDeCotacaoDeFreteFechamentoTests()
        {
            _unitOfWorkMock         = CommonMocks.DefaultUnitOfWorkMock();
            _processosDeCotacaoMock = new Mock <IProcessosDeCotacao>(MockBehavior.Strict);
            _processosDeCotacaoMock.Setup(x => x.Save(It.IsAny <ProcessoDeCotacao>()))
            .Callback(
                (ProcessoDeCotacao processoDeCotacao) =>
            {
                _unitOfWorkMock.Verify(x => x.BeginTransaction(), Times.Once());
                _unitOfWorkMock.Verify(x => x.Commit(), Times.Never());
                Assert.IsNotNull(processoDeCotacao);
                foreach (var fornecedorParticipante in processoDeCotacao.FornecedoresParticipantes)
                {
                    Assert.IsNotNull(fornecedorParticipante);
                }
            });

            _processosDeCotacaoMock.Setup(x => x.BuscaPorId(It.IsAny <int>()))
            .Returns(_processosDeCotacaoMock.Object)
            .Callback((int idProcessoCotacao) =>
            {
                _unitOfWorkMock.Verify(x => x.BeginTransaction(), Times.Once());
                _unitOfWorkMock.Verify(x => x.Commit(), Times.Never());
                if (idProcessoCotacao == 10)
                {
                    _processoDeCotacao    = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAtualizado();
                    Fornecedor fornecedor = DefaultObjects.ObtemFornecedorPadrao();
                    _processoDeCotacao.AdicionarFornecedor(fornecedor);
                    _processoDeCotacao.Abrir(DefaultObjects.ObtemCompradorDeSuprimentos());
                    _processoDeCotacao.InformarCotacao(fornecedor.Codigo, DefaultObjects.ObtemCondicaoDePagamentoPadrao(), DefaultObjects.ObtemIncotermPadrao(), "desc incoterm");
                    _processoDeCotacao.InformarCotacaoDeItem(0, 0, 10, 1, 100, DateTime.Today.AddDays(10), "obs");
                    _processoDeCotacao.SelecionarCotacao(0, 0, 1, null);
                }
                if (idProcessoCotacao == 20)
                {
                    _processoDeCotacao   = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAbertoPadrao();
                    var codigoFornecedor = _processoDeCotacao.FornecedoresParticipantes.First().Fornecedor.Codigo;
                    var cotacao          = _processoDeCotacao.InformarCotacao(codigoFornecedor, DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                                              DefaultObjects.ObtemIncotermPadrao(), "inc");
                    var processoCotacaoItem = _processoDeCotacao.Itens.First();
                    var cotacaoItem         = (CotacaoMaterialItem)cotacao.InformarCotacaoDeItem(processoCotacaoItem, 150, null, 100, DateTime.Today.AddMonths(1), "obs fornec");
                    cotacaoItem.Selecionar(100, DefaultObjects.ObtemIvaPadrao());
                }
                if (idProcessoCotacao == 30)
                {
                    _processoDeCotacao = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialFechado();
                }
            });

            _processosDeCotacaoMock.Setup(x => x.Single()).Returns(() => _processoDeCotacao);

            _geradorDeEmailMock = new Mock <IGeradorDeEmailDeFechamentoDeProcessoDeCotacao>(MockBehavior.Strict);
            _geradorDeEmailMock.Setup(x => x.GerarEmail(It.IsAny <ProcessoDeCotacao>()));

            _comunicacaoSapMock = new Mock <IProcessoDeCotacaoComunicacaoSap>(MockBehavior.Strict);
            _comunicacaoSapMock.Setup(x => x.EfetuarComunicacao(It.IsAny <ProcessoDeCotacao>()))
            .Returns(new ApiResponseMessage
            {
                Retorno = new Retorno {
                    Codigo = "200", Texto = "S"
                }
            });

            _fechamentoDeProcessoDeCotacaoService = new FechamentoDeProcessoDeCotacaoDeFreteService(_unitOfWorkMock.Object, _processosDeCotacaoMock.Object,
                                                                                                    _geradorDeEmailMock.Object, _comunicacaoSapMock.Object);
        }
        public void ConsigoPersistirEConsultarUmProcessoDeCotacaoComHistoricoDePrecos()
        {
            ProcessoDeCotacaoDeMaterial processo  = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAberto(DefaultObjects.ObtemCompradorDeSuprimentos());
            string          codigoFornecedor      = processo.FornecedoresParticipantes.Single().Fornecedor.Codigo;
            int             idProcessoCotacaoItem = processo.Itens.Single().Id;
            CotacaoMaterial cotacao     = processo.InformarCotacao(codigoFornecedor, DefaultObjects.ObtemCondicaoDePagamentoPadrao(), DefaultObjects.ObtemIncotermPadrao(), "inc");
            var             cotacaoItem = (CotacaoMaterialItem)processo.InformarCotacaoDeItem(idProcessoCotacaoItem, cotacao.Id, 100, 0, 20, DateTime.Today.AddDays(5), "obs");

            cotacaoItem.Atualizar(95, 0, 20, DateTime.Today.AddDays(5), "obs");
            Assert.AreEqual(2, cotacaoItem.HistoricosDePreco.Count);

            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processo);

            var processosDeCotacaoDeMaterial = ObjectFactory.GetInstance <IProcessosDeCotacao>();

            var processoConsultado = processosDeCotacaoDeMaterial.BuscaPorId(processo.Id).Single();

            Assert.AreEqual(2, processoConsultado.FornecedoresParticipantes.Single().Cotacao.Itens.Single().HistoricosDePreco.Count);
        }
예제 #3
0
        public void QuandoAtualizoUmaItemDaCotacaoEoPrecoEAlteradoAdicionaHistoricoDePreco()
        {
            ProcessoDeCotacaoDeMaterial processo  = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAberto(DefaultObjects.ObtemCompradorDeSuprimentos());
            string          codigoFornecedor      = processo.FornecedoresParticipantes.Single().Fornecedor.Codigo;
            int             idProcessoCotacaoItem = processo.Itens.Single().Id;
            CotacaoMaterial cotacao     = processo.InformarCotacao(codigoFornecedor, DefaultObjects.ObtemCondicaoDePagamentoPadrao(), DefaultObjects.ObtemIncotermPadrao(), "inc");
            var             cotacaoItem = (CotacaoMaterialItem)processo.InformarCotacaoDeItem(idProcessoCotacaoItem, cotacao.Id, 100, 0, 20, DateTime.Today.AddDays(5), "obs");

            Assert.AreEqual(1, cotacaoItem.HistoricosDePreco.Count);
            cotacaoItem.Atualizar(95, 0, 20, DateTime.Now.Date, "obs");
            Assert.AreEqual(2, cotacaoItem.HistoricosDePreco.Count);
            Assert.AreEqual(95, cotacaoItem.HistoricosDePreco.Last().Valor);
        }
예제 #4
0
        public void QuandoConsultaEficienciaNegociacaoRetornaEficienciaDosProcessosFechados()
        {
            RemoveQueries.RemoverProcessosDeCotacaoCadastrados();
            //cria dois compradores
            Usuario comprador1 = DefaultObjects.ObtemCompradorDeSuprimentos();
            Usuario comprador2 = DefaultObjects.ObtemCompradorDeSuprimentos();

            //cria um processo aberto e um fechado para o comprador1
            ProcessoDeCotacaoDeMaterial processo11 = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAberto(comprador1);
            var cotacaoMaterial11 = processo11.InformarCotacao(processo11.FornecedoresParticipantes.Single().Fornecedor.Codigo,
                                                               DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                               DefaultObjects.ObtemIncotermPadrao(), "incoterm 2");

            var cotacaoItem11 = cotacaoMaterial11.InformarCotacaoDeItem(processo11.Itens.Single(), 100, 0, 50, DateTime.Today.AddDays(5), "obs11");

            cotacaoItem11.InformarImposto(Enumeradores.TipoDeImposto.Icms, 12);
            cotacaoItem11.InformarImposto(Enumeradores.TipoDeImposto.Ipi, 10);
            cotacaoItem11.InformarImposto(Enumeradores.TipoDeImposto.PisCofins, 9);

            var processoDeCotacaoItem11 = (ProcessoDeCotacaoDeMaterialItem)processo11.Itens.Single();

            //cotacaoItem11.Atualizar(95,50,"obs11");
            cotacaoItem11.Selecionar(50);
            processo11.Fechar();

            ProcessoDeCotacaoDeMaterial processo12 = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAberto(comprador1);

            //cria um processo aberto e um fechado para o comprador2
            ProcessoDeCotacaoDeMaterial processo21 = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAberto(comprador2);
            var cotacaoMaterial21 = processo21.InformarCotacao(processo21.FornecedoresParticipantes.Single().Fornecedor.Codigo,
                                                               DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                               DefaultObjects.ObtemIncotermPadrao(), "incoterm 2");

            var cotacaoItem21 = cotacaoMaterial21.InformarCotacaoDeItem(processo21.Itens.Single(), 110, 0, 50, DateTime.Today.AddDays(5), "obs21");

            cotacaoItem21.InformarImposto(Enumeradores.TipoDeImposto.Icms, 12);
            cotacaoItem21.InformarImposto(Enumeradores.TipoDeImposto.Ipi, 10);
            cotacaoItem21.InformarImposto(Enumeradores.TipoDeImposto.PisCofins, 9);

            cotacaoItem21.Atualizar(99, 50, "obs21");

            cotacaoItem21.Selecionar(50);

            processo21.Fechar();

            var processoDeCotacaoItem21 = (ProcessoDeCotacaoDeMaterialItem)processo21.Itens.Single();

            ProcessoDeCotacaoDeMaterial processo22 = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAberto(comprador2);

            DefaultPersistedObjects.PersistirProcessosDeCotacaoDeMaterial(new List <ProcessoDeCotacaoDeMaterial>
            {
                processo11, processo12, processo21, processo22
            });


            var         consulta    = ObjectFactory.GetInstance <IConsultaEficienciaDeNegociacao>();
            KendoGridVm kendoGridVm = consulta.ConsultarResumo(DefaultObjects.ObtemPaginacaoDefault(), new EficienciaNegociacaoFiltroVm());

            //retorna um registro para cada comprador
            Assert.AreEqual(3, kendoGridVm.QuantidadeDeRegistros);

            var eficiencias = kendoGridVm.Registros.Cast <EficienciaDeNegociacaoResumoVm>().ToList();

            var eficienciaDoComprador1 = eficiencias.Single(x => x.Comprador == comprador1.Nome);

            Assert.AreEqual(processo11.Id, eficienciaDoComprador1.IdProcessoCotacao);
            Assert.AreEqual(processoDeCotacaoItem11.Id, eficienciaDoComprador1.IdProcessoCotacaoItem);
            Assert.AreEqual(cotacaoItem11.ProcessoDeCotacaoItem.Produto.Descricao, eficienciaDoComprador1.Produto);
            Assert.AreEqual(processoDeCotacaoItem11.RequisicaoDeCompra.Numero, eficienciaDoComprador1.NumeroDaRequisicao);
            Assert.AreEqual(processoDeCotacaoItem11.RequisicaoDeCompra.NumeroItem, eficienciaDoComprador1.NumeroDoItem);
            Assert.AreEqual(0, eficienciaDoComprador1.ValorDeEficiencia);
            Assert.AreEqual(0, eficienciaDoComprador1.PercentualDeEficiencia);

            var eficienciaDoComprador2 = eficiencias.Single(x => x.Comprador == comprador2.Nome);

            Assert.AreEqual(processo21.Id, eficienciaDoComprador2.IdProcessoCotacao);
            Assert.AreEqual(processoDeCotacaoItem21.Id, eficienciaDoComprador2.IdProcessoCotacaoItem);
            Assert.AreEqual(cotacaoItem21.ProcessoDeCotacaoItem.Produto.Descricao, eficienciaDoComprador2.Produto);
            Assert.AreEqual(processoDeCotacaoItem21.RequisicaoDeCompra.Numero, eficienciaDoComprador2.NumeroDaRequisicao);
            Assert.AreEqual(processoDeCotacaoItem21.RequisicaoDeCompra.NumeroItem, eficienciaDoComprador2.NumeroDoItem);
            Assert.AreEqual(550, eficienciaDoComprador2.ValorDeEficiencia);
            Assert.AreEqual(10, eficienciaDoComprador2.PercentualDeEficiencia);

            var eficienciaTotal = eficiencias.Single(x => x.Produto == "TOTAL");

            Assert.IsNotNull(eficienciaTotal);
            Assert.AreEqual(550, eficienciaTotal.ValorDeEficiencia);
            Assert.AreEqual((decimal)5.24, eficienciaTotal.PercentualDeEficiencia);
        }
        public void ConsigoConsultarAsCotacoesDetalhadasDeTodosOsFornecedores()
        {
            Fornecedor fornecedor1 = DefaultObjects.ObtemFornecedorPadrao();
            Fornecedor fornecedor2 = DefaultObjects.ObtemFornecedorPadrao();
            Fornecedor fornecedor3 = DefaultObjects.ObtemFornecedorPadrao();
            //crio um processo de cotação com um item e três fornecedores.
            ProcessoDeCotacaoDeMaterial processoDeCotacao = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialAtualizado();

            ProcessoDeCotacaoItem processoDeCotacaoItem = processoDeCotacao.Itens.Single();

            processoDeCotacao.AdicionarFornecedor(fornecedor1);
            processoDeCotacao.AdicionarFornecedor(fornecedor2);
            processoDeCotacao.AdicionarFornecedor(fornecedor3);

            processoDeCotacao.Abrir(DefaultObjects.ObtemCompradorDeSuprimentos());

            //para os fornecedores 1 e 3 informo o preço duas vezes
            CotacaoMaterial cotacaoFornecedor1 = processoDeCotacao.InformarCotacao(fornecedor1.Codigo, DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                                                   DefaultObjects.ObtemIncotermPadrao(), "inc");

            CotacaoItem cotacaoItemFornecedor1 = cotacaoFornecedor1.InformarCotacaoDeItem(processoDeCotacaoItem, 1000, 0, 200, DateTime.Today.AddDays(10), "OBS");

            cotacaoFornecedor1.InformarCotacaoDeItem(processoDeCotacaoItem, 995, 0, 200, DateTime.Today.AddDays(10), "OBS");

            CotacaoMaterial cotacaoFornecedor3 = processoDeCotacao.InformarCotacao(fornecedor3.Codigo, DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                                                   DefaultObjects.ObtemIncotermPadrao(), "inc");

            cotacaoFornecedor3.InformarCotacaoDeItem(processoDeCotacaoItem, 1010, 0, 100, DateTime.Today.AddDays(10), "OBS");
            cotacaoFornecedor3.InformarCotacaoDeItem(processoDeCotacaoItem, 1000, 0, 100, DateTime.Today.AddDays(10), "OBS");

            //para o fornecedor 2 informo o preço apenas uma vez
            CotacaoMaterial cotacaoFornecedor2 = processoDeCotacao.InformarCotacao(fornecedor2.Codigo, DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                                                   DefaultObjects.ObtemIncotermPadrao(), "inc");

            cotacaoFornecedor2.InformarCotacaoDeItem(processoDeCotacaoItem, 1200, 0, 100, DateTime.Today.AddDays(10), "OBS");

            //seleciono apenas o fornecedor 1
            cotacaoItemFornecedor1.Selecionar(200);

            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeMaterial(processoDeCotacao);

            var consultaProcesso = ObjectFactory.GetInstance <IConsultaProcessoDeCotacaoDeMaterial>();
            IList <FornecedorCotacaoVm> cotacoes = consultaProcesso.CotacoesDetalhadaDosFornecedores(processoDeCotacao.Id, processoDeCotacaoItem.Id);

            Assert.AreEqual(3, cotacoes.Count);

            //asserts fornecedor 1
            FornecedorCotacaoVm fornecedorCotacaoVm1 = cotacoes.Single(x => x.Codigo == fornecedor1.Codigo);

            Assert.AreEqual(1000, fornecedorCotacaoVm1.PrecoInicial);
            Assert.AreEqual(995, fornecedorCotacaoVm1.PrecoFinal);
            Assert.IsTrue(fornecedorCotacaoVm1.Selecionada);
            Assert.AreEqual(200, fornecedorCotacaoVm1.QuantidadeAdquirida);
            //Assert.AreEqual(2, fornecedorCotacaoVm1.Precos.Length);
            Assert.AreEqual(2, fornecedorCotacaoVm1.Precos.Count());

            Assert.AreEqual(1000, fornecedorCotacaoVm1.Precos[0]);
            Assert.AreEqual(995, fornecedorCotacaoVm1.Precos[1]);

            //asserts fornecedor 2
            FornecedorCotacaoVm fornecedorCotacaoVm2 = cotacoes.Single(x => x.Codigo == fornecedor2.Codigo);

            Assert.AreEqual(1200, fornecedorCotacaoVm2.PrecoInicial);
            Assert.AreEqual(1200, fornecedorCotacaoVm2.PrecoFinal);
            Assert.IsFalse(fornecedorCotacaoVm2.Selecionada);
            Assert.AreEqual(0, fornecedorCotacaoVm2.QuantidadeAdquirida);
            //Assert.AreEqual(1, fornecedorCotacaoVm2.Precos.Length);
            Assert.AreEqual(1, fornecedorCotacaoVm2.Precos.Count());

            Assert.AreEqual(1200, fornecedorCotacaoVm2.Precos[0]);

            //asserts fornecedor 3
            FornecedorCotacaoVm fornecedorCotacaoVm3 = cotacoes.Single(x => x.Codigo == fornecedor3.Codigo);

            Assert.AreEqual(1010, fornecedorCotacaoVm3.PrecoInicial);
            Assert.AreEqual(1000, fornecedorCotacaoVm3.PrecoFinal);
            Assert.IsFalse(fornecedorCotacaoVm3.Selecionada);
            Assert.AreEqual(0, fornecedorCotacaoVm3.QuantidadeAdquirida);
            //Assert.AreEqual(2, fornecedorCotacaoVm3.Precos.Length);
            Assert.AreEqual(2, fornecedorCotacaoVm3.Precos.Count());

            Assert.AreEqual(1010, fornecedorCotacaoVm3.Precos[0]);
            Assert.AreEqual(1000, fornecedorCotacaoVm3.Precos[1]);
        }