public IHttpActionResult CalculaFrete(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(Content(HttpStatusCode.NotFound, "Order does not exist."));
            }

            if (User.IsInRole("ADMIN") || User.Identity.Name == order.email)
            {
                CRMRestClient crmClient = new CRMRestClient();
                Customer      customer  = crmClient.GetCustomerByEmail(order.email);
                if (customer != null)
                {
                    decimal altura = 0, comprimento = 0, largura = 0;
                    order.pesoTotal  = 0;
                    order.precoTotal = 0;
                    foreach (OrderItem orderItem in order.OrderItems)
                    {
                        int quantidade = orderItem.quantidade;
                        if (orderItem.Product.altura > altura)
                        {
                            altura = orderItem.Product.altura;
                        }
                        if (orderItem.Product.largura > largura)
                        {
                            largura = orderItem.Product.largura;
                        }
                        comprimento      += orderItem.Product.comprimento * quantidade;
                        order.pesoTotal  += orderItem.Product.peso * quantidade;
                        order.precoTotal += orderItem.Product.preco * quantidade;
                    }
                    string           frete;
                    CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
                    cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", customer.zip, order.pesoTotal.ToString(), 1, comprimento, altura, largura, 0, "N", 100, "S");
                    if (resultado.Servicos[0].Erro.Equals("0"))
                    {
                        NumberFormatInfo numberFormat = new NumberFormatInfo();
                        numberFormat.NumberDecimalSeparator = ",";
                        order.precoFrete  = Decimal.Parse(resultado.Servicos[0].Valor, numberFormat);
                        order.dataEntrega = order.dataPedido.AddDays(Int32.Parse(resultado.Servicos[0].PrazoEntrega));
                        frete             = "Valor do frete: " + order.precoFrete + " - Prazo de entrega: " + order.dataEntrega;
                        db.SaveChanges();

                        return(Ok(frete));
                    }
                    else
                    {
                        return(BadRequest("Código do erro: " + resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                    }
                }
                else
                {
                    return(BadRequest("Falha ao consultar o CRM"));
                }
            }

            return(BadRequest("Authorization Denied! Only admin or the order owner allowed!"));
        }
Esempio n. 2
0
        public JsonResult CorreiosCalc(string cep)
        {
            string  nCdEmpresa          = string.Empty;
            string  sDsSenha            = string.Empty;
            string  nCdServico          = "41106";
            string  sCepOrigem          = "36774016";
            string  sCepDestino         = cep;
            string  nVlPeso             = 2.ToString();
            int     nCdFormato          = 1;
            decimal nVlComprimento      = 20;
            decimal nVlAltura           = 20;
            decimal nVlLargura          = 20;
            decimal nVlDiametro         = 0;
            string  sCdMaoPropria       = "N";
            decimal nVlValorDeclarado   = 0;
            string  sCdAvisoRecebimento = "N";
            string  data = DateTime.Now.ToString("dd/MM/yyyy");

            CalcPrecoPrazoWSSoapClient wsCorreios = new CalcPrecoPrazoWSSoapClient();

            cResultado retornoCorreios = wsCorreios.CalcPrecoPrazoData(nCdEmpresa, sDsSenha,
                                                                       nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento, nVlAltura,
                                                                       nVlLargura, nVlDiametro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento,
                                                                       data);


            string[] result = new string[3];

            result[0] = retornoCorreios.Servicos[0].Valor;
            result[1] = retornoCorreios.Servicos[0].PrazoEntrega;

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Esempio n. 3
0
        public JsonResult CalcCEP(string cep)
        {
            string  nCdEmpresa          = string.Empty;
            string  sDsSenha            = string.Empty;
            string  nCdServico          = "41106";
            string  sCepOrigem          = "19940000";
            string  sCepDestino         = cep.Replace("-", "");
            string  nVlPeso             = Convert.ToString(1);
            int     nCdFormato          = 1;
            decimal nVlAltura           = 20;
            decimal nVlComprimento      = 20;
            decimal nVlLargura          = 20;
            decimal nVlDiametro         = 0;
            string  sCdMaoPropria       = "N";
            decimal nVlValorDeclarado   = 0;
            string  sCdAvisoRecebimento = "N";


            CalcPrecoPrazoWSSoapClient wsCorreios = new CalcPrecoPrazoWSSoapClient();
            cResultado retornoCorreios            = wsCorreios.CalcPrecoPrazo(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento,
                                                                              nVlAltura, nVlLargura, nVlDiametro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);

            string[] result = new string[2];
            result[0] = retornoCorreios.Servicos[0].PrazoEntrega;
            result[1] = retornoCorreios.Servicos[0].Valor;
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Esempio n. 4
0
        private async Task <ValorPrazoFrete> CalcularValorPrazoFrete(String cepDestino, String tipoFrete, Pacote pacote)
        {
            var cepOrigem        = _configuration.GetValue <String>("Frete:CepOrigem");
            var maoPropria       = _configuration.GetValue <String>("Frete:MaoPropria");
            var avisoRecebimento = _configuration.GetValue <String>("Frete:AvisoRecebimento");
            var diametro         = Math.Max(Math.Max(pacote.Comprimento, pacote.Largura), pacote.Altura);


            cResultado resultado = await _servico.CalcPrecoPrazoAsync("", "", tipoFrete, cepOrigem, cepDestino, pacote.Peso.ToString(), 1, pacote.Comprimento, pacote.Altura, pacote.Largura, diametro, maoPropria, 0, avisoRecebimento);

            if (resultado.Servicos[0].Erro == "0")
            {
                var valorLimpo = resultado.Servicos[0].Valor.Replace(".", "");
                var valorFinal = double.Parse(valorLimpo);

                return(new ValorPrazoFrete()
                {
                    TipoFrete = TipoFreteConstant.GetNames(tipoFrete),
                    CodTipoFrete = tipoFrete,
                    Prazo = int.Parse(resultado.Servicos[0].PrazoEntrega),
                    Valor = valorFinal
                });
            }
            else if (resultado.Servicos[0].Erro == "008")
            {
                //Ex.: SEDEX10 - não entrega naquela região
                return(null);
            }
            else
            {
                throw new Exception("Erro: " + resultado.Servicos[0].MsgErro);
            }
        }
        public JsonResult ComprarTeste(string cep)
        {
            cep = cep.Remove(5, 1);
            string nCdEmpresa = string.Empty;
            string sDsSenha   = string.Empty;
            string nCdServico = "41106";

            string  sCepOrigem                 = "13043805";
            string  sCepDestino                = cep;
            int     nCdFormato                 = 1;
            string  nVlPeso                    = Convert.ToString(1);
            decimal nVlComprimento             = 20;
            decimal nVlAltura                  = 20;
            decimal nVlLargura                 = 20;
            decimal nVlDiametro                = 0;
            string  sCdMaoPropria              = "N";
            decimal nVlValorDeclarado          = 0;
            string  sCdAvisoRecebimento        = "N";
            CalcPrecoPrazoWSSoapClient cliente = new CalcPrecoPrazoWSSoapClient();
            cResultado retornoCorreios         = cliente.CalcPrecoPrazo(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento, nVlAltura, nVlLargura, nVlDiametro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);

            Session["cep"] = cep;
            string[] result = new string[2];
            Session["correios"] = result;
            result[0]           = retornoCorreios.Servicos[0].Valor;
            result[1]           = retornoCorreios.Servicos[0].PrazoEntrega;
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Esempio n. 6
0
        private async Task <ValorPrazoFrete> CalcularValorPrazoFrete(String cepDestino, String tipoFrete, PacoteFrete pacoteFrete)
        {
            var cepOrigem        = _configuration.GetValue <string>("Frete:cepOrigem");
            var maoPropria       = _configuration.GetValue <string>("Frete:maoPropria");
            var avisoRecebimento = _configuration.GetValue <string>("Frete:avisoRecebimento");
            var diametro         = Math.Max(Math.Max(pacoteFrete.Comprimento, pacoteFrete.Largura), pacoteFrete.Altura);

            cResultado resultado = await _servico.CalcPrecoPrazoAsync("", "", tipoFrete, cepOrigem, cepDestino, pacoteFrete.Peso.ToString(), 1, pacoteFrete.Comprimento,
                                                                      pacoteFrete.Altura, pacoteFrete.Largura, diametro, maoPropria, 0, avisoRecebimento);

            if (resultado.Servicos[0].Erro == "0")
            {
                return(new ValorPrazoFrete()
                {
                    TipoFrete = int.Parse(tipoFrete),
                    Prazo = int.Parse(resultado.Servicos[0].PrazoEntrega),
                    Valor = double.Parse(resultado.Servicos[0].Valor.Replace(".", "").Replace(",", ".")),
                });
            }
            else
            {
                return(new ValorPrazoFrete()
                {
                });
                //("Erro: " + resultado.Servicos[0].MsgErro);
            }
        }
Esempio n. 7
0
        public void CalcPrecoPrazo()
        {
            string  nCdEmpresa          = string.Empty;
            string  sDsSenha            = string.Empty;
            string  nCdServico          = "04014";
            string  sCepOrigem          = "03057010";
            string  sCepDestino         = _CepDestino;
            string  nVlPeso             = _Peso;
            int     nCdFormato          = 1;
            decimal nVlComprimento      = _Comprimento;
            decimal nVlAltura           = _Altura;
            decimal nVlLargura          = _Largura;
            decimal nVlDiametro         = _Diametro;
            string  sCdMaoPropria       = "N";
            decimal nVlValorDeclarado   = 0;
            string  sCdAvisoRecebimento = "N";

            CalcPrecoPrazoWSSoapClient SRCorreios = new CalcPrecoPrazoWSSoapClient();


            cResultado returnCorreios = SRCorreios.CalcPrecoPrazo(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento,
                                                                  nVlAltura, nVlLargura, nVlDiametro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);


            PrazoEntrega = returnCorreios.Servicos[0].PrazoEntrega;

            Preco = returnCorreios.Servicos[0].Valor;
        }
        public Resultado FromASMXServiceResultado(cResultado item)
        {
            var b = new Resultado
            {
                Servicos = new Servico[1]
            };

            if (item.Servicos.Length > 0)
            {
                b.Servicos[0] = new Servico()
                {
                    Codigo            = item.Servicos[0].Codigo,
                    DataMaxEntrega    = item.Servicos[0].DataMaxEntrega,
                    EntregaDomiciliar = item.Servicos[0].EntregaDomiciliar,
                    EntregaSabado     = item.Servicos[0].EntregaSabado,
                    Erro                  = item.Servicos[0].Erro,
                    HoraMaxEntrega        = item.Servicos[0].HoraMaxEntrega,
                    MsgErro               = item.Servicos[0].MsgErro,
                    obsFim                = item.Servicos[0].obsFim,
                    PrazoEntrega          = item.Servicos[0].PrazoEntrega,
                    Valor                 = item.Servicos[0].Valor,
                    ValorAvisoRecebimento = item.Servicos[0].ValorAvisoRecebimento,
                    ValorMaoPropria       = item.Servicos[0].ValorMaoPropria,
                    ValorSemAdicionais    = item.Servicos[0].ValorSemAdicionais,
                    ValorValorDeclarado   = item.Servicos[0].ValorValorDeclarado,
                };
            }
            return(b);
        }
        public async Task <ValorPrazoFrete> CalcularValorPrazoFrete(string cepDestino, string tipoFrete, Pacote pacote)
        {
            var cepOrigem        = _configuration.GetValue <String>("Frete:CepOrigem");
            var maoPropria       = _configuration.GetValue <String>("Frete:MaoPropria");
            var avisoRecebimento = _configuration.GetValue <String>("Frete:AvisoRecebimento");
            var diametro         = Math.Max(Math.Max(pacote.Comprimento, pacote.Largura), pacote.Altura);

            //

            cResultado resultado = await _servico.CalcPrecoPrazoAsync("", "", tipoFrete, cepOrigem, cepDestino, pacote.Peso.ToString(), 1, pacote.Comprimento, pacote.Altura, pacote.Largura, diametro, maoPropria, 0, avisoRecebimento);

            if (resultado.Servicos[0].Erro == "0")
            {
                //Deu certo - implementar um resultado - valor e prazo de entrega, tipo frete

                return(new ValorPrazoFrete()
                {
                    TipoFrete = TipoFreteConstante.GetNames(tipoFrete),
                    CodigoTipoFrete = tipoFrete,
                    Prazo = int.Parse(resultado.Servicos[0].PrazoEntrega),
                    Valor = double.Parse(resultado.Servicos[0].Valor.Replace(".", ""))
                });
            }
            else if (resultado.Servicos[0].Erro == "008" || resultado.Servicos[0].Erro == "-888")
            {
                //Exempo de codigo para n possuir entrega na região, ex: SEDEX10
                return(null);
            }
            else
            {
                //Deu ruim
                throw new Exception("Erro: " + resultado.Servicos[0].MsgErro);
            }
        }
Esempio n. 10
0
        public IHttpActionResult CalculaFrete(int id)
        {
            string frete;
            string cep;

            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(Content(HttpStatusCode.NoContent, "Nao existe nenhum pedido com o id: " + id));
            }

            if (!checkAccessPermition(User, order.userEmail))
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            if (order.OrderItems.Count <= 0)
            {
                return(Content(HttpStatusCode.NoContent, "Pedido sem itens"));
            }

            if (!order.status.Equals("Novo"))
            {
                return(Content(HttpStatusCode.NotAcceptable, "Pedido com status diferente de “novo”"));
            }

            cep = ObtemCEP(User);
            if (cep == null)
            {
                return(Content(HttpStatusCode.NotFound, "Impossibilidade de acessar o serviço de CRM"));
            }

            Product total = calcInfoFrete(order);

            CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
            cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", cep, Convert.ToString(total.peso), 1, total.comprimento, total.altura, total.largura, total.diamentro, "N", 0, "N");

            if (resultado.Servicos[0].Erro.Equals("0"))
            {
                frete = "Valor do frete: " + resultado.Servicos[0].Valor + " - Prazo de entrega: " + resultado.Servicos[0].PrazoEntrega + " dia(s)";

                try
                {
                    order.freightPrice = Convert.ToDecimal(resultado.Servicos[0].Valor);
                    order.orderPrice  += order.freightPrice;
                    order.deliveryDate = order.orderDate.AddDays(Convert.ToInt16(resultado.Servicos[0].PrazoEntrega));
                }
                catch
                {
                    return(Content(HttpStatusCode.InternalServerError, "Erro na resposta do serviço dos Correios"));
                }
                return(Ok(frete));
            }
            else
            {
                return(Content(HttpStatusCode.NotFound, "Impossibilidade de acessar o serviço dos Correios. Código do erro: " + resultado.Servicos[0].Erro + " - " + resultado.Servicos[0].MsgErro));
            }
        }
Esempio n. 11
0
 /// <summary>
 ///     Inicializa as entradas com os valores de cada serviço requisitado dos correios
 /// </summary>
 /// <param name="precoEPrazo"></param>
 ///
 private void inicializarEntradas(cResultado precoEPrazo)
 {
     lbDiaAtual.Text = Helpers.retornarDataSimples();
     foreach (var item in precoEPrazo.servicos.CServico)
     {
         escolherCodigo(item.Codigo, item);
     }
 }
Esempio n. 12
0
        public IHttpActionResult CalculaFrete(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(BadRequest("Order was not found!"));
            }
            else
            {
                CRMRestClient crmClient = new CRMRestClient();
                Customer      customer  = crmClient.GetCustomerByEmail(order.emailUser);
                if (customer != null)
                {
                    // Initial Values
                    decimal larg   = 0;
                    decimal comp   = 0;
                    decimal height = 0;
                    order.totalWeigth = 0;
                    order.totalPrice  = 0;

                    // Calculate size for each orderItem
                    foreach (OrderItem orderItem in order.OrderItems)
                    {
                        int qtd = orderItem.qtd;
                        height             = orderItem.Product.altura > height ? orderItem.Product.altura : height;
                        larg               = orderItem.Product.largura > larg ? orderItem.Product.largura : larg;
                        comp              += orderItem.Product.comprimento * qtd;
                        order.totalWeigth += orderItem.Product.peso * qtd;
                        order.totalPrice  += orderItem.Product.preco * qtd;
                    }

                    // Correios API
                    string           frete;
                    CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
                    cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", customer.zip, order.totalWeigth.ToString(), 1, comp, height, larg, 0, "N", 100, "S");
                    if (resultado.Servicos[0].Erro.Equals("0"))
                    {
                        NumberFormatInfo numberFormat = new NumberFormatInfo();
                        numberFormat.NumberDecimalSeparator = ",";
                        order.shipmentPrice = Decimal.Parse(resultado.Servicos[0].Valor, numberFormat);
                        order.deliveryDate  = order.orderDate.AddDays(Int32.Parse(resultado.Servicos[0].PrazoEntrega));
                        frete = "Valor do frete: " + order.shipmentPrice + " - Prazo de entrega: " + order.deliveryDate;
                        db.SaveChanges();

                        return(Ok(frete));
                    }
                    else
                    {
                        return(BadRequest("Código do erro: " + resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                    }
                }
                else
                {
                    return(BadRequest("Falha ao consultar o CRM"));
                }
            }
        }
Esempio n. 13
0
 private void button1_Click(object sender, EventArgs e)
 {
     freteagr.Comprimento = Convert.ToDecimal(textBox1.Text);
     freteagr.Largura     = Convert.ToDecimal(textBox2.Text);
     freteagr.Altura      = Convert.ToDecimal(textBox3.Text);
     freteagr.Peso        = textBox4.Text;
     freteagr.CEP         = textBox5.Text;
     resultado            = freteagr.calcular();
     MessageBox.Show("Sedex Varejo \n Preço:" + resultado.Servicos.ElementAt(0).Valor + "\n Prazo em dias:" + resultado.Servicos.ElementAt(0).PrazoEntrega + "\n" + resultado.Servicos.ElementAt(0).MsgErro + "\n Sedex A Cobrar Varejo \n Preço:" + resultado.Servicos.ElementAt(1).Valor + "\n Prazo em dias:" + resultado.Servicos.ElementAt(1).PrazoEntrega + "\n" + resultado.Servicos.ElementAt(1).MsgErro + "\n Sedex 10 Varejo \n Preço:" + resultado.Servicos.ElementAt(2).Valor + "\n Prazo em dias:" + resultado.Servicos.ElementAt(2).PrazoEntrega + "\n" + resultado.Servicos.ElementAt(2).MsgErro + "\nSedex Hoje Varejo \n Preço:" + resultado.Servicos.ElementAt(3).Valor + "\n Prazo em dias:" + resultado.Servicos.ElementAt(3).PrazoEntrega + "\n" + resultado.Servicos.ElementAt(3).MsgErro + "\n PAC Varejo \n Preço:" + resultado.Servicos.ElementAt(4).Valor + "\n Prazo em dias:" + resultado.Servicos.ElementAt(4).PrazoEntrega + "\n" + resultado.Servicos.ElementAt(4).MsgErro);
 }
Esempio n. 14
0
        public IHttpActionResult calcularFrete(int id, string cepDestino)
        {
            Pedido pedido = db.Pedidoes.Find(id);

            if (pedido == null)
            {
                return(BadRequest("O pedido não existe."));
            }
            else if (User.Identity.Name.Equals(pedido.userEmail) || User.IsInRole("ADMIN"))
            {
                if (pedido.status.Equals("Novo"))
                {
                    string  frete;
                    decimal larguraTotal     = 0;
                    decimal comprimentoTotal = 0;
                    decimal alturaTotal      = 0;
                    decimal diametroTotal    = 0;

                    CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();
                    foreach (ItemPedido itemPedido in pedido.OrderItems)
                    {
                        pedido.pesoTotal  += itemPedido.Produtos.peso;
                        pedido.precoTotal += itemPedido.Produtos.preco;
                        larguraTotal      += itemPedido.Produtos.largura;
                        comprimentoTotal   = itemPedido.Produtos.comprimento;
                        alturaTotal        = itemPedido.Produtos.altura;
                        diametroTotal      = itemPedido.Produtos.diamentro;
                    }
                    //Foi usado um cep de origem fixo pois não consegui utilizar o serviço CRM
                    cResultado resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", cepDestino, pedido.pesoTotal.ToString(), 1, comprimentoTotal, alturaTotal, larguraTotal, diametroTotal, "N", pedido.precoTotal, "S");
                    pedido.precoFrete = decimal.Parse(resultado.Servicos[0].Valor);
                    if (resultado.Servicos[0].Erro.Equals("0"))
                    {
                        frete = "Valor	do	frete:	"+ resultado.Servicos[0].Valor + "	-	Prazo	de	entrega:	"+ resultado.Servicos[0].PrazoEntrega + "	dia(s)";
                        return(Ok(frete));
                    }
                    else
                    {
                        return(BadRequest("Código	do	erro:	"+ resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                    }
                }
                else
                {
                    return(BadRequest("Pedido com status diferente de 'novo'."));
                }
            }
            else
            {
                return(BadRequest("Usuario não autorizado."));
            }
        }
        public IHttpActionResult CalculaFreteEPrazo(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(NotFound());
            }

            if (!order.status.Equals("novo"))
            {
                return(BadRequest("Status do pedido inválido, o pedido precisa estar no estado 'novo'."));
            }

            if (order.OrderItems.Count == 0)
            {
                return(BadRequest("Pedido sem nenhum item."));
            }

            if (!User.IsInRole("ADMIN") && !User.Identity.Name.Equals(order.userName))
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            cResultado resultadoCorreios = calculaFretePrazoEntrega(order);

            string frete        = "0";
            string prazoEntrega = "0";

            if (resultadoCorreios.Servicos[0].Erro.Equals("0"))
            {
                frete        = resultadoCorreios.Servicos[0].Valor;
                prazoEntrega = resultadoCorreios.Servicos[0].PrazoEntrega;
            }
            else
            {
                return(BadRequest("Falha na consulta aos Correios - Código do erro: " + resultadoCorreios.Servicos[0].Erro + "- Mensagem: " + resultadoCorreios.Servicos[0].MsgErro));
            }

            order.precoFrete   = Convert.ToDecimal(frete, new CultureInfo("pt-BR"));
            order.precoTotal   = calculaPrecoOrdem(order) + order.precoFrete;
            order.deliveryDate = order.orderDate.AddDays(Convert.ToDouble(prazoEntrega));

            db.Entry(order).State = EntityState.Modified;
            db.SaveChanges();

            return(Ok(order));
        }
Esempio n. 16
0
        public IHttpActionResult CalculaFrete()
        {
            string           frete;
            CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
            cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", "37002970", "1", 1, 30, 30, 30, 30, "N", 100, "S");

            if (resultado.Servicos[0].Erro.Equals("0"))
            {
                frete = "Valor	do	frete:	"+ resultado.Servicos[0].Valor + "	-	Prazo	de	entrega:	"+ resultado.Servicos[0].PrazoEntrega + "	dia(s)";
                return(Ok(frete));
            }
            else
            {
                return(BadRequest("Código	do	erro:	"+ resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
            }
        }
Esempio n. 17
0
 public string processar(EntidadeDominio entidade)
 {
     try
     {
         acalcular = (Frete)entidade;
         Produto produto = acalcular.Item;
         resu            = cal.CalcPrecoPrazo("", "", "40010 , 40045 , 40215 , 40290 , 41106", cep_origem, acalcular.Destino.Cep, produto.Formato.Peso, 1, produto.Formato.Comprimento, produto.Formato.Altura, produto.Formato.Largura, produto.Formato.Diametro, "N", 'N', "S");
         acalcular.Valor = Convert.ToDouble(resu.Servicos.ElementAt(0).Valor);
         acalcular.Prazo = Convert.ToInt32(resu.Servicos.ElementAt(0).PrazoEntrega);
         return("Consultado com succeso");
     }
     catch
     {
         return(resu.Servicos.ElementAt(0).MsgErro);
     }
 }
        public async Task <ValueDeadlineFreight> CalculateValueDeadLineFreight(string cepDestiny, string typeFreight, Package package)
        {
            var cepOrigem        = _configuration.GetValue <string>("Freight:CepOrigem");
            var maoPropria       = _configuration.GetValue <string>("Freight:MaoPropria");
            var avisoRecebimento = _configuration.GetValue <string>("Freight:AvisoRecebimento");
            var diametro         = Math.Max(Math.Max(package.Length, package.Width), package.Height);

            cResultado result = await _service.CalcPrecoPrazoAsync("",
                                                                   "",
                                                                   typeFreight,
                                                                   cepOrigem,
                                                                   cepDestiny,
                                                                   package.Weight.ToString(),
                                                                   1,
                                                                   package.Length,
                                                                   package.Height,
                                                                   package.Width,
                                                                   diametro,
                                                                   maoPropria,
                                                                   0,
                                                                   avisoRecebimento);

            if (result.Servicos[0].Erro == "0")
            {
                var cleanValue = result.Servicos[0].Valor.Replace(".", "");
                var finalValue = double.Parse(cleanValue);


                return(new ValueDeadlineFreight()
                {
                    TypeFreight = TypeFreightConstant.GetNames(typeFreight),
                    ServiceCode = typeFreight,
                    Deadline = int.Parse(result.Servicos[0].PrazoEntrega),
                    Value = finalValue
                });
            }
            else if (result.Servicos[0].Erro == "008" || result.Servicos[0].Erro == "-888")
            {
                //SEDEX10 - Don't delivery in region
                return(null);
            }
            else
            {
                throw new Exception("Erro" + result.Servicos[0].MsgErro);
            }
        }
        public JsonResult CorreiosCalc(string cep)
        {
            //Dados da empresa, se tiver contrato com os Correios
            string nCdEmpresa = string.Empty;
            string sDsSenha   = string.Empty;
            // Código do tipo de frete
            //41106 - PAC
            //40010 - SEDEX
            //40045 - SEDEX a Cobrar
            //40215 - SEDEX 10
            //40290 - SEDEX Hoje
            string nCdServico = "41106";
            // Cep de origem e destino - apenas números
            string sCepOrigem  = "19940000";
            string sCepDestino = cep;
            // Peso total da encomenda - por padrão deixei 1kg
            string nVlPeso = Convert.ToString(1);
            // Formato da encomenda - por padrão deixei caixa
            int nCdFormato = 1;
            // Para encomenda do tipo PAC, deve-se preencher a dimensão da embalagem
            decimal nVlComprimento = 20;
            decimal nVlAltura      = 20;
            decimal nVlLargura     = 20;
            decimal nVlDiametro    = 0;
            // Informa se é por mão própria - por padrão deixei Não
            string sCdMaoPropria = "N";
            // Valor declarado - por padrão não informo
            decimal nVlValorDeclarado = 0;
            // Se desejo recebr aviso de recebimento - por padrão não quero
            string sCdAvisoRecebimento = "N";


            CalcPrecoPrazoWSSoapClient wsCorreios2 = new CalcPrecoPrazoWSSoapClient();

            cResultado retornoCorreios = wsCorreios2.CalcPrecoPrazo(nCdEmpresa, sDsSenha, nCdServico,
                                                                    sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento, nVlAltura, nVlLargura, nVlDiametro,
                                                                    sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);

            string[] result = new string[2];
            result[1] = retornoCorreios.Servicos[0].PrazoEntrega;
            result[0] = retornoCorreios.Servicos[0].Valor;

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Esempio n. 20
0
        public PrecoPrazoEntrega CalcularPrecoPrazo(string codigoServico, string cepOrigem, string cepDestino)
        {
            try
            {
                if (_soapClient == null)
                {
                    _soapClient = new CalcPrecoPrazoWS();
                }

                System.Net.ServicePointManager.Expect100Continue = false;

                cResultado result = _soapClient.CalcPrecoPrazo("", "", codigoServico, cepOrigem, cepDestino, PesoDefaultLivro, CodFormatoDefault, ComprimentoDefault, AlturaDefault, LarguraDefault, DiametroDefault, "N", 0, "N");

                // TODO: incluir mensagem ao resources
                if (result == null || result.Servicos == null || result.Servicos.Length <= 0)
                {
                    throw new ArgumentNullException("Não chegou nenhum retorno do Webservice dos Correios.");
                }

                if (!string.IsNullOrEmpty(result.Servicos.First().Erro) && !string.IsNullOrEmpty(result.Servicos.First().MsgErro))
                {
                    throw new ApplicationException(result.Servicos.First().MsgErro);
                }

                return(new PrecoPrazoEntrega()
                {
                    DiasParaEntrega = int.Parse(result.Servicos[0].PrazoEntrega),
                    Valor = decimal.Parse(result.Servicos[0].Valor)
                });
            }
            catch
            {
                // Qualquer exceção que ocorrer, retorna um dado default, para o sistema não parar em caso do Correios estar offline, hehe
                return(new PrecoPrazoEntrega()
                {
                    DiasParaEntrega = new Random().Next(1, 5), Valor = (decimal)(new Random().NextDouble() * 20)
                });
            }
        }
        public IHttpActionResult calculateFreight(int id)
        {
            if (!ordersControllerValidator.OrderExists(id))
            {
                return(NotFound());
            }

            Order order = db.Orders.Find(id);

            if (!ordersControllerValidator.IsUserAuthorized(User, order))
            {
                return(Unauthorized());
            }

            if (!order.OrderItems.Any())
            {
                string errorMessage = "Pedido sem items!";

                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, errorMessage)));
            }

            if (order.status != "novo")
            {
                string errorMessage = "Status do pedido é diferente de novo!";

                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, errorMessage)));
            }

            CrmRestClient crmRestClient = new CrmRestClient();
            Customer      customer      = crmRestClient.GetCustomerByEmail(order.userEmail);

            if (customer == null)
            {
                string errorMessage = "Erro ao acessar serviço de CRM!";

                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, errorMessage)));
            }

            decimal totalFreight   = 0;
            int     daysToDelivery = 0;

            cResultado result = ordersControllerCalculator.calculateFreightAndDelivery(order.OrderItems.ToList(), customer.zip, 0);

            if (result.Servicos[0].Erro.Equals("0"))
            {
                totalFreight   = decimal.Parse(result.Servicos[0].Valor);
                daysToDelivery = int.Parse(result.Servicos[0].PrazoEntrega);
            }
            else
            {
                return(BadRequest("Erro ao acessar serviços do correio: " + result.Servicos[0].MsgErro));
            }

            order.freightPrice    = totalFreight;
            order.deliveryDate    = DateTime.Now.AddDays(daysToDelivery);
            db.Entry(order).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ordersControllerValidator.OrderExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(Ok(order));
        }
Esempio n. 22
0
        public static async Task <string[]> GetPriceAndTimePostalServiceAsync(string cep, double weight, double volume)
        {
            double squareSideLength = Math.Pow(volume, 1.0 / 3.0);
            double sideUsed         = 0.0;
            double weightUsed       = 0.0;
            double weightu          = weight / 1000;

            if (weightu < 1.0)
            {
                weightUsed = 1.0;
            }
            else if (weightu > 29)
            {
                weightUsed = 29.0;
            }
            else
            {
                weightUsed = weightu;
            }

            if (squareSideLength > 66.0)
            {
                sideUsed = 66.0;
            }
            else if (squareSideLength < 17.0)
            {
                sideUsed = 17.0;
            }
            else
            {
                sideUsed = squareSideLength;
            }

            string nCdEmpresa = string.Empty;
            string sDsSenha   = string.Empty;

            string nCdServico = "40010";             // Sedex

            string sCepOrigem  = "30130010";         // CEP Praça Sete 30130010
            string sCepDestino = cep;

            string nVlPeso    = weightUsed.ToString("F0"); // peso em kg da encomenda / peso máximo de 30kg
            int    nCdFormato = 1;                         // formato caixa

            decimal nVlComprimento = (decimal)sideUsed;    // medidas em cm entre 16cm e 105cm e a soma das dimensões não deve ultrapassar 200cm
            decimal nVlAltura      = (decimal)sideUsed;
            decimal nVlLargura     = (decimal)sideUsed;
            decimal nVlDiamentro   = 0;

            string sCdMaoPropria = "N";

            decimal nVlValorDeclarado = 0;

            string sCdAvisoRecebimento = "N";

            System.ServiceModel.Channels.Binding binding = new BasicHttpBinding();
            EndpointAddress remoteAddress = new EndpointAddress("http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx");

            CalcPrecoPrazoWSSoapClient wsCorreios2 = new CalcPrecoPrazoWSSoapClient(binding, remoteAddress);

            cResultado retornoCorreios = await wsCorreios2.CalcPrecoPrazoAsync(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato,
                                                                               nVlComprimento, nVlAltura, nVlLargura, nVlDiamentro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);

            string[] result = new string[2];
            result[1] = retornoCorreios.Servicos.FirstOrDefault().PrazoEntrega;
            result[0] = retornoCorreios.Servicos.FirstOrDefault().Valor;

            return(result);
        }
Esempio n. 23
0
        public IHttpActionResult CalculaFrete(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(NotFound());
            }


            if (User.Identity.Name.Equals(order.customerEmail) || User.IsInRole("ADMIN"))
            {
                if (order.orderItems.Count == 0)
                {
                    return(BadRequest("Erro ao calcular frete. O pedido não contem items"));
                }

                if (!order.status.Equals("novo"))
                {
                    return(BadRequest("Erro ao calcular frete. Apenas pedidos com status 'novo' podem ter seu frete calculado."));
                }

                double width  = 0;
                double height = 0;
                double weight = 0;
                double length = 0;

                order.orderItems.ForEach(delegate(OrderItem item)
                {
                    length += item.Product.length;
                    weight += item.Product.weight * item.qtd;
                    height  = item.Product.height > height ? item.Product.height : height;
                    width   = item.Product.width > width ? item.Product.width : width;
                });

                string cep = this.SearchCep(order.customerEmail);

                if (cep != null)
                {
                    CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
                    cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "35600000", cep, weight.ToString(), 1, Convert.ToDecimal(length), Convert.ToDecimal(height), Convert.ToDecimal(width), 30, "N", 100, "S");
                    if (resultado == null)
                    {
                        return(BadRequest("Erro ao calcular frete. Não foi possível conectar ao sistema dos correios."));
                    }

                    if (resultado.Servicos[0].Erro.Equals("0"))
                    {
                        order.deliverPrice = Convert.ToDouble(resultado.Servicos[0].Valor);
                        order.deliverDate  = DateTime.Now.AddDays(Convert.ToInt32(resultado.Servicos[0].PrazoEntrega));
                        //frete = "Valor do frete: " + resultado.Servicos[0].Valor + " - Prazo de entrega: " + resultado.Servicos[0].PrazoEntrega + " dia(s)";
                        //return Ok(frete);

                        db.Entry(order).State = EntityState.Modified;

                        try
                        {
                            db.SaveChanges();
                        }
                        catch (DbUpdateConcurrencyException)
                        {
                            if (!OrderExists(id))
                            {
                                return(NotFound());
                            }
                            else
                            {
                                throw;
                            }
                        }

                        return(Ok(order));
                    }
                    else
                    {
                        return(BadRequest("Erro ao calcular frete. Código	do	erro:	"+ resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                    }
                }

                return(BadRequest("Erro ao calcular frete. Não foi possível acessar o serviço de CRM e recuperar o CEP!"));
            }


            return(Unauthorized());
        }
Esempio n. 24
0
        /// <summary>
        ///     Click do botão buscar no Correio
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        ///
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            /// Declaração de variáveis para passar como parâmetro
            string CdEmpresa     = "";
            string DsSenha       = "";
            int    tipoDeServico = cbServico.SelectedIndex;

            if (cbServico.Text.Equals(""))
            {
                tipoDeServico = -1;
            }
            string  servico            = retornarServico(tipoDeServico);
            string  cepDeOrigem        = tbCepOrigem.Text;
            string  cepDeDestino       = tbCepDestino.Text;
            string  peso               = tbPeso.Text;
            int     formato            = 1;
            decimal comprimento        = Helpers.returnDecimal(tbComprimento.Text);
            decimal altura             = Helpers.returnDecimal(tbAltura.Text);
            decimal largura            = Helpers.returnDecimal(tbLargura.Text);
            decimal diametro           = Helpers.returnDecimal(tbDiametro.Text);
            string  maoPropria         = "N";
            decimal valorDeclarado     = 0;
            string  avisoDeRecebimento = "N";

            ////////////////////////////////////////

            /// Validação das entradas ////
            if (rbCaixa.Checked)
            {
                formato = 1;
            }
            else if (rbCilindro.Checked)
            {
                formato = 2;
            }
            else
            {
                formato = 3;
            }


            if (cbMaoPropria.Checked)
            {
                maoPropria = "S";
            }
            else
            {
                maoPropria = "N";
            }

            if (cbAvisoRecebimento.Checked)
            {
                avisoDeRecebimento = "S";
            }
            else
            {
                avisoDeRecebimento = "N";
            }

            if (cbDeclaracaoDeValor.Checked)
            {
                valorDeclarado = Helpers.returnDecimal(tbDeclaracaoValor.Text);
            }
            else
            {
                valorDeclarado = 0;
            }

            /////////////////////

            /// Chamada do procedimento para consultar preços e prazos nos correios
            cResultado precoEPrazo = Consulta.ConsultarPrecosEPrazos(CdEmpresa, DsSenha, servico, cepDeOrigem, cepDeDestino, peso, formato, comprimento, altura, largura, diametro, maoPropria, valorDeclarado, avisoDeRecebimento);

            if (precoEPrazo != null)
            {
                panelSedex.Visible = true;        // Mostra o painel que estava oculto
                inicializarEntradas(precoEPrazo); // inicializa as entradas de acordo com o retorno dos Correios
            }
            this.Cursor = Cursors.Default;
        }
        public IHttpActionResult Freight(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(NotFound());
            }

            if (CheckUserPermission(User, order))
            {
                // validations --------------------------------------------------------------------
                if (!order.status.Equals(Status.NOVO.ToString()))
                {
                    return(BadRequest("Invalid status. Status other than NOVO."));
                }

                if (order.OrderItems.Count == 0)
                {
                    return(BadRequest("Empty list items."));
                }

                // cep ----------------------------------------------------------------------------
                Customer customer = crmClient.GetCustomerByEmail(order.userEmail);
                if (customer == null)
                {
                    return(BadRequest("Fail when access CRM."));
                }

                string cep_destino = customer.zip;

                // values -------------------------------------------------------------------------
                decimal precoTotal       = 0;
                decimal pesoTotal        = 0;
                decimal comprimentoTotal = 0;
                decimal alturaTotal      = 0;
                decimal larguraTotal     = 0;
                decimal diametroTotal    = 0;

                foreach (OrderItem orderItem in order.OrderItems)
                {
                    precoTotal       += (orderItem.Product.preco * orderItem.quantidade);
                    pesoTotal        += (orderItem.Product.peso * orderItem.quantidade);
                    comprimentoTotal += (orderItem.Product.comprimento * orderItem.quantidade);
                    alturaTotal      += (orderItem.Product.altura * orderItem.quantidade);
                    larguraTotal     += (orderItem.Product.largura * orderItem.quantidade);
                    diametroTotal    += (orderItem.Product.diametro * orderItem.quantidade);
                }

                // freight --------------------------------------------------------------------------
                cResultado resultado = correios.CalcPrecoPrazo("", "", "40010", cep_origem,
                                                               cep_destino, pesoTotal.ToString(), 1, comprimentoTotal, alturaTotal,
                                                               larguraTotal, diametroTotal, "N", precoTotal, "S");

                if (resultado.Servicos[0].Erro.Equals("0"))
                {
                    order.precoTotal = precoTotal;
                    order.pesoTotal  = pesoTotal;
                    order.precoFrete = Decimal.Parse(resultado.Servicos[0].Valor,
                                                     NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
                                                     new CultureInfo("pt-BR"));
                    order.dataEntrega = DateTime.Now.AddDays(double.Parse(resultado.Servicos[0].PrazoEntrega));

                    db.Entry(order).State = EntityState.Modified;
                    try
                    {
                        db.SaveChanges();
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        throw;
                    }
                }
                else
                {
                    return(BadRequest("Fail when access Correios. Erro: " + resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                }

                return(Ok("Freight success calculeted."));
            }
            else
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized)
                {
                    Content = new StringContent("{\"Message\": \"Authorization has been denied for this request.\"}",
                                                System.Text.Encoding.UTF8, "application/json"),
                    ReasonPhrase = "Unauthorized"
                });
            }
        }
        public IHttpActionResult CalculateShipping(int id)
        {
            Order order = db.Orders.Find(id);

            if (checkUserFromOrder(User, order))
            {
                if (order == null)
                {
                    return(NotFound());
                }
            }
            else
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }
            string  cepOrigem = "69096010";
            string  frete;
            string  cepDestino;
            decimal peso              = 0;
            int     formato           = 1;
            decimal comprimento       = 0;
            decimal altura            = 0;
            decimal largura           = 0;
            decimal diamentro         = 0;
            string  entregaMaoPropria = "N";
            //decimal valorDeclarado= 0;
            string  avisoRecebimento = "S";
            decimal shipping;


            if (checkUserFromOrder(User, order))
            {
                if (order == null)
                {
                    return(NotFound());
                }
            }
            else
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            if (order.OrderItems.Count == 0)
            {
                return(BadRequest("Pedido sem itens"));
            }
            ICollection <OrderItem> produtos  = order.OrderItems;
            CRMRestClient           crmClient = new CRMRestClient();
            Customer customer = crmClient.GetCustomerByEmail(User.Identity.Name);

            if (customer != null)
            {
                cepDestino = customer.zip;
            }
            else
            {
                return(BadRequest("Falha ao	consultar o	CRM"));
            }


            foreach (OrderItem item in produtos)
            {
                Product product = db.Products.Find(item.ProductId);
                peso        = (item.Quantity * product.weight) + peso;
                comprimento = (item.Quantity * product.lenght) + comprimento;
                altura      = (item.Quantity * product.height) + altura;
                largura     = (item.Quantity * product.width) + largura;
                diamentro   = (item.Quantity * product.diameter) + diamentro;
                order.Value = (item.Quantity * order.Value) + product.price;
            }
            order.Weight = peso;


            CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
            cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", cepOrigem, cepDestino, Convert.ToString(peso), formato, Decimal.ToInt32(comprimento), Decimal.ToInt32(altura), Decimal.ToInt32(largura), Decimal.ToInt32(diamentro), entregaMaoPropria, Decimal.ToInt32(order.Value), avisoRecebimento);

            if (resultado.Servicos[0].Erro.Equals("0"))
            {
                frete              = "Valor	do	frete:	"+ resultado.Servicos[0].Valor + "	-	Prazo	de	entrega:	"+ resultado.Servicos[0].PrazoEntrega + "	dia(s)";
                shipping           = Convert.ToDecimal(resultado.Servicos[0].Valor);
                order.DeliveryDate = order.DateOrder.AddDays(Int32.Parse(resultado.Servicos[0].PrazoEntrega));
            }
            else
            {
                return(BadRequest("Código	do	erro:	"+ resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
            }



            if (!order.Status.Equals("NOVO"))
            {
                BadRequest("Pedido com Status diferente de 'NOVO'");
            }

            if (id != order.Id)
            {
                return(BadRequest());
            }
            order.ShippingPrice   = shipping;
            db.Entry(order).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!OrderExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public async void selfDestruct(object sender, EventArgs args)
        {
            if (!CrossConnectivity.Current.IsConnected)
            {
                await DisplayAlert("alerta", "por favor conecte-se na internet ", "ok");

                return;
            }
            if (cep.Text.Contains("-") && cep.Text.Length < 9)
            {
                await DisplayAlert("alerta", "preencha  corretamente o cep ", "ok");

                return;
            }
            if (!cep.Text.Contains("-") && cep.Text.Length < 8)
            {
                await DisplayAlert("alerta", "preencha corretamente o cep ", "ok");

                return;
            }
            if (comp.SelectedIndex == 0)
            {
                await DisplayAlert("alerta", "preencha o comprimento ", "ok");

                return;
            }
            if (largura.SelectedIndex == 0)
            {
                await DisplayAlert("alerta", "preencha o largura ", "ok");

                return;
            }
            if (altura.SelectedIndex == 0)
            {
                await DisplayAlert("alerta", "preencha o altura ", "ok");

                return;
            }
            if (pesostr.SelectedIndex == 0)
            {
                await DisplayAlert("alerta", "preencha o peso ", "ok");

                return;
            }

            string yORn;

            yORn = "N";
            if (avisoRece.IsToggled)
            {
                yORn = "S";
            }
            //string myinput = await InputBox(this.Navigation);
            CalcPrecoPrazoWS ws = new CalcPrecoPrazoWS();
            cResultado       c  = ws.CalcPrecoPrazo("", "", "40010 , 41106", cep_origem, cep.Text, pesostr.Items.ElementAt(pesostr.SelectedIndex), 1, int.Parse(comp.Items.ElementAt(comp.SelectedIndex)), int.Parse(altura.Items.ElementAt(altura.SelectedIndex)), int.Parse(largura.Items.ElementAt(largura.SelectedIndex)), 0, "N", 19.5m, yORn);

            if (!string.IsNullOrEmpty(c.Servicos.ElementAt(0).MsgErro))
            {
                await DisplayAlert("Sedex varejo", "Erro: " + c.Servicos.ElementAt(0).MsgErro, "ok");
            }
            else
            {
                await  DisplayAlert("Sedex varejo", "preço: " + c.Servicos.ElementAt(0).Valor + "\nprazo em dias:" + c.Servicos.ElementAt(0).PrazoEntrega, "ok");
            }
            if (!string.IsNullOrEmpty(c.Servicos.ElementAt(1).MsgErro))
            {
                await DisplayAlert("Sedex varejo", "Erro: " + c.Servicos.ElementAt(1).MsgErro, "ok");
            }
            else
            {
                await DisplayAlert("PAC varejo", "preço: " + c.Servicos.ElementAt(1).Valor + "\nprazo em dias:" + c.Servicos.ElementAt(1).PrazoEntrega, "ok");
            }
        }
        public IHttpActionResult PutOrderCalcShipping(int id)
        {
            String cepDestino = null;
            Order  order      = db.Orders.Find(id);

            if (order == null)
            {
                return(BadRequest("Order not found!"));
            }

            if (!CheckUser(order.UserName))
            {
                return(Unauthorized());
            }

            if ((order.Status != "Novo") && (order.Shipping != 0))
            {
                return(BadRequest("Order Status invalid! Expected: 'Novo'"));
            }

            try
            {
                CRMRestClient crmClient = new CRMRestClient();
                Customer      customer  = crmClient.GetCustomerByEmail(order.UserName);
                if (customer == null)
                {
                    return(BadRequest("Customer not found!"));
                }
                cepDestino = customer.zip;
            }
            catch (Exception)
            {
                return(BadRequest("CRM not available!"));
            }

            List <OrderItem> items = order.OrderItems.ToList();

            if (items.Count == 0)
            {
                return(BadRequest("This Ordens has no item!"));
            }

            Random  random      = new Random();
            decimal comprimento = random.Next(16, 105);
            decimal largura     = random.Next(11, 105);
            decimal diametro    = random.Next(5, 91);
            decimal altura      = random.Next(2, 105);

            double  weight = random.NextDouble() * 30.0;
            decimal price  = 0;

            CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();
            cResultado       result   = correios.CalcPrecoPrazo("", "", "40010", "37540000", cepDestino,
                                                                weight.ToString(), 1, comprimento, altura, largura, diametro, "N", price, "S");

            if (result.Servicos[0].Erro.Equals("0"))
            {
                NumberFormatInfo format = new CultureInfo("pt-BR", false).NumberFormat;

                order.TotalPrice   = decimal.Parse(result.Servicos[0].Valor, format) + price;
                order.TotalWeight  = Convert.ToDecimal(weight);
                order.Shipping     = decimal.Parse(result.Servicos[0].Valor, format);
                order.DateDelivery = DateTime.Now.AddDays(Convert.ToDouble(result.Servicos[0].PrazoEntrega));

                db.Entry(order).State = EntityState.Modified;

                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!OrderExists(id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(Ok());
            }
            else
            {
                return(BadRequest("Error Code:" + result.Servicos[0].Erro + " Error: " + result.Servicos[0].MsgErro));
            }
        }
Esempio n. 29
0
        public IHttpActionResult FreteDataEntregaOrder(int id)
        {
            // recupera o pedido pelo ID
            Order order = db.Orders.Find(id);

            // se nao existir o pedido
            if (order == null)
            {
                return(BadRequest("Pedido não existe"));
            }
            else
            {
                // confere se é o admin ou o dono
                if (checkUserFromOrder(User, order))
                {
                    if (order.statusOrder != "novo")
                    {
                        return(BadRequest("Status do pedido diferente de 'novo', não é possivel recalcular o frete."));
                    }


                    if (order.OrderItems.Count == 0)
                    {
                        return(BadRequest("Pedido sem itens cadastrados"));
                    }


                    CRMRestClient crmClient = new CRMRestClient();
                    Customer      customer  = crmClient.GetCustomerByEmail(User.Identity.Name);

                    // zera as medidas
                    decimal considerarDiametro    = 0;
                    decimal considerarAltura      = 0;
                    decimal considerarComprimento = 0;
                    decimal largura = 0;

                    // confere se achou o cliente
                    if (customer != null)
                    {
                        order.priceOrder  = 0;
                        order.weightOrder = 0;
                        // soma medida dos itens
                        foreach (OrderItem tmpOrder in order.OrderItems)
                        {
                            // somatorio do preço
                            order.priceOrder += tmpOrder.Product.preco * tmpOrder.quantidade;

                            // somatorio do peso
                            order.weightOrder += tmpOrder.Product.peso * tmpOrder.quantidade;


                            // -- considerando que os produtos estaram um do lado do outro,
                            //               somo a largura e pego a maior altura , comprimento e diametro -- //

                            // somatorio da largura
                            largura += tmpOrder.Product.largura * tmpOrder.quantidade;

                            if (tmpOrder.Product.altura > considerarAltura)
                            {
                                considerarAltura = tmpOrder.Product.altura;
                            }
                            if (tmpOrder.Product.diametro > considerarDiametro)
                            {
                                considerarDiametro = tmpOrder.Product.diametro;
                            }
                            if (tmpOrder.Product.comprimento > considerarComprimento)
                            {
                                considerarComprimento = tmpOrder.Product.comprimento;
                            }
                        }

                        // Considerando que a loja esteja em São Luís - MA => Rua Vila Anselmo - 65040-101

                        CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();
                        // (  string nCdEmpresa, string sDsSenha, string nCdServico, string sCepOrigem,
                        //    string sCepDestino, string nVlPeso, int nCdFormato, decimal nVlComprimento,
                        //    decimal nVlAltura, decimal nVlLargura, decimal nVlDiametro, string sCdMaoPropria,
                        //    decimal nVlValorDeclarado, string sCdAvisoRecebimento)

                        cResultado resultado = correios.CalcPrecoPrazo("", "", "40010", "65040101", customer.zip,
                                                                       order.weightOrder.ToString(), 1, considerarComprimento, considerarAltura, largura, considerarDiametro,
                                                                       "N", order.priceOrder, "S");

                        if (resultado.Servicos[0].Erro.Equals("0"))
                        {
                            // ajusta preço do frete
                            order.priceFreight = Convert.ToDecimal(resultado.Servicos[0].Valor) / 100;
                            // atualiza o preço do pedido , somando o valor do frete
                            order.priceOrder += order.priceFreight;
                            // considerar a data da entrega = data pedido mais prazo entrega
                            order.dateOrderDelivery = order.dateOrder.AddDays(Convert.ToDouble(resultado.Servicos[0].PrazoEntrega));
                            //modificações são persistidas no banco de dados
                            db.SaveChanges();

                            return(Ok("Preço do frete: R$ " + resultado.Servicos[0].Valor + " => Entrega em " + resultado.Servicos[0].PrazoEntrega + " dia(s)"));
                        }
                        else
                        {
                            return(BadRequest("Ouve um erro " + resultado.Servicos[0].Erro + " , " + resultado.Servicos[0].MsgErro));
                        }
                    }
                    else
                    {
                        return(BadRequest("Impossibilidade ou erro ao acessar o serviço de CRM "));
                    }
                }
                else
                {
                    return(BadRequest("Acesso não autorizado"));
                }
            }
        }
Esempio n. 30
0
        public IHttpActionResult PutCalcShipment(int id)
        {
            Order orders = db.Orders.Find(id);

            if (orders != null)
            {
                if (((User.IsInRole("ADMIN")) || orders.email == User.Identity.Name))
                {
                    if ((orders.status == "novo") && (orders.precoFrete == 0))
                    {
                        try
                        {
                            string cep = FindCep(orders.email);
                            if (cep.Equals("FAULT"))
                            {
                                return(BadRequest("Impossible to Access CRM service"));
                            }
                            else if (cep.Equals("NOCUSTOMER"))
                            {
                                return(BadRequest("User is not registered"));
                            }
                            else
                            {
                                List <OrderItem> item = orders.OrderItems.ToList();

                                decimal largura     = 0;
                                decimal altura      = 0;
                                decimal comprimento = 0;
                                decimal diametro    = 0;
                                decimal peso        = 0;
                                decimal preco       = 0;

                                if (item.Count != 0)
                                {
                                    for (int i = 0; i < item.Count(); i++)
                                    {
                                        altura = altura + (item[i].product.altura * item[i].quantidade);
                                        peso   = peso + (item[i].product.peso * item[i].quantidade);
                                        preco  = preco + (item[i].product.preco * item[i].quantidade);

                                        if (item[i].product.comprimento > comprimento)
                                        {
                                            comprimento = item[i].product.comprimento;
                                        }
                                        if (item[i].product.largura > largura)
                                        {
                                            largura = item[i].product.largura;
                                        }
                                        if (item[i].product.diametro > diametro)
                                        {
                                            diametro = item[i].product.diametro;
                                        }
                                    }

                                    CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
                                    cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", cep,
                                                                                         peso.ToString(), 1, comprimento, altura, largura, diametro, "N", preco, "S");

                                    if (resultado.Servicos[0].Erro.Equals("0"))
                                    {
                                        //String shipment;
                                        //shipment = "Valor Frete: " + resultado.Servicos[0].Valor + " Prazo de Entrega: " + resultado.Servicos[0].PrazoEntrega + " dias";

                                        NumberFormatInfo numberFormatInfo = new CultureInfo("pt-BR", false).NumberFormat;

                                        orders.precoTotal  = decimal.Parse(resultado.Servicos[0].Valor, numberFormatInfo) + preco;
                                        orders.pesoTotal   = peso;
                                        orders.precoFrete  = decimal.Parse(resultado.Servicos[0].Valor, numberFormatInfo);
                                        orders.dataEntrega = DateTime.Now.AddDays(Convert.ToDouble(resultado.Servicos[0].PrazoEntrega));

                                        db.Entry(orders).State = EntityState.Modified;

                                        try
                                        {
                                            db.SaveChanges();
                                        }
                                        catch (DbUpdateConcurrencyException)
                                        {
                                            if (!OrderExists(id))
                                            {
                                                return(NotFound());
                                            }
                                            else
                                            {
                                                throw;
                                            }
                                        }
                                        return(Ok(orders));
                                    }
                                    else
                                    {
                                        return(BadRequest("Correios Message Error: " + resultado.Servicos[0].Erro + " Error: " + resultado.Servicos[0].MsgErro));
                                    }
                                }
                                else
                                {
                                    return(BadRequest("No itens in this order"));
                                }
                            }
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                    }
                    else
                    {
                        return(BadRequest("This order has a STATUS different than novo"));
                    }
                }
                else
                {
                    return(BadRequest("This user does not have rights to access this order"));
                }
            }
            else
            {
                return(BadRequest("Order not Found"));
            }
        }