Beispiel #1
0
        public async Task <ActionResult <CotacaoItem> > PostCotacaoItem(CotacaoItem cotacaoItem)
        {
            _context.CotacaoItem.Add(cotacaoItem);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetCotacaoItem", new { id = cotacaoItem.CotacaoItemId }, cotacaoItem));
        }
Beispiel #2
0
        public async Task <IActionResult> PutCotacaoItem(int id, CotacaoItem cotacaoItem)
        {
            if (id != cotacaoItem.CotacaoItemId)
            {
                return(BadRequest());
            }

            _context.Entry(cotacaoItem).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CotacaoItemExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public void QuandoCalculoBaseDeCalculoDeUmImpostoPadraoRetornaOPrecoDoItem()
        {
            ProcessoDeCotacaoDeMaterial processoDeCotacao = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialComCotacaoDoFornecedor();
            CotacaoItem cotacaoItem   = processoDeCotacao.FornecedoresParticipantes.Single().Cotacao.Itens.Single();
            var         calculador    = new CalculadorDeBaseDeCalculoPadrao();
            decimal     baseDeCalculo = calculador.Calcular(cotacaoItem);

            Assert.AreEqual(cotacaoItem.Preco, baseDeCalculo);
        }
Beispiel #4
0
        public void AtualizarImpostos(CotacaoItem cotacao, CotacaoImpostosVm cotacaoInformarVm)
        {
            cotacao.InformarImposto(Enumeradores.TipoDeImposto.Icms, cotacaoInformarVm.IcmsAliquota.Value);
            cotacao.InformarImposto(Enumeradores.TipoDeImposto.IcmsSubstituicao, cotacaoInformarVm.IcmsStAliquota.Value);
            cotacao.InformarImposto(Enumeradores.TipoDeImposto.Ipi, cotacaoInformarVm.IpiAliquota.Value);
            cotacao.InformarImposto(Enumeradores.TipoDeImposto.PisCofins, cotacaoInformarVm.PisCofinsAliquota.Value);

            //cotacao.InformarImposto(Enumeradores.TipoDeImposto.Pis, cotacaoInformarVm.PisAliquota, cotacaoInformarVm.PisValor);
            //cotacao.InformarImposto(Enumeradores.TipoDeImposto.Cofins, cotacaoInformarVm.CofinsAliquota, cotacaoInformarVm.CofinsValor);
        }
Beispiel #5
0
        //public ComunicacaoFechamentoProcessoCotacaoFrete(CredencialSap credencialSap)
        //{
        //    _comunicacaoSap = new ComunicacaoSap<ListaProcessoDeCotacaoDeFreteFechamento>(credencialSap);
        //}

        public ApiResponseMessage EfetuarComunicacao(ProcessoDeCotacao processo)
        {
            ProcessoDeCotacaoItem item = processo.Itens.First();

            if (item.Produto.NaoEstocavel)
            {
                //Cotações de frete para empresas do grupo que não utilizam o SAP deverão ser realizadas com material NLAG
                //(Material não estocável). Para este tipo de material a cotação não deverá ser enviada para o SAP;
                return(new ApiResponseMessage
                {
                    Retorno = new Retorno
                    {
                        Codigo = "200",
                        Texto = "S"
                    }
                });
            }

            var mensagemParaEnviar = new ListaProcessoDeCotacaoDeFreteFechamento();

            var processoAuxiliar = (ProcessoDeCotacaoDeFrete)processo.CastEntity();

            foreach (var fornecedorParticipante in processoAuxiliar.FornecedoresParticipantes)
            {
                if (fornecedorParticipante.Cotacao != null && fornecedorParticipante.Cotacao.Itens.First().Selecionada)
                {
                    CotacaoItem itemDaCotacao = fornecedorParticipante.Cotacao.Itens.First();
                    mensagemParaEnviar.Add(new ProcessoDeCotacaoDeFreteFechamentoComunicacaoSapVm
                    {
                        CodigoTransportadora = fornecedorParticipante.Fornecedor.Codigo,
                        //CodigoMaterial = processoAuxiliar.Produto.Codigo,
                        CodigoMaterial = item.Produto.Codigo,
                        //CodigoUnidadeMedida = processoAuxiliar.UnidadeDeMedida.CodigoInterno,
                        CodigoUnidadeMedida   = item.UnidadeDeMedida.CodigoInterno,
                        CodigoItinerario      = processoAuxiliar.Itinerario.Codigo,
                        DataDeValidadeInicial = processoAuxiliar.DataDeValidadeInicial.ToString("yyyyMMdd"),
                        DataDeValidaFinal     = processoAuxiliar.DataDeValidadeFinal.ToString("yyyyMMdd"),
                        NumeroDoContrato      = processoAuxiliar.NumeroDoContrato ?? "",
                        Valor = itemDaCotacao.ValorComImpostos
                    });
                }
            }

            ApiResponseMessage apiResponseMessage =
                _comunicacaoSap.EnviarMensagem(
                    "/HttpAdapter/HttpMessageServlet?senderParty=PORTAL&senderService=HTTP&interfaceNamespace=http://portal.bsbios.com.br/&interface=si_cotacaoFreteFechamento_portal&qos=be"
                    , mensagemParaEnviar);

            if (apiResponseMessage.Retorno.Codigo == "E")
            {
                throw new ComunicacaoSapException("json", "Ocorreu um erro ao comunicar o fechamento do Processo de Cotação de Frete para o SAP. Detalhes: " + apiResponseMessage.Retorno.Texto);
            }
            return(apiResponseMessage);
        }
        public void QuandoCalculaBaseDeCalculoDeUmImpostoComRetencaoRetornaValorCorreto()
        {
            ProcessoDeCotacaoDeMaterial processoDeCotacao = DefaultObjects.ObtemProcessoDeCotacaoDeMaterialDeMateriaPrima();
            Fornecedor fornecedor = DefaultObjects.ObtemFornecedorPadrao();

            processoDeCotacao.AdicionarFornecedor(fornecedor);
            processoDeCotacao.Abrir(DefaultObjects.ObtemUsuarioPadrao());
            CotacaoMaterial cotacao = processoDeCotacao.InformarCotacao(fornecedor.Codigo, DefaultObjects.ObtemCondicaoDePagamentoPadrao(),
                                                                        DefaultObjects.ObtemIncotermPadrao(), "descriçao");
            var         processoDeCotacaoDeMaterialItem = (ProcessoDeCotacaoDeMaterialItem)processoDeCotacao.Itens.Single();
            CotacaoItem cotacaoItem = cotacao.InformarCotacaoDeItem(processoDeCotacaoDeMaterialItem, 100, 0, 10, DateTime.Today.AddDays(10), "obs");

            cotacaoItem.InformarImposto(Enumeradores.TipoDeImposto.Icms, 12);
            cotacaoItem.InformarImposto(Enumeradores.TipoDeImposto.PisCofins, (decimal)9.25);
            var     calculador    = new CalculadorDeBaseDeCalculoComCreditoDeImpostos();
            decimal baseDeCalculo = calculador.Calcular(cotacaoItem);

            Assert.AreEqual((decimal)78.75, baseDeCalculo);
        }
        public void ConsigoConsultarCotacaoResumidaDosFornecedoresDeUmProcessoDeCotacaoDeFrete()
        {
            ProcessoDeCotacaoDeFrete processo = DefaultObjects.ObtemProcessoDeCotacaoDeFreteComCotacaoNaoSelecionada();

            DefaultPersistedObjects.PersistirProcessoDeCotacaoDeFrete(processo);
            FornecedorParticipante fornecedorParticipante = processo.FornecedoresParticipantes.Single();
            Fornecedor             fornecedor             = fornecedorParticipante.Fornecedor;
            CotacaoItem            cotacaoItem            = fornecedorParticipante.Cotacao.Itens.Single();

            var         consulta    = ObjectFactory.GetInstance <IConsultaProcessoDeCotacaoDeFrete>();
            KendoGridVm kendoGridVm = consulta.CotacoesDosFornecedoresResumido(processo.Id);

            Assert.AreEqual(1, kendoGridVm.QuantidadeDeRegistros);
            ProcessoCotacaoFornecedorVm vm = kendoGridVm.Registros.Cast <ProcessoCotacaoFornecedorVm>().Single();

            Assert.AreEqual(fornecedor.Codigo, vm.Codigo);
            Assert.AreEqual(fornecedor.Nome, vm.Nome);
            Assert.AreEqual(fornecedorParticipante.Id, vm.IdFornecedorParticipante);
            Assert.AreEqual(cotacaoItem.QuantidadeDisponivel, vm.QuantidadeDisponivel);
            Assert.AreEqual("Não", vm.Selecionado);
            Assert.AreEqual(cotacaoItem.ValorComImpostos, vm.ValorComImpostos);
            Assert.AreEqual(cotacaoItem.Preco, vm.ValorLiquido);
        }
Beispiel #8
0
        public void AtualizarItemDaCotacao(CotacaoMaterialItemInformarVm cotacaoMaterialItemInformarVm)
        {
            try
            {
                _unitOfWork.BeginTransaction();
                var         processoDeCotacao = (ProcessoDeCotacaoDeMaterial)_processosDeCotacao.BuscaPorId(cotacaoMaterialItemInformarVm.IdProcessoCotacao).Single();
                CotacaoItem cotacaoItem       = processoDeCotacao.InformarCotacaoDeItem(cotacaoMaterialItemInformarVm.IdProcessoCotacaoItem,
                                                                                        cotacaoMaterialItemInformarVm.IdCotacao,
                                                                                        cotacaoMaterialItemInformarVm.Preco.Value,
                                                                                        cotacaoMaterialItemInformarVm.Mva,
                                                                                        cotacaoMaterialItemInformarVm.QuantidadeDisponivel.Value,
                                                                                        Convert.ToDateTime(cotacaoMaterialItemInformarVm.PrazoDeEntrega),
                                                                                        cotacaoMaterialItemInformarVm.ObservacoesDoFornecedor);

                AtualizarImpostos(cotacaoItem, cotacaoMaterialItemInformarVm.Impostos);
                _processosDeCotacao.Save(processoDeCotacao);
                _unitOfWork.Commit();
            }
            catch (Exception)
            {
                _unitOfWork.RollBack();
                throw;
            }
        }
 public decimal Calcular(CotacaoItem cotacaoItem)
 {
     return(cotacaoItem.Preco - cotacaoItem.ValorDoImposto(Enumeradores.TipoDeImposto.Icms) -
            cotacaoItem.ValorDoImposto(Enumeradores.TipoDeImposto.PisCofins));
 }
        public CotacaoMaterialItemCadastroVm ConsultarCotacaoDeItemDeMaterial(int idProcessoCotacao, string codigoFornecedor,
                                                                              string numeroDaRequisicao, string numeroDoItemDaRequisicao)
        {
            var processoDeCotacao = (ProcessoDeCotacaoDeMaterial)_processosDeCotacao.BuscaPorId(idProcessoCotacao).Single();

            var itemDoProcessoDeCotacao = processoDeCotacao.Itens.Single(item =>
            {
                var itemMaterial = (ProcessoDeCotacaoDeMaterialItem)item;
                return(itemMaterial.RequisicaoDeCompra.Numero == numeroDaRequisicao &&
                       itemMaterial.RequisicaoDeCompra.NumeroItem == numeroDoItemDaRequisicao);
            });

            var vm = new CotacaoMaterialItemCadastroVm
            {
                IdProcessoCotacao     = idProcessoCotacao,
                IdProcessoCotacaoItem = itemDoProcessoDeCotacao.Id,
                Material        = itemDoProcessoDeCotacao.Produto.Descricao,
                Quantidade      = itemDoProcessoDeCotacao.Quantidade,
                UnidadeDeMedida = itemDoProcessoDeCotacao.UnidadeDeMedida.Descricao
            };

            var fp = processoDeCotacao.FornecedoresParticipantes.Single(x => x.Fornecedor.Codigo == codigoFornecedor);

            CotacaoItem itemCotacao = null;

            if (fp.Cotacao != null)
            {
                vm.IdCotacao = fp.Cotacao.Id;
                itemCotacao  = fp.Cotacao.Itens.SingleOrDefault(x => x.ProcessoDeCotacaoItem.Id == itemDoProcessoDeCotacao.Id);
            }

            if (itemCotacao != null)
            {
                var itemCotacaoMaterial = (CotacaoMaterialItem)itemCotacao;
                vm.IdCotacao               = fp.Cotacao.Id;
                vm.IdCotacaoItem           = itemCotacaoMaterial.Id;
                vm.Mva                     = itemCotacaoMaterial.Mva;
                vm.Preco                   = itemCotacaoMaterial.Preco;
                vm.ValorComImpostos        = itemCotacaoMaterial.ValorComImpostos;
                vm.Custo                   = itemCotacaoMaterial.Custo;
                vm.ObservacoesDoFornecedor = itemCotacaoMaterial.Observacoes;
                vm.PrazoDeEntrega          = itemCotacaoMaterial.PrazoDeEntrega.ToShortDateString();
                vm.QuantidadeDisponivel    = itemCotacao.QuantidadeDisponivel;

                vm.Impostos = _builderImpostos.BuildSingle(itemCotacaoMaterial);
            }
            else
            {
                vm.Impostos = new CotacaoImpostosVm();
            }
            Usuario usuarioConectado = _usuarios.UsuarioConectado();

            vm.PermiteVisualizarCustos = usuarioConectado.Permissao.PermiteVisualizarCustos;

            return(vm);


            //esta foi uma tentativa de fazer toda a consulta em uma única query, mas não chegou a ser testada
            //var query = _processosDeCotacao.GetQuery();

            //var vm = (from pc in query
            //         from fp in pc.FornecedoresParticipantes
            //         where fp.Fornecedor.Codigo == codigoFornecedor
            //         from itemProcesso in pc.Itens
            //         let itemProcessoMaterial = (ProcessoDeCotacaoDeMaterialItem) itemProcesso
            //         where itemProcessoMaterial.RequisicaoDeCompra.Numero == numeroDaRequisicao
            //               && itemProcessoMaterial.RequisicaoDeCompra.NumeroItem == numeroDoItemDaRequisicao
            //         from cotacaoItem in fp.Cotacao.Itens
            //         where itemProcessoMaterial.Id == cotacaoItem.ProcessoDeCotacaoItem.Id
            //         select new CotacaoMaterialItemCadastroVm
            //             {
            //                 IdProcessoCotacao = idProcessoCotacao,
            //                 IdCotacao = fp.Cotacao.Id,
            //                 IdCotacaoItem = cotacaoItem.Id,
            //                 IdProcessoCotacaoItem = itemProcessoMaterial.Id,
            //                 Material = itemProcessoMaterial.Produto.Descricao
            //             }
            //        ).SingleOrDefault();
        }
 public decimal Calcular(CotacaoItem cotacaoItem)
 {
     return(cotacaoItem.Preco);
 }
        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]);
        }